/*
 * $Id: avail-search.js,v 1.12 2010/07/15 07:31:30 andrew.harrison Exp $
 */
function holidayTypeChoice() {

	if($('departureCode-1')){
		replaceList($('departureCode-1'), hotelFlightDeparturesAzulBeachHotel,depPointSelect);
	}
	if($('departureCode-2')){
		replaceList($('departureCode-2'), hotelFlightDeparturesBaronResort,depPointSelect);
	}
	if($('departureCode-4')){
		replaceList($('departureCode-4'), hotelFlightDeparturesMareblueLindos,depPointSelect);
	}
	if($('departureCode-5')){
		replaceList($('departureCode-5'), hotelFlightDeparturesLykiaworldAntalya,depPointSelect);
	}
	if($('departureCode-6')){
		replaceList($('departureCode-6'), hotelFlightDeparturesHotelMarti,depPointSelect);
	}
	if($('departureCode-7')){
		replaceList($('departureCode-7'), hotelFlightDeparturesHillsideBeachClub,depPointSelect);
	}
	
	if($('holtype').value == hotelFlight){

		replaceList($('destination'), hotelFlightArrivals,arrPointSelect);
        replaceList($('airport'), hotelFlightDepartures,depPointSelect);
        replaceList($('boardtype'), hotelBoardList,hotelBoardSelect);
        $('airportWrapper').removeClass('hidden');
        $('boardWrapper').removeClass('hidden');
        $('roomtable').addClass('hidden');
        $('roomchoicetable').removeClass('hidden');
        $('ratingChoice').removeClass('hidden');
        $('boardWrapper').removeClass('hidden');
        $('freeChildren').addClass('hidden');
        $('hrImInterestedIn').removeClass('hidden');
        $('imInterestedIn').removeClass('hidden');
        $('searchByRoom').value='true';

	} else if($('holtype').value == villaFlight){

		replaceList($('destination'), villaFlightArrivals,arrPointSelect);
		replaceList($('airport'), villaFlightDepartures,depPointSelect);
		replaceList($('boardtype'), villaBoardList,villaBoardSelect);
		$('airportWrapper').removeClass('hidden');
		$('boardWrapper').addClass('hidden');
		$('roomtable').removeClass('hidden');
		$('roomchoicetable').addClass('hidden');
		$('ratingChoice').getElements('input').setProperty('checked',false);
		$('ratingChoice').addClass('hidden');
        $('freeChildren').getElements('input').setProperty('checked',false);
        $('freeChildren').addClass('hidden');
        $('hrImInterestedIn').addClass('hidden');
        $('imInterestedIn').addClass('hidden');
        $('boardWrapper').addClass('hidden');
		$('searchByRoom').value='false';

	} else if($('holtype').value == villaOnly){

		replaceList($('destination'), villaOnlyArrivals,arrPointSelect);
		replaceList($('boardtype'), villaBoardList,villaBoardSelect);
		clearList($('airport'));
		$('airportWrapper').addClass('hidden');
		$('boardWrapper').addClass('hidden');
		$('roomtable').removeClass('hidden');
		$('roomchoicetable').addClass('hidden');
		$('ratingChoice').getElements('input').setProperty('checked',false);
		$('ratingChoice').addClass('hidden');
        $('freeChildren').getElements('input').setProperty('checked',false);
        $('freeChildren').addClass('hidden');
        $('hrImInterestedIn').addClass('hidden');
        $('imInterestedIn').addClass('hidden');
        $('boardWrapper').addClass('hidden');
		$('searchByRoom').value='false';

	}
}

function availRoomChoice() {
	var x;
	for (x=0;x<4;x++) {
		if (x>=$('roomcount').value){
			$('roomchoicerow' + x).getElements('select').each(function(item, index){item.value=0;});
			$('roomchoicerow' + x).addClass('hidden');
		} else {
			$('roomchoicerow' + x).removeClass('hidden');
		}
	}
}

