function switchMeer() {

    var more = document.getElementById("more");
    var link = document.getElementById("link");

    if (more != null) {
            if (more.style.display == 'none') {
                    more.style.display = 'block';
                    link.innerHTML=""; // &laquo; minder resultaten
            } else {
                    more.style.display = 'none';
                    link.innerHTML='<a href="javascript:switchMeer();">'
                                    + '<font size="1">meer... &raquo;'
                                    + '</font></a>';
            }
    }
}

function changeBorders() {
    borderStyle ++;
    if (borderStyle > 3) {
        borderStyle = 0;
    }

    var boxes = getElementsByClass('smoothBox');

    for (var i=0; i<boxes.length; i++) {
        switch(borderStyle) {
            case 0:boxes[i].style.border = '1px solid #ff0099';break;
            case 1:boxes[i].style.border = '1px solid #0088ff';break;
            case 2:boxes[i].style.border = '2px solid #ff0099';break;
            case 3:boxes[i].style.border = '2px solid #0088ff';break;
            default:break;
        }
    }
}


function getElementsByClass(searchClass,node,tag) {
    var classElements = new Array();
    if ( node == null )
            node = document;
    if ( tag == null )
            tag = '*';
    var els = node.getElementsByTagName(tag);
    var elsLen = els.length;
    var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
    for (i = 0, j = 0; i < elsLen; i++) {
            if ( pattern.test(els[i].className) ) {
                    classElements[j] = els[i];
                    j++;
            }
    }
    return classElements;
} // getElementsByClass

function setDatumInitieel() {
    //jaren gaan veranderen in de selYear in form op pagina:
    var jaar1 = jaar;
    var jaar2 = jaar+1;

    var dates = document.dates;
    var datesT = document.datesT;

    dates.selYear.options[0]=new Option(jaar1);
    dates.selYear.options[1]=new Option(jaar2);

    datesT.selYearT.options[0]=new Option(jaar1);
    datesT.selYearT.options[1]=new Option(jaar2);

    maandheen = currentheendatum.getMonth() ;
    dagheen = currentheendatum.getDate();
    jaarheen = currentheendatum.getFullYear();

    maandterug = currentterugdatum.getMonth() ;
    dagterug = currentterugdatum.getDate();
    jaarterug = currentterugdatum.getFullYear();

    dates.selDay.selectedIndex = dagheen-1;

    dates.selMonth.selectedIndex = maandheen;
    if (jaar1 == jaarheen) {
        dates.selYear.selectedIndex = (0);
    }
    else {
        dates.selYear.selectedIndex = (1);
    }

    datesT.selDayT.selectedIndex = dagterug-1;
    datesT.selMonthT.selectedIndex = maandterug;
    if (jaar1 == jaarterug) {
        datesT.selYearT.selectedIndex = (0);
    }
    else {
        datesT.selYearT.selectedIndex = (1);
    }
}

function showLayer(layerName)
{
    if (document.layers){ //ns4
        if (document.layers[layerName]) {
            document.layers[layerName].visibility = "show";
            document.layers[layerName].left = window.innerWidth/2 -134;
        }

    } else if (document.getElementById){ //ie4, NS6
//        document.getElementById(layerName).style.visibility='visible';
        document.getElementById(layerName).style.display='block';
    }
}
function hideLayer(layerName)
{
    if (document.layers){ //ns4

        document.layers[layerName].visibility = "hide";

    } else if (document.getElementById){ //ie4
//        alert('setting display to none for ' + document.getElementById(layerName));
//        document.getElementById(layerName).style.visibility="hidden";
        document.getElementById(layerName).style.display='none';
    }
}

function toggle(obj) {
    var el = document.getElementById(obj);
    el.style.display = (el.style.display != 'none' ? 'none' : '' );
    //alert('new display value: ' + el.style.display);
}

function switchVisibility(layerName) {
    //showMessage('style.display = ' + document.getElementById(layerName).style.display);
    if (document.getElementById(layerName).style.display === 'none') {
        showLayer(layerName);
    } else {
        hideLayer(layerName);
    }
}

function loadServletURL() {
    var http = window.XMLHttpRequest ? new XMLHttpRequest()
                                     : new ActiveXObject('Microsoft.XMLHTTP');
    http.onreadystatechange = function() {
        if(http.readyState == 4){
            servletURL = http.responseText;
            //alert('got servlet URL: ' + servletURL);
        }
    }
    http.open("GET", "/scripts/getServletURL.php", true);
    http.send("");
}

