/*
* Any updates to this calendar script should be propagated to:
*	 - www.irelandin1.com/newsite/js/calendar/calendar.js
*    - www.nzin1.co.nz/js/calendar/calendar.js
*	 - www.townandcountry.ie/js/includes/calendar.js
*	 - www.irelandhotels.com/js/calendar.js
*
*/

var cal_start;
var cal_end;
var cal_today;
var cal_cur;
var cal_nonites;
var cal_visDate;
var cal_open = false;
var cal_imgLoc;
var cal_date;
var cal_month;
var cal_nites;
var cal_weekday;
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");

function setDates(today, begin, end, initialNites, current)
{
	cal_today = new Array(today.getDate(), today.getMonth(), today.getFullYear());
	if(begin == null)
		cal_start = new Array(today.getDate(), today.getMonth(), today.getFullYear());
	else
		cal_start = new Array(begin.getDate(), begin.getMonth(), begin.getFullYear());
	if(end == null)
	{
		var tmp = new Date(today);
		tmp.setYear(tmp.getFullYear()+1);
		cal_end = new Array(tmp.getDate(), tmp.getMonth(), tmp.getFullYear());
	}
	else
		cal_end = new Array(end.getDate(), end.getMonth(), end.getFullYear());
	if(initialNites == null)
		cal_nonites = 2;
	else
		cal_nonites = initialNites;
	if(current == null)
		cal_cur = new Date(today);
	else
		cal_cur = new Date(current.getFullYear(),current.getMonth(),current.getDate());
}

/**Create date select object*/
function createDateSelect(objClass,objName,objId,width)
{
	if(objName == null)
		objName = 'ad';
	if(objId == null)
		objId = "calad"
	document.write("<select name='"+objName+"' id='"+objId+"' onchange='changeDate()' onfocus='closeCalendar()' ");
	if(objClass != null)
		document.write("class='"+objClass+"' ");
	if(width != null)
		document.write("style='width:"+width+"px;'");
	document.write("></select>");
	cal_date = document.getElementById(objId);
	setDateContent(new Array(cal_cur.getDate(), cal_cur.getMonth(), cal_cur.getFullYear()));
}

function createMonthSelect(objClass,objName,objId,width)
{
	if(objName == null)
		objName = 'am';
	if(objId == null)
		objId = "calam"
	document.write("<select name='"+objName+"' id='"+objId+"' onchange='changeMonth()' onfocus='closeCalendar()' ");
	if(objClass != null)
		document.write("class='"+objClass+"' ");
	if(width != null)
		document.write("style='width:"+width+"px;'");
	document.write("></select>");
	cal_month = document.getElementById(objId);
	setMonthContent();
}


function createNiteSelect(objClass,max,objName,width)
{
	if(objName == null)
		objName = 'numberOfNights';
	document.write("<select name='"+objName+"' id='"+objName+"' onchange='changeNoNites()' onfocus='closeCalendar()' ");
	if(objClass != null)
		document.write("class='"+objClass+"' ");
	if(width != null)
		document.write("style='width:"+width+"px;'");
	document.write("></select>");
	
	if(max == null)
		max = 14;

	cal_nites = document.getElementById(objName);
	var opt = cal_nites.options;
	for(var i = 1; i <= max; i++)
		opt[opt.length] = new Option(i,i);

	cal_nites.selectedIndex = cal_nonites-1;
	cal_nonites = 0;

	changeNoNites()
}

function createNiteSelectTHM(objClass,max,objName,width)
{
	if(objName == null)
		objName = 'numberOfNights';
	document.write("<select name='"+objName+"' id='"+objName+"' onchange='changeNoNites()' onfocus='closeCalendar()' ");
	if(objClass != null)
		document.write("class='"+objClass+"' ");
	if(width != null)
		document.write("style='width:"+width+"px;'");
	document.write("></select>");
	
	if(max == null)
		max = 14;

	cal_nites = document.getElementById(objName);
	var opt = cal_nites.options;
	for(var i = 2; i <= max; i++)// this line changed to always select 3 as min number of nights.
		opt[opt.length] = new Option(i,i);

	cal_nites.selectedIndex = cal_nonites-1;
	cal_nonites = 0;

	changeNoNites()
}

