var luxairFlight=new Object();

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

/*
* validate the form
*/
luxairFlight.checkForm=function(){
	var errors = [];
	var functions = [
		'Check'
	];
	
	//add the events to the form elements
	var functionName = "";
	var prefix="";
	for(var i=0; i< luxairFlight.form.elements.length; i++){
		//define the name of the element
		var begin = luxairFlight.form.elements[i].id.lastIndexOf(':');
		if(begin!=-1){
			//call standard functions
			for(var j=0; j<functions.length; j++){
				prefix =  luxairFlight.form.elements[i].id.substr(begin+1);		
				functionName = prefix + functions[j];
				if(luxairFlight[functionName] != null){
					//call the function
					var error = luxairFlight[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 origin
* @param elemKey the element id
*/
luxairFlight.originCheck=function(elemKey){
	if(!luxairFlight.checkMandatory(luxairFlight.getElementId(elemKey))){
		return flight_searchMask_origin_mandatory;
	}
	return '';
}

/*
* valide destination
* @param elemKey the element id
*/
luxairFlight.destinationCheck=function(elemKey){
	if(!luxairFlight.checkMandatory(luxairFlight.getElementId(elemKey))){
		return flight_searchMask_destination_mandatory;
	}
	return '';
}

/*
* validate departure date
* @param elemKey the element id
*/
luxairFlight.departureDateCheck=function(elemKey){
	var elementFullKey=luxairFlight.getElementId(elemKey);
	if(!luxairFlight.checkMandatory(elementFullKey)){
		return flight_searchMask_date_departure_mandatory;
	}
	return '';
}

/*
* validate return date
* @param elemKey the element id
*/
luxairFlight.returnDateCheck=function(elemKey){
	var elementFullKey=luxairFlight.getElementId(elemKey);
	if(!luxairFlight.checkMandatory(elementFullKey)){
		return flight_searchMask_date_return_mandatory;
	}
	return '';
}

/*
* validate travellers
* @param elemKey the element id
*/
luxairFlight.travellersCheck=function(elemKey){
	if(!luxairFlight.checkMandatory(luxairFlight.getElementId(elemKey))){
		return flight_searchMask_count_adults_mandatory;
	}
	return '';
}

/*
* validate children
* @param elemKey the element id
*/
luxairFlight.childrenCheck=function(elemKey){
	if(!luxairFlight.checkMandatory(luxairFlight.getElementId(elemKey))){
		return flight_searchMask_count_children_mandatory;
	}
	return '';
}

/*
* validate child 1 birthdate
* @param elemKey the element id
*/
luxairFlight.child1BirthdayCheck=function(elemKey){
	if(luxairFlight.getChildrenNumber()>=1){
		if(!luxairFlight.checkMandatory(luxairFlight.getElementId(elemKey))){
			return child_1_birthday_mandatory;
		}
	}
	return '';
}

/*
* validate child 2 birthdate
* @param elemKey the element id
*/
luxairFlight.child2BirthdayCheck=function(elemKey){
	if(luxairFlight.getChildrenNumber()>=2){
		if(!luxairFlight.checkMandatory(luxairFlight.getElementId(elemKey))){
			return child_2_birthday_mandatory;
		}
	}
	return '';
}

/*
* validate child 3 birthdate
* @param elemKey the element id
*/
luxairFlight.child3BirthdayCheck=function(elemKey){
	if(luxairFlight.getChildrenNumber()>=3){
		if(!luxairFlight.checkMandatory(luxairFlight.getElementId(elemKey))){
			return child_3_birthday_mandatory;
		}
	}
	return '';
}

/*
* validate child 4 birthdate
* @param elemKey the element id
*/
luxairFlight.child4BirthdayCheck=function(elemKey){
	if(luxairFlight.getChildrenNumber()>=4){
		if(!luxairFlight.checkMandatory(luxairFlight.getElementId(elemKey))){
			return child_4_birthday_mandatory;
		}
	}
	return '';
}

/*
* validate child 5 birthdate
* @param elemKey the element id
*/
luxairFlight.child5BirthdayCheck=function(elemKey){
	if(luxairFlight.getChildrenNumber()>=5){
		if(!luxairFlight.checkMandatory(luxairFlight.getElementId(elemKey))){
			return child_5_birthday_mandatory;
		}
	}
	return '';
}

/*
* validate lang
* @param elemKey the element id
*/
luxairFlight.langCheck=function(elemKey){
	if(!luxairFlight.checkMandatory(luxairFlight.getElementId(elemKey))){
		return 'Language is mandatory';
	}
	return '';
}

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

/*
* init form
*/
luxairFlight.initForm=function(){
	var language=$F(luxairFlight.getElementId('lang'));
	luxairFlight.initOrigins(language);
	luxairFlight.initDestinations(language);
	luxairFlight.initTraveler(language);
	luxairFlight.initChild(language);;
}

/*
* init origins
* @param language the language
*/
luxairFlight.initOrigins=function(language){
	FlightManager.getGroupedOriginItems(language,{
	     callback:function(data){
	    	 var itemId=luxairFlight.getElementId('origin');
			 luxairFlight.fillSelectItemGroup(data,itemId);
	         $(itemId).selectedIndex = 0;
	     }
	 });
}

/*
* init destinations
* @param language the language
*/
luxairFlight.initDestinations=function(language){
	FlightManager.getGroupedDestinationItems(language,{
	     callback:function(data){
	    	 var itemId=luxairFlight.getElementId('destination');
	         luxairFlight.fillSelectItemGroup(data,itemId);
	         $(itemId).selectedIndex = 0;
	     }
	 });
}

/*
* init traveler
* @param language the language
*/
luxairFlight.initTraveler=function(language){
	FlightManager.getTravelerItems(0,language,{
	     callback:function(data){
	    	 var itemId=luxairFlight.getElementId('travellers');
	         luxairFlight.fillSelectItem(data,itemId);
	         $(itemId).selectedIndex = 1;
	     }
	 });
}

/*
* init child
* @param language the language
*/
luxairFlight.initChild=function(language){
	FlightManager.getChildItems(2,language,{
	     callback:function(data){
	    	 var itemId=luxairFlight.getElementId('children');
	         luxairFlight.fillSelectItem(data,itemId);
	         $(itemId).selectedIndex = 0;
	     }
	 });
}

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

/*
* event manager
*/
luxairFlight.addElementEvents=function(){
	Event.observe(
        $('frmSearchFlight'), 
        'click',
        luxairFlight.searchLocation.bindAsEventListener(luxairFlight)
    );
	Event.observe(
	    $(luxairFlight.getElementId('travellers')), 
	    'change',
	    luxairFlight.updateTravelers.bindAsEventListener(luxairFlight)
    );
	Event.observe(
	    $(luxairFlight.getElementId('children')), 
	    'change',
	    luxairFlight.updateChildren.bindAsEventListener(luxairFlight)
    );
}

/*
* update traveler element
*/
luxairFlight.updateTravelers=function(event){	
	var travelerVal=luxairFlight.getTravelersNumber();
	var childVal=luxairFlight.getChildrenNumber();
	var language=$F(luxairFlight.getElementId('lang'));
	FlightManager.getChildItems(travelerVal,language,{
	     callback:function(data){
	    	 var itemId=luxairFlight.getElementId('children');
	         luxairFlight.fillSelectItem(data,itemId);
	         $(itemId).selectedIndex = childVal;	
	     }
	 });
}

/*
* update child element
*/
luxairFlight.updateChildren=function(event){
	var childVal=luxairFlight.getChildrenNumber();
	var travelerVal=luxairFlight.getTravelersNumber();
	for(var i=1;i<=childVal;i++){
		Element.show('labmSection1Child'+i);	
	}
	childVal++;
	for(var i=childVal;i<=5;i++){
		Element.hide('labmSection1Child'+i);
	}
	childVal=luxairFlight.getChildrenNumber();
	var language=$F(luxairFlight.getElementId('lang'));
	FlightManager.getTravelerItems(childVal,language,{
	     callback:function(data){
	    	 var itemId=luxairFlight.getElementId('travellers');
	         luxairFlight.fillSelectItem(data,itemId);
	         if(travelerVal>0){
	         	$(itemId).selectedIndex = travelerVal-1;
	         }else{
	         	$(itemId).selectedIndex = 0;
	         }
	     }
	 });
}

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

/*
* search location and display it
*/
luxairFlight.searchLocation=function(event){
	var errMsg = luxairFlight.checkForm();
	if(errMsg!=''){
		alert(errMsg);
	}else{
		luxairFlight.formSubmit();	
	}
}

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

/*
* fill drop down
* @param data the drop down data
* @param id the drop down id
*/ 
luxairFlight.fillSelectItem=function(data,id){
	luxairFlight.clearSelectBox(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);
    }
}
/*
* fill drop down
* @param data the drop down data
* @param id the drop down id
*/ 
luxairFlight.fillSelectItemGroup=function(data,id){
	luxairFlight.clearSelectBox(id);
    for(var i=0;i<data.length; i++){
        var oGroup = document.createElement("optgroup");
        oGroup.label=data[i].label;
        if(data[i].selectItems){
	        for(var j=0;j<data[i].selectItems.length; j++){
	       		var objOption = document.createElement("option");
	        	objOption.value=data[i].selectItems[j].value;
	        	objOption.text=data[i].selectItems[j].label;
	        	//For IE
	        	objOption.innerText=data[i].selectItems[j].label;
	        	oGroup.appendChild(objOption);
	        }
     	 	}
				$(id).appendChild(oGroup);
    }
}

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

/*
* select drop down first item
* @param id the drop down id
*/
luxairFlight.selectBoxFirstElement=function(id){
    $(id).selectedIndex = 0;
}

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

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

/*
* get child count
*/
luxairFlight.getChildrenNumber=function() {
	return $F(luxairFlight.getElementId('children'));
}

/*
* get traveler count
*/
luxairFlight.getTravelersNumber=function() {
	return $F(luxairFlight.getElementId('travellers'));
}

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

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

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

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