function expandFlightDetails(index) {
    document.getElementById("flightDetails"+index).style.display = 'block';
    document.getElementById("expandLink"+index).innerHTML = 
                    "<a class='blueLinkNoLine' href='#' onclick="
                    + "'collapseFlightDetails(" + index + "); return false;'>"
                    + "&laquo; vluchtdetails</a>";
}
function collapseFlightDetails(index) {
    document.getElementById("flightDetails"+index).style.display = 'none';
    document.getElementById("expandLink"+index).innerHTML =
                    "<a class='blueLinkNoLine' href='#' onclick="
                    + "'expandFlightDetails(" + index + "); return false;'>"
                    + "vluchtdetails &raquo;</a>";
}

function getTimeDifference(time1, time2) {
    var hour1 = parseInt(time1.substring(0,2),10); // parse as decimal number
    var hour2 = parseInt(time2.substring(0,2),10);
    var mins1 = parseInt(time1.substring(3,5),10);
    var mins2 = parseInt(time2.substring(3,5),10);
    var t;

    if (hour1 > hour2) {
        hour2 += 24; // correction for overnight changes
    }
    t = ((hour2 - hour1) * 60) + (mins2 - mins1);
    return Math.floor(t/60) + "h" + ((t % 60 < 10) ? ("0" + t % 60) : (t % 60));
}

function checkHashParams() {
    var hash = window.location.hash;
    if (hash.indexOf("uq") == -1) {
        return; // don't do anything
    }
    postdat = hash;
    sessionID = hash.substring(hash.indexOf("uq=")+3, 24);

    // check if the session exists in the cache
    YAHOO.util.Connect.asyncRequest('GET', '/req/' + sessionID + '.xml',
                   {success:loadSession,
                    failure:newSearch});
}

function urlencode(str) {
    var chars = ["à","á","ã","ä","ç","è","é","ê","ë","ì","í","î","ï",
                 "ò","ó","ô","õ","ö","ù","ú","û","ü","ý","ÿ","ø"];
    var trans = ["a","a","a","a","c","e","e","e","e","i","i","i","i",
                 "o","o","o","o","o","u","u","u","u","y","y","o"];
    for (var i=0; i<chars.length; i++) {
        var re = new RegExp(chars[i],"g");
        str = str.replace(re, trans[i]);
    }
    //alert('str 1: ' + str);
    str = escape(str); // replace symbols and spaces
    //alert('str 2: ' + str);
    str = str.replace(/%20/g, '+');
    
    return str;
}

function urldecode(str) {
    str = str.replace(/\+/g, ' ');
    str = unescape(str);
    return str;
}

