function positionInfo(object) {

  var p_elm = object;

  this.getElementLeft = getElementLeft;
  function getElementLeft() {
    var x = 0;
    var elm;
    if(typeof(p_elm) == "object"){
      elm = p_elm;
    } else {
      elm = document.getElementById(p_elm);
    }
    while (elm != null) {
      x+= elm.offsetLeft;
      elm = elm.offsetParent;
    } 
    return parseInt(x);
  }

  this.getElementWidth = getElementWidth; 
  function getElementWidth(){
    var elm;
    if(typeof(p_elm) == "object"){
      elm = p_elm;
    } else {
      elm = document.getElementById(p_elm);
    }
    return parseInt(elm.offsetWidth);
  }

  this.getElementRight = getElementRight;
  function getElementRight(){
    return getElementLeft(p_elm) + getElementWidth(p_elm);
  }

  this.getElementTop = getElementTop;
  function getElementTop() {
    var y = 0;
    var elm;
    if(typeof(p_elm) == "object"){
      elm = p_elm;
    } else {
      elm = document.getElementById(p_elm);
    }
    while (elm != null) {
      y+= elm.offsetTop;
      elm = elm.offsetParent;
    }
    return parseInt(y);
  }

  this.getElementHeight = getElementHeight;
  function getElementHeight(){
    var elm;
    if(typeof(p_elm) == "object"){
      elm = p_elm;
    } else {
      elm = document.getElementById(p_elm);
    }
    return parseInt(elm.offsetHeight);
  }

  this.getElementBottom = getElementBottom;
  function getElementBottom(){
    return getElementTop(p_elm) + getElementHeight(p_elm);
  }
}

