var partnerUrls;
var partnerNames;
var numPartnersChecked;
var minPartnersChecked = 3;
var maxPartnersChecked = 3;
var popsEnabled;
var serializedSearch;
var partnersChecked = new Hash();
var popWindows = new Hash();
var popTiled = true;

popsEnabled = !Prototype.Browser.IE;

function step1 () {
    $('step1_headline').className = 'color';
    $('airfare_form').enable();
    $('main_area').style.background = 'url(/images/step1_bg.gif) bottom right no-repeat';
    $('but_search').toggle();
    $('step1_inner').show();
    new Effect.Opacity('step2', { to: 0, duration: 0.5, afterFinish: function() {
        new Effect.Opacity('step1_inner', { to: 0.999, duration: 0.5 });
        $('step2').hide();
        $('from').focus();
    } });
}

function step1Car () {
    $('step1_headline').className = 'color';
    $('car_form').enable();
    $('main_area').style.background = 'url(/images/step1_car_bg.gif) bottom right no-repeat';
    $('but_search').toggle();
    $('step1_inner').show();
    new Effect.Opacity('step2', { to: 0, duration: 0.5, afterFinish: function() {
        new Effect.Opacity('step1_inner', { to: 0.999, duration: 0.5 });
        $('step2').hide();
        $('from').focus();
    } });
}

function step1Hotel () {
    $('step1_headline').className = 'color';
    $('hotel_form').enable();
    $('main_area').style.background = 'url(/images/step1_hotel_bg.gif) bottom right no-repeat';
    $('but_search').toggle();
    $('step1_inner').show();
    new Effect.Opacity('step2', { to: 0, duration: 0.5, afterFinish: function() {
        new Effect.Opacity('step1_inner', { to: 0.999, duration: 0.5 });
        $('step2').hide();
        $('city').focus();
    } });
}

function updateStep2Msg () {
    $('step2_msg').innerHTML = ' - Select ' + 
        (minPartnersChecked == maxPartnersChecked ? 
            minPartnersChecked + ' Site' + (minPartnersChecked == 1 ? '' : 's') :
            minPartnersChecked + 1 == maxPartnersChecked ?
                minPartnersChecked + ' or ' + maxPartnersChecked + ' Sites' :
                'from ' + minPartnersChecked + ' to ' + maxPartnersChecked + ' Sites') + ' to Compare';
}

function showPartnerButtons () {
    var from = normalizeAirport($('from').value);
    var to = normalizeAirport($('to').value);
    var searchMsg = from + ' to ' + to;
    $('search_msg').innerHTML = searchMsg;
    $('search_box_msg').innerHTML = 'Cheapest Flights';
    centerLoader('loader');
    $('step1_headline').className = 'gray';
    $('step2_headline').className = 'color';
    $('main_area').style.background = 'url(/images/step2_bg.gif) bottom right no-repeat';
    $('step2_headline_text').innerHTML = cityOnly(to);
    $('has_hotel').innerHTML = ($('air_and_hotel').checked) ? ' &amp; Hotels' : '';
    $('but_search').toggle();
    serializedSearch = Form.serialize($('airfare_form'));
    dropCookie('form', serializedSearch, 30 * 24 * 60 * 60);
    $('step1').style.filter = 'alpha(opacity=50)';
    $('airfare_form').disable();
    new Effect.Opacity('step1_inner', { to: 0.5, duration: 0.5, afterFinish: function() {
        new Ajax.Updater(
            'partner_list', 
            '/l1/partners.html?' + serializedSearch, { 
                method: 'get', 
                evalScripts: true, 
                onComplete: function (transport) {
                    $('loader').toggle();
                    $('step2').toggle();
                    new Effect.Opacity('step2', { to: 0.999, duration: 0.5 });
                }
            }
        );
    } });
}

function showCarPartnerButtons () {
    var from = normalizeAirport($('from').value);
    var to = normalizeAirport($('to').value);
    $('search_msg').innerHTML = $('dropoff_different_from_pickup').checked ? from + ' to ' + to : from;
    $('search_box_msg').innerHTML = 'Cheap Car Rentals';
    centerLoader('loader');
    $('step1_headline').className = 'gray';
    $('step2_headline').className = 'color';
    $('main_area').style.background = 'url(/images/step2_bg.gif) bottom right no-repeat';
    $('but_search').toggle();
    serializedSearch = Form.serialize($('car_form'));
    dropCookie('car_form', serializedSearch, 30 * 24 * 60 * 60);
    $('step1_inner').style.filter = 'alpha(opacity=50)';
    $('car_form').disable();
    new Effect.Opacity('step1_inner', { to: 0.5, duration: 0.5, afterFinish: function() {
        new Ajax.Updater(
            'partner_list', 
            '/l1/partners.html?' + serializedSearch, { 
                method: 'get', 
                evalScripts: true, 
                onComplete: function (transport) {
                    $('loader').toggle();
                    $('step2').toggle();
                    new Effect.Opacity('step2', { to: 0.999, duration: 0.5 });
                }
            }
        );
    } });
}

