/* Global Variables */
var xmlHttpObject;
var availabilityArray;

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}


function cal_showDivDate(objname,month,year)
{	
	var objDiv = getCalenderObjectID(objname, true);
	var objTbl = getCalenderObjectID(objname, false);

	var tableCollection = document.getElementsByTagName("table");	
	var o;
	for (i = 0; i < tableCollection.length; i++)
	{
		if (tableCollection[i].id.toString().indexOf("tblCalendar") > -1)
		{			
			o = tableCollection[i];		
			break;
		}
	}			
	pos = findPos(o)	
						
	// show div (if the div isn't already opened)
	if (objDiv.style.display != 'block')
	{
		objDiv.style.display = 'block';
		objDiv.style.position = 'absolute';
				
		objDiv.style.left = pos[0];
		objDiv.style.top = pos[1]+24;
	}

	// choose language
	var arrDays;
	var arrMonthes;
	var clear;
	var closeAlt;
	var strLang = CAL.LANG;
	var strCss	= CAL.CSS;
	
	arrDays = new Array(CAL.DAY_1,CAL.DAY_2,CAL.DAY_3,CAL.DAY_4,CAL.DAY_5,CAL.DAY_6,CAL.DAY_7);
	arrMonthes = new Array(CAL.MONTH_1,CAL.MONTH_2,CAL.MONTH_3,CAL.MONTH_4,CAL.MONTH_5,CAL.MONTH_6,CAL.MONTH_7,CAL.MONTH_8,CAL.MONTH_9,CAL.MONTH_10,CAL.MONTH_11,CAL.MONTH_12);
	clear = CAL.CLEAR;
	closeAlt = CAL.CLOSE_ALT;
	
	// number of table rows
	var linenumber = 0;

	// fix today date (when the user click on arrow and the month or the year is out of range)
	var today = new Date();
	month  = isNaN(month)?today.getMonth():month;
	year  = isNaN(year)?today.getYear():year;
			
	if (month == 12)
	{
		month = 0;
		year++;
	}
	else
	{
		if (month == -1)
		{
			month = 11;
			year--;
		}
	}
	
	var date1 = new Date(month+1 + "/1/" + year);
	var date2 = new Date(parseInt(month+2) + "/1/" + year)
	var dayInMonth = Math.round((date2-date1)/86400000);

	// delete old table
	while (objTbl.rows.length > 0)
	{
		objTbl.deleteRow(0); 
	}	
	
	var prev_month = LANG == "en" ? month+1 : month-1;	
	var next_month = LANG == "en" ? month-1 : month+1;
	
	// arrows
	var vRow = objTbl.insertRow(linenumber++);
	vRow.className = "cal-rows";
	
	var imgPrev = new Image();
	imgPrev.src = "../../Images/" + strCss + "." + strLang + "/calendar/prev.gif";
	
	var imgNext = new Image();
	imgNext.src = "../../Images/" + strCss + "." + strLang + "/calendar/next.gif";
		
	var vCell = vRow.insertCell();
	vCell.colSpan = 6;
	vCell.align = "center";
	vCell.className = "cal-cell-arrows";
	vCell.innerHTML = "<a class=cal-link-arrow style='cursor:hand;' onclick=javascript:cal_showDivDate('"+objname+"',"+parseInt(prev_month)+","+year+")><img src='" + imgPrev.src + "' class='cal-prev'></a>" +
						"&nbsp;" + arrMonthes[month] + " " + year + "&nbsp;" +
					   "<a class=cal-link-arrow href=# onclick=javascript:cal_showDivDate('"+objname+"',"+ parseInt(next_month)+","+year+")><img src='" + imgNext.src + "' class='cal-next'></a>"; 
	vRow.className = "cal-rows";

	// close
	var imgClose = new Image();
	imgClose.src = "../../Images/" + strCss + "." + strLang + "/calendar/close.gif";
	
	var vCell = vRow.insertCell();
	vCell.align = "center";
	vCell.className = "cal-cell-close";
	vCell.innerHTML = "<a class=cal-link-close style='cursor:hand;' title='" + closeAlt + "' onclick=javascript:cal_selected('"+objname+"','')><img src='" + imgClose.src + "' class='cal-close'></a>";
	
	// days name
	var vRow = objTbl.insertRow(linenumber++);
	vRow.className = "cal-rows";
	for (var i=0 ; i<7 ; i++)
	{
		var vCell = vRow.insertCell();
		vCell.className = i == 6 ? "cal-cell-day-name-last" : "cal-cell-day-name";
		vCell.innerHTML = "<tt>"+arrDays[i]+"</tt>";
	}
	
	
	// first line
	month++;
	
	/****************************/
	// load the available dates
	
	loadAvailabilityXml(month, year);
	
	/****************************/
	
	if (parseInt(month) < 10) 
	{
		var month = new String("0" + month);
	}	
	
	var vRow = objTbl.insertRow(linenumber++);
	vRow.className = "cal-rows";
	
	// build the empty cells at the begining of the table.
	for (var i=0 ; i<date1.getDay() ; i++)
	{
		var vCell = vRow.insertCell();
		vCell.className = "cal-cell-empty";
		vCell.innerHTML = "&nbsp;";
	}
	
	// build the first week of the month
	for (var i=1 ; i<=parseInt(7-date1.getDay()) ; i++)
	{
		day = parseInt(i)<10?"0"+i:i;
		var cellCssClass = "cal-cell-day-number";
		var cellInnerHtml;
		var linkClass = "cal-link-number"; 
		
		// mark today cell
		var currDate = new Date(year, month-1, day);
		if (today.toDateString() == currDate.toDateString())
		{
			linkClass = "cal-link-today";
			cellCssClass = "cal-cell-today";
		}
			
		// build the cell content
		var vCell = vRow.insertCell();
			
		if (isCellBlocked(day))
		{
			cellCssClass	= cellCssClass + "-blocked";				
			cellInnerHtml	= "<a class=" + linkClass + ">"+i+"</a>";
		}
		else
		{
			cellInnerHtml	= "<a class=" + linkClass + " onclick=javascript:cal_selected('"+objname+"','"+day+"/"+month+"/"+year+"')>"+i+"</a>";			
		}
								
		vCell.innerHTML = cellInnerHtml;
		vCell.className = cellCssClass;
	}
	
	// build the rest of the weeks in the month
	while (i <= dayInMonth)
	{
		var vRow = objTbl.insertRow(linenumber++);
				
		vRow.className = "cal-rows";
		for (var j=0 ; j<7 ; j++)
		{
			var cellCssClass = "cal-cell-day-number";
			var cellInnerHtml;
			var linkClass = "cal-link-number";
			
			day = parseInt(i)<10?"0"+i:i; 
			
			// mark today cell
			var currDate = new Date(year, month-1, day);
			if (today.toDateString() == currDate.toDateString())
			{
				linkClass = "cal-link-today";
				cellCssClass = "cal-cell-today";				
			}
			
			// build the cell content
			var vCell = vRow.insertCell();
				
			if (isCellBlocked(day))
			{
				cellCssClass	= cellCssClass + "-blocked";				
				cellInnerHtml	= "<a class=" + linkClass + ">"+i+"</a>";
			}
			else
			{
				cellInnerHtml	= "<a class=" + linkClass + " onclick=javascript:cal_selected('"+objname+"','"+day+"/"+month+"/"+year+"')>"+i+"</a>";			
			}
									
			vCell.innerHTML = cellInnerHtml;
			vCell.className = cellCssClass;
			
			if (i++ == dayInMonth) break;
		}
	}
	
	/*************************************************************************/
	// build the rest of the cells in the table
	for (j++ ; j<7 ; j++)
	{
		var vCell = vRow.insertCell();
		vCell.className = "cal-cell-empty";
		vCell.innerHTML = "&nbsp;";
	}
	
	
}	



