/* *************************************
   *   Library coded by				   *
   *   Sandro Alves Peres 2009-11-17   *
   *                                   *
   *   sandrinhodobanjo@yahoo.com.br   *
   ************************************* */

$myCalendar={
	
   $$base: "http://www.orlandofloridavillasnow.net/wp-content/themes/Realist Wordpress Theme/",
   $$border: "1px solid #999", // for safari, chrome
   $$backGround: "#F0F1FF",    // for safari, chrome
   $$execFunction: null,
   $$holidays: [               // Day, Month, Holiday
	  [1, 1, "New Year's Day"],  
	  [25, 12, "Christmas"]
   ],
	
   $createElements: function(){
	  var __$Style=document.createElement("link");
	  __$Style.setAttribute("href", $myCalendar.$$base+"mycalendar.css");
	  __$Style.setAttribute("rel", "stylesheet");
	  __$Style.setAttribute("type", "text/css");	  
	  document.getElementsByTagName("head")[0].appendChild(__$Style);

	  var frameBack=document.createElement("iframe");
	  frameBack.setAttribute("id", "MYCALENDAR_FRAME_BACK");
	  frameBack.setAttribute("frameborder", "0");
	  var divBack=document.createElement("div");
	  divBack.setAttribute("id", "MYCALENDAR_DIV_BACK");
	   
      var tb=document.createElement("table");
	  tb.setAttribute("width", "210");
	  tb.setAttribute("border", "0");
	  tb.setAttribute("cellSpacing", "0");
	  tb.setAttribute("cellPadding", "0");
	  tb.setAttribute("id", "MYCALENDAR_MAIN_TB");
	  
	  var expSafChr=/Safari|Chrome/gi;
	  if(expSafChr.test( (new String(navigator.userAgent)) )){
	    tb.style.border=$myCalendar.$$border;
		tb.style.backgroundColor=$myCalendar.$$backGround;
	  }

	  tb.insertRow(0);
	  tb.rows[0].insertCell(0);
	  tb.rows[0].insertCell(1);
	  tb.rows[0].insertCell(2);
	  
	  tb.rows[0].className="MYCALENDAR_LINE_TOP";
      tb.rows[0].cells[0].style.paddingLeft="10px";
	  tb.rows[0].cells[0].setAttribute("colSpan", "5");
	  tb.rows[0].cells[0].setAttribute("align", "left");
	  tb.rows[0].cells[0].setAttribute("vAlign", "middle");
	  
	  var ImgDown=document.createElement("img");
	  ImgDown.setAttribute("src", $myCalendar.$$base+"mycalendar_setadown.gif");
	  ImgDown.setAttribute("border", "0");
	  ImgDown.setAttribute("title", "Previous Month");
	  ImgDown.onclick=function(){
		$myCalendar.$changeMonth(2);  
	  };	  
	  ImgDown.style.cursor="pointer";	  
	  tb.rows[0].cells[1].setAttribute("align", "center");
	  tb.rows[0].cells[1].setAttribute("vAlign", "middle");
	  tb.rows[0].cells[1].appendChild(ImgDown);	  
	  
	  var ImgUp=document.createElement("img");
	  ImgUp.setAttribute("src", $myCalendar.$$base+"mycalendar_setaup.gif");
	  ImgUp.setAttribute("border", "0");
	  ImgUp.setAttribute("title", "Next Month");
	  ImgUp.onclick=function(){
		$myCalendar.$changeMonth(1);  
	  };
	  ImgUp.style.cursor="pointer";
	  tb.rows[0].cells[2].setAttribute("align", "center");
	  tb.rows[0].cells[2].setAttribute("vAlign", "middle");	
	  tb.rows[0].cells[2].appendChild(ImgUp);
	  
	  tb.insertRow(1);
	  
	  var arrDaysWeek=["S", "M", "T", "W", "TH", "F", "S"];
      for(var dw in arrDaysWeek){
		tb.rows[1].insertCell(dw);
		tb.rows[1].cells[dw].setAttribute("width", "30");
		tb.rows[1].cells[dw].setAttribute("align", "center");	
		tb.rows[1].cells[dw].setAttribute("vAlign", "middle");
		tb.rows[1].cells[dw].className="MYCALENDAR_DAY_WEEK";
		tb.rows[1].cells[dw].innerHTML=arrDaysWeek[dw];
	  }
	  
	  for(var i=2; i <= 7; i++){
		tb.insertRow(i);
	    for(var j=0; j < 7; j++){
		  tb.rows[i].insertCell(j);
          tb.rows[i].cells[j].setAttribute("width", "30");		  
		  tb.rows[i].cells[j].setAttribute("align", "center");
		  tb.rows[i].cells[j].setAttribute("vAlign", "middle");
		  tb.rows[i].cells[j].className="MYCALENDAR_CELL_DAY";
		  tb.rows[i].cells[j].innerHTML="&nbsp;";
		}
	  }
	  
	  tb.insertRow(8);
	  tb.rows[8].insertCell(0);
	  tb.rows[8].cells[0].setAttribute("colSpan", "7");
	  tb.rows[8].cells[0].setAttribute("align", "center");
	  tb.rows[8].cells[0].setAttribute("vAlign", "middle");	
	  tb.rows[8].cells[0].className="MYCALENDAR_LINE_BOTTOM";
	  var _Bottom="Year &nbsp;<img src=\""+$myCalendar.$$base+"mycalendar_setaesq.gif\" border=\"0\" style=\"cursor:pointer;\" onclick=\"$myCalendar.$changeYear(2);\" title=\"Previous Year\" />&nbsp;";
	  _Bottom+="<SPAN id=\"MYCALENDAR_SPAN_YEAR\"></SPAN>&nbsp;<img src=\""+$myCalendar.$$base+"mycalendar_setadir.gif\" border=\"0\" style=\"cursor:pointer;\" onclick=\"$myCalendar.$changeYear(1);\" title=\"Next Year\" />";
	  tb.rows[8].cells[0].innerHTML=_Bottom;
	  
	  var hdActiveElement=document.createElement("input");
	  hdActiveElement.setAttribute("name", "MYCALENDAR_HDACTIVE_ELEMENT");
	  hdActiveElement.setAttribute("id", "MYCALENDAR_HDACTIVE_ELEMENT");
	  hdActiveElement.setAttribute("type", "hidden");	  
	  
	  var hdYear=document.createElement("input");
	  hdYear.setAttribute("name", "MYCALENDAR_HDYEAR");
	  hdYear.setAttribute("id", "MYCALENDAR_HDYEAR");
	  hdYear.setAttribute("type", "hidden");
	  
	  var hdMonth=document.createElement("input");
	  hdMonth.setAttribute("name", "MYCALENDAR_HDMONTH");
	  hdMonth.setAttribute("id", "MYCALENDAR_HDMONTH");
	  hdMonth.setAttribute("type", "hidden");	
	  
	  divBack.appendChild(tb);
	  document.body.appendChild(hdActiveElement);
	  document.body.appendChild(hdYear);
	  document.body.appendChild(hdMonth);	  
	  document.body.appendChild(frameBack);
	  document.body.appendChild(divBack);
   },
   
   $getPosX: function(object){
     var current_left=0;
	 
     if(object.offsetParent){
       while(object.offsetParent){
         current_left+=object.offsetLeft;
         object=object.offsetParent;
       }
     }
     return current_left;
   },
  
   $getPosY: function(object){
     var current_top=0;
  
     if(object.offsetParent){
       while(object.offsetParent){
         current_top+=object.offsetTop;
         object=object.offsetParent;
       }
     }
     return current_top;
   },   
   
   $isDate: function(ID_OBJECT){
     var arr_date=[];
	 var objValue=new String(document.getElementById(ID_OBJECT).value);
     arr_date=objValue.split("/");
     var returning=false;
     var DaysMonth=new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
 
     try{
       if(objValue.length==10 && /^\d{2}\/\d{2}\/\d{4}$/.exec(objValue)){
          if(objValue.charAt(2)=="/" && objValue.charAt(5)=="/"){
             var Day=new String(arr_date[0]);
	         var Month=new String(arr_date[1]);
	         var Year=new String(arr_date[2]);
             Day=new Number(Day);
	         Month=new Number(Month);
	         Year=new Number(Year);
             Day=parseInt(Day, 10);
	         Month=parseInt(Month, 10);
	         Year=parseInt(Year, 10);		 
	 
	         if((Year % 4)==0 && ((Year % 100)!=0 || (Year % 400)==0)){
	           DaysMonth[1]=29; // February in leap year
	         }
	   
	         if(Year > 0){
	            if(Month > 0 && Month <= 12){
			       if(Day > 0 && Day <= DaysMonth[(Month - 1)]){
			         returning=true;
			       }
			       else{
				     returning=false;  
			       }
			    }
			    else{
			      returning=false;
			    }
	         }
	         else{
	           returning=false;
	         }	 
	      }
	      else{
            returning=false;
	      }   
       }
       else{
         returning=false;
       }
     }
     catch(e){
       returning=false; 
     }
 
     return returning;  
   },
   
   $openCalendar: function(ID_OBJECT, OBJECT){
	  $myCalendar.$closeCalendar();
  
	  document.getElementById("MYCALENDAR_HDACTIVE_ELEMENT").value=ID_OBJECT;
	  var __Month, __Year;	  
	  
	  if($myCalendar.$isDate(ID_OBJECT)){
		var arrDate=[];  
		arrDate=( new String(document.getElementById(ID_OBJECT).value) ).split("/");
		__Month=parseInt(arrDate[1], 10);
		__Year=parseInt(arrDate[2], 10);
	  }
	  else{
	    var dt=new Date();
		__Month=(dt.getMonth() + 1);
		__Year=dt.getFullYear();
	  }	  
	  
	  document.getElementById("MYCALENDAR_HDYEAR").value  = __Year;
	  document.getElementById("MYCALENDAR_HDMONTH").value = __Month;
	  
	  document.getElementById("MYCALENDAR_FRAME_BACK").style.display="block";
	  document.getElementById("MYCALENDAR_DIV_BACK").style.display="block";	
	  
	  var _WTB=document.getElementById("MYCALENDAR_MAIN_TB").offsetWidth;
	  var _HTB=document.getElementById("MYCALENDAR_MAIN_TB").offsetHeight;
	  document.getElementById("MYCALENDAR_FRAME_BACK").style.width=_WTB+"px";
	  document.getElementById("MYCALENDAR_FRAME_BACK").style.height=_HTB+"px";
	  document.getElementById("MYCALENDAR_DIV_BACK").style.width=_WTB+"px";
  	  document.getElementById("MYCALENDAR_DIV_BACK").style.height=_HTB+"px";
	  var x=($myCalendar.$getPosX(OBJECT) - _WTB + OBJECT.offsetWidth);
	  var y=($myCalendar.$getPosY(OBJECT) + OBJECT.offsetHeight + 3);
	  
	  if(( new String(navigator.appName) ).match("Microsoft Internet Explorer")){
		x += 13;
		y += 14;
	  }

	  document.getElementById("MYCALENDAR_FRAME_BACK").style.left=x+"px";
	  document.getElementById("MYCALENDAR_FRAME_BACK").style.top=y+"px";	  
	  document.getElementById("MYCALENDAR_DIV_BACK").style.left=x+"px";
	  document.getElementById("MYCALENDAR_DIV_BACK").style.top=y+"px";	  
	  document.getElementById("MYCALENDAR_FRAME_BACK").style.visibility="visible";
	  document.getElementById("MYCALENDAR_DIV_BACK").style.visibility="visible";
      $myCalendar.$listDays(__Month, __Year);	  
   },
   
   $closeCalendar: function(){
	  document.getElementById("MYCALENDAR_FRAME_BACK").style.display="none";
	  document.getElementById("MYCALENDAR_DIV_BACK").style.display="none";
	  document.getElementById("MYCALENDAR_FRAME_BACK").style.visibility="hidden";
	  document.getElementById("MYCALENDAR_DIV_BACK").style.visibility="hidden"; 	   
   },
   
   $daysOfMonth: function(month, year){
     if(month < 8 && (month % 2)==1 || month > 7 && (month % 2)==0){
	   return 31;
     }
     if(month != 2){
	   return 30; 
     }
     if((year % 4)==0){
	   return 29;
     }
     return 28;
   }, 
   
   $zeroPad: function(_text, _size){
     _size=new Number(_size);
     _getText=new String(_text);
     _getText="0000000000000000000000"+_getText;
	 
	 if((new String(_text)).length > _size){
	   return (new String(_text));
	 }
	 else{
       return _getText.slice(-_size);
	 }
   },   
   
   $getStrMonth: function(month){
      $arrStrMonths=[];
	  $arrStrMonths.push("January");
	  $arrStrMonths.push("February");
	  $arrStrMonths.push("March");
	  $arrStrMonths.push("April");
	  $arrStrMonths.push("May");
	  $arrStrMonths.push("June");
	  $arrStrMonths.push("July");
	  $arrStrMonths.push("August");
	  $arrStrMonths.push("September");
	  $arrStrMonths.push("October");
	  $arrStrMonths.push("November");
	  $arrStrMonths.push("December");
	  
	  return (new String($arrStrMonths[(month - 1)]));
   },
   
   $listDays: function(month, year){
	 var tb=document.getElementById("MYCALENDAR_MAIN_TB");
     var dt=new Date();
	 var currentDay=dt.getDate();
	 var currentMonth=(dt.getMonth() + 1);
	 var currentYear=dt.getFullYear();
	 dt.setDate(1);
	 dt.setMonth(month - 1);
	 dt.setFullYear(year);
	 
	 var dayWeek=dt.getDay();
     var daysMonth=$myCalendar.$daysOfMonth(month, year);
     var incDay=0;
	 var _$L="";
     var _$R="";
	 var _isHoliday=false;
	 var _strHoliday=new String();
	 
	 for(var i=2; i < 8; i++){
	   for(var j=0; j < 7; j++){
		  if(i==2 && j < dayWeek || incDay >= daysMonth){ 
			tb.rows[i].cells[j].innerHTML="&nbsp;";
		  }
		  else{
			_$L="<A href=\"javascript:void(0)\" onclick=\"$myCalendar.$fixDate(this);\" class=\"MYCALENDAR_NUMBER_DAY\">";
			_$R="</A>";	
			
			if((incDay + 1)==currentDay && month==currentMonth && year==currentYear){ // current day
			  _$L="<A href=\"javascript:void(0)\" onclick=\"$myCalendar.$fixDate(this);\" class=\"MYCALENDAR_NUMBER_CURRENT_DAY\">";
			  _$R="</A>";
			}
			
			_isHoliday=false;
			_strHoliday="";
			
			for(var k in $myCalendar.$$holidays){
			  if($myCalendar.$$holidays[k][0]==(incDay + 1) && $myCalendar.$$holidays[k][1]==month){
			    _isHoliday=true;
				_strHoliday=new String($myCalendar.$$holidays[k][2]);
				break;				  
			  }
			}			
			
			if(_isHoliday){ // if the day is a holiday
			  _$L="<A href=\"javascript:void(0)\" onclick=\"$myCalendar.$fixDate(this);\" class=\"MYCALENDAR_NUMBER_HOLIDAY\" title=\""+_strHoliday+"\">";
			  _$R="</A>";				
			}
			
			tb.rows[i].cells[j].innerHTML = _$L + (++incDay) + _$R;
		  }
	   }
	 }
	 
	 document.getElementById("MYCALENDAR_SPAN_YEAR").innerHTML=$myCalendar.$zeroPad(year, 4);
	 tb.rows[0].cells[0].innerHTML=$myCalendar.$getStrMonth(month);
   },
   
   $fixDate: function(OBJECT){
	 var _day=parseInt(OBJECT.innerHTML, 10);
	 var _idElement=new String(document.getElementById("MYCALENDAR_HDACTIVE_ELEMENT").value);
	 var _month=new String(document.getElementById("MYCALENDAR_HDMONTH").value);	 
	 var _year=new String(document.getElementById("MYCALENDAR_HDYEAR").value);
	 _day=new String($myCalendar.$zeroPad(_day, 2));
	 _month=new String($myCalendar.$zeroPad(_month, 2));
	 _year=new String($myCalendar.$zeroPad(_year, 4));
	 document.getElementById(_idElement).value = _day.concat("/", _month, "/", _year);
	 
	 if($myCalendar.$$execFunction != null){
	   try{
	     eval($myCalendar.$$execFunction);
	   }
	   catch(e){}
	 }
	 
	 $myCalendar.$closeCalendar();
   },
   
   $changeMonth: function(op){
	 var currYear=parseInt(document.getElementById("MYCALENDAR_HDYEAR").value, 10);
	 var currMonth=parseInt(document.getElementById("MYCALENDAR_HDMONTH").value, 10);	 
	 
	 if(op==1){ // up
	   if(currMonth < 12){
		 document.getElementById("MYCALENDAR_HDMONTH").value=(currMonth + 1);
		 $myCalendar.$listDays((currMonth + 1), currYear); 
	   }
	   else{
		 document.getElementById("MYCALENDAR_HDMONTH").value=1;
		 document.getElementById("MYCALENDAR_HDYEAR").value = ++currYear;
		 $myCalendar.$listDays(1, currYear); 		   
	   }
	 }
	 else{ // down
	   if(currMonth > 1){
	     document.getElementById("MYCALENDAR_HDMONTH").value=(currMonth - 1);
	     $myCalendar.$listDays((currMonth - 1), currYear);
	   }
	   else{
		 if((currYear-1) > 0){
	       document.getElementById("MYCALENDAR_HDMONTH").value=12;
		   document.getElementById("MYCALENDAR_HDYEAR").value = --currYear;
	       $myCalendar.$listDays(12, currYear);
		 }
	   }
	 }	 
   },
   
   $changeYear: function(op){
	 var currYear=parseInt(document.getElementById("MYCALENDAR_HDYEAR").value, 10);
	 var currMonth=parseInt(document.getElementById("MYCALENDAR_HDMONTH").value, 10);	 
	 
	 if(op==1){ // up
	   document.getElementById("MYCALENDAR_HDYEAR").value=(currYear + 1);
	   $myCalendar.$listDays(currMonth, (currYear + 1)); 
	 }
	 else{ // down
	   if(currYear > 1){
	     document.getElementById("MYCALENDAR_HDYEAR").value=(currYear - 1);
	     $myCalendar.$listDays(currMonth, (currYear - 1));
	   }
	 }		   
   },
   
   $onDeativate: function(ev){
     var ev=(ev ? ev : window.event);
     var _target=(document.all ? ev.srcElement : ev.target);
	 var _deativate=true;
	 
	 if(document.getElementById("MYCALENDAR_DIV_BACK").style.visibility=="visible"){
	   if(_target.parentNode != null){ 
	     var _pNode=_target.parentNode;
	     while(_pNode != null){
		   if(_pNode.id == "MYCALENDAR_DIV_BACK"){
			 _deativate=false;
			 break;
		   }
  		   _pNode=_pNode.parentNode;
	     }
	   }
	   
	   if(_deativate){
   	     $myCalendar.$closeCalendar();		    
	   }
	 }
   }
   
}

openCalendar = function(ID_OBJECT, OBJECT){
  $myCalendar.$openCalendar(ID_OBJECT, OBJECT);	   
}

if(window.addEventListener){ // Mozilla, Chrome and Others
  window.addEventListener("load", $myCalendar.$createElements, false);
  window.addEventListener("mousedown", $myCalendar.$onDeativate, false);
}
else if(window.attachEvent){ // IE
  window.attachEvent("onload", $myCalendar.$createElements);
  document.attachEvent("onmousedown", function(){ $myCalendar.$onDeativate(event); });
}
else{
  window.onload = function(){
	$myCalendar.$createElements();
  };
  window.onmousedown = function(){
	$myCalendar.$onDeativate(event);
  };
}