function setFormInputs() {
    // get index of origin and destination
    var depStart = postdat.indexOf("&autocompheen")+"&autocompheen=".length;
    var retStart = postdat.indexOf("&autocompterug")+"&autocompterug=".length;
    var depEnd = postdat.indexOf("&autocompterug");
    var retEnd = postdat.indexOf("&datumheen");
    // dep and ret dates
    var depDateStart = postdat.indexOf("&datumheen")+"&datumheen=".length;
    var retDateStart = postdat.indexOf("&datumterug")+"&datumterug=".length;
    var depDateEnd = postdat.indexOf("&datumterug");
    var retDateEnd = postdat.indexOf("&retourenkel");
    // trip type & num of adults
    var tripTypeStart =  postdat.indexOf("&retourenkel")+"&retourenkel=".length;
    var tripTypeEnd =    postdat.indexOf("&aantalreiz");
    var numAdultsStart = postdat.indexOf("&aantalreiz")+"&aantalreiz=".length;
    var numAdultsEnd =   postdat.indexOf("&aantalkin");

    if (depStart == -1) {
        trackError("setFormInputs/missing parameter autocompheen");
        window.location.hash = '';
        return;
    }

    var depCity = urldecode(postdat.substring(depStart, depEnd));
    var retCity = urldecode(postdat.substring(retStart, retEnd));
    var depDate = postdat.substring(depDateStart, depDateEnd);
    var retDate = postdat.substring(retDateStart, retDateEnd);
    var tripType = postdat.substring(tripTypeStart, tripTypeEnd);
    var numAdults = postdat.substring(numAdultsStart, numAdultsEnd);

    // fill in form data
    if (tripType == "Retour") {
        document.f1.r1[0].checked = "checked";
    } else {
        document.f1.r1[1].checked = "checked";
        hideReturnBox();
    }
    document.f1.adults.value = numAdults;
    document.getElementById('ysearchinput2').value = depCity;
    document.getElementById('ysearchinput3').value = retCity;
    // 2012/01/09  => Y:0-4, M:5-7, D:8-10
    document.dates.selDay.value = (depDate.substring(8,9) == "0")
                ? depDate.substring(9,10) : depDate.substring(8,10);
    document.dates.selMonth.value = (depDate.substring(5,6) == "0")
                ? depDate.substring(6,7) : depDate.substring(5,7);
    document.dates.selYear.value = depDate.substring(0,4);
    // return date
    document.datesT.selDayT.value = (retDate.substring(8,9) == "0")
                ? retDate.substring(9,10) : retDate.substring(8,10);
    document.datesT.selMonthT.value = (retDate.substring(5,6) == "0")
                ? retDate.substring(6,7) : retDate.substring(5,7);
    var selYear = document.getElementById("selYear");
    var selYearT = document.getElementById("selYearT");
    for (var x = 0;x < selYear.options.length;x++) {
        if (selYear.options[x].text == depDate.substring(0,4)) {
            selYear.selectedIndex = x;
            break;
        }
    }
    for (var y = 0;y < selYearT.options.length;y++) {
        if (selYearT.options[y].text == retDate.substring(0,4)) {
            selYearT.selectedIndex = y;
            break;
        }
    }
} // setFormInputs

var loadSession = function(o) {
    // display circle-loader
    document.getElementById("circle-loader").style.display = "block";
    // set resultpage variables
    flights = new Array();
    filters = new Array();
    providersArray = new Array();
    frozen = false;
    currentPage = 1;
    sortBy = "prijs";   // sort type
    failures = 0;       // script exceptions
    countryFilters = {'NL':true, 'BE':true, 'DE':true};
    //globalSettingsInitialized = false;
    globalAirline = undefined;
    count = 0;
    setFormInputs();

    // directly load the JSON file and show the results
    getResults();
    
    // TODO: tracker: reload results
    urchinTracker('/reloadResults');
}

var newSearch = function(o) {
    postdat = window.location.hash.substring(1);
    sessionID = getRandomString();

    setFormInputs();

    var reqData = postdat.substring(postdat.indexOf("&autocompheen"));
    // replace invalid uq with new session ID
    postdat = "uq=" + sessionID + reqData;
    formSubmitted = true;
    validate(postdat); // resend the post data (req params)
}

