var MSIE=false;
var isCarsSE = false;
var isFlightSE = false;
var isReview=false;


if(navigator.userAgent.indexOf('MSIE')>=0 && navigator.userAgent.indexOf('Opera')<0) MSIE=true;

var calendardiff = 0;

function ShowCalendar(objname,month,year,bPos,isInnerSE,availableDates)
{

    //alert("ShowCalendar : " + month + "," + year + "," + isInnerSE)
    var startDate = ""
    var avDatesArr = new Array();

    if(isCarsSE == true)
    {
	    if(objname == 'DateEnd')
	    {
		    startDate = document.getElementById((isInnerSE?seInnerCarsClientID:seCarsClientID) + "_inpDateStart").value;
	    }
	}
	else if(isFlightSE == true)
	{
	    if(objname == 'DateEnd')
	    {
		    startDate = document.getElementById(seFlightsClientID + "_inpDateStart").value;
	    }
	}
    else if(objname == 'CheckOut')
    {
	    startDate = document.getElementById((isInnerSE?seInnerHotelsClientID:seHotelsClientID) + "_inpCheckIn").value;
    }
    
    //else if(objname == 'inpTourDates')
    //{
    else if(!isnull(availableDates))
    {
        
        //startDate = document.getElementById(toursClientID  + "_" + objname).value;
        var availableDatesArr = availableDates.split(',');
        
        for(var i=0;i<availableDatesArr.length;i++)
        {
       	    var a = availableDatesArr[i].split('-')
	        avDatesArr[i]=new Date();
		    avDatesArr[i].setDate(1);
		    avDatesArr[i].setFullYear(a[0]);
		    avDatesArr[i].setMonth(a[2]*1-1);
	        avDatesArr[i].setDate(a[1]*1);
	        
	        startDate=availableDatesArr[0];
	        

        }
    }
	if(isnull(bPos)) bPos = true
	format = '';
	
	
	var objDiv = document.getElementById(isInnerSE?"divInnerDate":"divDate")
	var objTbl = document.getElementById(isInnerSE?"tblInnerDate":"tblDate")
	
	objDiv.style.display = 'none';
	showSelects()
	
	var arrDays = new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
	var arrMonthes = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
	var arrMonthesDays = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	
	
	var clearText = "clear";
	var closeText = "close";
	var closeAlt = "close";
	var prevAlt = "previous";
	var nextAlt = "next";
	
	// 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 = null;
	
	if(!isnull(startDate)){
	    var a = startDate.split('-')
		today = new Date();
		today.setDate(1);
		today.setFullYear(a[0]);
		today.setMonth(a[2]*1-1);
		if(!isnull(availableDates)) //tours
	        today.setDate(a[1]*1);
	    else
	        today.setDate(a[1]*1+1);
	        
	        
	    
	}
	else{
		today = new Date();
		today.setDate(today.getDate()*1+1);
		
	}
	
	month  = (isnull(month) || isNaN(month))?today.getMonth():month;
	year  = (isnull(year) || isNaN(year))?today.getFullYear():year;
	
	
			
	if (month == 12)
	{
		month = 0;
		year++;
	}
	else
	{
		if (month == -1)
		{
			month = 11;
			year--;
		}
	}
	
	//alert(month)
	var date1 = new Date(1900,1,1);
	date1.setMonth(month);
	date1.setDate(1);
	date1.setFullYear(year);
	
	
	//alert(date1 )
	
	var dayInMonth = arrMonthesDays[month]
	if(month*1 + 1==2 && year % 4==0)
	    dayInMonth=29;
	
	//alert(dayInMonth)

	// delete old table
	while (objTbl.rows.length > 0)
	{
		objTbl.deleteRow(0);
	}
	
	//images	
	var imgPrev = new Image();
	imgPrev.src = CLVAR.IMAGES_PATH + "/calendar/prev.gif";
	
	var imgNext = new Image();
	imgNext.src = CLVAR.IMAGES_PATH + "/calendar/next.gif";
	
	var imgClose = new Image();
	imgClose.src = CLVAR.IMAGES_PATH + "/calendar/close.gif";

  
	// next, prev arrows and month+year
	var vRow = objTbl.insertRow(linenumber++);
	vRow.className = "cal-rows";
	

	var vCell = vRow.insertCell(-1);
    
	vCell.align = "center";
	vCell.className = "cal-cell-arrows";
	vCell.innerHTML = "<a style='cursor:pointer;' class='cal-link-arrow' onclick=\"javascript:ShowCalendar('"+objname+"',"+parseInt(month-1)+","+year+",false,"+isInnerSE+",'"+(isnull(availableDates)?'':availableDates)+"');\"><img src='" + imgPrev.src + "' alt='"+prevAlt+"' class='cal-prev'/></a>&nbsp;";
	
	if (avDatesArr.length>0)
	{
	    if(date1<avDatesArr[0])
	        vCell.innerHTML = "&nbsp;";
	}
	
    var vCell = vRow.insertCell(-1);
	vCell.colSpan = 5;
	vCell.align = "center";
	vCell.className = "cal-cell-arrows";
	vCell.innerHTML = arrMonthes[month] + " " + year;
	
	var vCell = vRow.insertCell(-1);
	vCell.align = "center";
	vCell.className = "cal-cell-arrows";
	vCell.innerHTML = "&nbsp;<a style='cursor:pointer;' class='cal-link-arrow' onclick=\"javascript:ShowCalendar('"+objname+"',"+parseInt(month+1)+","+year+",false,"+isInnerSE+",'"+(isnull(availableDates)?'':availableDates)+"');\"><img src='" + imgNext.src + "' alt='"+nextAlt+"' class='cal-next'/></a>";
	if (avDatesArr.length>0)
	{
	    //alert(avDatesArr[avDatesArr.length-1].getMonth());
	    if(date1.getFullYear()==avDatesArr[avDatesArr.length-1].getFullYear() && date1.getMonth() >= avDatesArr[avDatesArr.length-1].getMonth())
	        vCell.innerHTML = "&nbsp;";
	        
	}
	
	
	// days name
	var vRow = objTbl.insertRow(linenumber++);
	vRow.className = "cal-rows";
	for (var i=0 ; i<7 ; i++)
	{
		var vCell = vRow.insertCell(-1);
		vCell.className = "cal-cell-day-name";
		vCell.innerHTML = "<tt>"+arrDays[i]+"</tt>";
	}
	
	// first line
	month++;
	if (parseInt(month) < 10) 
	{
		var month = new String("0" + month);
	}	
	
	var vRow = objTbl.insertRow(linenumber++);
	vRow.className = "cal-rows";
	for (var i=0 ; i<date1.getDay() ; i++)
	{
		var vCell = vRow.insertCell(-1);
		vCell.className = "cal-cell-empty";
		vCell.innerHTML = "&nbsp;";
	}
	
	for (var i=1 ; i<=parseInt(7-date1.getDay()) ; i++)
	{
		day = parseInt(i)<10?"0"+i:i; 
		
		// choose today
		var cellClass = "cal-cell-day-number";
		var linkClass = "cal-link-number";
		
		var currDate = new Date();
		currDate.setDate(1);
	    currDate.setMonth(month-1);
	    currDate.setDate(day);
	    currDate.setFullYear(year);
	    
	    
		if (today.toDateString() == currDate.toDateString())
		{
			cellClass = "cal-cell-today";
			linkClass = "cal-link-today";
		}
		else if(today > currDate && (!isReview)){
		    cellClass = "cal-cell-day";
			linkClass = "cal-link";
		}
			
		var vCell = vRow.insertCell(-1);
		vCell.className = cellClass;
		
		if(day.length==1) day = "0" + day
		if(month.length==1) month = "0" + month
		var dateFormat = year + "-" + day + "-" + month;
		
		if(today > currDate && (!isReview)){
		    vCell.innerHTML = "<a style='cursor:pointer;' class=" + linkClass + ">"+i+"</a>";
		}
		else{
		    vCell.innerHTML = "<a style='cursor:pointer;' class=" + linkClass + " style='cursor:pointer;' onclick=\"javascript:SetDateFromCalendar('"+objname+"','"+dateFormat+"',"+isInnerSE+");\">"+i+"</a>";
		}

        if(avDatesArr.length>0)
        {
            var found=false;
            var idx = -1;
	        for(var d=0;d<avDatesArr.length;d++)
	        {
	            if(currDate.toDateString()==avDatesArr[d].toDateString())
	            {
    	            found=true;
    	            idx=d;
    	        }    
    		 }
		        if (found==true)
		        {
		            if(idx==0)
		            {
		            cellClass = "cal-cell-today";
			        linkClass = "cal-link-today";
		            }
		            else
		            {
		        	cellClass = "cal-cell-day-number";
			        linkClass = "cal-link-number";
			        }
			        vCell.className=cellClass;
	                vCell.innerHTML = "<a style='cursor:pointer;' class=" + linkClass + " style='cursor:pointer;' onclick=\"javascript:SetDateFromCalendar('"+objname+"','"+dateFormat+"',"+isInnerSE+");\">"+i+"</a>";
                }
                else
                {
          		    cellClass = "cal-cell-day";
        			linkClass = "cal-link";
                    vCell.className=cellClass;
		            vCell.innerHTML = "<a style='cursor:pointer;' class=" + linkClass + ">"+i+"</a>";
		         }   
		 }
            		 

	}
	// other lines
	while (i <= dayInMonth)
	{
		var vRow = objTbl.insertRow(linenumber++);
		vRow.className = "cal-rows";
		for (var j=0 ; j<7 ; j++)
		{
			day = parseInt(i)<10?"0"+i:i; 
			
			// choose today
			var cellClass = "cal-cell-day-number";
			var linkClass = "cal-link-number";
			var currDate = new Date();
			currDate.setDate(1);
		    currDate.setMonth(month-1);
	        currDate.setDate(day);
	        currDate.setFullYear(year);

	        
			if (today.toDateString() == currDate.toDateString())
			{
				cellClass = "cal-cell-today";
				linkClass = "cal-link-today";
			}
			else if(today > currDate && (!isReview)){
		        cellClass = "cal-cell-day";
			    linkClass = "cal-link";
		    }
			
			var vCell = vRow.insertCell(-1);
			vCell.className = cellClass;
			
			if(day.length==1) day = "0" + day
		    if(month.length==1) month = "0" + month
		    var dateFormat = year + "-" + day + "-" + month;
			
		    if(today > currDate && (!isReview)){
		        vCell.innerHTML = "<a style='cursor:pointer;' class=" + linkClass + ">"+i+"</a>";
		    }
		    else{
		        vCell.innerHTML = "<a style='cursor:pointer;' class=" + linkClass + " style='cursor:pointer;' onclick=\"javascript:SetDateFromCalendar('"+objname+"','"+dateFormat+"',"+isInnerSE+");\">"+i+"</a>";
			}
	        if(avDatesArr.length>0)
            {
                var found=false;
                var idx=-1;
	            for(var d=0;d<avDatesArr.length;d++)
	            {
	                if(currDate.toDateString()==avDatesArr[d].toDateString())
	                {
    	                found=true;
    	                idx=d;
    	            }
    		    }
		       // alert(currDate.toDateString());
		       // alert(found);
		        if (found==true)
		        {
		            if(idx==0)
		            {
		            cellClass = "cal-cell-today";
			        linkClass = "cal-link-today";
		            }
		            else
		            {
		        	cellClass = "cal-cell-day-number";
			        linkClass = "cal-link-number";
			        }
			        vCell.className=cellClass;
	                vCell.innerHTML = "<a style='cursor:pointer;' class=" + linkClass + " style='cursor:pointer;' onclick=\"javascript:SetDateFromCalendar('"+objname+"','"+dateFormat+"',"+isInnerSE+");\">"+i+"</a>";
                }
                else
                {
          		    cellClass = "cal-cell-day";
        			linkClass = "cal-link";
                    vCell.className=cellClass;
		            vCell.innerHTML = "<a style='cursor:pointer;' class=" + linkClass + ">"+i+"</a>";
		         }   
		    }

			    
			if (i++ == dayInMonth) break;
		}
	}
	
	for (j++ ; j<7 ; j++)
	{
		var vCell = vRow.insertCell(-1);
		vCell.className = "cal-cell-empty";
		vCell.innerHTML = "&nbsp;";
	}	
	
	//close+clear
	var vRow = objTbl.insertRow(linenumber++);
	vRow.className = "cal-rows";
	
	var vCell = vRow.insertCell(-1);
	vCell.colSpan = 4;
	vCell.className = "cal-cell-clear";
	vCell.innerHTML = "&nbsp;<a style='cursor:pointer;' class='cal-link-clear' onclick=\"javascript:ClearCalendar('"+objname+"',"+isInnerSE+");\">"+clearText+"</a>";
	
	var vCell = vRow.insertCell(-1);
	vCell.colSpan = 3;
	vCell.className = "cal-cell-close";
	vCell.innerHTML = "<a style='cursor:pointer;' class='cal-link-close' onclick='javascript:CloseCalendar("+isInnerSE+");'>"+closeText+"&nbsp;<img src='" + imgClose.src + "' alt='"+closeAlt+"' class='cal-close'/></a>&nbsp;";
	
	
	
	// show div (if the div isn't already opened)
	if (objDiv.style.display != 'block')
	{
		objDiv.style.display = 'block';
		objDiv.style.position = 'absolute';
		if(bPos && isInnerSE){
		    try{
		        objDiv.style.left = event.x - calendardiff;
			    objDiv.style.top = event.y +body.scrollHeight;
			}
			catch(e){}
		}
		hideSelects(isInnerSE?"divInnerDate":"divDate")
		
	}
}	