function availRoomChoiceMyStyle(idx) {	
	var x;
	for (x=0;x<4;x++) {
		if (x>=$('roomcount-'+idx).value){
			$(('roomchoicerow' + x) + '-' + idx).getElements('select').each(function(item, index){item.value=0;});
			$(('roomchoicerow' + x) + '-' + idx).addClass('hidden');
		} else {
			$(('roomchoicerow' + x) + '-' + idx).removeClass('hidden');
		}
	}
}

function getNoAdults() {
	return parseInt(noAdults=$('noAdults').value, 10);
}

function getNoChildren() {
	return parseInt(noChildren=$('noChildren').value, 10);
}

function getNoInfants() {
	return parseInt(noInfants=$('noInfants').value, 10);
}

function setNoAdults(val) {
	$('noAdults').value=val;
}

function setNoChildren(val) {
	$('noChildren').value=val;
}

function setNoInfants(val) {
	$('noInfants').value=val;
}

function showPax() {
	alert("pax change ad [" + getNoAdults() + "] ch [" + getNoChildren() + "] in [" + getNoInfants() + "]" );
}

function getAllPax() {
	return getNoAdults() + getNoChildren() + getNoInfants();
}

function validatePax(ad,ch,inf) {

	if ((ad + ch + inf) > 9) {
		alert("The total number of passengers must not exceed 9");
		return false;
	}

	if (inf > ad) {
		alert("The total infants may not exceede the number of adults");
		return false;
	}

	return true;
}

function availRoomPaxChangeMyStyle(calledByRoomChange, idx) {
	var lNoAdults   = 0;
	var lNoChildren = 0;
	var lNoInfants  = 0;
	var roomObjects = null;

	for (x=0;x<$('roomcount-'+idx).value;x++) {

		roomObjects = $('roomchoicerow' + x + '-' + idx).getElements('select');

		for (y=0;y<roomObjects.length;y++) {

			if (roomObjects[y].name.search('Adult') != -1)
				lNoAdults += parseInt(roomObjects[y].value, 10);

			else if (roomObjects[y].name.search('Child') != -1)
				lNoChildren += parseInt(roomObjects[y].value, 10);

			else if (roomObjects[y].name.search('Infant') != -1)
				lNoInfants += parseInt(roomObjects[y].value, 10);

		}
	}

	if (!validatePax(lNoAdults, lNoChildren, lNoInfants))
		return false;

	setNoAdults(lNoAdults);
	setNoChildren(lNoChildren);
	setNoInfants(lNoInfants);

	for (x=0;x<$('roomcount-'+idx).value;x++) {

		lNoAdults   = 0;
		lNoChildren = 0;
		lNoInfants  = 0;
		roomObjects = $('roomchoicerow' + x + '-' + idx).getElements('select');

		for (y=0;y<roomObjects.length;y++) {

			if (roomObjects[y].name.search('Adult') != -1)
				lNoAdults += parseInt(roomObjects[y].value, 10);

			else if (roomObjects[y].name.search('Child') != -1)
				lNoChildren += parseInt(roomObjects[y].value, 10);

			else if (roomObjects[y].name.search('Infant') != -1)
				lNoInfants += parseInt(roomObjects[y].value, 10);
		}

		if (!calledByRoomChange && lNoAdults == 0) {
			alert("No room may have zero adults");
			return false;
		}
		if ((lNoAdults + lNoChildren)>5) {
			alert("No room may have greater than 5 passengers");
			return false;
		}
	}
	return true;
}