function init() {
    verbose = false;
    useHashParams = true;
    hash = window.location.hash;
    complete2 = true;
    complete3 = true;
    ffClearActive = true; // onclick, clear departure form field => active
    formSubmitted = false;
    allInFares = false;
    labelUndefinedError = false;
    airlineFilterInitVal = true;
    clickdef = "false";
    frozen = false;
    stringLength = 20;  // used by getRandomString()
    servletURL = '';    // initialized by loadServletURL
    borderStyle = 0;

    sortPriceFlag = 1;
    sortAirlineFlag = 0;
    sortTimeFlag = 0;
    sortDurationFlag = 0;
    sortStopsFlag = 0;
    ival1 = null;
    ival2 = null;

    requestError = "Er is een fout opgetreden bij het verwerken van uw "
                 + "aanvraag. Probeert u het later nogmaals.";
    
    stopImg = "<img id='stop' alt='Stop' src='/images/closeBlack.png' border='0'/>";
    breadcrumb = ""; // empty at start

    // Global Variables (uit oude buid-results.js)
    airlinePicturesArray = new Array("AA","DL","WN","UA","JL","NW","LH","AF",
    "NH","EL","US","CO","BA","QF","IB","KE","FR","HP","AC","SK","KL","U2","CA",
    "TG","CZ","MH","AS","SV","PC","CX","AZ","LX","LY","SQ","TW","VY","NE","7H",
    "NB","AB","HV","AY","AM","AO","AP","AT","BD","BE","CI","CJ","CL","CP","CY",
    "DE","DI","DM","DP","D9","EI","EK","FI","FJ","FL","FM","FQ","F7","F9","HF",
    "HG","H9","IG","JF","JI","JK","KA","KF","LO","LS","LT","MA","MP","MS","MT",
    "MU","NQ","OR","OS","OU","OV","PN","PY","QE","Q6","SA","SN","SU","TK","TP",
    "TS","TV","T4","VB","VG","VY","WH","WW","W6","XC","XG","ZU",
    "1I","2H","2L","2T","3L","4U","5Y","6B","8A","8O");
    maxProvidersPerFlight = 3; // max number of providers that is displayed in a compact result box
    maxFlightsPerPage = 15; // max number of flights to display on a single page
    maxTime = 70;       // number of seconds before scanning stops
    ivalLength = 2;       // waittime between scanning
    maxFailures = 5;
    maxLabelLength = 21;
    // static list of providers, if length is changed, also change @progressC.
    staticList = {0:'ryanair.com',1:'cheaptickets.nl',2:'transavia.nl',
                  3:'vliegtickets.nl',4:'klm.nl',5:'ebookers.nl',
                  6:'vliegfabriek.nl',7:'expedia.nl',
                  8:'easyjet.nl', 9:'budgetair.nl'};

    //origins = {};
    
    randMax   = 99999999; // warning: altering this value is a bad idea
    highValue = 9999999;  // can be set to any big number (at least 20k)

    rootURL = "http://www.vliegticketssupermarkt.nl"; // goedkoopstevliegtickets
    loadServletURL();   // AJAX request for data/nl/servleturl.xml
    document.getElementById("circle-loader").style.display = "none";

    document.getElementById('odForm').setAttribute( "autocomplete", "off" );
    document.getElementById("ysearchinput3").focus();

    YAHOO.example.ACFlatData.init();
    setDatumInitieel();
    
    YAHOO.example.calendar.cal1 = new YAHOO.widget.CalendarGroup("cal1","cal1Container", {pages:2, mindate:maand+"/"+dag+"/"+jaar ,maxdate:maandT+"/"+0+"/"+jaar,title:"Selecteer een datum:", close:true} );
    YAHOO.example.calendar.cal1T = new YAHOO.widget.CalendarGroup("cal1T","cal1ContainerT", {pages:2, mindate:maand+"/"+dag+"/"+jaar ,maxdate:maandT+"/"+0+"/"+jaar,title:"Selecteer een datum:", close:true} );
    YAHOO.example.calendar.cal1.selectEvent.subscribe(handleSelect, YAHOO.example.calendar.cal1, true);
    YAHOO.example.calendar.cal1T.selectEvent.subscribe(handleSelectT, YAHOO.example.calendar.cal1T, true);
    YAHOO.example.calendar.cal1.cfg.setProperty("MONTHS_LONG",["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"]);
    YAHOO.example.calendar.cal1.cfg.setProperty("WEEKDAYS_SHORT",["Zo","Ma","Di","Wo","Do","Vr","Za"]);
    YAHOO.example.calendar.cal1T.cfg.setProperty("MONTHS_LONG",["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"]);
    YAHOO.example.calendar.cal1T.cfg.setProperty("WEEKDAYS_SHORT",["Zo","Ma","Di","Wo","Do","Vr","Za"]);

    YAHOO.util.Event.addListener("show3up", "click", YAHOO.example.calendar.cal1.show, YAHOO.example.calendar.cal1, true);
    YAHOO.util.Event.addListener("show3upT", "click", YAHOO.example.calendar.cal1T.show, YAHOO.example.calendar.cal1T, true);

    YAHOO.example.calendar.cal1.render();
    YAHOO.example.calendar.cal1T.render();

    YAHOO.util.Event.addListener(["selMonth","selDay","selYear"], "change", updateCal);
    YAHOO.util.Event.addListener(["selMonthT","selDayT","selYearT"], "change", updateCalT);
    updateCal("true");
    updateCalT("true");

    if (useHashParams) {
        if (hash.length > 0) {
            document.getElementById('leftColumn').style.display = 'none';
            document.getElementById('rightColumn').style.display = 'none';
        }
        checkHashParams();
    }

    ival3 = setInterval(function() {
        if (window.location.hash != hash) {
            hash = window.location.hash;
            // if back or forward button used (no form submit)
            if (formSubmitted == false || count > 0) {
                window.location.reload();
            }
        }
    }, 100);

}



