String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}

function validateRequired(field,alerttxt) {
	with (field) {
		if (value == null || value.trim() == "") {
			alert(alerttxt);
			return false;
		}
		else {
			return true;
		}
	}
}

function validateEmail(field,alerttxt) {
	with (field) {
		apos=value.indexOf("@")
		dotpos=value.lastIndexOf(".")
		if (apos<1||dotpos-apos<2) {
		  alert(alerttxt);
		  return false;
		}
		else {
			return true;
		}
	}
}

function isAlpha(str){
    var re = /[^a-zA-Z ]/g
    if (re.test(str)) 
		return false;
    
	return true;
}

function setCountiesDropDown() {
	var departureCountry = document.forms['ws_search_form'].departure_country;
	var destinationCountry = document.forms['ws_search_form'].destination_country;
	var i, nrCountries;

	// init dropdwon
	departureCountry.options.length = 0;
	departureCountry.options[0] = new Option("Selecteaza tara","0");
	destinationCountry.options.length = 0;
	destinationCountry.options[0] = new Option("Selecteaza tara","0");

	nrCountries = wsCountryName.length;
	for (i=1; i<nrCountries; i++){
		departureCountry.options[i] = new Option(wsCountryName[i],wsCountryIATACode[i]);
		if (wsCountryName[i] == 'ROMANIA')
			departureCountry.options[i].selected = true;
		
		destinationCountry.options[i] = new Option(wsCountryName[i],wsCountryIATACode[i]);
	}
}

function initCalendarForm() {
	var departureDate = document.forms['ws_search_form'].departure_date;
	var destinationDate = document.forms['ws_search_form'].destination_date;

	var myDate = new Date();
	var year, month, day;

	myDate.setTime(myDate.getTime() + 259200000); // + 3 days
	year = myDate.getFullYear();
	month = myDate.getMonth() + 1;
	if (month < 10){
		month = '0' + month;
	}
	day = myDate.getDate();
	if (day < 10){
		day = '0' + day;
	}
	departureDate.value = day + '.' + month + '.' + year;

	myDate.setTime(myDate.getTime() + 604800000); // + 7 days
	year = myDate.getFullYear();
	month = myDate.getMonth() + 1;
	if (month < 10){
		month = '0' + month;
	}
	day = myDate.getDate();
	if (day < 10){
		day = '0' + day;
	}
	destinationDate.value = day + '.' + month + '.' + year;	
}

function setPreferedHourDropDown() {
	var departureHour = document.forms['ws_search_form'].departure_hour;
	var destinationHour = document.forms['ws_search_form'].destination_hour;
	var i, val;

	departureHour.options.length = 0;
	departureHour.options[0] = new Option("--:--","-1");
	destinationHour.options.length = 0;
	destinationHour.options[0] = new Option("--:--","-1");	

	for (i=0; i<24; i++) {
		if (i<10)
			val = "0" + i;
		else
			val = i;
		departureHour.options[i+1] = new Option(val + ":00",val + "");
		destinationHour.options[i+1] = new Option(val + ":00",val + "");
	}
}

function changeFlightType() {
	var flightType = document.forms['ws_search_form'].flight_type;
	var returnDateDiv = document.getElementById('return_date_details');

	if (flightType.value == 2){
		returnDateDiv.style.display = 'none';
	}
	else {
		returnDateDiv.style.display = 'block';
	}

}

function ajaxGetCities(fCountryObj, fCityObj, fAirportObj, ajaxObjId) {
	var country_iata_code;

	if (fCountryObj.value != 0) {
		country_iata_code = fCountryObj.value;

		var myReq = new Request({
			url: '_ws_process/ajax_get_cities.php',
			method: 'get',
			data: 'iata_code=' + country_iata_code
		});
		myReq.addEvent('success', function(response) {
			$(ajaxObjId).set('html',response);
		});
		myReq.send();

		// reset airport drop down
		fAirportObj.options.length = 0;
		fAirportObj.options[0] = new Option("Selecteaza aeroport","0");
	}
	else { 
		// reset city drop down
		fCityObj.options.length = 0;
		fCityObj.options[0] = new Option("Selecteaza oras","0");

		// reset airport drop down
		fAirportObj.options.length = 0;
		fAirportObj.options[0] = new Option("Selecteaza aeroport","0");
	}
}