function CalendarControl() {

  var calendarId = 'CalendarControl';
  var currentYear = 0;
  var currentMonth = 0;
  var currentDay = 0;

  var selectedYear = 0;
  var selectedMonth = 0;
  var selectedDay = 0;

  var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
  var dateField = null;

  function getProperty(p_property){
    var p_elm = calendarId;
    var elm = null;

    if(typeof(p_elm) == "object"){
      elm = p_elm;
    } else {
      elm = document.getElementById(p_elm);
    }
    if (elm != null){
      if(elm.style){
        elm = elm.style;
        if(elm[p_property]){
          return elm[p_property];
        } else {
          return null;
        }
      } else {
        return null;
      }
    }
  }

  function setElementProperty(p_property, p_value, p_elmId){
    var p_elm = p_elmId;
    var elm = null;

    if(typeof(p_elm) == "object"){
      elm = p_elm;
    } else {
      elm = document.getElementById(p_elm);
    }
    if((elm != null) && (elm.style != null)){
      elm = elm.style;
      elm[ p_property ] = p_value;
    }
  }

  function setProperty(p_property, p_value) {
    setElementProperty(p_property, p_value, calendarId);
  }

  function getDaysInMonth(year, month) {
    return [31,((!(year % 4 ) && ( (year % 100 ) || !( year % 400 ) ))?29:28),31,30,31,30,31,31,30,31,30,31][month-1];
  }

  function getDayOfWeek(year, month, day) {
    var date = new Date(year,month-1,day)
    return date.getDay();
  }

  this.setDate = setDate;
  function setDate(year, month, day) {
    if (dateField) {
      if (month < 10) {month = "0" + month;}
      if (day < 10) {day = "0" + day;}

      var dateString = day+"/"+month+"/"+year;
      dateField.value = dateString;
     
      hide();
    }
    return;
  }

  this.changeMonth = changeMonth;
  function changeMonth(change) {
    currentMonth += change;
    currentDay = 0;
    if(currentMonth > 12) {
      currentMonth = 1;
      currentYear++;
    } else if(currentMonth < 1) {
      currentMonth = 12;
      currentYear--;
    }

    calendar = document.getElementById(calendarId);
    calendar.innerHTML = calendarDrawTable();
  }

  this.changeYear = changeYear;
  function changeYear(change) {
    currentYear += change;
    currentDay = 0;
    calendar = document.getElementById(calendarId);
    calendar.innerHTML = calendarDrawTable();
  }

  function getCurrentYear() {
    var year = new Date().getYear();
    if(year < 1900) year += 1900;
    return year;
  }

  function getCurrentMonth() {
  
    return new Date().getMonth() + 1;
  } 

  function getCurrentDay() {
    return new Date().getDate();
  }

  function calendarDrawTable() {

    var dayOfMonth = 1;
    var validDay = 0;
    var startDayOfWeek = getDayOfWeek(currentYear, currentMonth, dayOfMonth);
    var daysInMonth = getDaysInMonth(currentYear, currentMonth);
    var css_class = null; //CSS class for each day

    var table = "<table cellspacing='0' cellpadding='0' border='0'>";
    table = table + "<tr class='header'>";
    table = table + "   <td colspan='2' class='previous'><a href='javascript:changeCalendarControlYear(-1);'>&laquo;</a></td>";
    table = table + "  <td colspan='3' class='title'>" + currentYear + "</td>";
    table = table + "  <td colspan='2' class='next'><a href='javascript:changeCalendarControlYear(1);'>&raquo;</a></td>";
    table = table + "</tr>";
    table = table + "<tr class='header'>";
    table = table + " <td></td>";
    table = table + " <td colspan='1' class='previous'><a href='javascript:changeCalendarControlMonth(-1);'>&lt;</a></td>";
    table = table + "  <td colspan='3' class='title'>" + months[currentMonth-1] + "</td>";
    table = table + "  <td colspan='1' class='next'> <a href='javascript:changeCalendarControlMonth(1);'>&gt;</a></td>";
    table = table + " <td></td>";
    table = table + "</tr>";
    table = table + "<tr><th>S</th><th>M</th><th>T</th><th>W</th><th>T</th><th>F</th><th>S</th></tr>";

    for(var week=0; week < 6; week++) {
      table = table + "<tr>";
      for(var dayOfWeek=0; dayOfWeek < 7; dayOfWeek++) {
        if(week == 0 && startDayOfWeek == dayOfWeek) {
          validDay = 1;
        } else if (validDay == 1 && dayOfMonth > daysInMonth) {
          validDay = 0;
        }

        if(validDay) {
          if (dayOfMonth == selectedDay && currentYear == selectedYear && currentMonth == selectedMonth) {
            css_class = 'current';
          } else if (dayOfWeek == 0 || dayOfWeek == 6) {
            css_class = 'weekend';
          } else {
            css_class = 'weekday';
          }

          table = table + "<td><a class='"+css_class+"' href=\"javascript:setCalendarControlDate("+currentYear+","+currentMonth+","+dayOfMonth+")\">"+dayOfMonth+"</a></td>";
          dayOfMonth++;
        } else {
          table = table + "<td class='empty'>&nbsp;</td>";
        }
      }
      table = table + "</tr>";
    }

    table = table + "<tr class='header'><th colspan='7' style='padding: 3px;'><a href='javascript:hideCalendarControl();'>Close</a></td></tr>";
    table = table + "</table>";

    return table;
  }

  this.show = show;
  function show(field) {
  
    // If the calendar is visible and associated with
    // this field do not do anything.
    if (dateField == field) {
      return;
    } else {
      dateField = field;
    }

    if(dateField) {
      try {
        var dateString = new String(dateField.value);
        var dateParts = dateString.split("-");
        
        selectedMonth = parseInt(dateParts[0],10);
        selectedDay = parseInt(dateParts[1],10);
        selectedYear = parseInt(dateParts[2],10);
      } catch(e) {}
    }

    if (!(selectedYear && selectedMonth && selectedDay)) {
      selectedMonth = getCurrentMonth();
      selectedDay = getCurrentDay();
      selectedYear = getCurrentYear();
    }

    currentMonth = selectedMonth;
    currentDay = selectedDay;
    currentYear = selectedYear;

    if(document.getElementById){

      calendar = document.getElementById(calendarId);
      calendar.innerHTML = calendarDrawTable(currentYear, currentMonth);

      setElementProperty('display', 'block', 'CalendarControlIFrame');
      setProperty('display', 'block');

      var fieldPos = new positionInfo(dateField);
      var calendarPos = new positionInfo(calendarId);

      var x = fieldPos.getElementLeft();
      var y = fieldPos.getElementBottom();
		
	  if ( screen.width - x <= 200){
		//x = screen.width - 200;
		x = fieldPos.getElementRight()-149;
	  }
	  
	  if (screen.height - window.event.clientY <= 310){
		y = fieldPos.getElementTop() - 170;
	  }
		
      setProperty('left', x + "px");
      setProperty('top', y + "px");
      setElementProperty('left', x + "px", 'CalendarControlIFrame');
      setElementProperty('top', y + "px", 'CalendarControlIFrame');
      setElementProperty('width', calendarPos.getElementWidth() + "px", 'CalendarControlIFrame');
      setElementProperty('height', calendarPos.getElementHeight() + "px", 'CalendarControlIFrame');
    }
  }
//--[For IFrame]
this.showFrame = showFrame;
  function showFrame(field) {
  
    // If the calendar is visible and associated with
    // this field do not do anything.
    if (dateField == field) {
      return;
    } else {
      dateField = field;
    }

    if(dateField) {
      try {
        var dateString = new String(dateField.value);
        var dateParts = dateString.split("-");
        
        selectedMonth = parseInt(dateParts[0],10);
        selectedDay = parseInt(dateParts[1],10);
        selectedYear = parseInt(dateParts[2],10);
      } catch(e) {}
    }

    if (!(selectedYear && selectedMonth && selectedDay)) {
      selectedMonth = getCurrentMonth();
      selectedDay = getCurrentDay();
      selectedYear = getCurrentYear();
    }

    currentMonth = selectedMonth;
    currentDay = selectedDay;
    currentYear = selectedYear;

    if(document.getElementById){

      calendar = document.getElementById(calendarId);
      calendar.innerHTML = calendarDrawTable(currentYear, currentMonth);

      setElementProperty('display', 'block', 'CalendarControlIFrame');
      setProperty('display', 'block');

      var fieldPos = new positionInfo(dateField);
      var calendarPos = new positionInfo(calendarId);

      var x = fieldPos.getElementLeft();
      var y = fieldPos.getElementBottom();
      
	  scroll(0,event.y+document.body.scrollTop);
	  
	  if ( screen.width - x <= 200){
		x = screen.width - 200;
	  }
	  
	  if (document.body.scrollHeight - (event.clientY+document.body.scrollTop)<= 170){
		y = fieldPos.getElementTop() - 170;
		//scroll(0,(event.clientY+document.body.scrollTop) - 150);
		scroll(0, fieldPos.getElementBottom() - 200);
	  }
	
      setProperty('left', x + "px");
      setProperty('top', y + "px");
      setElementProperty('left', x + "px", 'CalendarControlIFrame');
      setElementProperty('top', y + "px", 'CalendarControlIFrame');
      setElementProperty('width', calendarPos.getElementWidth() + "px", 'CalendarControlIFrame');
      setElementProperty('height', calendarPos.getElementHeight() + "px", 'CalendarControlIFrame');
    }
  } //--[For IFrame]

  this.hide = hide;
  function hide() {
    if(dateField) {
      setProperty('display', 'none');
      setElementProperty('display', 'none', 'CalendarControlIFrame');
      dateField = null;
    }
  }
}

