var FieldsMandatory = new Array();
FieldsMandatory["date-1"] = {"highlight":"#cc0000", "error_en": "Please enter a valid date.\n","error_de": "Bitte tragen Sie ein<br />g&uuml;ltiges Datum ein.\n","default": ""};
FieldsMandatory["date-2"] = {"highlight":"#cc0000", "error_en": "Please enter a valid date.\n","error_de": "Bitte tragen Sie ein<br />g&uuml;ltiges Datum ein.\n","default": ""};
var DateintervalCheck = {"highlight":"#cc0000", "error_en": "Please select<br />a valid timeperiod.\n","error_de": "Bitte w&auml;hlen Sie einen<br />g&uuml;ltigen Zeitraum.\n","default": ""};

function validate(form, messageDiv)
{
	var message = "";
    var status = true;
    
    for(var field in FieldsMandatory)
    {

    	if (field != 'each' && (typeof form.elements[field] != "undefined" && (field == 'date-1' || field == 'date-2')) 
    			&& !testDate(form.elements[field + '-dd'].value, form.elements[field + '-mm'].value, form.elements[field].value)
    	) 
    	{
    		errorColor = FieldsMandatory[field]['highlight']; 
    		form.elements[field].style.color = errorColor;
    		form.elements[field].style.borderColor = errorColor;
    		form.elements[field+"-dd"].style.color = errorColor;    		
    		form.elements[field+"-dd"].style.borderColor = errorColor;    		
    		form.elements[field+"-mm"].style.color = errorColor;    		
    		form.elements[field+"-mm"].style.borderColor = errorColor;    		

    		error = FieldsMandatory[field]['error_' + PAGE_LANG];
            if(message.indexOf(error) < 0)
                message += error;
    		
    		status = false;	
    	}
    }
    // check if given date interval ist not empty
    if(!message && typeof form.elements['date-1'] != "undefined" && typeof form.elements['date-2'] != "undefined")
    {
    	date_from =  new Date(form.elements['date-1'].value, form.elements['date-1-mm'].value, form.elements['date-1-dd'].value);
    	date_to =  new Date(form.elements['date-2'].value, form.elements['date-2-mm'].value, form.elements['date-2-dd'].value);
    	if (Date.parse(date_from) > Date.parse(date_to))
    	{
    		errorColor = DateintervalCheck['highlight'];
    		for(var i=1; i<= 2; i++)
    		{
    			form.elements["date-"+i].style.color = errorColor;
    			form.elements["date-"+i].style.borderColor = errorColor;
        		form.elements["date-"+i+"-dd"].style.color = errorColor;    		
        		form.elements["date-"+i+"-dd"].style.borderColor = errorColor;    		
        		form.elements["date-"+i+"-mm"].style.color = errorColor;    		
        		form.elements["date-"+i+"-mm"].style.borderColor = errorColor;
    		}
    		
    		message += DateintervalCheck['error_' + PAGE_LANG];
    		status = false;
    	}
    }
    
    if (message)
    {
        document.getElementById(messageDiv).innerHTML = message;
    }
    return status;
}

/**
 * testet die Benutzereingaben und korrigiert das Datum,
 * bei korrekter Eingabe, keine Änderung
 * param aForm Formularobjekt, welches die Felder day, month und year enthalten muss
 */    
function testDate(d, m, y){

    if( isNaN(parseInt(d, 10)) ||  isNaN(parseInt(m, 10)) || isNaN(parseInt(y, 10))
    		||  d < 0 || m < 0  || y < 0 || (d+m+y).indexOf('+') != -1){
    	return false;
    }
    
    if (d.length==0 || m.length==0 || y.length<4 ){
        return false;
    }
    
    m = parseInt(m, 10) - 1;
    
    var datum = new Date(y, m, d);
    if (datum.equals( y, m, d ) ) {
        return true;
    }
}

/**
 * Erweitert das Date-Objekt um eine Funktion, 
 * die ein Datum anhand von Jahr, Monat und Tag vergleichen kann.
 * @param y vierstellige Zahl
 * @param m Monat (von 0 an gezählt (Jan. = 0 .. Dez = 11))
 * @param d Tag
 */
Date.prototype.equals = function(y, m, d){
    var bOK = false;
    var _year;
    if(!this.getFullYear){
        _year = this.getYear() + 1900;
    } else {
        _year = this.getFullYear();
    }
    var _month = this.getMonth();
    var _day = this.getDate();
    
    return (_year == y && _month == m && _day == d);
}