function isCellBlocked(Day, arrayIndex)
{
	try
	{
		var currDay = parseInt(Day,10);
		
		return (availabilityArray[currDay] != "True");				
	}
	catch (e)
	{
		//alert(e.description);
		return false;
	}
}

function cal_selected(objname,selectedDate)
{
	// object name (user control prefix and name)
	var objDiv = getCalenderObjectID(objname, true);
	var objTbl = getCalenderObjectID(objname, false);
	
	document.all[objname].value = selectedDate=="clr"?"":selectedDate!=""?selectedDate:document.all[objname].value;
	objDiv.style.display = 'none';
	CheckDate(selectedDate);	
}

function CheckDate(date)
{
	var dateString = date.split("/");
	var day = dateString[0];
	var month = dateString[1];
	var year = dateString[2];
	
	
	var startingdate = new Date(year, (month-1), day);
	var today	= new Date();
	
	var one_day=1000*60*60*24;
	var diff = (Math.ceil((startingdate.getTime()-today.getTime())/(one_day)));
	
	if(diff > 30)
	{
		alert(DAYS_ERROR);
	}	
}

function getCalenderObjectID(objname, isDiv)
{
	var arrObjname = objname.split("_");
	var startIndex = arrObjname[0] == "" ? 1 : 0;
	var strID	=	"";
	if (isDiv)
	{
		strID = "_" + arrObjname[startIndex] + "_" + arrObjname[startIndex + 1] + "_div_" + arrObjname[startIndex +2];
	}
	else
	{
		strID = "_" + arrObjname[startIndex] + "_" + arrObjname[startIndex + 1] + "_tbl_" + arrObjname[startIndex +2];
	}
	return document.all(strID);	
}



