var debug = false;
var hidBox = 0;
function BC (id)
{
 return document.getElementById(id);
}

function OpenPopup(url,title, width, height) {
	var opts = 'status=1,height='+height+',width='+width+',resizeable=1,scrollbars=1';
	window.open (url,title,opts);
}

function ShowHideCalendar(req,el,hBox)
{

	HideObjects('',0);
	if(hBox == 1) {
		if(document.getElementById("search.children.value")) {
			document.getElementById("search.children.value").style.visibility='hidden';hidBox=1;
		}
	} else {
		hidBox=0;
	}

	if (req == 'close') CloseCalendar();
	else {

		var dt = new Date();
		var tdate = new Date();
		var xpos = findPosX(el);

		var ypos = findPosY(el);

		BC('cal').style.display = 'block';
		BC('cal').style.top = ypos +'px';
		BC('cal').style.left = xpos +'px';


		switch (req){
				case "f":
					dt = GetDate('f');
					
					break;

				case "t":
					dt = GetDate("t");
					
					break;
						
				default : break;
			}
			if (''+dt.getDate() == 'NaN') dt = tdate;

			writeCalendar(dt.getDate(),dt.getMonth()+1,dt.getFullYear(),req);

	}
 
}


function GetDate(t)
{
	var yy, mm, dd, fix;
	if (t == 'f')
	{
		
		dd = parseInt(BC('dsFrom').options[BC('dsFrom').selectedIndex].value);
		mm = parseInt(BC('dsFromMonthYearList').options[BC('dsFromMonthYearList').selectedIndex].value.split('-')[1]);
		yy = parseInt(BC('dsFromMonthYearList').options[BC('dsFromMonthYearList').selectedIndex].value.split('-')[0]);
	}
	else if(t=='t')
	{
		dd = parseInt(BC('dsTo').options[BC('dsTo').selectedIndex].value);
		mm = parseInt(BC('dsToMonthYearList').options[BC('dsToMonthYearList').selectedIndex].value.split('-')[1]);
		yy = parseInt(BC('dsToMonthYearList').options[BC('dsToMonthYearList').selectedIndex].value.split('-')[0]);
	}
	return new Date(yy, mm-1, dd);
}


function writeCalendar(d,m,y,t)
{
	var target = t;
	var renderObj = document.getElementById('calBody');
	if (renderObj.hasChildNodes)
	{
		while (renderObj.hasChildNodes()) {renderObj.removeChild(renderObj.firstChild);}
	}

	var days = new Array();
	var rawdays = new Array();
	var baseDate = new Date(y,m-1,1);
	var dow = baseDate.getDay();
	var maxDays = new Date(y,m,0).getDate();
	for (var ctr = 0; ctr < maxDays; ctr++)
	{
		rawdays.push(new Date(y,m-1,ctr+1));
	}
	var fday = rawdays[0].getDay();
	var lday = fday + maxDays-1;
	var dctr = 0;
	var start = (fday == 0) ? -6:1;
	var stop = (fday ==0)? 36:43;
	for (var ctr= start; ctr< stop;ctr++)
	{
		if (ctr < fday || ctr > lday) days.push(CreateDay(0,0,0,''));
		else {
			days.push(CreateDay(rawdays[dctr].getFullYear(),rawdays[dctr].getMonth()+1,rawdays[dctr].getDate(),target));
			dctr++;
		}		
	}
	for (var i = 0; i < days.length;)
	{
		var r = document.createElement('tr');
		if (i>7 && days[i].innerHTML == '&nbsp;') break;
		for (var x = 0; x<7; x++)
		{
			r.appendChild(days[i++])
		}
		renderObj.appendChild(r);
	}



	BC('showD').innerHTML = '<a href="javascript:writeCalendar(1,' + (parseInt(m)-1) + ','+y+',\''+t+'\')">&lt;&lt;</a> '+  monthNames[baseDate.getMonth()] + ' ' + baseDate.getFullYear();


	BC('showD').innerHTML += ' <a href="javascript:writeCalendar(1,' + (parseInt(m)+1) + ','+y+',\''+t+'\')">&gt;&gt;</a>';

}

