﻿var cr_debug = false; // set to true for some debugging messages
var cr_country = 'de';
var cr_language = 'de';
// AJAX Request for Rental Cars
function CR_RequestCars()
{
    var Country;
    var Language;      
    var URL = '/ajax/CarRental.ashx';
    var Params = 'country=' + cr_country
                    + '&language=' + cr_language
                    + '&vendor=' + CR_GetVendor()
                    + '&pickupstation=' + $('checkOutStation').value
                    + '&pickupdate=' + $('checkOutDay').value + '.' + $('checkOutMonth').value + '.' + $('checkOutYear').value
                    + '&pickuphour=' + $('checkOutHour').value
                    + '&pickupminute=' + $('checkOutQuarter').value
                    + '&pickdropstation=' + $('returnStation').value
                    + '&pickdropdate=' + $('checkInDay').value + '.' + $('checkInMonth').value + '.' + $('checkInYear').value
                    + '&pickdrophour=' + $('checkInHour').value
                    + '&pickdropminute=' + $('checkInQuarter').value;
    new Ajax.Request(URL,
      {
        parameters: Params,
        onLoading: function() { $( 'cr_nodata' ).hide(); $( 'cr_error' ).hide(); $( 'cr_loading' ).show(); },
        onSuccess: function(transport) {new CarRental().render(transport); },
        onFailure: function() { $( 'cr_error' ).show(); },
        onException: function( request, exception ) { if ( cr_debug ) { alert( exception ) }; $( 'cr_error' ).show(); },
        onComplete: function() { $( 'cr_loading' ).hide(); }
      }
    );
}

// ensures that the country and the right timespan are selected
function CR_Validate()
{
    var date_to = new Date(parseInt(document.getElementById("checkInYear").value), parseInt(document.getElementById("checkInMonth").value - 1), parseInt(document.getElementById("checkInDay").value));
    var date_from = new Date(parseInt(document.getElementById("checkOutYear").value), parseInt(document.getElementById("checkOutMonth").value - 1), parseInt(document.getElementById("checkOutDay").value));
    var date_span = date_to.getTime() - date_from.getTime();
    date_span = parseInt(date_span / 1000 / 60 / 60 / 24);

    if ($('cr_country').value == "xx")
    {
        alert("Wählen Sie ein Anmietland aus!");
    }
    else if (date_span > 30)
    {
        alert("Der Mietzeitraum darf maximal 30 Tage betragen!");
    }
    else
    {
        CR_RequestCars();
    }
}

// Close the carrental search and check the AJAX result
function CR_Close_Search(transport)
{
    if (transport == null || transport.responseXML == null || transport.responseXML.documentElement == null)
    {
        return;
    }

    document.getElementById("slide_frame").style.display = "none";
    document.getElementById("close_button").style.display = "none";
    document.getElementById("alter_button").style.display = "block";
}

// Close the carrental search without checking the AJAX result
function CR_Close_Search()
{
    document.getElementById("slide_frame").style.display = "none";
    document.getElementById("close_button").style.display = "none";
    document.getElementById("alter_button").style.display = "block";
}

// Open the carrental search
function CR_Open_Search()
{
    document.getElementById("alter_button").style.display = "none";
    document.getElementById("close_button").style.display = "block";
    document.getElementById("slide_frame").style.display = "block";
}

// gets the selected vendor (AVIS, SIXT or both)
function CR_GetVendor()
{
    var vendor = document.carrental.carvendor;
    for (var i=0; i<vendor.length; i++)
    {
        if (vendor[i].checked)
        {
            return vendor[i].value;
        }
    }
    return false;
}

