

var cal_open=false;
var cal_visDate;


var cal_months = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var cal_monthNames = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
var cal_dayNames = new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat");

var current_cal;



function Calendar(today, begin, end, initialNites, current, name) 
{
        
	this.cal_today = new Array(today.getDate(), today.getMonth(), today.getFullYear());
	if(begin == null)
		this.cal_start = new Array(today.getDate(), today.getMonth(), today.getFullYear());
	else
		this.cal_start = new Array(begin.getDate(), begin.getMonth(), begin.getFullYear());
	if(end == null)
	{
		var tmp = new Date(today);
		tmp.setYear(tmp.getFullYear()+1);
		this.cal_end = new Array(tmp.getDate(), tmp.getMonth(), tmp.getFullYear());
	}
	else
		this.cal_end = new Array(end.getDate(), end.getMonth(), end.getFullYear());
	if(initialNites == null)
		this.cal_nonites = 2;
	else
		this.cal_nonites = initialNites;
	if(current == null)
		this.cal_cur = new Date(today);
	else
		this.cal_cur = new Date(current.getFullYear(),current.getMonth(),current.getDate());
		
	if(name==null) this.name="cal";
        else this.name=name;
	this.cal_open=false;
}

function createDateSelect(objName,objId,objClass,calendar,calendarVar)
{
	if(objName == null)
		objName = 'ad';
	if(objId == null)
		objId = 'ad';
	document.write("<select name='"+objName+"' id='"+objId+"' onchange='changeDate("+calendarVar+")' onfocus='closeCalendar()' ");
	if(objClass != null)
		document.write("class='"+objClass+"' ");
	document.write("></select>");
	calendar.cal_date = document.getElementById(objId);
	setDateContent(new Array(calendar.cal_cur.getDate(), calendar.cal_cur.getMonth(), calendar.cal_cur.getFullYear()),calendar);
}

function createMonthSelect(objName,objId,objClass,calendar,calendarVar)
{
	if(objName == null)
		objName = 'am';
	document.write("<select name='"+objName+"' id='"+objId+"' class='"+objClass+"' onchange='changeMonth("+calendarVar+")' onfocus='closeCalendar()' ");
	document.write("></select>");
	calendar.cal_month = document.getElementById(objId);
	setMonthContent(calendar);
}

function createNiteSelect(max,objName,objId,objClass,calendar)
{
        
	if(objName == null)
		objName = 'numberOfNights';
	document.write("<select name='"+objName+"' id='"+objId+"'  onfocus='closeCalendar()' ");
	if(objClass != null)
		document.write("class='"+objClass+"' ");
	document.write("></select>");
	
	if(max == null)
		max = 14;

	calendar.cal_nites = document.getElementById(objId);
	var opt = calendar.cal_nites.options;
	for(var i = 1; i <= max; i++)
		opt[opt.length] = new Option(i,i);

	calendar.cal_nites.selectedIndex = calendar.cal_nonites-1;
	calendar.cal_nonites = 0;

       
}

