(function(){

function dstChange(e) {
	ajax.queue(dstSet, "dstChg");
	ajax.loadXML("htl/dst-tbl.cfm?rooms="+this.value, "dstChg", "Updating persons table.");
}
function dstSet() {
	var response = ajax.getXML('dstChg');
	$('dst-tbl').innerHTML = dom.xmlText(response);
	//add events to each rooms children dropdown
	Event.on(cssQuery("select[name^='children_']", $('roomsTB')), "change", childrenHnd);
}

function childrenHnd(e) {
	var ctrl = Event.getTarget(e);
	var rm = ctrl.name.substring(ctrl.name.indexOf('_')+1) - 1;
	
	var row = $('roomsTB').tBodies[0].rows[rm], cells = row.cells.length,
		cell, html = [],
		children = parseInt(this.value, 10), i = children,
		YearMax = new Date().getFullYear();

	if ( cells > 5 ) {
		Event.purgeElement(row.cells[6], true);
		Event.purgeElement(row.cells[4], true);
		row.cells[6].removeNode(true);
		row.cells[5].removeNode(true);
		row.cells[4].removeNode(true);
		row.cells[3].removeNode(true);
	}

	if ( children == 0 ) {
		return;
	}

	// Children Ages
	cell = document.createElement('th');
	cell.className += " canBeHidden"; //to meli de 8elei na bazoun child age, modo birthdate

	row.appendChild(cell);
	cell.innerHTML = "Child age";

	cell = document.createElement('td');
	cell.className += " canBeHidden"; //to meli de 8elei na bazoun child age, modo birthdate

	row.appendChild(cell);
	while ( i-- ) {
		html.push('<input class="text num" style="float:left; margin-bottom:2px;" name="child_'+rm+'_'+(children-i)+'" size="2" data-min="0" data-max="17" /><br/>');
	}
	cell.innerHTML = html.join('');
	Behavior.applyDynamic(row);

	// Children Birthdates
	cell = document.createElement('th');
	row.appendChild(cell);
	cell.innerHTML = " <span class='canBeHidden'>or</span> birthdate";

	i = children;
	html = [];
	cell = document.createElement('td');
	row.appendChild(cell);
	while ( i-- ) {
		html.push('<span class="v8cal" style="margin-bottom:2px;"><input class="date text" name="child_birth_'+rm+'_'+(children-i)+'" size="10" maxlength="10" /><img src="images/cal.gif" alt="" /></span>');
	}
	cell.innerHTML = html.join('');
	Behavior.apply(row);

	row=cell=null;
}
	
Queue.add(function(){
	var frm = document.forms.htlFrm;
	Event.on(frm.rooms, 'change', dstChange);
	if ( $$('select', 'dst-tbl').length/2 != frm.rooms.value ) {
		frm.rooms.value = $$('select', 'dst-tbl').length/2;
	}
	Event.on(cssQuery("select[name^='children_']", $('roomsTB')), "change", childrenHnd);
	//fire it manually the first time
	Array.forEach( 
		cssQuery("select[name^='children_']", $('roomsTB')), 
		function(el) {Event.fire(el, "change");}
	);
	
	//Sights
	/*frm = $('excFrm');
	Event.on(frm.cty_code, 'change', page.SightsSelect);
	page.SightsSelect();*/
	
	//trf
	frm = document.forms.trfFrm;
	if ( frm.rnd.checked ) {
			dom.show('trf-rnd');
	}
	Event.on(frm.rnd, 'click', page.trfToggle);
		
	frm=null;
});
Queue.add(function(){
	var frm = document.forms.crrFrm;
	frm.pickups.value="";
	frm.returns.value="";
	depComplete = new v8.AutoComplete(frm.pickups,
						JS.apply(
								 
							new v8.AutoComplete.Ajax('crr/cartrawler.list.cfm'),	// we don't pass a url here @see: page.topologyChange()
							{
								format: function(data) {
									//frm.pickups.value ='';
								//	frm.pickup_code.value='';
									//frm.pickups.style='background:#fff url(../theme/loading.gif) no-repeat right center !important;';
									return Array.map(data.output, function(output, i) {
										return output ;
									});
									
								},
								handle: function(data, i, input) {
									input.value = data.output[i] ;
									frm.pickup_code.value= data.codes[i];
									frm.p_cty_code.value= data.city[i];
									frm.p_cnt_rg_code.value= data.region[i];
									frm.p_cnt_code.value= data.country[i];
									frm.p_loctype.value= data.loctype[i];									
								}
							}
						), {delay:0.3, max:20, width: 300});
				colComplete = new v8.AutoComplete(frm.returns,
						JS.apply(
								 
							new v8.AutoComplete.Ajax('crr/cartrawler.list.cfm'),	// we don't pass a url here @see: page.topologyChange()
							{
								format: function(data) {
									//frm.returns.value ='';
							//		frm.return_code.value='';;
									
									return Array.map(data.output, function(output, i) {
										return output ;
									});
									
								},
								handle: function(data, i, input) {
									input.value = data.output[i] ;
									frm.return_code.value= data.codes[i];
									frm.r_cty_code.value= data.city[i];
									frm.r_cnt_rg_code.value= data.region[i];
									frm.r_cnt_code.value= data.country[i];
									frm.r_loctype.value= data.loctype[i];									
								}
							}
						), {delay:0.3, max:20, width: 300});
				
				frm.pickUp_flag.checked=true;
				
				Event.on(frm.pickUp_flag,'click',page.toggleReturn);
				
});
page = {

	bind: {
		htlFrm: {
			fromd: { bind:"tod" },
			tod: { bind:"fromd" },
			rooms: { min:1 }
		}/*,
		crrFrm: {
			cty_code: { filter:"crrplace" },
			cars: { min:1 },
			fromd: { bind:"tod" },
			tod: { bind:"fromd" }
		}*/
	},

	htlAvl: function(frm) {
		if ( !hasValue(frm.cnt_code) ) { return form.error("Please select at least a country.", frm.cty_label); }
		if ( !hasValue(frm.fromd) ) { return form.error("Please input check-in date.", frm.fromd); }
		if ( app.today.dayDiff(getValue(frm.fromd).toDate()) < 1 ) { return form.error("Please select a date after " + app.today.format()); }
		if ( !hasValue(frm.tod) ) { return form.error("Please input check-out date.", frm.tod); }
		if ( !hasValue(frm.rooms) ) { return form.error("Please input number of rooms.", frm.rooms); }
		
		var total_rooms = parseInt(getValue(frm.rooms), 10), rm = 0,
		chld = 0, c=0, age=0, maxYear = (new Date().getFullYear()), minYear = maxYear-120,
		ageObj, yearObj;
		
		for ( ; rm < total_rooms; rm++ ) {
			chld = parseInt(getValue(frm['children_'+(rm+1)]), 10);

			if ( chld > 0 ) {
				for ( c=0; c < chld; c++ ) {
					ageObj = frm['child_'+rm+'_'+(c+1)];
					yearObj = frm['child_birth_'+rm+'_'+(c+1)];
					if ( hasValue(ageObj) ) {
						age = parseInt(getValue(ageObj), 10);
						if ( age > 17 ) {
							return form.error("Child age should be lower than 18.", ageObj);
						}
						yearObj.value = "";
					} else if ( !hasValue(yearObj) ) {
						return form.error("Please type child's year of birth.", yearObj);
					} else if ( Date.compare(yearObj.value.toDate(), new Date()) > 0 ) {
						return form.error("Birth date cannot be set on a future date.", yearObj);
					}
				}
			}
		}
		return true;
	},

	fltAvl: function(frm) {
		var fltMode = parseInt(getValue(frm.flt_type), 10);

		if ( !hasValue(frm.locFrom) || frm.locFrom.value.length < 3 ) {
			return form.error("Please type your departure's location ( at least 3 characters ).", frm.locFrom);
		}
		if ( !hasValue(frm.locTo) || frm.locTo.value.length < 3 ) {
			return form.error("Please type your destination's location ( at least 3 characters ).", frm.locTo);
		}

		if ( !validateDate(frm.fromd) || app.today.dayDiff(frm.fromd.value.toDate()) < 1 ) {
			return form.error("Please input a valid departure date.", frm.fromd);
		}
		if ( fltMode != 1 && !dateValidatePeriod(frm.fromd, frm.tod, 1) ) {
			return form.error("Please input a valid return date.", frm.tod);
		}
	
		if ( !validateInt(frm.pax_adult, 0) ) {return form.error("Please input a valid number of adults.", frm.pax_adult);}
		if ( !validateInt(frm.pax_child, 0) ) {return form.error("Please input a valid number of children.", frm.pax_child);}
		if ( !validateInt(frm.pax_infant, 0) ) {return form.error("Please input a valid number of infants.", frm.pax_infant);}
		
		var pax = parseInt(frm.pax_adult.value, 10) + parseInt(frm.pax_child.value, 10) + parseInt(frm.pax_infant.value, 10);
		if ( pax < 1 ) {
			return form.error("At least one person should exist for availability to continue.", frm.pax_adult);
		} else if ( 10 <= pax ) {
			return form.error("Too many passengers specified. A maximum of 9 passengers is allowed.", frm.pax_adult);
		}
		return true;
	},

	boatAvl: function(frm) {
		var boatMode = parseInt(getValue(frm.boat_type), 10);
		if ( !hasValue(frm.fromd) ) {
			return form.error("Please input departure date.", frm.fromd);
		}
		if ( boatMode != 1 && !hasValue(frm.tod) ) {
			return form.error("Please input return date.", frm.tod);
		}
		if ( !hasValue(frm.dpt_cty_port_code) ) {
			return form.error("Please select departure port.", frm.dpt_cty_port_code);
		}
		if ( !hasValue(frm.arr_cty_port_code) ) {
			return form.error("Please select destination port.", frm.arr_cty_port_code);
		}
		if ( getValue(frm.arr_cty_port_code) == getValue(frm.dpt_cty_port_code) ) {
			return form.error("Destination port cannot be the same as departure port.", frm.arr_cty_port_code);
		}
		if ( !hasValue(frm.boat_class) ) {
			return form.error("Please select passenger class.", frm.boat_class);
		}
		return true;
	},

	crrAvl: function(frm) {
					if(!hasValue(frm.country))
			 				 return form.error("Please select a country",frm.country);
			 		if(!hasValue(frm.pickup_code))
							return form.error("Please select a pick up location",frm.pickups);
					if(!frm.pickUp_flag.checked &&!hasValue(frm.return_code))
								return form.error("Please select a drop off location",frm.returns);
					else{
							frm.return_code.value=frm.pickup_code.value;
						}			
					 if(!validateDate(frm.pickupdate))
							return form.error("Please select a pick up date",frm.pickupdate);
					 if(!validateDate(frm.returndate))
							return form.error("Please select a return  date",frm.returndate);
					 if(!validateTime(frm.pickuptime))
							return form.error("Please select a pick up time",frm.pickuptime);
					 if(!validateTime(frm.returntime))
							return form.error("Please select a return time",frm.returntime);	
					 if((frm.pickupdate.value.toDate().compareTo(frm.returndate.value.toDate())>=0))	
							return form.error("Drop off date must be greater than pick up date",frm.returndate);	
					 if(!hasValue(frm.drAge, 1) || ! parseInt(frm.drAge.value))
							  return form.error("Please select driver age",frm.drAge);
					 if(parseInt(frm.drAge.value)<=18)
							  return form.error("Driver age should be greater than or equal to 18",frm.drAge); 
					 if(!hasValue(frm.country_res))
							  return form.error("Please select a country ",frm.country_res) ;
					 if(frm.p_loctype.value=='C'){
						 	var act='avail';
					}else{
						var act='Eavail';
					 }	
					
					 
		return true;
	},
	toggleReturn:function(){
				    var frm=document.forms['crrFrm'];
					if(frm.pickUp_flag.checked){
							dom.hide('return');
							frm.returns.value= "";
							frm.return_code.value= "";
							frm.r_cty_code.value="";
							frm.r_cnt_rg_code.value="";
							frm.r_cnt_code.value= "";
							frm.r_loctype.value= "";
						}else{
							dom.show('return');
							}
					
				},
	
	vcnAvl: function(frm) {
		//if ( !hasValue(frm.cnt_code) ) { return form.error("Please select at least a country ( Location field )."); }
		return true;
	},
	
	excAvl: function(frm) {
		if ( !hasValue(frm.exc_date) ) {
			return form.error("Please type or select excursion date.", frm.exc_date);
		} else if ( app.today.dayDiff(getValue(frm.exc_date).toDate()) < 1 ) {
			return form.error("Please select a date after " + app.today.format(), frm.exc_date);
		}
		if ( !hasValue(frm.zone_id) ) {
			return form.error("Please select departure location.", frm.zone_id);
		}
		if ( parseInt(getValue(frm.adults), 10) + parseInt(getValue(frm.children), 10) + parseInt(getValue(frm.infants), 10) === 0 ) {
			return form.error("At least one passenger must be specified.", frm.adults);
		}
		
		return true;
	},
	
	trfAvl: function(frm) {
		if ( !hasValue(frm.trf_date) ) { return form.error("Please type the arrival date.", frm.trf_date); }
		if ( app.today.dayDiff(getValue(frm.trf_date).toDate()) < 1 ) { return form.error("Please select a date after " + app.today.format()); }
		if ( frm.rnd.checked ) {
			if ( !hasValue(frm.ret_date) ) { return form.error("Please type the departure date.", frm.ret_date); }
		}
		if ( !hasValue(frm.fzone_id) ) { return form.error("Please select a departure zone.", frm.fzone_id); }
		if ( !hasValue(frm.tzone_id) ) { return form.error("Please select a destination zone.", frm.tzone_id); }
		if ( getValue(frm.fzone_id) == getValue(frm.tzone_id) ) { return form.error("Destination zone cannot be the same as departure zone."); }

		if ( parseInt(frm.adults.value, 10) + parseInt(frm.children.value, 10) === 0 ) {
			return form.error("At least one passenger must be specified.", frm.adults);
		}

		return true;
	},
	
	trfToggle: function(e) {
		dom[this.checked ? "show" : "hide"]('trf-rnd');
	}
	/*------------------------------------------
		Sights (copy apo exc module)
	-------------------------------------------*/
	/*selectClear: function(obj) {
		var options = $$("option", obj);
		for ( var i = options.length; --i >= 0; )
			options[i].removeNode();
	},
		
	selectOption: function(value, text, color) {
		var opt = document.createElement("option");
	
		opt.value = value;
		opt.text = text;
		if ( color )
			opt.style.color = color;
	
		return opt;
	},
		
	SightsSelect: function() {
		var frm = document.forms['excFrm'];
		//if ( !hasValue(frm.cnt_rg_code) ) return form.error("Please select region or city.", frm.cnt_rg_code);											
		ajax.queue(page.SightsSelectHnd, "sights_select_action");
		ajax.loadXML("exc/exc_avl.cfm?action=SightsSelect&cnt_rg_code=" + frm.cnt_rg_code.value, "sights_select_action", "");
	
	},
	
	SightsSelectHnd: function() {
		this.updSightsSelect(ajax.getXML("sights_select_action"));
		modal.close();
	},
		
	updSightsSelect: function(xmlDoc) {
		var frm = document.forms['excFrm'];
	
		var siteNameSelect = frm.site_code;
		this.selectClear(siteNameSelect);
	
		siteNameSelect.options.add(this.selectOption("", "-Select Sight-", "gray"));
		var sitesHandle = xmlDoc.selectSingleNode("sitesHandle/sitesHnd").getElementsByTagName("site");
		for ( var i = 0; i < sitesHandle.length; i++ ){
			siteNameSelect.options.add(this.selectOption(sitesHandle[i].getAttribute("code"), sitesHandle[i].firstChild.nodeValue));
		}
	}*/

};

})();