var calendarControl = new CalendarControl();

//function that ReadOnly will drop down
function showCalendarControl(textField) {
		calendarControl.show(textField);
}

function showFrameCalendarControl(textField) {
		calendarControl.showFrame(textField);
}

//function that ReadOnly will not drop down
function showCalendarReadOnly(textField) {
	if (document.getElementById(textField.id).readOnly  == false){
		calendarControl.show(textField);
	}
}

function hideCalendarControl(fld) {
  calendarControl.hide();
}

function setCalendarControlDate(year, month, day) {
  calendarControl.setDate(year, month, day);
}

function changeCalendarControlYear(change) {
  calendarControl.changeYear(change);
}

function changeCalendarControlMonth(change) { 
  calendarControl.changeMonth(change);
}

//function CheckDate(fld){
//	var fldvalue = document.getElementById(fld.id).value;
//	var regDate = new RegExp (/(((0[1-9]|[12][0-9]|3[01])([/])(0[13578]|10|12)([/])([1-2][0,9][0-9][0-9]))|(([0][1-9]|[12][0-9]|30)([/])(0[469]|11)([/])([1-2][0,9][0-9][0-9]))|((0[1-9]|1[0-9]|2[0-8])([/])(02)([/])([1-2][0,9][0-9][0-9]))|((29)(\.|-|\/)(02)([/])([02468][048]00))|((29)([/])(02)([/])([13579][26]00))|((29)([/])(02)([/])([0-9][0-9][0][48]))|((29)([/])(02)([/])([0-9][0-9][2468][048]))|((29)([/])(02)([/])([0-9][0-9][13579][26])))/);
//	if (fldvalue!=""){
//		if (!regDate.test(fldvalue)){
//		alert("Invalid Date(DD/MM/YYYY)");
//		document.getElementById(fld.id).value = '';
//		document.getElementById(fld.id).focus();
//		}
//	}
//}

function DaysDiffValidation(FromDate,Todate) {

	var ValueFromDate = document.getElementById(FromDate).value;
    var ValueTodate = document.getElementById(Todate).value;
	
	var earlierdate = new Date(ConvYMD(ValueFromDate));
	var laterdate = new Date(ConvYMD(ValueTodate));

    var difference = laterdate.getTime() - earlierdate.getTime();

    var daysDifference = Math.floor(difference/1000/60/60/24);
    difference -= daysDifference*1000*60*60*24
    var hoursDifference = Math.floor(difference/1000/60/60);
    difference -= hoursDifference*1000*60*60
    var minutesDifference = Math.floor(difference/1000/60);
    difference -= minutesDifference*1000*60
    var secondsDifference = Math.floor(difference/1000);

if(daysDifference >= 366){
	  document.getElementById(Todate).value = document.getElementById(FromDate).value
      alert("The Day ranges cannot be more than 365 days");
    }
    
//if(daysDifference <= 0){
//	  document.getElementById(Todate).value = document.getElementById(FromDate).value
  //    alert("The Day ranges cannot be less than 1 days");
    //}
}