function ajaxGetAirports(fCityObj,fAirportObj, ajaxObjId) {
	var city_iata_code;

	if (fCityObj.value != 0) {
		city_iata_code = fCityObj.value;

		var req = new Request({
			url: '_ws_process/ajax_get_airports.php?iata_code',
			method: 'get',
			data: 'iata_code=' + city_iata_code
		});
		req.addEvent('success', function(response) {
			$(ajaxObjId).set('html',response);
		});
		req.send();
	}
	else { // reset airports drop down
		fAirportObj.options.length = 0;
		fAirportObj.options[0] = new Option("Selecteaza aeroport","0");
	}
}

function validateFlightsForm() {
	var departureCountry = document.forms['ws_search_form'].departure_country;
	var departureCity = document.forms['ws_search_form'].departure_city;

	var destinationCountry = document.forms['ws_search_form'].destination_country;	
	var destinationCity = document.forms['ws_search_form'].destination_city;	

	var departureDate = document.forms['ws_search_form'].departure_date;
	var destinationDate = document.forms['ws_search_form'].destination_date;
	var flightType = document.forms['ws_search_form'].flight_type;	

	// departure country
	if (departureCountry.value == 0){
		alert('Nu ati selectat tara plecare!');
		departureCountry.focus();
		return false;
	}

	// departure city
	if (departureCity.value == 0){
		alert('Nu ati selectat oras plecare!');
		departureCity.focus();
		return false;
	}

	// destination country
	if (destinationCountry.value == 0){
		alert('Nu ati selectat tara destinatie!');
		destinationCountry.focus();
		return false;
	}

	// destination city
	if (destinationCity.value == 0){
		alert('Nu ati selectat oras destinatie!');
		destinationCity.focus();
		return false;
	}

	// validate departure and destinataion dates
	var dateString, dDay, dMonth, dYear, dToday;
	var depDate,destDate, todayDate;

	dateString = departureDate.value;
	if (dateString[0] != 0)
		dDay = dateString.substr(0,2);
	else
		dDay = dateString.substr(1,1);

	if (dateString[3] != 0)
		dMonth = dateString.substr(3,2);
	else
		dMonth = dateString.substr(4,1);
	dMonth = dMonth-1;

	dYear = dateString.substr(6,4);

	depDate = new Date();
	todayDate = new Date();
	depDate.setDate(dDay);
	depDate.setMonth(dMonth);
	depDate.setFullYear(dYear);

	if (todayDate.getTime() > depDate.getTime()){
		alert('Data plecare in trecut!');
		return false;
	}

	if (flightType.value != 2){
		dateString = destinationDate.value;
		if (dateString[0] != 0)
			dDay = dateString.substr(0,2);
		else
			dDay = dateString.substr(1,1);

		if (dateString[3] != 0)
			dMonth = dateString.substr(3,2);
		else
			dMonth = dateString.substr(4,1);
		dMonth = dMonth-1;

		dYear = dateString.substr(6,4);

		destDate = new Date();
		destDate.setDate(dDay);
		destDate.setMonth(dMonth);
		destDate.setFullYear(dYear);

		if (destDate.getTime() < depDate.getTime()){
			alert('Data sosire la destinatie nu poate fi anterioara datei plecarii!');
			return false;
		}
	}

	return true;
}

function changeBillFormType() {	
	var billType = document.forms['ws_bill_form'].bill_type;
	var personBillDiv = document.getElementById('bill_form_person');
	var companyBillDiv = document.getElementById('bill_form_company');

	if (billType[0].checked == true){
		companyBillDiv.style.display = 'none';
		personBillDiv.style.display = 'block';
		return;
	}

	if (billType[1].checked == true){
		personBillDiv.style.display = 'none';
		companyBillDiv.style.display = 'block';
	}
}