function HideObjects(obs,a)
{
	var state = 'visible';
	if (hideObjs.length >0)
	{
		for (var i=0;i<hideObjs.length;i++)
		{ 
			if (hideObjs[i] != '')
			{
				if(hideObjs[i] == 'flcal2' && document.getElementById("TYPEO").checked == true)
				{
					// do nothing
				}
				else
				{
					BC(hideObjs[i]).style.visibility = state;
				}
			}
		}
		hideObjs = new Array()
	}
	if (a < 1)
	{
		state = 'hidden';
		if (obs.indexOf('|') != -1) hideObjs = obs.split('|');
		else hideObjs[0] = obs;
	}
	for (var i=0;i<hideObjs.length;i++)
	{
		if (hideObjs[i] != '') BC(hideObjs[i]).style.visibility = state;
	}
}

function CloseCalendar()
{
	BC('cal').style.display = 'none';
	HideObjects('',0);
	if(hidBox == 1) {document.getElementById("search.children.value").style.visibility='visible';hidBox="";}
}

function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function CreateDay(y,m,d,t)
{
	var today = new Date();
	var c = document.createElement('td');
	if (y == 0 && m == 0) c.innerHTML = '&nbsp;';
	else if (y < today.getFullYear() || 	(y == today.getFullYear() && m-1 < today.getMonth()) || 	(y == today.getFullYear() && m-1 == today.getMonth() && d < today.getDate())	) {
		c.style.textDecoration = 'line-through';
		c.innerHTML = d;
	} else {
		c.innerHTML = '<a href="javascript:SetDates('+y+','+m+','+d+',\''+t+'\')">' + d +'<\/a>'
	}
	return c;
}
function SetDates(iy,im,d,t)
{

	var mode = 0;
	var dt = new Date(iy,im-1,d);
//	var retdate = 'false';
//	if(t=='r') retdate = 'true';
	CloseCalendar();
	
	var dval = d;
	if (im < 10) im = '0'+im;
	var myval = iy + '' + im;
	var dobj = 'dsFrom';
	var mobj = 'dsFromMonthYearList';
	if (t == 't') {
		dobj = 'dsTo';
		mobj = 'dsToMonthYearList';
	}

	var max_days = _getMaxDays(im,iy);
	var dobj_container = dobj + '.container';
	BC(dobj_container).innerHTML = _createDaysListInnerHTML(BC(dobj), BC(dobj).name, max_days);
	
	for (var i = 0; i < BC(dobj).options.length; i++) {
		if (BC(dobj).options[i].value == dval) {
	 		BC(dobj).selectedIndex = i;
	 	}
	}
	
	for (var i = 0; i < BC(mobj).options.length; i++) {
		if (BC(mobj).options[i].value == myval) {
	 		BC(mobj).selectedIndex = i;
	 	}
	}
	
}


function updateDaysMY(dayList,monthList,yearList) {
	var container = dayList + ".container";
	if(debug) alert('updateDaysMY::BC(monthList): ' + BC(monthList));
	if(debug) alert('updateDaysMY::BC(yearList): ' + BC(yearList));
	if(debug) alert('updateDaysMY::BC(dayList): ' + BC(dayList));

	var day = BC(dayList).value;
	if(debug) alert('updateDaysMY::day: ' + day);
	var month = BC(monthList).value;
	if(debug) alert('updateDaysMY::month: ' + month);
	var year = BC(yearList).value;
	if(debug) alert('updateDaysMY::year: ' + year);
	_updateDays(container, dayList, day, month, year);
}


