var DepartingAirport = null;
var Country = null;
var Destination = null;
var DepartureDate = null;
var Duration = null;
var BoardBasis = null;
var SearchButton = null;
var Footer = null;
var pageLoad = PagePrerequisties();

function redrawControl(rValue)
{  
    if(pageLoad)
    {    
        var rootNode = document.getElementById("searchControlContainer").firstChild;
        var trLeftSpan = document.getElementById("rowSpanLeftEdge");
        var trRightSpan = document.getElementById("rowSpanRightEdge");
        var rowSpan = 0;
         
        removeChildren(rootNode);
        
        switch(rValue.value)
        {         
            case "Sun Holidays":
            case "Ski Holidays":
                rootNode.appendChild(DepartingAirport);
                rootNode.appendChild(Country);
                rootNode.appendChild(DepartureDate);
                rootNode.appendChild(Duration);
                rootNode.appendChild(BoardBasis);
                rowSpan = 8;   
                break;
            
            case "Cruises":    
            case "Accommodation Only":
                rootNode.appendChild(DepartingAirport);
                rootNode.appendChild(Country);
                rootNode.appendChild(Destination);
                rootNode.appendChild(DepartureDate);
                rootNode.appendChild(Duration);
                rootNode.appendChild(BoardBasis);
                rowSpan = 9;  
                break;
                
            case "City Breaks":
            case "Flights Only":
                rootNode.appendChild(DepartingAirport);
                rootNode.appendChild(Country);
                rootNode.appendChild(Destination);
                rootNode.appendChild(DepartureDate);
                rootNode.appendChild(Duration);
                rowSpan = 8;
                break;
            
            case "UK":
                rootNode.appendChild(Destination);
                rootNode.appendChild(DepartureDate);
                rootNode.appendChild(Duration);
                rowSpan = 6;
                ddlLookUp(rValue);//this is to get the destination for UK Breaks; 
                break;
                
            default:
                break;
        }
        
        rootNode.appendChild(SearchButton);
        rootNode.appendChild(Footer);
        
        trLeftSpan.rowSpan = rowSpan;
        trRightSpan.rowSpan = rowSpan;
    }
}

function PagePrerequisties()
{
    DepartingAirport = document.getElementById("trDepartingAirport");
    Country = document.getElementById("trCountry");
    Destination = document.getElementById("trDestination");
    DepartureDate = document.getElementById("trDepartureDate");
    Duration = document.getElementById("trDuration");
    BoardBasis = document.getElementById("trBoardBasis");
    SearchButton = document.getElementById("trSearchButton");
    Footer = document.getElementById("trFooter");
    
    if(Destination != null)
    {
        var tableToRemove = Destination.parentNode.parentNode;
        var tableParent = tableToRemove.parentNode;
        
        tableParent.removeChild(tableToRemove);
    }
    
    return DepartingAirport != null && Country != null && Destination != null && DepartureDate != null && Duration != null && BoardBasis != null && SearchButton != null && Footer != null;
}

function removeChildren(rootNode)
{
    var NodesToRemove = new Array();
    
    for(childNode in rootNode.childNodes)
    {
        if(!isNaN(childNode))
        {
            if(rootNode.childNodes[childNode].id != "")
            {
                NodesToRemove.push(rootNode.childNodes[childNode]);
            }
        }
    }
    
    if(NodesToRemove.length > 0)
    {
        for(childNode in NodesToRemove)
        {
            rootNode.removeChild(NodesToRemove[childNode]);
        }
    }
}

function ClearSearch(rValue)
{
    if(rValue.value == "dd/mm/yy")
    {
	    rValue.value = "";
    }
    else
    {
	    rValue.select();
    }
}

function CancelEventBubble()
{
    if (!e)
    { 
	    var e = window.event;
    }
	
    e.cancelBubble = true;
	
    if (e.stopPropagation)
    { 
	    e.stopPropagation();
    }
}

