/*
 * Copyright © Origo 2006
 * All Rights Reserved
 * Description: Javascript functions for icelandair booking engines
 * User:        KH
 * Date:        01.09.2006
 *
 */

/*
  Booking engine object
  name        - name of booking engine
  elementId   - element id for onAvailable event
  language    - for calendar initialization
*/
function BookingEngine(name, elementId, language, contextName, startDate,endDate) {
    var beStartDate = startDate;
    var calendarConfigObjs = new Array();
    this.getCalendarObj = getCalendarObj;

    if (contextName != null && name != 'HotelSearch') {
        setContext(contextName);
    }    
    if (beStartDate==null) {
        beStartDate = new Date();
    }
    this.initValues = function() {
		  var calConfigObj = { calType : 2,
							        valRule : 1,
							        startDay : beStartDate,
							        calLocale : language,
                                    endDay: endDate
                           };

        this.calendarConfigObjs = startCal(calConfigObj);
        if (name != 'HotelSearch' && name != 'Parambooking') {
            setCookieValues();
        }
        
        if (name == 'FrontPage') {
            if (document.getElementById('searchByFlex').checked) {
                DisplayHideClass('searchByFlex');
            }
            else {
                DisplayHideClass('searchByExactDates');
            }
        }
    }
    /*
      onAvailable Event listener
      handleOnAvailable executes as soon as elementId is detected in the DOM
    */
    var handler = this.handleOnAvailable;
    var that = this;
    try {
        YAHOO.util.Event.onAvailable(elementId, this.handleOnAvailable, this);
    }
    catch(ex) {
        $(elementId).ready(function(){handler(that);});
    }
}

/*
  onAvailable handler
  be - booking engine object
*/
BookingEngine.prototype.handleOnAvailable = function(be) {
    return be.initValues();
}

/*Get Calendar reference by id of DIV*/
function getCalendarObj(elemID){
    return this.calendarConfigObjs[elemID];
}

/*Loop through all elements and set cookie values for not-hidden elements*/
function setCookieValues() {
    var fieldType;
    var cookieValue;
    for (var i = 0; i < document.airBookingForm.elements.length; i++) {
        fieldType = document.airBookingForm.elements[i].type;
        fieldDisabled = document.airBookingForm.elements[i].disabled;
        if ((fieldType != "hidden") && (fieldType != "button") && (fieldDisabled != true) ) {
            var fieldName = document.airBookingForm.elements[i].name;
            /*Use fieldId for radio buttons because fieldName is the same for both*/
            var cookieId = fieldName;
            if (fieldType == 'radio' || fieldType == 'checkbox') {
                cookieId = document.airBookingForm.elements[i].id;
            }
            cookieValue = GetCookie(cookieId);
            if (cookieValue != null &&  cookieValue != 'undefined') {
                setSelected(cookieId, cookieValue);
            }
        }
    }
}

/*Loop through all elements and set cookies for not-hidden elements*/
function setCookies() {
    var exp = new Date();
    var fieldType;
    var fieldName;
    var fieldId;
    exp.setTime(exp.getTime() + (24 * 60 * 60 * 1000));
    for (var i = 0; i < document.airBookingForm.elements.length; i++) {
        fieldType = document.airBookingForm.elements[i].type;
        if ((fieldType != "hidden") && (fieldType != "button")) {
            fieldName = document.airBookingForm.elements[i].name;
            fieldId = document.airBookingForm.elements[i].id;
            /* Use fieldId for radio buttons because fieldName is the same for both
               Save 'checked' property and not 'value' for radio and checkbox
            */
            if (fieldType == 'radio' || fieldType == 'checkbox') {
                SetCookie(fieldId, document.airBookingForm.elements[i].checked, exp);
            }
            else {
                if (document.airBookingForm.elements[i].value != null) {
                    SetCookie(fieldName, document.airBookingForm.elements[i].value, exp);
                }
            }
        }
    }
}

/*
  For FrontPage initialization
  Displays or hides Class selectBox
*/
function DisplayHideClass(classId) {
    setDisplay("fareFamilies", (classId == "searchByFlex"));
    setDisplay("cabindiv", (classId == "searchByExactDates"));
}