function updateDays(dayList,monthYearList) {
	var container = dayList + ".container";
	if(debug) alert('updateDays::BC(dayList): ' + BC(dayList));
	if(debug) alert('updateDays::BC(monthYearList): ' + BC(monthYearList));

	var day = BC(dayList).value;
	var monthYear = BC(monthYearList).value;
	if(debug) alert('updateDays::monthYear: ' + monthYear);
	var month = monthYear % 100;
	if(debug) alert('updateDays::month: ' + month);
	var year = parseInt(monthYear / 100);
	if(debug) alert('updateDays::year: ' + year);
	_updateDays(container, dayList, day, month, year);
}


function _createDaysListInnerHTML(selectObj,selectName,max_days,selectedDay) {
	if(debug) alert("_createDaysListInnerHTML::select="+ selectObj +" select.id=" + selectObj.id);
	var select = "<select id=\"" + selectObj.id + "\" name=\"" + selectName + "\">";
	var options = "";
	for (var i=1; i<=max_days; i++) {
		options = options + "<option value=\"" + i + "\"";
		if ((selectedDay == undefined && i==1) || selectedDay==i) {
			options = options + " selected";
		}
		options = options + ">" + i + "<\/option>\n";
	}
	select += options + "</select>";
	if(debug) alert('_createDaysListInnerHTML::select: ' + select);
	return select;
}

function _updateDays(container,dayList, day, month, year) {
	if(debug) alert('_updateDays::day= ' + day + ' month=' + month + ' year=' + year);
	var max_days = _getMaxDays(month,year);
	//Write the options to the days select field
	if(debug) alert('_updateDays::max_days: ' + max_days);
	if(debug) alert('_updateDays::BC(dayList): ' + BC(dayList));
	if(debug) alert('_updateDays::BC(container).innerHTML (1): ' + BC(container).innerHTML);
	BC(container).innerHTML = _createDaysListInnerHTML(BC(dayList), BC(dayList).name, max_days, day);
	if(debug) alert('_updateDays::BC(container).innerHTML (2): ' + BC(container).innerHTML);
}

function _getMaxDays(month, year) {
	if(debug) alert("_getMaxDays::month=" + month + " year=" + year);
	var is_leapyear;
	if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
		return 31;
	} else if (month == 2) {
		//Determine if this is a leap year
		if(year%4 == 0){
			if(year%100 != 0) {
				is_leapyear = true;
			} else {
				if(year%400 == 0) {
					is_leapyear = true;
				} else {
					is_leapyear = false;
				}
			}
		} else {
			is_leapyear = false;
		}
		if (is_leapyear) {
			return 29;
		} else {
			return 28;
		}
	} else {
		return 30;
	}
}




function ShowHideCalendar2(el,form,dayField,monthField,yearField,forwardDatesEnabled)
{
	HideObjects('',0);


	//if (req == 'close') CloseCalendar();
	//else {

		var dt = new Date();
		var tdate = new Date();
		var xpos = findPosX(el);

		var ypos = findPosY(el);

		BC('cal').style.display = 'block';
		BC('cal').style.top = ypos +'px';
		BC('cal').style.left = xpos +'px';

		dt = GetDate2(form,dayField,monthField,yearField);
		if (''+dt.getDate() == 'NaN') dt = tdate;
		writeCalendar2(dt.getDate(),dt.getMonth()+1,dt.getFullYear(),form,dayField,monthField,yearField,forwardDatesEnabled);

	//}
}


function GetDate2(form,dayField,monthField,yearField)
{
	var yy, mm, dd, fix;
	var dayCombo = document.forms[form][dayField];
	var monthCombo = document.forms[form][monthField];
	var yearCombo = document.forms[form][yearField];
	dd = parseInt(dayCombo.value);
	mm = parseInt(monthCombo.value);
	yy = parseInt(yearCombo.value);
	return new Date(yy, mm-1, dd);
}