function validateDate(fld) 
{
    var RegExPattern = /^((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/;
    var errorMessageValidation = 'Please enter valid date as month, day, and four digit year.\nYou may use a slash, hyphen or period to separate the values.';
    var errorMessageDateRange = 'Please enter a date that is from today.';
    
    if (!fld.value.match(RegExPattern) && fld.value != "") 
    {
        alert(errorMessageValidation);
        fld.focus();
    }
    else if(fld.value != "")
    {
        if(DateValidation(fld.value, 'W', 'F'))
        {
            return;
        }
        
        alert(errorMessageDateRange);
        fld.focus(); 
    }  
}

function getHolidayTypeFromQueryString()
{   
    if (document.URL.indexOf('?') != -1) 
    { 
        var queryString = document.URL.substring(document.URL.indexOf('?') + 1, document.URL.length);

        return queryString.substring(12, queryString.indexOf('&'));
    }
}

function valDateFmt(datefmt) 
{
    myOption = -1;

    for (i=0; i < datefmt.length; i++) 
    {
        if (datefmt[i].checked) 
        {
            myOption = i;
        }
    }

    if (myOption == -1) 
    {
        alert("You must select a date format");
        return ' ';
    }
    
    return datefmt[myOption].value;
}

function valDateRng(daterng) 
{
    myOption = -1;
    
    for (i=0; i < daterng.length; i++) 
    {
        if (daterng[i].checked) 
        {
            myOption = i;
        }
    }

    if (myOption == -1) 
    {
        alert("You must select a date range");
        return ' ';
    }
    
    return daterng[myOption].value;
}

function stripBlanks(fld) 
{
    var result = ""; 
    
    for (i=0; i < fld.length; i++) 
    {
        if (fld.charAt(i) != " " || c > 0) 
        {
            result += fld.charAt(i);
    
            if (fld.charAt(i) != " ")
            {
                c = result.length;
            }
        }
    }
    
    return result.substr(0,c);
}
    
var numb = '0123456789';

function isValid(parm,val) 
{
    if (parm == "")
    { 
        return true;
    }

    for (i=0; i < parm.length; i++) 
    {
        if (val.indexOf(parm.charAt(i),0) == -1)
        {
            return false;
        }
    }
    
    return true;
}

function isNum(parm) 
{
    return isValid(parm,numb);
}

var mth = new Array(' ','january','february','march','april','may','june','july','august','september','october','november','december');
var day = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

function DateValidation(fld, fmt, rng) 
{
    var dd, mm, yy;
    var today = new Date;
    var t = new Date;
    fld = stripBlanks(fld);

    if (fld == '') 
        return false;
        
    var d1 = fld.split('\/');

    if (d1.length != 3) 
        d1 = fld.split(' ');
    
    if (d1.length != 3) 
        return false;

    if (fmt == 'u' || fmt == 'U') {
        dd = d1[1]; mm = d1[0]; yy = d1[2];}

    else if (fmt == 'j' || fmt == 'J') {
        dd = d1[2]; mm = d1[1]; yy = d1[0];}
    
    else if (fmt == 'w' || fmt == 'W'){
       dd = d1[0]; mm = d1[1]; yy = d1[2];}

    else 
        return false;

    var n = dd.lastIndexOf('st');

    if (n > -1) 
        dd = dd.substr(0,n);

    n = dd.lastIndexOf('nd');

    if (n > -1) 
        dd = dd.substr(0,n);

    n = dd.lastIndexOf('rd');

    if (n > -1) 
        dd = dd.substr(0,n);

    n = dd.lastIndexOf('th');

    if (n > -1) 
        dd = dd.substr(0,n);

    n = dd.lastIndexOf(',');

    if (n > -1) 
        dd = dd.substr(0,n);

    n = mm.lastIndexOf(',');

    if (n > -1) 
        mm = mm.substr(0,n);

    if (!isNum(dd)) 
        return false;

    if (!isNum(yy)) 
        return false;

    if (!isNum(mm)) 
    {
        var nn = mm.toLowerCase();
        
        for (var i=1; i < 13; i++) 
        {
            if (nn == mth[i] || nn == mth[i].substr(0,3)) 
            {
                mm = i; 
                i = 13;
            }
        }
    }

    if (!isNum(mm)) 
        return false;

    dd = parseFloat(dd); 
    mm = parseFloat(mm); 
    yy = parseFloat(yy);

    if (yy < 100) 
        yy += 2000;

    if (yy < 1582 || yy > 4881) 
        return false;

    if (mm == 2 && (yy%400 == 0 || (yy%4 == 0 && yy%100 != 0))) 
        day[mm-1]++;

    if (mm < 1 || mm > 12) 
        return false;

    if (dd < 1 || dd > day[mm-1]) 
        return false;

    t.setDate(dd); 
    t.setMonth(mm-1); 
    t.setFullYear(yy);

    if (rng == 'p' || rng == 'P') 
    {
        if (t > today) 
            return false;
    }
    else if (rng == 'f' || rng == 'F') 
    {
        if (t < today) 
            return false;
    }
    
    else if (rng != 'a' && rng != 'A') 
        return false;

    return true;
}