function SetDateFromCalendar(objname,selectedDate,isInnerSE)
{
	var objDiv = document.getElementById(isInnerSE?"divInnerDate":"divDate")
	var objTbl = document.getElementById(isInnerSE?"tblInnerDate":"tblDate")
	var retObj;
	if(isCarsSE == true)
	    retObj = document.getElementById((isInnerSE?seInnerCarsClientID:seCarsClientID) + "_inp" + objname);
	else if(isFlightSE == true)
	    retObj = document.getElementById(seFlightsClientID + "_inp" + objname);
	else if (objname=='inpTourDates')    
	    retObj = document.getElementById(toursClientID  + "_" + objname);
	else if (objname.indexOf('inpTourDates')>-1) 
	    retObj = document.getElementById(objname);
	else if (isReview==true) 
	    retObj = document.getElementById(objname);   
	else    
	    retObj = document.getElementById((isInnerSE?seInnerHotelsClientID:seHotelsClientID) + "_inp" + objname);
	
	retObj.value = selectedDate;
	objDiv.style.display = 'none';
	
	if(objname=='CheckOut') CalculateNightsNumber(isInnerSE);
	if(objname=='DateEnd' && isFlightSE==false) CalculateDaysNumber(isInnerSE);
	
	showSelects()
}

function CloseCalendar(isInnerSE)
{
	var objDiv = document.getElementById(isInnerSE?"divInnerDate":"divDate")
	var objTbl = document.getElementById(isInnerSE?"tblInnerDate":"tblDate")
	
	objDiv.style.display = 'none';
	showSelects()
}

