/**
 * Functions that manage special date control handling.
 *
 * Author: Ivo Kotev
 */


/**
 * -------------------------------------------------------------------------
 *  Global variables
 * -------------------------------------------------------------------------
 */
 var IncorrectTEXT="";
 var IsLastDayConted = false;
 

/**
 * -------------------------------------------------------------------------
 *  General functions
 * -------------------------------------------------------------------------
 */


function Array_unshift() {
  var A_u = 0
  for (A_u = this.length-1; A_u >= 0; A_u--) {
   this[A_u + arguments.length] = this[A_u]
   }
  for (A_u = 0; A_u < arguments.length; A_u++) {
   this[A_u] = arguments[A_u]
   }
  return this.length
  }

function Array_pop() {
  var response = this[this.length - 1]
  this.length--
  return response
  }

if (typeof(Array.prototype.pop) == "undefined") {
  Array.prototype.pop = Array_pop
  }
if (typeof Array.prototype.unshift == "undefined") {
  Array.prototype.unshift = Array_unshift
  }


//+ kotev 19.01.2006
function ShowDayOfWeek(suffix)
{
	var theDay   = document.getElementById("Srch" + suffix + "Day").value;
	var theMonth = document.getElementById("Srch" + suffix + "Month").value;
	var theYear  = document.getElementById("Srch" + suffix + "Year").value;

	errshown=false;
	while(!checkdate(theDay, theMonth, theYear))
	{
		if (!errshown && IncorrectTEXT.length>0) { alert(IncorrectTEXT); errshown=true;}
		theDay = theDay - 1;
	}
	
	document.getElementById("Srch" + suffix + "Day").value = theDay;
	
	if(errshown)
	{
		var newDate = new Date()
		newDate.setFullYear( theYear, theMonth, theDay) 
		if (document.getElementById("Srch" + suffix + "Day").onchange )
		{
		  	document.getElementById("Srch" + suffix + "Day").onchange();
	  	}	
	}
	
	
	
	// The Date.getDay and Date.getUTCDay functions are dependent on the base language
	// of the operating system. Specifically, they work differently on a German and
	// a British Windows. The following code uses Zellers congruence instead.
	//var datum = new Date(y, m-1, d);
	//return tage[datum.getDay()];
	if (theMonth < 3)
	{
		theMonth = Number(theMonth) + 12;
		theYear = Number(theYear) - 1;
	}
	indexOfDay = (Number(theYear) + Math.floor(theYear / 4) - Math.floor(theYear / 100) + Math.floor(theYear / 400) + Math.floor(2.6 * Number(theMonth) + 1.6) + Number(theDay)) % 7;
	document.getElementById("dayOfWeek_" + suffix).innerHTML = daysOfWeek[indexOfDay];
}
//- kotev 19.01.2006

function SetDayOfWeekGroup(fromObj)
{
	switch(fromObj)
	{
		case "From":
			var theDays = document.getElementById("SrchDays").value;
			if(theDays =='') theDays = 1
			var datum = getFromDate();
			if(IsLastDayConted) theDays--;
			datum.setTime(datum.getTime()+ theDays*24*60*60*1000 + 60*60*1000);
			setToDate(datum);
			break;	
			
		case "To":
			var dFrom = getFromDate();
			var dTo = getToDate();			
			var resDays = (Math.ceil((dTo.getTime() - dFrom.getTime() - 60*60*1000 ) / (24*60*60*1000 )));
			if(IsLastDayConted) resDays++;
			if(resDays >= 0) 
			{
				document.getElementById("SrchDays").value = resDays;
			} else {
				var tempTo = new Date();
				tempTo.setFullYear(dTo.getFullYear(), dTo.getMonth(),dTo.getDate());
				tempTo.setMonth(tempTo.getMonth()+1);
				if(tempTo.getTime() < dFrom.getTime())
				{
				 	tempTo.setFullYear(dTo.getFullYear()+1,dTo.getMonth(),dTo.getDate())
				}				
				dTo = tempTo;
				setToDate(dTo);
				// Ticket #10855
				//resDays = (Math.ceil((dTo.getTime() - dFrom.getTime()) / (24*60*60*1000)));
				resDays = (Math.floor((dTo.getTime() - dFrom.getTime()) / (24*60*60*1000)));
				if(IsLastDayConted) resDays++;
				document.getElementById("SrchDays").value = resDays;
			}			
			break;
			
		case "day": 	
			var theDays = document.getElementById("SrchDays").value;
			if(theDays =='') theDays = 1			
			var datum = getFromDate();
			if(IsLastDayConted) theDays--;
			datum.setTime(datum.getTime()+ theDays*24*60*60*1000 + 60*60*1000);
			setToDate(datum);
			break;
	}

	ShowDayOfWeek("From");
	ShowDayOfWeek("To");
}