function writeCalendar2(d,m,y,form,dayField,monthField,yearField,forwardDatesEnabled)
{
	var renderObj = document.getElementById('calBody');
	if (renderObj.hasChildNodes)
	{
		while (renderObj.hasChildNodes()) {renderObj.removeChild(renderObj.firstChild);}
	}

	var days = new Array();
	var rawdays = new Array();
	var baseDate = new Date(y,m-1,1);
	var dow = baseDate.getDay();
	var maxDays = new Date(y,m,0).getDate();
	for (var ctr = 0; ctr < maxDays; ctr++)
	{
		rawdays.push(new Date(y,m-1,ctr+1));
	}
	var fday = rawdays[0].getDay();
	var lday = fday + maxDays-1;
	var dctr = 0;
	var start = (fday == 0) ? -6:1;
	var stop = (fday ==0)? 36:43;
	for (var ctr= start; ctr< stop;ctr++)
	{
		if (ctr < fday || ctr > lday) days.push(CreateDay(0,0,0,''));
		else {
			days.push(CreateDay2(rawdays[dctr].getFullYear(),rawdays[dctr].getMonth()+1,rawdays[dctr].getDate(),form,dayField,monthField,yearField,forwardDatesEnabled));
			dctr++;
		}		
	}
	for (var i = 0; i < days.length;)
	{
		var r = document.createElement('tr');
		if (i>7 && days[i].innerHTML == '&nbsp;') break;
		for (var x = 0; x<7; x++)
		{
			r.appendChild(days[i++])
		}
		renderObj.appendChild(r);
	}

	BC('showD').innerHTML = '<a href="javascript:writeCalendar2(1,' + (parseInt(m)-1) + ','+y+',\''+form+'\',\''+dayField+'\',\''+monthField+'\',\''+yearField+'\','+forwardDatesEnabled+')">&lt;&lt;</a> '+  monthNames[baseDate.getMonth()] + ' ' + baseDate.getFullYear();
	BC('showD').innerHTML += ' <a href="javascript:writeCalendar2(1,' + (parseInt(m)+1) + ','+y+',\''+form+'\',\''+dayField+'\',\''+monthField+'\',\''+yearField+'\','+forwardDatesEnabled+')">&gt;&gt;</a>';

}


function CreateDay2(y,m,d,form,dayField,monthField,yearField,forwardDatesEnabled)
{
	var today = new Date();
	var c = document.createElement('td');
	if (y == 0 && m == 0) c.innerHTML = '&nbsp;';
	else {
		if(!forwardDatesEnabled) { //enable dates before today, or after?
			if (y > today.getFullYear() || (y == today.getFullYear() && m-1 > today.getMonth()) || (y == today.getFullYear() && m-1 == today.getMonth() && d > today.getDate())) {
				c.style.textDecoration = 'line-through';
				c.innerHTML = d;
			} else {
				c.innerHTML = '<a href="javascript:SetDates2('+y+','+m+','+d+',\''+form+'\',\''+dayField+'\',\''+monthField+'\',\''+yearField+'\')">' + d +'<\/a>'
			}
		} else {
			if (y < today.getFullYear() || 	(y == today.getFullYear() && m-1 < today.getMonth()) || 	(y == today.getFullYear() && m-1 == today.getMonth() && d < today.getDate())	) {
				c.style.textDecoration = 'line-through';
				c.innerHTML = d;
			} else {
				c.innerHTML = '<a href="javascript:SetDates2('+y+','+m+','+d+',\''+form+'\',\''+dayField+'\',\''+monthField+'\',\''+yearField+'\')">' + d +'<\/a>'
			}
		}
	}
	return c;
}
function SetDates2(iy,im,d,form,dobj,mobj,yobj)
{
	var dayCombo = document.forms[form][dobj];
	var monthCombo = document.forms[form][mobj];
	var yearCombo = document.forms[form][yobj];
	
	CloseCalendar();
	
	var max_days = _getMaxDays(im,iy);
	var dobj_container = dobj + '.container';
	BC(dobj_container).innerHTML = _createDaysListInnerHTML(dayCombo, dayCombo.name, max_days, d);
	
	monthCombo.value = im;
	yearCombo.value = iy;
}