function loadAvailabilityXml(month, year)
{	
	var sURL					= calenderAjaxUrl  + "&year=" + year + "&month=" + month;
	  
    if (window.XMLHttpRequest) 
	{
		xmlHttpObject			= new XMLHttpRequest();
	}
	else 
	{
		xmlHttpObject			= new ActiveXObject("MSXML2.XMLHTTP");
	}
    
	if (xmlHttpObject)
	{ 
		xmlHttpObject.onreadystatechange = loadAvailabilityXmlCallback;    
		xmlHttpObject.open("POST", sURL, false );
		xmlHttpObject.send(null);	     			
	}
 }
 
 function loadAvailabilityXmlCallback()
 {
	var xmlDoc = null;
	
	if (xmlHttpObject.readyState == 4)
	{
		try
		{
			xmlDoc = xmlHttpObject.responseXML;
			buildAvailabilityArray(xmlDoc);
		}
		catch(e)
		{
			//alert("loadAvailabilityXmlCallback : Error : " + e.description );
		}
	}
  }

  function buildAvailabilityArray(xmlAvailabilityDoc)
  {
		if (xmlAvailabilityDoc)
		{
			var availabilityDays = xmlAvailabilityDoc.documentElement.getElementsByTagName("Year/Month/Day");
			if (availabilityDays && availabilityDays.length > 0) 
			{
				availabilityArray = new Array(availabilityDays.length+1);
									
				for (i = 1 ; i < availabilityDays.length+1 ; i++)
				{
					availabilityArray[i] = availabilityDays[i-1].getAttributeNode("available").nodeValue;											
				}	
			}
		}	
		/*else
		{
			alert("loadAvailabilityXmlCallback : There was a problem retrieving the XML data:\n" + xmlHttpObject.statusText)
		}
		*/
			
		//alert("test: " + availabilityArray[22]);				
  }   
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dbg(O)
{
	if(typeof(O)=="string"||typeof(O)=="number"){alert(O);return;}
	
	var arr	=	[];
	
	for(var o in O)
	{
		if(typeof(O[o])=="string"||typeof(O[o])=="number")
		{
				arr.push(o+"='"+O[o]+"' ");
		}
		else	arr.push(o);
	}
	arr.sort();
	alert(arr.join("; "));
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''