function createNiteSelectALA(objClass,max,objName,width)
{
	if(objName == null)
		objName = 'numberOfNights';
	document.write("<select name='"+objName+"' id='"+objName+"' onchange='changeNoNites()' onfocus='closeCalendar()' ");
	if(objClass != null)
		document.write("class='"+objClass+"' ");
	if(width != null)
		document.write("style='width:"+width+"px;'");
	document.write("></select>");
	
	if(max == null)
		max = 14;

	cal_nites = document.getElementById(objName);
	var opt = cal_nites.options;
	for(var i = 3; i <= max; i++)// this line changed to always select 3 as min number of nights.
		opt[opt.length] = new Option(i,i);

	cal_nites.selectedIndex = cal_nonites-1;
	cal_nonites = 0;

	changeNoNites()
}


function createDay(objClass)
{
	document.write("<span id='weekdayhere' ");
	if(objClass != null)
		document.write("class='"+objClass+"'");
	document.write("></span>");
	cal_weekday = document.getElementById('weekdayhere');

	changeWeekday();
}

function createCalendar(htm,xpos,ypos,bgcolor,imgLoc)
{
	cal_imgLoc = imgLoc;
	document.write("<a href='javascript:openCalendar()'>"+htm+"</a>");
	if(navigator.appName == "Microsoft Internet Explorer")
		document.write("<iframe id='cal_cov' style='position:absolute; left:"+xpos+"px; top:"+ypos+"px; width:151px; height:199px; border-style:none;visibility:hidden;z-index:9999;'></iframe>");
	document.write("<div id='cal_obj' style='background-color:#000000; position:absolute; left:"+xpos+"px; top:"+ypos+"px; width:151px; height:209px;visibility:hidden; z-index: 9999;'><table cellpadding='0' cellspacing='0' style='position:absolute;top:2px;left:2px;width:147px; height:204px; background-color:#FFFFFF;font-family:arial; font-size:8.5pt;'><tr><td id='cal_bak' style='vertical-align:middle;text-align:center;width:21px;height: 11px;background-color:"+bgcolor+";'></td><td id='cal_title' style='vertical-align:middle;text-align:center;height: 11px;background-color:"+bgcolor+";font-weight:bold;color:#FFFFFF;font-size:7.5pt;font-family:arial;' colspan='5'>month name</td><td id='cal_fow' style='vertical-align:middle;text-align:center;width:11px;height: 16px;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:7px; font-size: 6.5pt;'>"+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: 12px; text-align:center;font-weight:bold;' id='calcell"+(i+(j*7))+"'></td>");
		document.write("</tr>");
	}
	document.write("<tr><td colspan='7' style='margin: 0; padding: 0; line-height: 10px; height:10px;text-align:center;vertical-align:middle; font-size: 6.5pt;'><a href='javascript:closeCalendar()' style='color:"+bgcolor+";'>"+cal_closecalendar+"</a></td></tr></table></div>");
}

function openCalendar()
{
	if(!cal_open)
	{
		if(navigator.appName == "Microsoft Internet Explorer")
			document.getElementById('cal_cov').style.visibility='visible';
		document.getElementById('cal_obj').style.visibility='visible';
		cal_visDate = cal_cur;
		populateCalendar();
		cal_open = true;
	}
}

