var luxairCar=new Object();

/* //////////////////////////
* VALIDATE METHODS
////////////////////////// */

/*
* validate the form
*/
luxairCar.checkForm=function(event){
	var errors = [];
	var functions = [
		'Check'
	];
	
	//add the events to the form elements
	var functionName = "";
	var prefix="";
	for(var i=0; i< luxairCar.form.elements.length; i++){
		//define the name of the element
		var begin = luxairCar.form.elements[i].id.lastIndexOf(':');
		if(begin!=-1){
			//call standard functions
			for(var j=0; j<functions.length; j++){
				prefix =  luxairCar.form.elements[i].id.substr(begin+1);		
				functionName = prefix + functions[j];
				if(luxairCar[functionName] != null){
					//call the function
					var error = luxairCar[functionName](prefix);
					if(error!=""){
						errors[errors.length] = error;  
					}
				}
			}
		}
	}	
	
	if(errors.length>0){
		var errMsg='';
		for(var i=0; i<errors.length; i++){
			errMsg+=errors[i]+'\n';
		}
		return(errMsg); 
	}
	return ''; 
}

/*
* validate country
*/
luxairCar.countryCheck=function(elemKey){

	if(luxairCar.checkMandatory(luxairCar.getElementId(elemKey)) || $F(luxairCar.getElementId(elemKey))==0){
		return search_country_mandatory;
	}
	return '';
}

/*
* validate rental office
*/
luxairCar.rentalOfficeCheck=function(elemKey){
	if(luxairCar.checkMandatory(luxairCar.getElementId(elemKey)) || $F(luxairCar.getElementId(elemKey))==0){
		return search_pickup_rental_office_mandatory;
	}
	return '';
}

/*
* validate return office
*/
luxairCar.returnOfficeCheck=function(elemKey){
	if(luxairCar.checkMandatory(luxairCar.getElementId(elemKey)) || $F(luxairCar.getElementId(elemKey))==0){
		return search_return_rental_office_mandatory;
	}
	return '';
}

/*
* validate car group
*/
luxairCar.carGroupCheck=function(elemKey){
	if(luxairCar.checkMandatory(luxairCar.getElementId(elemKey))){
		return search_car_group_mandatory;
	}
	return '';
}

/*
* validate start date
*/
luxairCar.startDateCheck=function(elemKey){
	if(luxairCar.checkMandatory(luxairCar.getElementId(elemKey))){
		return search_pickup_date_mandatory;
	}
	return '';
}

/*
* validate start time hour
*/
luxairCar.startTimeHourCheck=function(elemKey){
	if(luxairCar.checkMandatory(luxairCar.getElementId(elemKey))){
		return search_pickup_date_mandatory;
	}
	return '';
}

/*
* validate start time minute
*/
luxairCar.startTimeMinuteCheck=function(elemKey){
	if(luxairCar.checkMandatory(luxairCar.getElementId(elemKey))){
		return search_pickup_date_invalid;
	}
	return '';
}

/*
* validate end date
*/
luxairCar.endDateCheck=function(elemKey){
	if(luxairCar.checkMandatory(luxairCar.getElementId(elemKey))){
		return search_return_date_mandatory;
	}
	return '';
}

/*
* validate end time hour
*/
luxairCar.endTimeHourCheck=function(elemKey){
	if(luxairCar.checkMandatory(luxairCar.getElementId(elemKey))){
		return search_return_date_mandatory;
	}
	return '';
}

/*
* validate end time minute
*/
luxairCar.endTimeMinuteCheck=function(elemKey){
	if(luxairCar.checkMandatory(luxairCar.getElementId(elemKey))){
		return search_return_date_invalid;
	}
	return '';
}

/*
* validate age
*/
luxairCar.ageCheck=function(elemKey){
	if(luxairCar.checkMandatory(luxairCar.getElementId(elemKey))){
		return search_age_mandatory;
	}
	return '';
}

/* //////////////////////////
* INIT METHODS
////////////////////////// */

/*
* init form
*/
luxairCar.initForm=function(){
//	luxairCar.initCountry();
	luxairCar.updateOffice();
	luxairCar.initHour();
	luxairCar.initMinute();
}

/*
* init country
*/
luxairCar.initCountry=function(){
	var language=$F(luxairCar.getElementId('lang'));
	CarManager.getCountryItems(language,{
		callback:function(data){
	    	 var itemId=luxairCar.getElementId('country');
	         luxairCar.fillSelectItem(data,itemId);
	         $(itemId).selectedIndex = 0;
		}
	});
}	

/*
* init hour
*/
luxairCar.initHour=function(){
	var language=$F(luxairCar.getElementId('lang'));
	CarManager.getHourItems(language,{
		callback:function(data){
			var itemId=luxairCar.getElementId('startTimeHour');
			luxairCar.fillSelectItem(data,itemId);
	         $(itemId).selectedIndex = 9;
			itemId=luxairCar.getElementId('endTimeHour');
			luxairCar.fillSelectItem(data,itemId);
	         $(itemId).selectedIndex = 9;
		}
	});
}

/*
* init minute
*/
luxairCar.initMinute=function(){
	var language=$F(luxairCar.getElementId('lang'));
	CarManager.getMinuteItems(language,{
		callback:function(data){
			var itemId=luxairCar.getElementId('startTimeMinute');
			luxairCar.fillSelectItem(data,itemId);
	         $(itemId).selectedIndex = 0;
			itemId=luxairCar.getElementId('endTimeMinute');
			luxairCar.fillSelectItem(data,itemId);
	         $(itemId).selectedIndex = 0;
		}
	});
}

