/* 

	** Calendar Script by Edward Keymakh **

	Instruction on Use:

	ex:
		textBoxID.Attributes.Add("onclick", "showCalendarControl(this)")
		textBoxID.Attributes.Add("onkeydown", "hideCalendarControl()")
		textBoxID.Attributes.Add("onblur", "ValidateDate('textBoxID')")   
	    
	Most Appearance Settings located in: function calendarDrawTable()
	Stylesheet: CalendarControl.css
	
	
	Modified by Kiril Nanev
	For additional Information, please read the comments below.

*/


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 = month+"/"+day+"/"+year;
      
      //var dateString = month+day+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();
  }

 var tMonth;
 var tDay;
 var yTear;
 //Recoded by E.K - 03/04/2005
  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
    
    //Use Computer's Date
    //var todayDate = new Date();  
	//var todayDay = todayDate.getDate();
	//var todayMonth  = todayDate.getMonth()+1;	
	//var todayYear = todayDate.getFullYear();
	
	/*   Kiril' comments
	
		This is where you can adjust the current date. For example, the current date is today's date.
		You can adjust script to take different date. For example, you can specify the Calendar to not
		accept any dates before or after certain dates.	
			
		Whatever you specify for current date, make sure it receives an integer values. You could use 
		parseInt() function to convert string taken from database ot hidden text boxes.
	*/

	var todayDate = new Date();
	var todayDay = todayDate.getDate()

	//Aru
	var todayMonth  = todayDate.getMonth() + 1;	
	var todayYear = todayDate.getFullYear();
	
		
	/* 
		This is where you can change the images
	*/
		var nextMonthControl = "<img src=images/gif/calendar/cal_next.gif border=0>";
		var prevMonthControl = "<img src=images/gif/Calendar/cal_prev.gif border=0>";
		var nextYearControl 
		var prevYearControl
   
     /*  
		This is the Calendar's header. You can adjust the header depending on what the calendar's 
		functionality.		
		
    */
    var table = "<table cellspacing='0' cellpadding='0' border='0'>";
    table = table + "<tr class='header'>";
    
	/* 
		The If/Else statement below will display the Prev icon if the current date is bigger then today
		If the current date is less then today it won't display the Prev link button. If you want to 
		prevent the user to enter any future dates please read the comment  for Enable/ Diable below.
		
	
	*/
	
	
	//Commented by Pranil on Feb-17 08 to show prev month all times// Disable If/else 
   /* if(todayYear < currentYear)
		table = table + "  <td colspan='2' class='previous' background='images/gif/Calendar/caltitle.gif'><a href='javascript:changeCalendarControlMonth(-1);'>" + prevMonthControl + "</a></td>";
    else if(todayYear <= currentYear && todayMonth < currentMonth)
		table = table + "  <td colspan='2' class='previous' background='images/gif/Calendar/caltitle.gif'><a href='javascript:changeCalendarControlMonth(-1);'>" + prevMonthControl + "</a></td>";
    else
		table = table + "  <td colspan='2' background='images/gif/Calendar/caltitle.gif' class='previous'></td>";*/
	
	// Enable this
	// table = table + "  <td colspan='2' class='previous' background='images/Calendar/gif/caltitle.gif'><a href='javascript:changeCalendarControlMonth(-1);'>" + prevMonthControl + "</a></td>";	  
	table = table + "  <td colspan='2' class='previous' background='images/gif/Calendar/caltitle.gif'><a href='javascript:changeCalendarControlMonth(-1);'>" + prevMonthControl + "</a></td>";
    table = table + "  <td colspan='3' class='title' background='images/gif/Calendar/caltitle.gif'>" + months[currentMonth-1] + "<br>" + currentYear + "</td>";
    
    /************************************************************
		comparison '>':  shows calendar up to current date
		comparison '<':  shows calendar after current date
		no comparisons:  show full calendar   

    	Note: Below code is controlling only by month only
		
		controlling my month and year	
		table = table + "  <td colspan='2' class='next'><a href='javascript:changeCalendarControlYear(1);'>&lt;</a> <a href='javascript:changeCalendarControlMonth(1);'><img src=images/Calendar/gif/cal_prev.gif border=0></a></td>";
		table = table + "  <td colspan='2' class='next'><a href='javascript:changeCalendarControlYear(1);'>&gt;</a> <a href='javascript:changeCalendarControlMonth(1);'><img src=images/Calendar/gif/cal_next.gif border=0></a></td>";
	**************************************************************/
    
  
	// Enable If/Else
    //if ( todayYear > currentYear )
	//	table = table + "  <td colspan='2' background='images/Calendar/gif/caltitle.gif' class='next'><a href='javascript:changeCalendarControlMonth(1);'>" + nextMonthControl + "</a></td>";
    //else if ( todayYear == currentYear && todayMonth > currentMonth )
		//table = table + "  <td colspan='2' background='images/Calendar/gif/caltitle.gif' class='next'><a href='javascript:changeCalendarControlMonth(1);'>" + nextMonthControl + "</a></td>";
   // else
    	//table = table + "  <td colspan='2' background='images/Calendar/gif/caltitle.gif' class='next'></td>";

	// Disable This
	table = table + "  <td colspan='2' background='images/gif/Calendar/caltitle.gif' class='next'><a href='javascript:changeCalendarControlMonth(1);'>" + nextMonthControl + "</a></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';
            isToday = true;
          } else if (dayOfWeek == 0 || dayOfWeek == 6) {
            // =============== Aru =================
            css_class = 'weekend';
            //css_class = 'Unavailable';
          } else {
            css_class = 'weekday';
          }
          
			// Switch the signs to prevent future dates 
			if (  todayYear < currentYear )
			{
				table = table + "<td><a class='"+css_class+"' href=\"javascript:setCalendarControlDate("+currentYear+","+currentMonth+","+dayOfMonth+")\">"+dayOfMonth+"</a></td>";
			}
			else if ( todayYear == currentYear && todayMonth < currentMonth )
			{
				table = table + "<td><a class='"+css_class+"' href=\"javascript:setCalendarControlDate("+currentYear+","+currentMonth+","+dayOfMonth+")\">"+dayOfMonth+"</a></td>";
			}
			else if ( todayYear == currentYear && todayMonth == currentMonth && todayDay <= dayOfMonth )
			{	
				table = table + "<td><a class='"+css_class+"' href=\"javascript:setCalendarControlDate("+currentYear+","+currentMonth+","+dayOfMonth+")\">"+dayOfMonth+"</a></td>";
			}
			else
			{
			    //Aru
//				table = table + "<td class=Unavailable background=images/gif/Calendar/bdDt.gif>" + dayOfMonth + "</td>";
                table = table + "<td><a class='"+css_class+"' href=\"javascript:setCalendarControlDate("+currentYear+","+currentMonth+","+dayOfMonth+")\">"+dayOfMonth+"</a></td>";
			}

			//if ( todayYear == selectedYear && todayMonth == selectedMonth )
			   //alert(todayYear + "," + selectedYear + "--" + todayMonth + "," + selectedMonth + "--" + dayOfMonth + "," + todayDay);
          dayOfMonth++;
        } else {
          table = table + "<td class='empty'>&nbsp;</td>";
        }
      }
      table = table + "</tr>";
    }

    table = table + "<tr class='header'><th colspan='7' background='images/gif/Calendar/calfoot.gif' style='padding: 3px;'><a class='CloseBtn' 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();

      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');
    }
  }

  this.hide = hide;
  function hide() {
    if(dateField) {
      setProperty('display', 'none');
      setElementProperty('display', 'none', 'CalendarControlIFrame');
      dateField = null;
    }
  }
}

var calendarControl = new CalendarControl();

function showCalendarControl(textFieldId) {
    
var textField = document.getElementById(textFieldId);
  calendarControl.show(textField);
 
}

function hideCalendarControl() {
  calendarControl.hide();
}

function setCalendarControlDate(year, month, day) {
  calendarControl.setDate(year, month, day);
}

function changeCalendarControlYear(change) {
  calendarControl.changeYear(change);
}

function changeCalendarControlMonth(change) {
  calendarControl.changeMonth(change);
}

document.write("<iframe id='CalendarControlIFrame' src='javascript:false;' frameBorder='0' scrolling='no'></iframe>");
document.write("<div id='CalendarControl'></div>");