function createCalendar(htm,xpos,ypos,bgcolor,imgLoc,calendar,calendarVar)
{
	calendar.cal_imgLoc = imgLoc;
        document.write("<a href='javascript:openCalendar("+calendarVar+")'>"+htm+"</a>");
	if(navigator.appName == "Microsoft Internet Explorer")
		document.write("<iframe id='"+calendar.name+"_cov' style='position:absolute; left:"+xpos+"px; top:"+ypos+"px; width:151px; height:199px; border-style:none;visibility:hidden;'></iframe>");
		
	document.write("<div id='"+calendar.name+"_obj' style='background-color:#000000; position:absolute; left:"+xpos+"px; top:"+ypos+"px; width:151px; height:199px;visibility:hidden;'><table cellpadding='0' cellspacing='0' style='position:absolute;top:2px;left:2px;width:147px;height:189px;background-color:#FFFFFF;font-family:arial; font-size:9pt;'><tr><td id='"+calendar.name+"_bak' style='vertical-align:middle;text-align:center;width:21px;height:24px;background-color:"+bgcolor+";'></td><td id='"+calendar.name+"_title' style='vertical-align:middle;text-align:center;height:24px;background-color:"+bgcolor+";font-weight:bold;color:#FFFFFF;font-size:10pt;font-family:arial;' colspan='5'>month name</td><td id='"+calendar.name+"_fow' style='vertical-align:middle;text-align:center;width:21px;height:24px;background-color:"+bgcolor+";'></td></tr><tr>");
	for(var i = 0; i < 7; i++)
		document.write("<td style='vertical-align:middle;font-weight:bold;text-align:center; height:18px;'>"+cal_dayNames[i].substring(0,2)+"</td>");
	document.write("</tr><tr><td colspan='7' style='height:1px; line-height:1px; background-color:#000000;'></td></tr>");
	for(var j = 0; j < 6; j++)
	{
		document.write("<tr>");
		for(var i = 0; i < 7; i++)
			document.write("<td style='vertical-align:middle;color:#000000;width:20px;height:21px;text-align:center;font-weight:bold;' id='"+calendar.name+"_cell"+(i+(j*7))+"'></td>");
		document.write("</tr>");
	}
	
	document.write("<tr><td colspan='7' style='height:25px;text-align:center;vertical-align:middle;'><a href='javascript:closeCalendar()' style='color:"+bgcolor+";'>close</a></td><tr></table></div>");
	
}

function openCalendar(calendar)
{
	
	if(!cal_open)
	{
                current_cal=calendar;
                cal_open = true;
		if(navigator.appName == "Microsoft Internet Explorer")
			document.getElementById(calendar.name+"_cov").style.visibility='visible';
		document.getElementById(calendar.name+"_obj").style.visibility='visible';
		cal_visDate = calendar.cal_cur;
		populateCalendar();
		
	} else closeCalendar();
	
	
}

function closeCalendar()
{
	if(cal_open)
	{
		if(navigator.appName == "Microsoft Internet Explorer")
			document.getElementById(current_cal.name+"_cov").style.visibility='hidden';
		document.getElementById(current_cal.name+"_obj").style.visibility='hidden';
		cal_open = false;
	}
}

function changeCalMonth(amt)
{
	cal_visDate.setDate(1);
	cal_visDate.setMonth(cal_visDate.getMonth()+amt);
	populateCalendar();
}

function setDate(dt)
{
       
	current_cal.cal_cur.setMonth(cal_visDate.getMonth());
	current_cal.cal_cur.setYear(cal_visDate.getFullYear());
	current_cal.cal_cur.setDate(dt);
	setMonthContent(current_cal);
	setDateContent(new Array(current_cal.cal_cur.getDate(), current_cal.cal_cur.getMonth(), current_cal.cal_cur.getYear()),current_cal);
	closeCalendar();
}