function SetDayOfWeekGroupExtended(fromObj)
{
	
	switch(fromObj)
	{
		case "From":
			var theDays = document.getElementById("SrchDays").value;
			if(theDays =='') theDays = 1
			var datum = getFromDate();
			datum.setTime(datum.getTime()+ theDays*24*60*60*1000 + 60*60*1000);
			if (getToDate() < datum) setToDate(datum);
			break;	
			
		case "To":
			var theDays = document.getElementById("SrchDays").value
			var dFrom = getFromDate();
			if(theDays =='') theDays = 1
			var datum = getToDate()
			//datum.setTime(datum.getTime() - theDays*24*60*60*1000 + 60*60*1000)
			datum.setTime(datum.getTime() + 60*60*1000)
			if (dFrom > datum) {
				//datum.setMonth(datum.getMonth()+1);
				//setToDate(datum);
				/*
				nowDate = new Date();
				if (datum.getYear() < nowDate.getYear()) datum.setFullYear(nowDate.getYear(),0,1);
				setFromDate(datum);
				*/
				var tempTo = new Date();
				tempTo.setFullYear(datum.getFullYear(), datum.getMonth(),datum.getDate());
				tempTo.setMonth(tempTo.getMonth()+1);
				if(tempTo.getTime() < dFrom.getTime())
				{
				 	tempTo.setFullYear(datum.getFullYear()+1,datum.getMonth(),datum.getDate())
				}
				datum = tempTo;
				setToDate(datum);
			}
			break;
			
		case "day": 	
			var theDays = document.getElementById("SrchDays").value;
			if(theDays =='') theDays = 1			
			var datum = getFromDate();
			datum.setTime(datum.getTime()+ theDays*24*60*60*1000 + 60*60*1000);
			if (getToDate() < datum) setToDate(datum);
			break;
	}

	ShowDayOfWeek("From");
	ShowDayOfWeek("To");
}

function setFromDate(datum)
{
	var maxday = new Date()
	maxday.setFullYear(maxday.getFullYear()+3,11,31)
	

	if (maxday < datum)
	{
		datum = maxday
		document.getElementById("SrchFromDay").value = datum.getDate()
		document.getElementById("SrchFromMonth").value = datum.getMonth()+1
		document.getElementById("SrchFromYear").value =datum.getFullYear()
		SetDayOfWeekGroup("From")
	} else {
		document.getElementById("SrchFromDay").value = datum.getDate()
		document.getElementById("SrchFromMonth").value = datum.getMonth()+1
		document.getElementById("SrchFromYear").value =datum.getFullYear()
	}
}

function getFromDate()
{
	var theDay = document.getElementById("SrchFromDay").value;
	var theMonth = document.getElementById("SrchFromMonth").value;
	var theYear = document.getElementById("SrchFromYear").value;
	var datum =  new Date(theYear, theMonth-1, theDay);
	var maxday = new Date()
	maxday.setFullYear(maxday.getFullYear()+3,11,31)
		if (maxday < datum)
		{
			datum = maxday
			setFromDate(datum);
		}
	return datum;
}

function setToDate(datum)
{
	var maxday = new Date()
	maxday.setFullYear(maxday.getFullYear()+3,11,31)
	maxday.setTime(maxday.getTime()+ 999*24*60*60*1000 )
	if (maxday < datum)
	{
		datum = maxday
	}
	document.getElementById("SrchToDay").value = datum.getDate()
	document.getElementById("SrchToMonth").value = datum.getMonth()+1
	document.getElementById("SrchToYear").value =datum.getFullYear()
}

function getToDate()
{
	var theDay = document.getElementById("SrchToDay").value;
	var theMonth = document.getElementById("SrchToMonth").value;
	var theYear = document.getElementById("SrchToYear").value
	var datum =  new Date(theYear, theMonth-1, theDay);
	var maxday = new Date()
		maxday.setFullYear(maxday.getFullYear()+3,11,31)
		maxday.setTime(maxday.getTime()+ 999*24*60*60*1000 )
		if (maxday < datum)
		{
			datum = maxday
			setToDate(datum);
		}
	return datum;
}


//+ Alex 09.06.06 - Checking if date is in the past on submit instead of changing it automatically
function validateDate(SDate)
{
	var valid = true;
	var Today = new Date();
	if (SDate.getFullYear() <= Today.getFullYear()) {
		if (SDate.getMonth() <= Today.getMonth()) {
			if (SDate.getDate() < Today.getDate()) {
				valid = false;
			} else {
				if (SDate.getMonth() < Today.getMonth()) {
					valid = false;
				}
			}
		} else {
			if (SDate.getFullYear() < Today.getFullYear()) {
				valid = false;
			}
		}
	}
	return valid;
}