function availRoomPaxChange(calledByRoomChange) {
	var lNoAdults   = 0;
	var lNoChildren = 0;
	var lNoInfants  = 0;
	var roomObjects = null;

	for (x=0;x<$('roomcount').value;x++) {

		roomObjects = $('roomchoicerow' + x).getElements('select');

		for (y=0;y<roomObjects.length;y++) {

			if (roomObjects[y].name.search('Adult') != -1)
				lNoAdults += parseInt(roomObjects[y].value, 10);

			else if (roomObjects[y].name.search('Child') != -1)
				lNoChildren += parseInt(roomObjects[y].value, 10);

			else if (roomObjects[y].name.search('Infant') != -1)
				lNoInfants += parseInt(roomObjects[y].value, 10);

		}
	}

	if (!validatePax(lNoAdults, lNoChildren, lNoInfants))
		return false;

	setNoAdults(lNoAdults);
	setNoChildren(lNoChildren);
	setNoInfants(lNoInfants);

	for (x=0;x<$('roomcount').value;x++) {

		lNoAdults   = 0;
		lNoChildren = 0;
		lNoInfants  = 0;
		roomObjects = $('roomchoicerow' + x).getElements('select');

		for (y=0;y<roomObjects.length;y++) {

			if (roomObjects[y].name.search('Adult') != -1)
				lNoAdults += parseInt(roomObjects[y].value, 10);

			else if (roomObjects[y].name.search('Child') != -1)
				lNoChildren += parseInt(roomObjects[y].value, 10);

			else if (roomObjects[y].name.search('Infant') != -1)
				lNoInfants += parseInt(roomObjects[y].value, 10);
		}

		if (!calledByRoomChange && lNoAdults == 0) {
			alert("No room may have zero adults");
			return false;
		}
		if ((lNoAdults + lNoChildren)>5) {
			alert("No room may have greater than 5 passengers");
			return false;
		}
	}

	return true;
}

function searchDateValid() {
	currentMonth = $('departureMonthYear').value.substring(0,2);
	currentYear  = $('departureMonthYear').value.substring(3);
	currentDay   = $('departureDay').value;
	currentDate  = currentMonth + "/" + currentDay + "/" + currentYear;
	first        = Date.parse('05/01/2010');
	current      = Date.parse(currentDate);

	if (first.diff(current)<0) {
		alert('We do sell holidays on this site before 1st May 2010');
		return false;
	}
	return true;
}

window.addEvent('domready', function(){

    holidayTypeChoice();
    availRoomChoice();

     new Picker({rangeEnd: '2010/12/31'});

     var s = function(){
         if($('searchform').getParent('div') != $('search')){
             var div = $('searchform').getParent('div');
             div.setStyle('height','100%');
             div.setStyle('overflow','visible');
         }
     };

    $$('#showcal, #holtype').each(function(el){
		el.addEvent('click', function(){
        	s();
    	});
	});

     var formslide = new Fx.Slide('searchform');
     var theclicker = $('searchclick');

     theclicker.getElement('h2 a').addEvent('click', function(e) {

    	 if ($defined(e)) {
    		 e.preventDefault();
    	 };

    	 $('searchform').getParent('div').setStyle('overflow','hidden');
    	 formslide.toggle();
    	 theclicker.toggleClass('open');
     });

     if (slideout = null || !slideOut)
    	 formslide.slideOut();

     $('holtype').addEvent('change', function(){
         holidayTypeChoice();
     });

     $('roomcount').addEvent('change', function(){
         availRoomChoice();
     });
          
	$$('select[name^=rooms-]').addEvent('change', function(){
         availRoomChoiceMyStyle(this.name.match(/\d+/));
     });     

     $('availgo').addEvent('click', function(event){

    	 if($('holtype').value == hotelFlight){

    		 if (!availRoomPaxChange(false))
    			 event.preventDefault();

    	 } else {

    		 if (!validatePax(getNoAdults(), getNoChildren(), getNoInfants()))
    			 event.preventDefault();

    	 }

    	 if (!searchDateValid())
			 event.preventDefault();

     });

     $$('.roomChg').addEvent('change', function(event){
         if(!availRoomPaxChange(true))
    		 event.preventDefault();
     });

    $$('select[class^=roomChg-]').addEvent('change', function(event){	 
         if(!availRoomPaxChangeMyStyle(true,this.className.match(/\d+/)))
    		 event.preventDefault();
     });
     
     $$('.paxChange').addEvent('change', function(event){

		 if (!validatePax(getNoAdults(), getNoChildren(), getNoInfants())) {
    		 event.preventDefault();
    	 }

     });

});