function searchFlights() {
	var pars = '';
	var myForm = document.forms['ws_search_form'];
	
	var flightType = myForm.flight_type.value;
	var directFlights = myForm.direct_flights;

	var departureAirport = myForm.departure_airport.value;
	var departureDate = myForm.departure_date.value;
	var destinationAirport = myForm.destination_airport.value;
	var destinationDate = myForm.destination_date.value;

	var directFlightsVal;

	if (directFlights.checked == true)
		directFlightsVal = 1;
	else
		directFlightsVal = 0;

	var cabinClass = myForm.ws_cabin_class.value;
	var airlineCarriersObj = myForm.ws_airline_carriers;
	var airlineCarriers = '';
	for (i=0; i<airlineCarriersObj.options.length; i++) {
		if (airlineCarriersObj.options[i].selected) {
		  airlineCarriers += airlineCarriersObj.options[i].value;
		}
	}

	var adtNo = myForm.psg_adt.value;
	var cnnNo = myForm.psg_cnn.value;
	var infNo = myForm.psg_inf.value;
	var srcNo = myForm.psg_src.value;

	// init searchDiv
	if (validateFlightsForm() == true){
		var resultsDiv = document.getElementById('ws_results_div');
		resultsDiv.innerHTML = '<div style="text-align: center">' 
			+ '<img src="_ws_images/ajax-loader-v2.gif" width="50" height="50" /><br/>'
			+ '<span style="font-weight: bold; color:#1C5297;">Cautam printre mii de zboruri cea mai buna solutie pentru dvs.</span>'
		+ '</div>';

		// ajax params
		pars = 'f_flight_type=' + flightType;
		pars += '&f_direct_flights=' + directFlightsVal;
		pars += '&f_departure_airport=' + departureAirport;
		pars += '&f_departure_date=' + departureDate;
		pars += '&f_destination_airport=' + destinationAirport;		
		pars += '&f_destination_date=' + destinationDate;
		pars += '&f_cabin_class=' + cabinClass;
		pars += '&f_airline_carriers=' + airlineCarriers;		

		// passengers info
		pars += '&f_psg_adt=' + adtNo;
		pars += '&f_psg_cnn=' + cnnNo;
		pars += '&f_psg_inf=' + infNo;
		pars += '&f_psg_src=' + srcNo;

		var req = new Request({
			url: '_ws_process/process_flight_request.php',
			method: 'post'			
		});
		req.addEvent('success', function(response) {
			$('ws_results_div').set('html',response);
		});
		req.send(pars);

	}
}

function displayReservationForm(flightCounter,quickSellSearchID,flightId) {	
	var pars = '';
	
	var searchFormDiv = document.getElementById('ws_search_area');
	searchFormDiv.style.display = 'none';

	var resultsDiv = document.getElementById('ws_results_div');
	resultsDiv.innerHTML = '<div style="text-align: center">' 
			+ '<img src="_ws_images/ajax-loader-v2.gif" width="50" height="50" /><br/>'
			+ '<span style="font-weight: bold; color:#1C5297;">Va rugam asteptati!</span>'
		+ '</div>';

	pars = 'f_flight_counter=' + flightCounter;
	pars += '&f_quick_sell_search_id=' + quickSellSearchID;
	pars += '&f_flight_id=' + flightId;

	var req = new Request({
		url: '_ws_process/display_reservation_form.php',
		method: 'post'			
	});
	req.addEvent('success', function(response) {
		$('ws_results_div').set('html',response);
	});
	req.send(pars);
}