function showHotelsPartnerButtons () {
    var loc = $('location').value;
    $('search_msg').innerHTML = loc;
    $('search_box_msg').innerHTML = 'Great Hotel Rates';
    centerLoader('loader');
    $('step1_headline').className = 'gray';
    $('step2_headline').className = 'color';
    $('main_area').style.background = 'url(/images/step2_bg.gif) bottom right no-repeat';
    $('but_search').toggle();
    serializedSearchHash = $('hotel_form').serialize(true);
    serializedSearch = $('hotel_form').serialize();
    dropCookie('hotel_form', serializedSearch, 30 * 24 * 60 * 60);
    $('step1_inner').style.filter = 'alpha(opacity=50)';
    $('hotel_form').disable();
    new Effect.Opacity('step1_inner', { to: 0.5, duration: 0.5, afterFinish: function() {
        new Ajax.Updater(
            'partner_list', 
            '/l1/partners.html?' + serializedSearch, { 
                method: 'get', 
                evalScripts: true, 
                onComplete: function (transport) {
                    $('loader').toggle();
                    $('step2').toggle();
                    new Effect.Opacity('step2', { to: 0.999, duration: 0.5 });
                }
            }
        );
    } });
}

var hotelChecked = false;

function updatePartners () {
    hotelChecked = !hotelChecked;
    $('hotel').checked = hotelChecked;
    $('air_and_hotel').checked = $('hotel').checked;
    $('has_hotel').innerHTML = ($('air_and_hotel').checked) ? ' &amp; Hotels' : '';
    var from = normalizeAirport($('from').value);
    var to = normalizeAirport($('to').value);
    var searchMsg = from + ' to ' + to;
    $('search_msg').innerHTML = searchMsg;
    centerLoader('loader');
    $('airfare_form').enable();
    serializedSearch = Form.serialize($('airfare_form'));
    $('airfare_form').disable();
    dropCookie('form', serializedSearch, 30 * 24 * 60 * 60);
    new Ajax.Updater(
        'partner_list', 
        '/l1/partners.html?' + serializedSearch, { 
            method: 'get', 
            evalScripts: true, 
            onComplete: function (transport) {
                setTimeout("$('loader').toggle()", 1500);
            }
        }
    );
}

function checkOnewayCar() {
    if ($('dropoff_different_from_pickup').checked) {
        new Effect.BlindDown('oneway-car', { duration: 0.2, afterFinish: function() { $('to').focus(); }});
    } 
    else {
        new Effect.BlindUp('oneway-car', { duration: 0.2 });
    }
}

function centerLoader (area) {
    area = $(area);
    var mainPos = $('main_area').cumulativeOffset();
    var mainDims = $('main_area').getDimensions();
    var loader = area.getDimensions();
    x = Math.round(((mainDims['width'] - loader['width']) / 2) + mainPos[0])  + 'px';
    area.style.left = x;
    area.style.top = '180px';
    area.toggle();
}    

function setDates () {
    var d = $('depart').value;
    var re = /^(\d\d)\/(\d\d)\/(\d\d\d\d)$/;
    d = d.match(re);
    if (d != null) {
        d = '' + d[3] + d[1] + d[2];
        var elt = datePickerController.getDatePicker('return');
        if (elt) elt.setRangeLow(d);
    }
}

var tempPopWindowIndex = 0;

function getTempPopWindow (partnerID) {
    tempPopWindowIndex++;
    var win = window.open('/thunk-msg.html?' + partnerUrls.get(partnerID) + '&' + serializedSearch, 'win_' + tempPopWindowIndex, 'toolbar,menubar,scrollbars,resizable,location,screenX=0,screenY=0,left=0,top=0,width=10,height=10'); // 480x360
    win.blur();
    window.focus();
    return win;
}

function checkPartner (partnerID) {
    if (partnersChecked.get(partnerID)) return;
    $('check_' + partnerID).src = '/images/check.gif';
    partnersChecked.set(partnerID, true);
    numPartnersChecked++;
    if (!popsEnabled && !popWindows.get(partnerID)) {
        popWindows.set(partnerID, getTempPopWindow(partnerID));
    }
}

function uncheckPartner (partnerID) {
    if (!partnersChecked.get(partnerID)) return;
    $('check_' + partnerID).src = '/images/check_blank2.gif';
    partnersChecked.unset(partnerID);
    numPartnersChecked--;
    if (popWindows.get(partnerID)) {
        popWindows.get(partnerID).close();
        popWindows.unset(partnerID);
    }
}

