String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };
var whitespace = " \t\n\r";
var decimalPointDelimiter = "."

var mPrefix = "You did not enter a value into the "
var mSuffix = " field. This is a required field. Please enter it now."

var iEmail = "This field must be a valid email address (like foo@bar.com). Please reenter it now."

var defaultEmptyOK = false


function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

function isWhitespace (s)

{   var i;
    if (isEmpty(s)) return true;
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);

        if (whitespace.indexOf(c) == -1) return false;
    }

    // All characters are whitespace.
    return true;
}


function isLetter (c)
{   return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) )
}


function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}


function isInteger (s)

{   var i;

    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);

    // Search through string's characters one by one
    // until we find a non-numeric character.
    // When we do, return false; if we don't, return true.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);

        if (!isDigit(c)) return false;
    }

    // All characters are numbers.
    return true;
}

function isFloat (s)

{   var i;
    var seenDecimalPoint = false;

    if (isEmpty(s)) 
       if (isFloat.arguments.length == 1) return defaultEmptyOK;
       else return (isFloat.arguments[1] == true);

    if (s == decimalPointDelimiter) return false;

    // Search through string's characters one by one
    // until we find a non-numeric character.
    // When we do, return false; if we don't, return true.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);

        if ((c == decimalPointDelimiter) && !seenDecimalPoint) seenDecimalPoint = true;
        else if (!isDigit(c)) return false;
    }

    // All characters are numbers.
    return true;
}

function isAlphabetic (s)

{   var i;

    if (isEmpty(s)) 
       if (isAlphabetic.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphabetic.arguments[1] == true);

    // Search through string's characters one by one
    // until we find a non-alphabetic character.
    // When we do, return false; if we don't, return true.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is letter.
        var c = s.charAt(i);

        if (!isLetter(c))
        return false;
    }

    // All characters are letters.
    return true;
}

function isAlphanumeric (s)

{   var i;

    if (isEmpty(s)) 
       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);

    // Search through string's characters one by one
    // until we find a non-alphanumeric character.
    // When we do, return false; if we don't, return true.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number or letter.
        var c = s.charAt(i);

        if (! (isLetter(c) || isDigit(c) ) )
        return false;
    }

    // All characters are numbers or letters.
    return true;
}

function isAlphanumericSpace (s)

{   var i;

    if (isEmpty(s)) 
       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);

    // Search through string's characters one by one
    // until we find a non-alphanumeric character (spaces allowed).
    // When we do, return false; if we don't, return true.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number or letter.
        var c = s.charAt(i);

        if (! (isLetter(c) || isDigit(c) || (whitespace.indexOf(c) != -1) ) )
        return false;
    }

    // All characters are numbers or letters.
    return true;
}

function isEmail (s)
{   if (isEmpty(s)) 
       if (isEmail.arguments.length == 1) return defaultEmptyOK;
       else return (isEmail.arguments[1] == true);
   
    // is s whitespace?
    if (isWhitespace(s)) return false;
    
    // there must be >= 1 character before @, so we
    // start looking at character position 1 
    // (i.e. second character)
    var i = 1;
    var sLength = s.length;

    // look for @
    while ((i < sLength) && (s.charAt(i) != "@"))
    { i++
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    // look for .
    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }

    // there must be at least one character after the .
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}