/* //////////////////////////
* UPDATE METHODS
////////////////////////// */

/*
* event manager
*/
luxairCar.addElementEvents=function(){
    Event.observe(
        $('frmSearchCar'), 
        'click',
        luxairCar.searchLocation.bindAsEventListener(luxairCar)
    );
/*
	Event.observe(
	    $(luxairCar.getElementId('country')), 
	    'change',
	    luxairCar.updateOffice.bindAsEventListener(luxairCar)
    );
*/
	Event.observe(
	    $(luxairCar.getElementId('rentalOffice')), 
	    'change',
	    luxairCar.updateCarGroup.bindAsEventListener(luxairCar)
    );
}

/*
* update office
*/
luxairCar.updateOffice=function(){
	luxairCar.clearSelectBox(luxairCar.getElementId('rentalOffice'));
	luxairCar.clearSelectBox(luxairCar.getElementId('returnOffice'));
	luxairCar.clearSelectBox(luxairCar.getElementId('carGroup'));
	var countryVal=$F(luxairCar.getElementId('country'));
//	var countryVal='LUX';
	if(countryVal=='' || countryVal=='0' || countryVal=='null'){
		luxairCar.clearSelectBox(luxairCar.getElementId('rentalOffice'));
		luxairCar.clearSelectBox(luxairCar.getElementId('returnOffice'));
	}else{
		var language=$F(luxairCar.getElementId('lang'));
		CarManager.getOfficeItems(countryVal,language,{
			callback:function(data){
				var itemId=luxairCar.getElementId('rentalOffice');
				luxairCar.fillSelectItem(data,itemId);
				itemId=luxairCar.getElementId('returnOffice');
				luxairCar.fillSelectItem(data,itemId);
			}
		});
	}
}

/*
* update group
*/
luxairCar.updateCarGroup=function(event){
	// update return office
	$(luxairCar.getElementId('returnOffice')).selectedIndex = $(luxairCar.getElementId('rentalOffice')).selectedIndex;
	// update car group
	luxairCar.clearSelectBox(luxairCar.getElementId('carGroup'));
	var rentalOfficeVal=$F(luxairCar.getElementId('rentalOffice'));
	if(rentalOfficeVal=='' || rentalOfficeVal=='0' || rentalOfficeVal=='null'){
		luxairCar.clearSelectBox(luxairCar.getElementId('carGroup'));
	}else{
		var language=$F(luxairCar.getElementId('lang'));
		CarManager.getCarGroupItems(rentalOfficeVal,language,{
			callback:function(data){
				var itemId=luxairCar.getElementId('carGroup');
				luxairCar.fillSelectItem(data,itemId);
			}
		});
	}
}

/* //////////////////////////
* SEARCH METHODS
////////////////////////// */

/*
* search car
*/ 
luxairCar.searchLocation=function(event,title){
	var errMsg = luxairCar.checkForm();
	if(errMsg!=''){
		alert(errMsg);
	}else{
		//check age with CarManager
		var language=$F(luxairCar.getElementId('lang'));
		var locationId=$F(luxairCar.getElementId('rentalOffice'));
		var age=$F(luxairCar.getElementId('age'));
		var carGroup=$F(luxairCar.getElementId('carGroup'));
		CarManager.checkDriverAge(language,locationId,age,carGroup,{
			callback:function(data){
		    	if(data){
		    		luxairCar.formSubmit();	
		    	}else{
		    		alert(error_age_minimum);
		    	}
			}
		});
	}
}

/* //////////////////////////
* UTILITY METHODS
////////////////////////// */

/*
* submit form
*/
luxairCar.formSubmit=function(){
	luxairCar.form.submit();
}

/*
* fill drop down
* @param data the drop down data
* @param id the drop down id
*/ 
luxairCar.fillSelectItem=function(data,id){
	//luxairCar.addEmptyOption(id);
    for(var i=0;i<data.length; i++){
        var objOption = document.createElement("option");
        objOption.value=data[i].value;
        objOption.text=data[i].label;
        $(id).options.add(objOption);
    }
}

/*
* clear drop down
* @param id the drop down id
*/
luxairCar.clearSelectBox=function(id){
	var htmlElement=$(id);
    for(i=htmlElement.options.length-1;i>=0;i--){
       htmlElement.remove(i);
    }
}

/*
* check for mandatory fields
* @param id the element id
*/
luxairCar.checkMandatory=function(id) {
	if($(id) == null || $F(id)=='null' || $F(id)==''){
		return true;
	}else{
		return false;
	}
}

/*
* Set form id
*/
luxairCar.setFormId=function(formId){
	luxairCar.formId = formId;
}

/*
* Get form id
*/
luxairCar.getFormId=function(){
	return luxairCar.formId;
}

/*
* Get elementID
* @param elemKey the key
*/
luxairCar.getElementId=function(elemKey){
    return luxairCar.getFormId() + ':' + elemKey; 
}

/* //////////////////////////
* MAIN
////////////////////////// */
/*
window.onload=function(){
	DWREngine.setMethod(DWREngine.ScriptTag);
	CarManager._path = _path+"/dwr";
	luxairCar.setFormId(_formID);
	luxairCar.form=$(luxairCar.getFormId());
	luxairCar.initForm();
	luxairCar.addElementEvents();
}
*/