﻿function checkFlightDepartDate()
{
    checkDates(true,$('TextBoxDepartDate'),$('TextBoxReturnDate'));
	$('TextBoxHotelDepartDate').value = $F('TextBoxDepartDate');
	$('TextBoxCarDepartDate').value = $F('TextBoxDepartDate');
	$('TextBoxHotelReturnDate').value = $F('TextBoxReturnDate');
	$('TextBoxCarReturnDate').value = $F('TextBoxReturnDate');
}

function checkFlightReturnDate()
{
    checkDates(false,$('TextBoxDepartDate'),$('TextBoxReturnDate'));
	$('TextBoxHotelDepartDate').value = $F('TextBoxDepartDate');
	$('TextBoxCarDepartDate').value = $F('TextBoxDepartDate');
	$('TextBoxHotelReturnDate').value = $F('TextBoxReturnDate');
	$('TextBoxCarReturnDate').value = $F('TextBoxReturnDate');
}

function checkHotelDepartDate()
{
    checkDates(true,$('TextBoxHotelDepartDate'),$('TextBoxHotelReturnDate'));
	$('TextBoxDepartDate').value = $F('TextBoxHotelDepartDate');
	$('TextBoxCarDepartDate').value = $F('TextBoxHotelDepartDate');
	$('TextBoxReturnDate').value = $F('TextBoxHotelReturnDate');
	$('TextBoxCarReturnDate').value = $F('TextBoxHotelReturnDate');
}

function checkHotelReturnDate()
{
	checkDates(false,$('TextBoxHotelDepartDate'),$('TextBoxHotelReturnDate'));
	$('TextBoxDepartDate').value = $F('TextBoxHotelDepartDate');
	$('TextBoxCarDepartDate').value = $F('TextBoxHotelDepartDate');
	$('TextBoxReturnDate').value = $F('TextBoxHotelReturnDate');
	$('TextBoxCarReturnDate').value = $F('TextBoxHotelReturnDate');
}

function checkCarDepartDate()
{
	checkDates(true,$('TextBoxCarDepartDate'),$('TextBoxCarReturnDate'));
	$('TextBoxHotelReturnDate').value = $F('TextBoxCarReturnDate');
	$('TextBoxReturnDate').value = $F('TextBoxCarReturnDate');
	$('TextBoxHotelDepartDate').value = $F('TextBoxCarDepartDate');
	$('TextBoxDepartDate').value = $F('TextBoxCarDepartDate');
}

function checkCarReturnDate()
{
	checkDates(false,$('TextBoxCarDepartDate'),$('TextBoxCarReturnDate'));
	$('TextBoxHotelReturnDate').value = $F('TextBoxCarReturnDate');
	$('TextBoxReturnDate').value = $F('TextBoxCarReturnDate');
	$('TextBoxHotelDepartDate').value = $F('TextBoxCarDepartDate');
	$('TextBoxDepartDate').value = $F('TextBoxCarDepartDate');
}

function checkDates(isDepart, dc, rc)
{
    var ds = dc.value;
    var rs = rc.value;
    var dd = Date.momondoParse(ds);
    var rd = Date.momondoParse(rs);
    
    if (isDepart)
    {
        if (dd > rd) // return before depart?
            rd = dd; // change return, because depart was changed by user
    }
    else
    {
        if (dd > rd) // return before depart?
            dd = rd; // change depart, because return was changed by user
    }
    
    ds = dd.momondoFormat();
    rs = rd.momondoFormat();

    if (dc.value != ds) 
		dc.value = ds;
    if (rc.value != rs) 
		rc.value = rs;
}

function getReturnTrip()
{
	var ret = true;
	if($('RadioButtonReturn') != null)
		ret = $('RadioButtonReturn').checked;
	if($('CheckBoxReturnTrip') != null)
		ret = $('CheckBoxReturnTrip').checked;
	return ret;
}

function validateFlightSearch(checkOrigDest)
{
	var ret = getReturnTrip();
    var tbo = $('TextBoxOrigin');
    var tbd = $('TextBoxDestination');
    var orig = tbo.value;
    var dest = tbd.value;

    if(checkOrigDest == true)
    {
		var regex = /.+\(([A-Z]{3})\).+/;
		if (!regex.test(orig))
		{
			error(Language['FlightResults_JS_Orig_Error']);
			tbo.focus();
			return false;
		}

		if (!regex.test(dest))
		{
			error(Language['FlightResults_JS_Dest_Error']);
			tbd.focus();
			return false;
		}
	}
    
    if (orig == null || orig.length < 3)
        return errorOrig();
    
    if (dest == null || dest.length < 3)
        return errorDest();

    return validateDates();
}

function validateHotelSearch()
{
    var tbo = $('TextBoxHotelCity');
    var city = tbo.value;

	var regex = /.+\(([A-Z]{3})\).+/;
	if (!regex.test(city))
	{
		error(Language['FlightResults_JS_Dest_Error']);
		tbo.focus();
		return false;
	}

    if (city == null || city.length < 3)
        return errorDest();
    
    return validateHotelDates();
}

function validateCarSearch()
{
    var tbo = $('TextBoxCarCity');
    var city = tbo.value;

	var regex = /.+\(([A-Z]{3})\).+/;
	if (!regex.test(city))
	{
		error(Language['FlightResults_JS_Dest_Error']);
		tbo.focus();
		return false;
	}

    if (city == null || city.length < 3)
        return errorDest();
    
    return validateCarDates();
}