function checkEmail (theField, emptyOK)
{   if (checkEmail.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else if (!isEmail(theField.value, false)) 
       return warnInvalid (theField, iEmail);
    else return true;
}


function warnEmpty (theField, s)
{   theField.focus()
    alert(mPrefix + s + mSuffix)
    return false
}


function warnInvalid (theField, s)
{   theField.focus()
    theField.select()
    alert(s)
    return false
}


function checkString (theField, s, emptyOK)
{   // Next line is needed on NN3 to avoid "undefined is not a number" error
    // in equality comparison below.
    if (checkString.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value)) 
       return warnEmpty (theField, s);
    else return true;
}
function submitFlightStatusForm(document)
{
    $j('.error').hide();
    var instanceLabel   =   document.getElementById("instanceLabel").value.trim();
    var intFromJS       =   document.getElementById("intFrom").value.trim();
    var intToJS         =   document.getElementById("intTo").value.trim();
    var flightNumberJS  =   document.getElementById("flightNumber").value.trim();
    var dateJS          =   document.getElementById("depFormatted").value.trim();
    var depHourJS       =   document.getElementById(instanceLabel+"depHour").value.trim();

    if (isEmpty(flightNumberJS))
    {
        if(!isEmpty(intFromJS) && isEmpty(intToJS))
        {
            //alert(this.errorMsgs['flightstatus.error.arrivalCity']);
            $j('.error').children('.errorContent').html('<p>'+this.errorMsgs['flightstatus.error.arrivalCity']+'</p>');
			$j('.error').show();
            return false;
        }
        if(!isEmpty(intToJS) && isEmpty(intFromJS))
        {
            //alert(this.errorMsgs['flightstatus.error.departCity']);
            $j('.error').children('.errorContent').html('<p>'+this.errorMsgs['flightstatus.error.departCity']+'</p>');
			$j('.error').show();
            return false;
        }
    }
    
    if(!isEmpty(flightNumberJS) && (!isEmpty(intToJS) || !isEmpty(intFromJS)))
    {
        //alert(this.errorMsgs['flightstatus.error.flightNumber.rule1']);
        $j('.error').children('.errorContent').html('<p>'+this.errorMsgs['flightstatus.error.flightNumber.rule1']+'</p>');
		$j('.error').show();
        document.getElementById("intFromField").value = "";
        document.getElementById("intToField").value = "";
        document.getElementById("intFrom").value="";
        document.getElementById("intTo").value=""
        //document.getElementById("flightNumber").value = "";
        $j('.majorCitySelected').hide();
        return false;
    }

    if(isEmpty(flightNumberJS) && (isEmpty(intToJS)||isEmpty(intFromJS)))
    {
        //alert(this.errorMsgs['flightstatus.error.flightNumber.rule2']);
        $j('.error').children('.errorContent').html('<p>'+this.errorMsgs['flightstatus.error.flightNumber.rule2']+'</p>');
		$j('.error').show();
        return false;
    }

    document.getElementById(instanceLabel+"depPortFormObj").value=intFromJS;
    document.getElementById(instanceLabel+"arrivalPortFormObj").value=intToJS;      
    document.getElementById(instanceLabel+"dateFormObj").value   = dateJS;      
	document.getElementById("depHour").value=depHourJS;
    if (!isEmpty(document.getElementById("flightNumber").value.trim())) {
        
        if (!validateFlight()) {
        	$j('.error').children('.errorContent').html('<p>'+this.errorMsgs['flightstatus.error.flightNumber']+'</p>');
			$j('.error').show();
        	//warnInvalid(document.forms[0].flightNumber,this.errorMsgs['flightstatus.error.flightNumber'])
            return false;
        }
        else
        {
            document.getElementById(instanceLabel+"flightNumberFormObj").value = flightNumberJS;      
        }
    }
    setFlightStatusSelections('flightstatus');
    document.getElementById('flightstatusSearchForm').submit();
    return true;
}
    
function validateFlight() 
{
    var validCodes=new Array("QF");
   // validCodes[0]="QF";
    var result = false;
		var flightNo = document.getElementById("flightNumber").value.trim();
		if (flightNo && flightNo.length > 0)
		{
			if(isAlphanumeric(flightNo))
			{
				if(isInteger(flightNo))
				{
					if(flightNo.length>4) return false;
					else return true;
				}
				if(isAlphabetic(flightNo)) return false;
				var flightNumber=document.getElementById("flightNumber").value.trim().toUpperCase().substring(0,2);
				for(i=0;i<validCodes.length;i++)
				{
					if(flightNumber.indexOf(validCodes[i])>-1&& isInteger(flightNo.substring(2, flightNo.length)) )
					{
						result = true;
					}
				}
				if(!result) return false;
				else return true;
			}
			else
			{
				return false;
			}
		}
		else
		{
			return false;
		}
}

function formatSearchResponsePageContent()
{
    var displayContent = $j('#displayContent').val();
    if(displayContent == 'true') {
        $j(".dynContent").removeClass('hidden');
    

	    var cities = $j('#destinationCities').val().split(',');
	
	    $j(cities).each(function(i){
	        $j('.'+this).removeClass('hidden');
	    });
    }
    else
    {
    	$j(".important").hide();
    }
}

function clearPort()
{
	if($j('.predictiveTextField').val() != null && $j('.predictiveTextField').val() != '')
	{		
		$j('.majorCitySelected').hide();
		$j('.predictiveTextField').val(''); 
		$j('.predictiveTextField').parent().find('input[type=hidden]').val('');
	}
}

function setFlightStatusSelections(ckeName) {
	
	var dateSelect;
	var flightNr;
	var timeSelect;
	var fromCityCode;
	var toCityCode;
	var fromCity;
	var toCity;
	
	var instanceLabel   =   document.getElementById("instanceLabel").value.trim();
	dateSelect =document.getElementById("depFormatted").value;
	
	flightNr = document.getElementById('flightNumber').value;
	
	fromCityCode=document.getElementById('intFrom').value;
	fromCity=document.getElementById('intFromField').value;
	
	toCityCode=document.getElementById('intTo').value;
	toCity=document.getElementById('intToField').value;
	
	timeSelect = document.getElementById(instanceLabel+'depHour').value;
	
    value=ckeName+"="+
    	  dateSelect+
    	  "|"+flightNr+
    	  "|"+fromCityCode+
    	  "|"+toCityCode+
    	  "|"+timeSelect;
	document.cookie=value+";path=/"; 
}