function ConvYMD(strDate){

	var datePart = strDate.split("/");
	return datePart[2]+"/"+datePart[1]+"/"+datePart[0];
}

/*function CheckDate1(idname)
{	

	var temp
	temp = document.forms[0].elements[idname];
	if (temp != null)
	{
		//CheckInsertDate(document.forms[0].elements[idname].value);
		if (trimString(document.forms[0].elements['h'+ idname].value)=='')
		{
			//the date is blank
		}
		else if (trimString(document.forms[0].elements['h'+ idname].value)!='' && idname=='txtVehicleDueIn'){ 
			//exception for Vehicle due in date ''--[MaTtan][06122007]
		}
		else if (trimString(document.forms[0].elements['h'+ idname].value)!='' && trimString(document.forms[0].elements['h'+ idname].value)==trimString(document.forms[0].elements[idname].value))
		{
			//date changed  and same date selected
			document.forms[0].elements['R'+ idname].value = document.forms[0].elements['hr'+ idname].value
			document.forms[0].elements[idname].style.color = "black"
		}
		else if (trimString(document.forms[0].elements['h'+ idname].value)!='' && trimString(document.forms[0].elements['h'+ idname].value)!=trimString(document.forms[0].elements[idname].value))
		{
			//date changed different date selected 
			//if (trimString(document.forms[0].elements[idname].value) =='')
			//{
			//	alert("Date cannot blank");
			//	document.forms[0].elements[idname].value = document.forms[0].elements['h'+idname].value
			//	document.forms[0].elements[idname].style.color = "black"
			//}
			//else if (trimString(document.forms[0].elements['h'+ idname].value) !=''&& trimString(document.forms[0].elements['hr'+ idname].value) =='')
			if (trimString(document.forms[0].elements['h'+ idname].value) !=''&& trimString(document.forms[0].elements['hr'+ idname].value) =='')
			{
				//change date second times and not insert reason
				alert("Please enter new reason for every change of date");
				document.forms[0].elements[idname].style.color = "blue"
				document.forms[0].elements['R'+idname].focus();
			}
			else if (trimString(document.forms[0].elements['hr'+ idname].value) !='' && trimString(document.forms[0].elements['R'+ idname].value)==trimString(document.forms[0].elements['hr'+ idname].value))
			{
				//Reason not change 
				alert("Please enter new reason for every change of date");
				document.forms[0].elements[idname].style.color = "blue"
				document.forms[0].elements['R'+idname].focus();
			}
		}
	}
}*/ //siha comment 20080721
function func(dt, regID)
		{
			
		var VehicleValidator = document.getElementById(regID);
		var dte = document.getElementById(dt).value;


			var month = dte.substring(3,5);
			month = parseInt(month);
			var tempMonth = dte.substring(5,6);
			var tempDay = dte.substring(2,3);
			var year = dte.substring(6,10);
			year = parseInt(year);
			var day = dte.substring(0,2);
			day = parseInt(day);
			
	
			
	if((tempDay=='/')&&(tempMonth=='/'))
		{
			if((year>=1900)&&(year<=2999))
			{
				if ((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
				{
				if (day<32)
				{
				ValidatorEnable(VehicleValidator, false);
				}
				else
				{
				ValidatorEnable(VehicleValidator, true);
				}
				}
			}
		}
	else
		ValidatorEnable(VehicleValidator, true);
			
		if((tempDay=='/')&&(tempMonth=='/'))
			{		
			if((year>=1900)&&(year<=2999))
			{		
			if(month==2)
				{
				if(day<29)
						ValidatorEnable(VehicleValidator, false);
					else
						ValidatorEnable(VehicleValidator, true);
						
				 if((month==2)&&(day==29)&&(year%4==0))
						ValidatorEnable(VehicleValidator, false);
					else 
						ValidatorEnable(VehicleValidator, true);
				}
			}
		}
		else
			ValidatorEnable(VehicleValidator, true);
		
			if((tempDay=='/')&&(tempMonth=='/'))
			{	
			if((year>=1900)&&(year<=2999))
			{
				if ((month==4)||(month==6)||(month==9)||(month==11))
				{
				if (day<31)
					{
						ValidatorEnable(VehicleValidator, false);
					}
				else
					{
				ValidatorEnable(VehicleValidator, true);
					}
				}
			}
			}
			else
				ValidatorEnable(VehicleValidator, true);
				
		}
		

document.write("<iframe id='CalendarControlIFrame' frameBorder='0' scrolling='no'></iframe>");
document.write("<div id='CalendarControl'></div>");