// gets the stations for a specific country
function CR_GetCountry(code)
{
    switch (code) 
    {   
        case "xx": return new Array (['Bitte auswählen','']); break;
        case "de": return new Array (['Berlin','SXF'],['Dortmund','DTM'],['Dresden','DRS'],['Hamburg','HAM'],['Köln/Bonn','CGN'],['Leipzig','LEJ'],['München','MUC'],['Rostock-Laage','RLG'],['Stuttgart','STR'],['Zweibrücken','ZQW']); break;
        case "gb": return new Array (['Edinburgh','EDI'],['London-Stansted','STN'],['Manchester','MAN']); break;
        case "ro": return new Array (['Bukarest','BBU'],['Cluj (Siebenbürgen)','CLJ']); break; 
        case "bg": return new Array (['Burgas','BOJ'],['Sofia','SOF'],['Varna','VAR']); break;   
        case "fr": return new Array (['Bordeaux','BOD'],['Korsika (Bastia)','BIA'],['Lourdes','LDE'],['Marseille','MRS'],['Nizza','NCE'],['Toulouse','TLS']); break;
        case "gr": return new Array (['Athen','ATH'],['Kavala','KVA'],['Korfu','CFU'],['Kos','KGS'],['Kreta','HER'],['Mykonos','JMK'],['Rhodos','RHO'],['Santorin','JTR'],['Thessaloniki','SKG']); break;
        case "ie": return new Array (['Dublin','DUB']); break;
        case "it": return new Array (['Bologna','BLQ'],['Lamezia Terme','SUF'],['Mailand','MXP'],['Rom','FCO'],['Sardinien','AHO'],['Verona','VRN']); break;
        case "hr": return new Array (['Dubrovnik','DBV'],['Pula','PUY'],['Split','SPU'],['Zadar','ZAD'],['Zagreb','ZAG']); break;
        case "at": return new Array (['Klagenfurt','KLU'],['Salzburg','SZG'],['Wien','VIE']); break;
        case "pl": return new Array (['Katowice','KTW'],['Warschau','WAW']); break;
        case "pt": return new Array (['Faro','FAO'],['Lissabon','LIS']); break;
        case "ru": return new Array (['Moskau','VKO'],['St. Petersburg','LED']); break;
        case "se": return new Array (['Stockholm','ARN']); break;
        case "ch": return new Array (['Zürich','ZRH']); break;
        case "es": return new Array (['Barcelona','BCN'],['Ibiza','IBZ'],['Fuerteventura','FUE'],['Las Palmas/Gran Canaria','LPA'],['Madrid','MAD'],['Malaga','AGP'],['Mallorca','PMI'],['Teneriffa Süd','TFS']); break;
        case "cz": return new Array (['Prag','PRG']); break;
        case "tr": return new Array (['Ankara','ESB'],['Antalya','AYT'],['Istanbul','SAW'],['Izmir','ADB']); break;
        case "hu": return new Array (['Budapest','BUD']); break;
        case "al": return new Array (['Tirana','TIA']); break;
        case "cs": return new Array (['Belgrad','BEG']); break;
        case "ma": return new Array (['Malta','MLA']); break;
        case "mk": return new Array (['Skopje','SKP']);break;
        case "is": return new Array (['Reykjavik','KEF']);break;
        case "lv": return new Array (['Riga','RIX']);break;
        case "ba": return new Array (['Sarajevo','SJJ']);break
        case "ua": return new Array (['Kiew','KBP']);break;
        case "dk": return new Array (['Kopenhagen','CPH']);break;
    }
}

function CR_ChangeStation()
{
    CR_FillStations($('cr_country').value);
}

// fill dropdowns with countries
function CR_FillStations(countrycode)
{
    $('checkOutStation').length = 1;
    $('returnStation').length = 1;
    
    if(countrycode != "xx")
    {
        state = CR_GetCountry(countrycode);
        $('checkOutStation').length = eval(state.length);
        $('returnStation').length = eval(state.length);
        
        for(var i = 0; i < state.length; i++)
        {
            $('checkOutStation').options[i] = new Option(state[i][0]);
            $('returnStation').options[i] = new Option(state[i][0]);
            $('checkOutStation').options[i].value = state[i][1];
            $('returnStation').options[i].value = state[i][1];                    
        }
    }
    else
    {
        $('checkOutStation').options[0] = new Option("Bitte auswählen");
        $('returnStation').options[0] = new Option("Bitte auswählen");
    }
}