/*
 * read the cookie that was set above
 */
function getFlightStatusSelections(ckeName, airports,departCalendar) {
	
		var dateSelect;
		var flightNr;
		var fromCityCode;
		var toCityCode;
		var fromCity;
		var toCity;
		var timeSelect;
		var instance = document.getElementById("instanceLabel").value.trim();
		
		if((document.cookie.indexOf("flightstatus="))!=-1){
            var val=getCookieValue("flightstatus");
            
            val =val.split("|");
            dateSelect=val[0];
            flightNr=val[1];
            fromCityCode=val[2];
            toCityCode=val[3];
            timeSelect=val[4];
            
            document.getElementById('flightNumber').value=flightNr;
			if((fromCityCode !=null && fromCityCode.length > 0 )&& (toCityCode !=null && toCityCode.length > 0))
			{           
	            fromAirport = populateFromToBox(fromCityCode,airports);
	          	toAirport = populateFromToBox(toCityCode,airports);	          	
	          	document.getElementById('intFrom').value=fromAirport.code;
	          	document.getElementById('intFromField').value=fromAirport.airportName;
	          	document.getElementById('intTo').value=toAirport.code;
	          	document.getElementById('intToField').value=toAirport.airportName;
	        }
          	
			document.getElementById(instance+'depHour').value = timeSelect
			document.getElementById('depFormatted').value=dateSelect		
			var year=dateSelect.substring(0,4);
			var month=dateSelect.substring(4,6);
			var day=dateSelect.substring(6,8);
			
         	document.getElementById('depYear').value=year;
          	document.getElementById('depMonth').value=month;
          	document.getElementById('depDay').value=day*1;
		         	
			var tempDate=new Date(departCalendar.displayDate); 
			
			tempDate.setFullYear(year); 
			tempDate.setMonth(month); 
			tempDate.setDate(day*1); 
			departCalendar.update(tempDate); 
			var selectedDay = document.getElementById('depDay'); 

			var monthYear = month + ',' + year;
			select_Value_SetMonth(document.getElementById('depMonthYear'), monthYear);
			departCalendar.updateMonthYear(monthYear);
			select_Value_Set(document.getElementById('depDay'), day);
			departCalendar.updateDayOfMonth(departCalendar.dayField.value);
			
	}else{ 
        }
        
 }

 function populateFromToBox(code,airports)
 {
	for (var i=0;i<airports.length;i++) {
	   if (code == airports[i].code) {
		   return airports[i];
	   }
	}

    return null;
 }
 
 function select_Value_Set(selectName, Value) {
	    var SValue = Value * 1;
		for(index = 0; index < selectName.length; index++) {
		if(selectName[index].value == SValue) {
			selectName.selectedIndex = index;
		}
	}
}
function select_Value_SetMonth(selectName, Value) {

	for(index = 0; index < selectName.length; index++) {
		if(selectName[index].value == Value) {
			selectName.selectedIndex = index;
		}
	}
}
										
function qFlightStatusInit()
{
	$j('.flightNo').find('input').click(
		function()
		{
			$j('.flightNo').css('opacity',1);
			$j('.fromTo').find('input').val('');
			$j('.fromTo').css('opacity',0.4);
			$j('.fromTo').find('input').css('opacity',0.4);
			$j('.majorCitySelected').hide();
			$j('.predictiveTextToggle').css('opacity',0.4);
		}
	)
	
	$j('.flightNo').find('input').change(
		function()
		{
			$j('.flightNo').css('opacity',1);
			$j('.fromTo').find('input').val('');
			$j('.fromTo').css('opacity',0.4);
			$j('.fromTo').find('input').css('opacity',0.4);
			$j('.predictiveTextToggle').css('opacity',0.4);
			$j('.majorCitySelected').hide();
		}
	)
	
	$j('.fromTo').find('input').click(
		function()
		{
			$j('.fromTo').css('opacity',1);
			$j('.flightNo').css('opacity',0.4);
			$j('.flightNo').find('input').val('');
			$j('.fromTo').find('input').css('opacity',1);
			$j('.predictiveTextToggle').css('opacity',1);
		}
	)
	
	$j('.predictiveTextToggle').click(
		function()
		{
			$j('.fromTo').css('opacity',1);
			$j('.flightNo').css('opacity',0.4);
			$j('.flightNo').find('input').val('');
			$j('.fromTo').find('input').css('opacity',1);
			$j('.predictiveTextToggle').css('opacity',1);
		}
	)
	
	$j('.fromTo').find('input').change(
		function()
		{
			$j('.fromTo').css('opacity',1);
			$j('.flightNo').css('opacity',0.4);
			$j('.flightNo').find('input').val('');
			$j('.fromTo').find('input').css('opacity',1);
			$j('.predictiveTextToggle').css('opacity',1);
		}
	)	
}
 
$j(document).ready(qFlightStatusInit);