function ClearCalendar(objname,isInnerSE)
{
	var objDiv = document.getElementById(isInnerSE?"divInnerDate":"divDate")
	var objTbl = document.getElementById(isInnerSE?"tblInnerDate":"tblDate")
	
	//var retObj = document.getElementById((isInnerSE?seInnerHotelsClientID:seHotelsClientID) + "_inp" + objname)
	if(isCarsSE == true)
	    retObj = document.getElementById((isInnerSE?seInnerCarsClientID:seCarsClientID) + "_inp" + objname);
	else if(isFlightSE == true)
	    retObj = document.getElementById(seFlightsClientID + "_inp" + objname);
	else if (objname=='inpTourDates')    
	    retObj = document.getElementById(toursClientID  + "_" + objname);
	else if (objname.indexOf('inpTourDates')>-1) 
	    retObj = document.getElementById(objname);
    else if (isReview==true) 
	    retObj = document.getElementById(objname);  	    
	else    
	    retObj = document.getElementById((isInnerSE?seInnerHotelsClientID:seHotelsClientID) + "_inp" + objname);

	retObj.value = "";
	objDiv.style.display = 'none';
	
	if(objname=='CheckOut') CalculateNightsNumber(isInnerSE);
	if(objname=='DateEnd' && isFlightSE==false) CalculateDaysNumber(isInnerSE);
	
	showSelects()
	
	
}