// set dropoff date to pickup date if dropoff date is greater than pickup date
function CR_SetDropoffDate()
{
    if ($('checkOutYear').value >= $('checkInYear').value)
    {
        $('checkInYear').value = $('checkOutYear').value;
        
        if ($('checkOutMonth').value >= $('checkInMonth').value)
        {
            $('checkInMonth').value = $('checkOutMonth').value;
            
            if ($('checkOutDay').value >= $('checkInDay').value)
            {
                $('checkInDay').value = $('checkOutDay').value;
            }
        }
    }
}

// set pickup date to dropoff date if pickupdate is greater than dropoff date
function CR_SetPickupDate()
{
    if ($('checkOutYear').value >= $('checkInYear').value)
    {
        $('checkOutYear').value = $('checkInYear').value;
        
        if ($('checkOutMonth').value >= $('checkInMonth').value)
        {
            $('checkOutMonth').value = $('checkInMonth').value;
            
            if ($('checkOutDay').value >= $('checkInDay').value)
            {
                $('checkOutDay').value = $('checkInDay').value;
            }
        }
    }
}

// sets the return station like the selected checkout station
function CR_SetReturnStation()
{
    $('returnStation').value = $('checkOutStation').value;
}

// open the page in a new window
function CR_openLink(URL)
{
    window.open(URL, "_blank", "resizable=1,scrollbars=1,toolbar=0,width=700,height=768,screenY=0,top=0");
}

function CR_Position_Element( el )
{
    var container = $( 'cr_container' );
    Element.extend( container );
    Element.extend( el );
    var cDimensions = container.getDimensions();
    var cPosition = Position.page( container );
    var eDimensions = el.getDimensions();
    el.style.left = cPosition[ 0 ] + ( ( cDimensions.width - eDimensions.width ) / 2 ) + 'px';
    el.style.top = cPosition[ 1 ] + ( ( cDimensions.height - eDimensions.height ) / 2 ) + 'px';
}