function validateBookFlight() {
	var myForm = document.forms['ws_bill_form'];

	// contact details
	var cSurName = myForm.c_surname;
	var cName = myForm.c_name;
	var cPhone = myForm.c_phone;
	var cEmail = myForm.c_email;

    // ***** CONTACT DETAILS ******
	// surname
    if (validateRequired(cSurName,"Nu ati completat prenumele!") == false) {
	    cSurName.focus();
	    return false;
    }

    // name
    if (validateRequired(cName,"Nu ati completat numele!") == false) {
	    cName.focus();
	    return false;
    }

    // phone
    if (validateRequired(cPhone,"Nu ati completat numarul de telefon!") == false) {
	    cPhone.focus();
	    return false;
    }

    // email
    if (validateRequired(cEmail,"Nu ati completat adresa email!") == false) {
	    cEmail.focus();
	    return false;
    }
    if (validateEmail(cEmail,"Adresa de email introdusa este incorecta!") == false) {
	    cEmail.focus();
	    return false;
    }


	// ***** BILL DETAILS ******
	var billType = myForm.bill_type;
	if (billType[0].checked) {
		// person bill type
		var billPSurName = myForm.bill_p_surname;
		var billPName = myForm.bill_p_name;
		var billPAddress = myForm.bill_p_address;
		var billPCity = myForm.bill_p_city;
		var billPCounty = myForm.bill_p_county;
		var billPCiS = myForm.bill_p_ci_s;
		var billPCiNr = myForm.bill_p_ci_nr;

		// surname
		if (validateRequired(billPSurName,"Nu ati completat <Date de facturare> - prenume!") == false) {
			billPSurName.focus();
			return false;
		}

		// name
		if (validateRequired(billPName,"Nu ati completat <Date de facturare> - nume!") == false) {
			billPName.focus();
			return false;
		}

		// address
		if (validateRequired(billPAddress,"Nu ati completat <Date de facturare> - adresa!") == false) {
			billPAddress.focus();
			return false;
		}

		// city
		if (validateRequired(billPCity,"Nu ati completat <Date de facturare> - localitate!") == false) {
			billPCity.focus();
			return false;
		}

		// county
		if (validateRequired(billPCounty,"Nu ati completat <Date de facturare> - judet!") == false) {
			billPCounty.focus();
			return false;
		}

		// identity card - no
		if (validateRequired(billPCiS,"Nu ati completat <Date de facturare> - CI - Seria!") == false) {
			billPCiS.focus();
			return false;
		}

		// identity card - serial
		if (validateRequired(billPCiNr,"Nu ati completat <Date de facturare> - CI - Numar!") == false) {
			billPCiNr.focus();
			return false;
		}
	}
	else {
		// company bill type
		var billCName = myForm.bill_c_name;
		var billCAddress = myForm.bill_c_address;
		var billCcity = myForm.bill_c_city;
		var billCcounty = myForm.bill_c_county;
		var billCcui = myForm.bill_c_cui;
		var billCregNo = myForm.bill_c_reg_no;
		var billCbank = myForm.bill_c_bank;
		var billCbankAccount = myForm.bill_c_bank_account;

		// name
		if (validateRequired(billCName,"Nu ati completat <Date de facturare> - nume societate!") == false) {
			billCName.focus();
			return false;
		}

		// address
		if (validateRequired(billCAddress,"Nu ati completat <Date de facturare> - nume societate!") == false) {
			billCAddress.focus();
			return false;
		}

		// city
		if (validateRequired(billCcity,"Nu ati completat <Date de facturare> - localitate!") == false) {
			billCcity.focus();
			return false;
		}

		// county
		if (validateRequired(billCcounty,"Nu ati completat <Date de facturare> - judet!") == false) {
			billCcounty.focus();
			return false;
		}

		// CUI
		if (validateRequired(billCcui,"Nu ati completat <Date de facturare> - C.U.I.!") == false) {
			billCcui.focus();
			return false;
		}

		// Reg. No.
		if (validateRequired(billCregNo,"Nu ati completat <Date de facturare> - Nr. Reg. Com.!") == false) {
			billCregNo.focus();
			return false;
		}

		// Bank
		if (validateRequired(billCbank,"Nu ati completat <Date de facturare> - banca!") == false) {
			billCbank.focus();
			return false;
		}

		// IBAN
		if (validateRequired(billCbankAccount,"Nu ati completat <Date de facturare> - cont IBAN!") == false) {
			billCbankAccount.focus();
			return false;
		}
	}

	// ***** PASANGER *****
	var cPsgNo = myForm.psg_no;

	for (i=1; i<=cPsgNo.value; i++){
		var fieldName;
		var psgSurName, psgName;
		fieldName = 'surname_p_' + i;		
		psgSurName = document.getElementById(fieldName);
		fieldName = 'name_p_' + i;
		psgName = document.getElementById(fieldName);

		// surname
		if (validateRequired(psgSurName,"Nu ati completat <Date pasager " + i +"> - prenume pasager!") == false) {
			psgSurName.focus();
			return false;
		}
		if (!isAlpha(psgSurName.value)){
			alert('Prenumele pasagerului ' + i + ' nu contine doar litere si spatiu!');
			psgSurName.focus();
			return false;
		}

		// name
		if (validateRequired(psgName,"Nu ati completat <Date pasager " + i +"> - nume pasager!") == false) {
			psgName.focus();
			return false;
		}
		if (!isAlpha(psgName.value)){
			alert('Numele pasagerului ' + i + ' nu contine doar litere si spatiu!');
			psgName.focus();
			return false;
		}
	}

	return true;
}

