/**
 * DateSelector for date selecting in advanced searches
 *
 * @version $Id: DateSelector.js,v 1.11 2008/01/23 17:26:32 mgabor Exp $
 * requires common.js
 *
 */
function DateSelector() {
	this.checkDate = checkDate;
	this.getDateString = getDateString;
	this.updateDate = updateDate;
	this.setAlertMsg = setAlertMsg;
	this.setFormName = setFormName;
	this.setDateValuesFrom = setDateValuesFrom;
	this.setDateValuesTo = setDateValuesTo;
	var alertMsg = "DATE_ERROR";
	var START_YEAR = 2000;
	var QueryString = null;
	var formname = "searchform";

	function checkDate() {
		// Get from date
		fromyear = document.forms[formname].startdate_yearfrom.value;
		frommonth = document.forms[formname].startdate_monthfrom.value;
		fromday = document.forms[formname].startdate_dayfrom.value;
		toyear = document.forms[formname].startdate_yearto.value;
		tomonth = document.forms[formname].startdate_monthto.value;
		today = document.forms[formname].startdate_dayto.value;
		var fDate = null, tDate = null;
		if( fromyear != '' && frommonth != '' && fromday != '') {
			fDate = new Date();
			fDate.setTime(Date.parse(fromyear+'/'+frommonth+'/'+fromday));
		}
		if( toyear != '' && tomonth != '' && today != '') {
			tDate = new Date();
			tDate.setTime(Date.parse(toyear+'/'+tomonth+'/'+today));
		}
		if( fDate != null && tDate != null ) {
			if( tDate < fDate ) { alert(alertMsg); }
		}
	}//end of checkDate

	/**
	 * Visszaadja a modositashoz szukseges elemeket
	 */
	function getElements(whichElement) {
		// Get elements of modification
		var m = {"yearlm":null,"monthlm":null,"daylm":null};
		if( whichElement == "from" ) {
			m['yearlm'] = document.forms[formname].startdate_yearfrom;
			m['monthlm'] = document.forms[formname].startdate_monthfrom;
			m['daylm'] = document.forms[formname].startdate_dayfrom;
		}else
		if( whichElement == "to" ) {
			m['yearlm'] = document.forms[formname].startdate_yearto;
			m['monthlm'] = document.forms[formname].startdate_monthto;
			m['daylm'] = document.forms[formname].startdate_dayto;
		}else
		{
			return null;
		}
		return m;
	}//end of getElements

	function createYears(from, to, element) {
		element.options[0] = new Option("-");
		for (var i=1,j=to; j >= from ; i++, j--) {
			var y= String(j);
			element.options[i] = new Option(y,y);			
		}
		return element;
	}//end of createYears

	function getDateString(whichElement) {
		today = new Date();
		// Get elements of modification
		var elements = getElements(whichElement);
		if( elements == null ) { return; }
		var yearlm = elements['yearlm'];
		var monthlm = elements['monthlm'];
		var daylm = elements['daylm'];
		var y = yearlm.value;
		var m = monthlm.value;
		var d = daylm.value;
		if( y == "" || y == "-" ) { y = today.getFullYear(); }
		if( m == "" || m == "-" ) { m = today.getMonth()+1; }
		if (d == "" || d == "-" ) { d = today.getDate(); }
		return str= y+'-'+m+'-'+d;
	}//end of getDateString
	
	function isToday(datepart, type) {
		if( datepart == undefined || datepart == null ) { return false; }
		var today = new Date();
		var tyear = today.getFullYear();
		var tmonth = today.getMonth();
		var tday = today.getDate();
		
		if( type == 'year' && datepart == tyear ) {
			return true;
		}else
		if( type == 'month' && datepart == tmonth ) {
			return true;
		}else
		if( type == 'day' && datepart == tday ) {
			return true;
		}
		return false;
	}//end of isToday
	
	/**
	 * private String[] parseDate(Date pdate)
	 * A dátum átalakítása asszociatív szövegtömbbé, amelyben nap mélységig
	 * szerepelnek az elemek.
	 */
	function parseDate(pdate) {
		var elements = new Array();
		// Get values of date elements
		elements['year'] = pdate.getFullYear();
		elements['month'] = pdate.getMonth()+1;
		elements['day'] = pdate.getDate();
		return elements;
	}
	
	function setAlertMsg(message) {
		alertMsg = message;
	}//end of setAlertMsg
	
	function setFormName(formNameToSet) {
    formname = formNameToSet;
	}//end of setFormName
	
	/**
	 * private void setDate(String whichElement, String[] datum)
	 * Beállítja egy elem (from,to) dátumát vagy annak egy részletét
	 * 
	 * A datum egy asszociatív tömb, amely year, month, day elemeket tartalmaz.
	 * Ha az elemek közül valamelyik üres, abban az esetben az adott elem
	 * (természetesen) az alapértelmezett értéken marad.
	 */
	function setDate(whichElement, datum) {
		// Get elements of modification
		var elements = getElements(whichElement);
		if( elements == null ) { return; }
		var yearlm = elements['yearlm'];
		var monthlm = elements['monthlm'];
		var daylm = elements['daylm'];
//		console.log(datum);
		// Set year
		for( i = 0; i < yearlm.options.length; i++ ) {
			if( datum['year'] != '' && yearlm.options[i].value == datum['year'] ) {
				yearlm.options[i].selected = true;
			}
		}
		// Set month
		for( i = 0; i < monthlm.options.length; i++ ) {
			if( datum['month'] != '' && monthlm.options[i].value == datum['month'] ) {
				monthlm.options[i].selected = true;
			}
		}
		// Update days
		var daycount = 31;
		if( monthlm.options[2].selected ) {
			if( parseInt(yearlm.options[yearlm.selectedIndex].text)%4==0){
			    daycount = 29
			}else{
			    daycount=28;
			}
		}else
		if( monthlm.options[4].selected || monthlm.options[6].selected || monthlm.options[9].selected || monthlm.options[11].selected ) {
			daycount = 30;
		}else
		{
			daycount = 31;
		}
		// Clear days
		for( i=0; i <= 31; i++ ) {
			daylm.options[i]=null;
		}
		// Set up days
		daylm.options[0] = new Option('-','');
		for( i=1; i <= daycount; i++) {
			var x= i<10?String('0'+i):String(i);
			daylm.options[i] = new Option(x,x);
		}
		// Set day
		if( datum['day'] != '' ) {
			for( i = 0; i < daylm.options.length; i++ ) {
				if( datum['day'] != '' && daylm.options[i].value == datum['day'] ) {
					daylm.options[i].selected = true;
				}
			}
		}
		checkDate();
	}//end of setDate
	
	function setDateValuesFrom(year, month, day) {
		fDate = new Date();
		fDateString = year+'/'+day+'/'+month;
		fDate.setTime(Date.parse(fDateString));
		setDate('from',parseDate(fDate));
	}//end of setDateValuesFrom
	
	function setDateValuesTo(year, month, day) {
		tDate = new Date();
		tDateString = year+'/'+day+'/'+month;
		tDate.setTime(Date.parse(tDateString));		
		setDate('to',parseDate(tDate));
	}//end of setDateValuesFrom
	
	/**
	 * A datummezok frissitese
	 * Parameterkent meg kell adni hogy a from vagy a to mezoket kivanjuk
	 * frissiteni, valamint a metodust, amely lehet init, initWithToday.
	 */
	function updateDate(whichElement, method) {
		// Get elements of modification
		var elements = getElements(whichElement);
		if( elements == null ) { return; }
		var yearlm = elements['yearlm'];
		var monthlm = elements['monthlm'];
		var daylm = elements['daylm'];
		// Set up years
		if( method == 'init' ) {
//			console.log(whichElement);
			var d = new Date();
			yearlm = createYears(START_YEAR,d.getFullYear(),yearlm);
		}
		// Set up month
		// Generation not required, because it is a language dependent array
		// Get day of month
		var daycount = 31;
		if( monthlm.options[2].selected ) {
			if( parseInt(yearlm.options[yearlm.selectedIndex].text)%4==0){
			    daycount = 29
			}else{
			    daycount=28;
			}
		}else
		if( monthlm.options[4].selected || monthlm.options[6].selected || monthlm.options[9].selected || monthlm.options[11].selected ) {
			daycount = 30;
		}
		// Clear days
		for( i=0; i <= 31; i++ ) {
			daylm.options[i]=null;
		}
		// Set up days
		daylm.options[0] = new Option('-','');
		for( i=1; i <= daycount; i++) {
			var x= i<10?String('0'+i):String(i);
			daylm.options[i] = new Option(x,x);
		}
		// Set specialities
		if( method == 'initWithToday' ) {
			today = new Date();
			createYears(START_YEAR,today.getFullYear(),yearlm);
			setDate(whichElement, parseDate(today));
		}else
		if( method == 'init' ) {
			setPreviousValues();
		}
	}//end of updateDate
	
	/**
	 * A korabbi ertekeket tartalmazo objektum inicializalasa
	 */
	function setPreviousValues() {
		// Check querystring (via JS - common.js:parseQueryString(location:search))
		if( QueryString == null ) {
			if( location.search == "" ) {
				QueryString = null; return;
			}else
			{
				QueryString = parseQueryString(location.search);
			}
		}
		if( QueryString == null ) { return;	}
		var dv = {'from':{'year':'','month':'','day':''},'to':{'year':'','month':'','day':''}};
		if( QueryString.startdate_yearfrom != undefined ) { dv['from']['year'] = QueryString.startdate_yearfrom; }
		if( QueryString.startdate_monthfrom != undefined ) { dv['from']['month'] = QueryString.startdate_monthfrom; }
		if( QueryString.startdate_dayfrom != undefined ) { dv['from']['day'] = QueryString.startdate_dayfrom; }
		if( QueryString.startdate_yearto != undefined ) { dv['to']['year'] = QueryString.startdate_yearto; }
		if( QueryString.startdate_monthto != undefined ) { dv['to']['month'] = QueryString.startdate_monthto; }
		if( QueryString.startdate_dayto != undefined ) { dv['to']['day'] = QueryString.startdate_dayto; }
		setDate('from',dv['from']);
		setDate('to',dv['to']);
	}//end of setPreviousValues
}