function error(text, param)
{
    if (param != null)
        text = text.replace('{0}', param);
    alert(text);
    return false;
}

function errorOrig()
{
    error(Language['FlightResults_JS_Orig_Error']);
    $('TextBoxOrigin').focus();
    return false;
}
function errorDest()
{
    error(Language['FlightResults_JS_Dest_Error']);
    $('TextBoxDestination').focus();
    return false;
}

function errorDepartDate()
{
    var tb = $(ClientIDs.TextBoxDepartDate);
    return dateError(tb, getToday(), 'FlightResults_JS_DepartDate_Error');
}

function errorReturnDate()
{
    var tb = $(ClientIDs.TextBoxReturnDate);
    var ds = $(ClientIDs.TextBoxDepartDate).value;
    var dd = Date.momondoParse(ds);
    if (dd == null) dd = getToday();
    return dateError(tb, dd, 'FlightResults_JS_ReturnDate_Error');
}

function dateError(tb, date, resname)
{
	if(date != null)
	{
		ds = date.momondoFormat();
		tb.value = ds;
    }
    error(Language[resname], ds);
    tb.focus();
    tb.select();
    return false;
}

function validateDates()
{
    return validateDepartDate($('TextBoxDepartDate')) && validateReturnDate($('TextBoxReturnDate'),true) && validateDepartAndReturnDate($('TextBoxDepartDate'),$('TextBoxReturnDate'),true);
}

function validateHotelDates()
{
    return validateDepartDate($('TextBoxHotelDepartDate')) && validateReturnDate($('TextBoxHotelReturnDate'),false) && validateDepartAndReturnDate($('TextBoxHotelDepartDate'),$('TextBoxHotelReturnDate'),false);
}

function validateCarDates()
{
    return validateDepartDate($('TextBoxCarDepartDate')) && validateReturnDate($('TextBoxCarReturnDate'),false) && validateDepartAndReturnDate($('TextBoxCarDepartDate'),$('TextBoxCarReturnDate'),false);
}

function validateDepartDate(tb)
{
    var valid = validateDateEdit(tb);
    if (!valid)
        dateError(tb, getToday(), 'FlightResults_JS_DepartDate_Error');
    return valid;
}

function validateReturnDate(tb,checkRet)
{
    var ret = getReturnTrip();
	if (checkRet && !ret)
		return true;

    var valid = validateDateEdit(tb);
    if (!valid)
    {
        var ds = $F(ClientIDs.TextBoxDepartDate);
        var dd = Date.momondoParse(ds);
        if (dd == null) dd = getToday();
        dateError(tb, dd, 'FlightResults_JS_ReturnDate_Error');
    }
    return valid;
}

function validateDepartAndReturnDate(dc,rc,checkRet)
{
    var ret = getReturnTrip();
    var ds = dc.value;
    var rs = rc.value;
    var dd = Date.momondoParse(ds);
    var rd = Date.momondoParse(rs);
    var td = getToday();

    if (dd < td)
    {
        return dateError(dc, td, 'FlightResults_JS_DepartDateEarly_Error');
    }
	
	if (ret || !checkRet)
	{
	    if (rd < td)
	    {
	        return dateError(rc, td, 'FlightResults_JS_ReturnDateEarly_Error');
	    }
	    if (rd < dd)
	    {
	        return dateError(rc, dd, 'FlightResults_JS_ReturnDateSmall_Error');
	    }
	}
    return true;
}

function validateDateEdit(tb)
{
    var s = tb.value;
    var d = Date.momondoParse(s);
    if (d != null)
    {
        var ds = d.momondoFormat();
        if (tb.value != ds)
        {
            tb.value = ds;
		}
        return true;
    }
    return false;
}

function blurDepartDate()
{
    validateDepartDate($('TextBoxDepartDate'));
    checkDates(true,$('TextBoxDepartDate'),$('TextBoxReturnDate'));
}

function blurReturnDate()
{
    validateReturnDate($('TextBoxReturnDate'));
    checkDates(false,$('TextBoxDepartDate'),$('TextBoxReturnDate'));
}

function blurHotelDepartDate()
{
    validateDepartDate($('TextBoxHotelDepartDate'));
    checkDates(true,$('TextBoxHotelDepartDate'),$('TextBoxHotelReturnDate'));
}

function blurHotelReturnDate()
{
    validateReturnDate($('TextBoxHotelReturnDate'));
    checkDates(false,$('TextBoxHotelDepartDate'),$('TextBoxHotelReturnDate'));
}

function blurCarDepartDate()
{
    validateDepartDate($('TextBoxCarDepartDate'));
    checkDates(true,$('TextBoxCarDepartDate'),$('TextBoxCarReturnDate'));
}

function blurCarReturnDate()
{
    validateReturnDate($('TextBoxCarReturnDate'));
    checkDates(false,$('TextBoxCarDepartDate'),$('TextBoxCarReturnDate'));
}

function getToday()
{
	var d = new Date();
	d.setHours(0);
	d.setMinutes(0);
	d.setSeconds(0);
	d.setMilliseconds(0);
	return d;	
}