// CarRental Class
function CarRental()
{
    /**
    * Render the carlist using the XML data response from the AJAX request
    * and the HTML template provided in this page.
    */
    this.render = function( transport )
    {
        if ( transport == null || transport.responseXML == null || transport.responseXML.documentElement == null )
        {
            if ( cr_debug )
            {
                alert( 'Transport or XML response is null!' );
            }
            $( 'cr_nodata' ).show();
            return;
        }
        var xmlDoc    = transport.responseXML.documentElement;
        var template  = document.getElementById( 'cr_carlist' );
        var clone     = template.cloneNode( true );
        var container = document.getElementById( 'cr_container' );
        if ( xmlDoc.firstChild == null || ( xmlDoc.childNodes[ 0 ].firstChild == null && xmlDoc.childNodes[ 1 ].firstChild == null ) )
        {
            if ( cr_debug )
            {
                alert( 'No car data available' );
            }
            container.innerHTML = "";
            $( 'cr_nodata' ).show();
            return; // no rental cars available!
        }
        
        var offercars = new Array().concat( 
            this._render_offercar( clone, xmlDoc.getElementsByTagName('offer_cars')[0] ) 
        );
        
        offercars.each( function( item ) // add new offercar data
            {
                item.style.display = 'block';
                clone.appendChild( item );
            }
        );
        /* place clone into DOM tree and display it */
        clone.style.display = 'block';
        container.innerHTML = clone.innerHTML;
        clone.innerHTML=""; // clear clone

        CR_Close_Search(transport);
    }
    
    // Render one car of the carlist.
    this._render_offercar = function(clone, xmlRoot)
    {    
        var carNodesArray = new Array();
        if ( xmlRoot == null || xmlRoot.firstChild == null )
        {
            if ( cr_debug )
            {
                alert( 'xmlRoot is null or empty!' );
            }
            return carNodesArray; // return empty array
        }
        var xmlOffercars = xmlRoot.getElementsByTagName('offer_car');
        
        for( i = 0; i < xmlOffercars.length; i++ )
        {
            var xmlCurOffercar = xmlOffercars[i];
            // even offers get an other CSS class then odd
            if ((i % 2) != 0)
            {
                var offercar_template = document.getElementsByClassName('switchBar', clone )[0].cloneNode(true);
                if (this._get_text(xmlCurOffercar.getElementsByTagName('vendor')[0]) == "AVIS")
                {
                    var offercar_avis_template = document.getElementById('cr_offer_avis_logo').cloneNode(true);
                    offercar_avis_template.style.display = 'inline';
                    document.getElementsByClassName('colCarLgo', offercar_template)[0].appendChild( offercar_avis_template );
                }
                else
                {
                    var offercar_sixt_template = document.getElementById('cr_offer_sixt_logo').cloneNode(true);
                    offercar_sixt_template.style.display = 'inline';
                    document.getElementsByClassName('colCarLgo', offercar_template)[0].appendChild( offercar_sixt_template );
                }
                this._replace_text(document.getElementsByClassName('colCarOffer', offercar_template)[0], this._get_text(xmlCurOffercar.getElementsByTagName('description')[0]));
                this._replace_text(document.getElementsByClassName('colCarPrice', offercar_template)[0], this._get_text(xmlCurOffercar.getElementsByTagName('price')[0]));
                this._replace_text(document.getElementsByClassName('colCarCurrency', offercar_template)[0], this._get_text(xmlCurOffercar.getElementsByTagName('currency')[0]));
                offercar_template.classname = 'switchBar';
                document.getElementsByClassName('colCarOfferLink', offercar_template)[0].href = this._get_text(xmlCurOffercar.getElementsByTagName('link')[0]);
                carNodesArray.push(offercar_template);
            }
            else
            {
                var offercar_template_bgGrey = document.getElementsByClassName('switchBarBgGrey', clone)[0].cloneNode(true);
                if (this._get_text(xmlCurOffercar.getElementsByTagName('vendor')[0]) == "AVIS")
                {
                    var offercar_avis_template = document.getElementById('cr_offer_avis_logo').cloneNode(true);
                    offercar_avis_template.style.display = 'inline';
                    document.getElementsByClassName('colCarLgo', offercar_template_bgGrey)[0].appendChild( offercar_avis_template );
                }
                else
                {
                    var offercar_sixt_template = document.getElementById('cr_offer_sixt_logo').cloneNode(true);
                    offercar_sixt_template.style.display = 'inline';
                    document.getElementsByClassName('colCarLgo', offercar_template_bgGrey)[0].appendChild( offercar_sixt_template );
                }
                this._replace_text(document.getElementsByClassName('colCarOffer', offercar_template_bgGrey)[0], this._get_text(xmlCurOffercar.getElementsByTagName('description')[0]));
                this._replace_text(document.getElementsByClassName('colCarPrice', offercar_template_bgGrey)[0], this._get_text(xmlCurOffercar.getElementsByTagName('price')[0]));
                this._replace_text(document.getElementsByClassName('colCarCurrency', offercar_template_bgGrey)[0], this._get_text(xmlCurOffercar.getElementsByTagName('currency')[0]));
                offercar_template_bgGrey.classname = 'switchBar bgGrey';
                document.getElementsByClassName('colCarOfferLink', offercar_template_bgGrey)[0].href = this._get_text(xmlCurOffercar.getElementsByTagName('link')[0]);
                carNodesArray.push(offercar_template_bgGrey);
            }
        }
        return carNodesArray;
    }
    
    // Get text from specified node.
    this._get_text = function( node )
    {
        if ( node == null )
        {
            if ( cr_debug )
            {
                alert( '_get_text: node is null' );
            }
            return;
        }
        return node.childNodes[ 0 ].nodeValue;
    }
    // Set text of specified node.
    this._replace_text = function( node, text )
    {
        if ( node == null )
        {
            if ( cr_debug )
            {
                alert( '_replace_text: node is null' );
            }
            return;
        }
        node.childNodes[ 0 ].nodeValue = text;
    }
    // IE check.
    this._is_ie = function()
    {
        return document.all;
    }
}