function populateCalendar()
{
       
	var offset = new Date(cal_visDate.getFullYear(), cal_visDate.getMonth(), 1).getDay();
	//set start
	var start = 1;
	if((cal_visDate.getMonth() == current_cal.cal_start[1]) && (cal_visDate.getFullYear() == current_cal.cal_start[2]))
	{
		document.getElementById(current_cal.name+"_bak").innerHTML = '';
		start = current_cal.cal_start[0];
	}
	else
		document.getElementById(current_cal.name+"_bak").innerHTML = "<a href='javascript:changeCalMonth(-1)'><img src='"+current_cal.cal_imgLoc+"back_arrow.gif' border='0' /></a>";
	start+=offset-1;
	//set end
	var end = cal_months[cal_visDate.getMonth()];
	var realEnd = end+offset-1;
        
	if((cal_visDate.getMonth() == current_cal.cal_end[1]) && (cal_visDate.getFullYear() == current_cal.cal_end[2]))
	{
		document.getElementById(current_cal.name+"_fow").innerHTML = '';
		end = current_cal.cal_end[0];
	}
	else
		document.getElementById(current_cal.name+"_fow").innerHTML = "<a href='javascript:changeCalMonth(1)'><img src='"+current_cal.cal_imgLoc+"forward_arrow.gif' border='0' /></a>";
	end+=offset-1;
	document.getElementById(current_cal.name+"_title").innerHTML = cal_monthNames[cal_visDate.getMonth()] + " " + cal_visDate.getFullYear();
	
	for(var i = 0; i < 42; i++)
	{
		if((i < offset)||(i > realEnd))
		{
			document.getElementById(current_cal.name+"_cell"+i).innerHTML = "";
			document.getElementById(current_cal.name+"_cell"+i).style.backgroundImage = "";
		}
		else if((i < start) || (i > end))
		{
			document.getElementById(current_cal.name+"_cell"+i).innerHTML = (i-offset+1);
			document.getElementById(current_cal.name+"_cell"+i).style.backgroundImage = "url('"+current_cal.cal_imgLoc+"closed.gif')";
		}
		else
		{
			document.getElementById(current_cal.name+"_cell"+i).innerHTML = "<a style='color:#000000;text-decoration:none;' href='javascript:setDate("+(i-offset+1)+")'>"+(i-offset+1)+"</a>";
			document.getElementById(current_cal.name+"_cell"+i).style.backgroundImage = "";
		}
	}
}



function changeDate(calendar)
{
	calendar.cal_cur = new Date(calendar.cal_date.value + " " + calendar.cal_month.options[calendar.cal_month.selectedIndex].text);
}

function setMonthContent(calendar)
{
	var im = calendar.cal_start[1];
	var iy = calendar.cal_start[2];
	var opt = calendar.cal_month.options;

        
        
	opt.length = 0; // reset object
        
	while(iy < calendar.cal_end[2])
	{
		for(var i = im; i < 12; i++)
			opt[opt.length] = new Option(cal_monthNames[i]+" "+iy,(i+1)+":"+iy);
		im = 0;
		iy++;
	}
	for(var i = im; i <= calendar.cal_end[1]; i++)
		opt[opt.length] = new Option(cal_monthNames[i]+" "+iy,(i+1)+":"+iy);
	calendar.cal_month.selectedIndex = calendar.cal_cur.getMonth()-calendar.cal_start[1]+((calendar.cal_cur.getFullYear()-calendar.cal_start[2])*12);
        
}

/** Set the content of the date object and the selected index */
function setDateContent(cur,calendar)
{
	var strt = 1;
	var end;
        
	if((cur[1] == calendar.cal_start[1]) && (cur[2] == calendar.cal_start[2]))
		strt = calendar.cal_start[0];
	if((cur[1] == calendar.cal_end[1]) && (cur[2] == calendar.cal_end[2]))
		end = calendar.cal_end[0];
	else
	{
		if((cur[1] == 1) && (cur[2]%4 == 0))
			end = 29;
		else
			end = cal_months[cur[1]];
	}

	var opt = calendar.cal_date.options;
        
	opt.length = 0; // reset object
	for(var i = strt; i <= end; i++)
		opt[opt.length] = new Option(i,i);
	
	if(cur[0] < strt)
		cur[0] = strt;
	else if(cur[0] > end)
		cur[0] = end;
	calendar.cal_date.selectedIndex = cur[0]-strt;
}

function changeMonth(calendar)
{
	var mon = calendar.cal_month.value;
	var yr;
	if(mon.charAt(1) == ':')
	{
		yr = parseInt(mon.substring(2));
		mon = parseInt(mon.substring(0,1));
	}
	else
	{
		yr = parseInt(mon.substring(3));
		mon = parseInt(mon.substring(0,2));
	}
	mon--;
	setDateContent(new Array(calendar.cal_cur.getDate(), mon, yr),calendar);
	changeDate(calendar);
}