function bookFlight() {
	var pars = '';

	if (!validateBookFlight()){
		return;
	}

	var myForm = document.forms['ws_bill_form'];
	// contact details
	var cTitle = myForm.c_title.value;
	var cSurName = myForm.c_surname.value;
	var cName = myForm.c_name.value;
	var cPhone = myForm.c_phone.value;
	var cEmail = myForm.c_email.value;
	var cSpecialMentions = myForm.c_special_mentions.value;

	pars = 'c_title=' + cTitle;
	pars += '&c_surname=' + cSurName;
	pars += '&c_name=' + cName;
	pars += '&c_phone=' + cPhone;
	pars += '&c_email=' + cEmail;
	pars += '&c_special_mentions=' + cSpecialMentions;

	// bill details
	var billType = myForm.bill_type;
	if (billType[0].checked) {
		// person bill type
		var billPSurName = myForm.bill_p_surname.value;
		var billPName = myForm.bill_p_name.value;
		var billPAddress = myForm.bill_p_address.value;
		var billPCity = myForm.bill_p_city.value;
		var billPCounty = myForm.bill_p_county.value;
		var billPCiS = myForm.bill_p_ci_s.value;
		var billPCiNr = myForm.bill_p_ci_nr.value;

		pars += '&bill_type=1';

		pars += '&bill_p_surname=' + billPSurName;
		pars += '&bill_p_name=' + billPName;
		pars += '&bill_p_address=' + billPAddress;
		pars += '&bill_p_city=' + billPCity;
		pars += '&bill_p_county=' + billPCounty;
		pars += '&bill_p_ci_s=' + billPCiS;
		pars += '&bill_p_ci_nr=' + billPCiNr;

	}
	else {
		// company bill type
		var billCName = myForm.bill_c_name.value;
		var billCAddress = myForm.bill_c_address.value;
		var billCcity = myForm.bill_c_city.value;
		var billCcounty = myForm.bill_c_county.value;
		var billCcui = myForm.bill_c_cui.value;
		var billCregNo = myForm.bill_c_reg_no.value;
		var billCbank = myForm.bill_c_bank.value;
		var billCbankAccount = myForm.bill_c_bank_account.value;

		pars += '&bill_type=2';

		pars += '&bill_c_name=' + billCName;
		pars += '&bill_c_address=' + billCAddress;
		pars += '&bill_c_city=' + billCcity;
		pars += '&bill_c_county=' + billCcounty;
		pars += '&bill_c_cui=' + billCcui;
		pars += '&bill_c_reg_no=' + billCregNo;
		pars += '&bill_c_bank=' + billCbank;
		pars += '&bill_c_bank_account=' + billCbankAccount;

	}

	var psgNo = myForm.psg_no.value;
	pars += '&psg_no=' + psgNo;

	var fieldName;
	var psgTitle, psgSurName, psgName, psgType, psgBirthDate;
	for (i=1; i<=psgNo; i++){
		fieldName = 'title_p_' + i;
		psgTitle = document.getElementById(fieldName);		
		fieldName = 'surname_p_' + i;		
		psgSurName = document.getElementById(fieldName);
		fieldName = 'name_p_' + i;
		psgName = document.getElementById(fieldName);
		fieldName = 'type_code_p_' + i;
		psgType = document.getElementById(fieldName);

		pars += '&psg_type_' + i + '=' + psgType.value;
		pars += '&psg_title_' + i + '=' + psgTitle.value;
		pars += '&psg_surname_' + i + '=' + psgSurName.value;
		pars += '&psg_name_' + i + '=' + psgName.value;
		if (psgType.value != 'ADT') {
			fieldName = 'birthdate_p_' + i;
			psgBirthDate = document.getElementById(fieldName);
			pars += '&psg_birthdate_' + i + '=' + psgBirthDate.value;
		}
	}

	var wsReservationId = myForm.power_shopper_response_id.value;
	pars += '&ws_reservation_id=' + wsReservationId;
	
	var resultsDiv = document.getElementById('ws_results_div');
	resultsDiv.innerHTML = '<div style="text-align: center">' 
			+ '<img src="_ws_images/ajax-loader-v2.gif" width="50" height="50" /><br/>'
			+ '<span style="font-weight: bold; color:#1C5297;">Va rugam asteptati!</span>'
		+ '</div>';

	var req = new Request({
		url: '_ws_process/process_flight.php',
		method: 'post'			
	});
	req.addEvent('success', function(response) {
		$('ws_results_div').set('html',response);
	});
	req.send(pars);

	// display reservation form
	var searchFormDiv = document.getElementById('ws_search_area');
	searchFormDiv.style.display = 'block';
}

function initWS(type) {
	switch(type) {
		case 1: // flights
			setCountiesDropDown();
			initCalendarForm();

			// v2
			var myForm = document.forms['ws_search_form'];
			ajaxGetCities(myForm.departure_country,myForm.departure_city,myForm.departure_airport,'f_departure_city');
		break;
	}
}