function closeCalendar()
{
	if(cal_open)
	{
		if(navigator.appName == "Microsoft Internet Explorer")
			document.getElementById('cal_cov').style.visibility='hidden';
		document.getElementById('cal_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)
{
	cal_cur.setMonth(cal_visDate.getMonth());
	cal_cur.setYear(cal_visDate.getFullYear());
	cal_cur.setDate(dt);
	setMonthContent();
	setDateContent(new Array(cal_cur.getDate(), cal_cur.getMonth(), cal_cur.getYear()));
	changeWeekday();
	closeCalendar();
}

function populateCalendar()
{
	var offset = new Date(cal_visDate.getFullYear(), cal_visDate.getMonth(), 1).getDay();
	//set start
	var start = 1;
	if((cal_visDate.getMonth() == cal_start[1]) && (cal_visDate.getFullYear() == cal_start[2]))
	{
		document.getElementById('cal_bak').innerHTML = '';
		start = cal_start[0];
	}
	else
		document.getElementById('cal_bak').innerHTML = "<a href='javascript:changeCalMonth(-1)'><img src='"+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() == cal_end[1]) && (cal_visDate.getFullYear() == cal_end[2]))
	{
		document.getElementById('cal_fow').innerHTML = '';
		end = cal_end[0];
	}
	else
		document.getElementById('cal_fow').innerHTML = "<a href='javascript:changeCalMonth(1)'><img src='"+cal_imgLoc+"forward_arrow.gif' border='0' /></a>";
	end+=offset-1;
	document.getElementById('cal_title').innerHTML = cal_monthNames[cal_visDate.getMonth()] + " " + cal_visDate.getFullYear();
	for(var i = 0; i < 42; i++)
	{
		if((i < offset)||(i > realEnd))
		{
			document.getElementById('calcell'+i).innerHTML = "";
			document.getElementById("calcell"+i).style.backgroundImage = "";
		}
		else if((i < start) || (i > end))
		{
			document.getElementById("calcell"+i).innerHTML = (i-offset+1);
			document.getElementById("calcell"+i).style.backgroundImage = "url('"+cal_imgLoc+"closed.gif')";
			document.getElementById("calcell"+i).style.backgroundRepeat = "no-repeat";
			document.getElementById("calcell"+i).style.backgroundPosition = "center center";
		}
		else
		{
			document.getElementById('calcell'+i).innerHTML = "<a style='color:#000000;text-decoration:none;' href='javascript:setDate("+(i-offset+1)+")'>"+(i-offset+1)+"</a>";
			document.getElementById("calcell"+i).style.backgroundImage = "";
		}
	}
}

function changeWeekday()
{
	if(cal_weekday != null)
		cal_weekday.innerHTML = cal_dayNames[cal_cur.getDay()];
}

function changeNoNites()
{
	var d = new Date(cal_end[2],cal_end[1],cal_end[0]);
	var dt = d.getDate() + cal_nonites - (cal_nites.selectedIndex+1);
	d.setDate(dt);
	cal_nonites = cal_nites.selectedIndex+1;
	cal_end[0] = d.getDate();
	cal_end[1] = d.getMonth();
	cal_end[2] = d.getFullYear();
	if(d < cal_cur)
		cal_cur = d;
	setMonthContent();
	changeMonth();
}

function changeDate()
{
	var calToSplit = cal_month.value
	var calMonthSplit, calYearSplit;

	calMonthSplit  = parseInt(calToSplit.substring(5) - 1);
	calYearSplit = calToSplit.substring(0,4);
/*	
	if (calToSplit.length == 7)
	{
		calMonthSplit  = parseInt(calToSplit.substring(0, 2) - 1);
		calYearSplit = calToSplit.substring(3);
	} else {
		calMonthSplit  = parseInt(calToSplit.substring(0, 1) - 1);
		calYearSplit = calToSplit.substring(2);
	}
*/

	cal_cur = new Date(calYearSplit, calMonthSplit, cal_date.value);
	changeWeekday();
}

function setMonthContent()
{
	var im = cal_start[1];
	var iy = cal_start[2];
	var opt = cal_month.options;
	opt.length = 0; // reset object
	while(iy < cal_end[2])
	{
		for(var i = im; i < 12; i++)
			opt[opt.length] = new Option(cal_monthNames[i]+" "+ iy.toString().substring(2), iy+"/"+(i+1));
		im = 0;
		iy++;
	}
	for(var i = im; i <= cal_end[1]; i++)
		opt[opt.length] = new Option(cal_monthNames[i]+" "+ iy.toString().substring(2), iy+"/"+(i+1));
	cal_month.selectedIndex = cal_cur.getMonth()-cal_start[1]+((cal_cur.getFullYear()-cal_start[2])*12);
}

/** Set the content of the date object and the selected index */
function setDateContent(cur)
{
	var strt = 1;
	var end;
	if((cur[1] == cal_start[1]) && (cur[2] == cal_start[2]))
		strt = cal_start[0];
	if((cur[1] == cal_end[1]) && (cur[2] == cal_end[2]))
		end = cal_end[0];
	else
	{
		if((cur[1] == 1) && (cur[2]%4 == 0))
			end = 29;
		else
			end = cal_months[cur[1]];
	}
	var opt = 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;
	cal_date.selectedIndex = cur[0]-strt;
}

function changeMonth()
{
	var mon = cal_month.value;
	var yr;
	if(mon.charAt(4) == '/')
	{
		yr = parseInt(mon.substring(0,4));
		mon = parseInt(mon.substring(5));
	}

	mon--;
	setDateContent(new Array(cal_cur.getDate(), mon, yr));
	changeDate();
}