function selectPartner (partnerID, size) {
    size = (size == 's') ? '_small' : '';
    if (numPartnersChecked >= maxPartnersChecked && !partnersChecked.get(partnerID)) {
        displayError('You can only compare ' + (minPartnersChecked != maxPartnersChecked ? 'up to ' : '') + maxPartnersChecked + ' site' + (maxPartnersChecked == 1 ? '' : 's') + ' at a time.', 1, partnerID); 
    }
    else if (!partnersChecked.get(partnerID)) {
        $('adv_' + partnerID).style.background = 'url(/images/button_hover' + size + '.gif) top left no-repeat';
        checkPartner(partnerID);
    } 
    else { 
        $('adv_' + partnerID).style.background = 'url(/images/button' + size + '.gif) top left no-repeat';
        uncheckPartner(partnerID);
    }
}

function doPopWindows () {

    if (numPartnersChecked < minPartnersChecked) {
        displayError('Please select ' + (minPartnersChecked != maxPartnersChecked ?  'at least ' : '') + minPartnersChecked + ' site' + (minPartnersChecked == 1 ? '' : 's') + ' to compare.', 0, '');
        return false;
    } 

    var cascadeDelta = 50;

    var coords = new Array;

    if (popTiled) {
        var numWindowsHorizontally = numPartnersChecked == 4 ? 2 : numPartnersChecked;
        var numWindowsVertically = numPartnersChecked == 4 ? 2 : 1;
        var windowWidth = screen.availWidth / numWindowsHorizontally;
        var windowHeight = screen.availHeight / numWindowsVertically;
        for (var i = 0; i < numPartnersChecked; i++) {
            var c = new Object;
            c.left = Math.floor((i % numWindowsHorizontally) * windowWidth + 0.5);
            c.top = Math.floor(Math.floor(i / numWindowsHorizontally) * windowHeight + 0.5);
            c.width = Math.floor(windowWidth + 0.5);
            c.height = Math.floor(windowHeight + 0.5);
            coords.push(c);
        }
    }
    else {
        var windowWidth = screen.availWidth - cascadeDelta * (numPartnersChecked - 1);
        var windowHeight = screen.availHeight - cascadeDelta * (numPartnersChecked - 1);
        for (var i = 0; i < numPartnersChecked; i++) {
            var c = new Object;
            c.left = i * cascadeDelta;
            c.top = i * cascadeDelta;
            c.width = Math.floor(windowWidth + 0.5);
            c.height = Math.floor(windowHeight + 0.5);
            coords.push(c);
        }
    }

    var index = 0;
    partnersChecked.keys().each(function (partnerID) {
        var win;
        var url = '/thunk-redir.html?' + partnerUrls.get(partnerID) + '&' + serializedSearch;
        var win = popWindows.get(partnerID);
        var c = coords[index];
        if (c) {
            if (win) {
                (document.all ? win.document.body : win).onbeforeunload = null;
                win.resizeTo(10, 10);
                win.moveTo(c.left, c.top);
                win.resizeTo(c.width, c.height);
                win.focus();
                win.document.location.href = url;
            }
            else {
                win = window.open(url, 'win_' + partnerID, 'toolbar,menubar,scrollbars,resizable,location,screenX=' + c.left + ',screenY=' + c.top + ',left=' + c.left + ',top=' + c.top + ',width=10,height=10');
                if (win) win.resizeTo(c.width, c.height);
            }
        }
        index++;
        $('check_' + partnerID).src = '/images/check_blank2.gif';
    });

    partnersChecked = new Hash();
    popWindows = new Hash();
    numPartnersChecked = 0;
}

function showDeals () {
    clearBubble();
    var from = normalizeAirport($('from').value);
    $('search_box_msg').innerHTML = 'Getting Amazing Deals...';
    $('search_msg').innerHTML = from;
    centerLoader('loader');
    serializedSearch = Form.serialize($('deals_form'));
    dropCookie('deals_form', serializedSearch, 30 * 24 * 60 * 60);
    new Ajax.Updater(
        'feeds', 
        '/l1/deals.html?' + serializedSearch, { 
            method: 'get', 
            evalScripts: true, 
            onComplete: function (transport) {
                setTimeout("$('loader').toggle()",500);
            }
        }
    );
}

function showAllDeals (category) {
    clearBubble();
    var from = normalizeAirport($('from').value);
    $('search_box_msg').innerHTML = 'Getting Amazing Deals...';
    $('search_msg').innerHTML = from;
    centerLoader('loader');
    serializedSearch = Form.serialize($('deals_form'));
    dropCookie('deals_form', serializedSearch, 30 * 24 * 60 * 60);
    new Ajax.Updater(
        'feeds', 
        '/l1/all-deals.html?category=' + category + '&' + serializedSearch, { 
            method: 'get', 
            evalScripts: true, 
            onComplete: function (transport) {
                setTimeout("$('loader').toggle()",500);
            }
        }
    );
}