function isnull(arg) {
	arg = arg+'';
	return (arg == '' || arg == 'null' || arg == 'undefined');
}

/////////////////////////////////////////////////
var hiddenSelects=[];
function getReference(id){ return document.getElementById(id);}
function hideSelects(id){

    if(!MSIE) return;
    
	var obj=getReference(id)
	function hideSelect(obj){
	    if(obj.parentNode.className != "unvis"){
		    obj.style.visibility='hidden'
		    hiddenSelects[hiddenSelects.length] = String(obj.uniqueID)
		}
	}
	var objOffLeft=0,objOffTop=0,objOffWidth=0,objOffHeight=0;
	var divLT={},divRT={},divLB={},divRB={};

	objOffWidth=obj.offsetWidth;
	objOffHeight=obj.offsetHeight;
	objOffLeft=obj.offsetLeft;
	objOffTop=obj.offsetTop;
	var objPar=obj.offsetParent;
	while(objPar){
		obj=objPar;
		objOffLeft+=obj.offsetLeft;
		objOffTop+=obj.offsetTop;
		objPar=obj.offsetParent;
	}
	divLT.x=objOffLeft;
	divLT.y=objOffTop;
	divRT.x=objOffLeft+objOffWidth;
	divRT.y=objOffTop;
	divLB.x=objOffLeft;
	divLB.y=objOffTop+objOffHeight;
	divRB.x=objOffLeft+objOffWidth;
	divRB.y=objOffTop+objOffHeight;

	var selects=document.getElementsByTagName("SELECT");
	for(var i=0;i<selects.length;i++){
		var offLeft=0,offTop=0,offW=0,offH=0;
		//SELECT COORDINATES:
		var selLT={},selRT={},selLB={},selRB={};

		var ob=selects[i];
		offW=ob.offsetWidth;
		offH=ob.offsetHeight;
		offLeft+=ob.offsetLeft;
		offTop+=ob.offsetTop;
		var par=ob.offsetParent;
		while(par){
			ob=par;
			offLeft+=ob.offsetLeft;
			offTop+=ob.offsetTop;
			par=ob.offsetParent;
		}

		selLT.x=offLeft;
		selLT.y=offTop;
		selRT.x=offLeft+offW;
		selRT.y=offTop;
		selLB.x=offLeft;
		selLB.y=offTop+offH;
		selRB.x=offLeft+offW;
		selRB.y=offTop+offH;

		if(selLT.y>=divLB.y) continue;
		if(selLB.y<=divLT.y) continue;
		if((selLT.x>=divLB.x) && (selLT.x<divRB.x)){
			hideSelect(selects[i]);
			continue;
		}
		if((selRT.x>=divLB.x) && (selRT.x<divRB.x)){
			hideSelect(selects[i]);
			continue;
		}
		if((selLT.x<=divLB.x) && (selRT.x>=divRB.x)){
			hideSelect(selects[i]);
			continue;
		}
	}
}
function getOffsetLeft(ob){
	var offLeft=ob.offsetLeft;
	var par=ob.offsetParent;
	while(par){
		offLeft+=par.offsetLeft;
		par=par.offsetParent;
	}
	return offLeft
}
function showSelects(){

    if(!MSIE) return;
    
	for(var i = 0; i < hiddenSelects.length; i++){
	    var sel = getReference(hiddenSelects[i])
	    if(sel && sel.parentNode.className != "unvis"){
		    sel.style.visibility='visible'
		}
	}
	hiddenSelects=[]
}
