/**
 * @author: Mateusz Czaja
 * @date 13.08.2007
 */
function SearchForm()
{
    var gLastField; //global, what was last used (important, if anybody press enter on suggest)
    var gFirstEvent;
    var suggObj; //object of suggest
    var calObj; //object of calendar
    var mustUseIframe;
    var url = location.protocol+'//'+location.host+'/framework/js/ajaxtest.ajx';
    var fields1 = new Array('dep', 'dest', 'depDate', 'depTime', 'destDate', 'destTime'); //fields
    var fields2 = new Array('sugdep', 'sugdest', 'cal1', 'time1', 'cal2', 'time2'); //divs
    var logCounter = 0;
    var gObjectName = 'sf'
    var focusEnabled = 1;
    this.name=gObjectName;
    var testFormContent;
    var translator = -1;
//***********************************************************
    function init(sugg, cal, lang)
    {
        checkBrowserForIframe();
        suggObj = sugg;
        suggObj.setCaller(this);
        suggObj.setLang(lang);
        calObj = cal;
        calObj.setCaller(this);
        listenBody();
        listenFocusBlur();
        document.getElementById('dep').focus();
        setHolderDivs();
        //check if ajax is supported
        checkAjax();
        try {
            getObj('jsAvailable').value=1;
        } catch(f){ /**/ }

        try {
            var version = getObj('searchFormVersion').value;
            if (version == 's') {
                changeFormLink(1);
            } else {
                changeFormLink(0);
            }
        } catch(f){ /**/}
    }
    this.init = init
//***********************************************************

    function listenBody()
    {
        try{
            document.body.addEventListener("click",processClick,false);
            document.body.addEventListener("keyup",processKey,false);
        } catch(f) {
            try {
                document.body.onclick=function() { processClick(event);};
                document.body.onkeyup=function() { processKey(event);};
            } catch (g) {
                try{
                    window.attachEvent("onclick",processClick);
                    window.attachEvent("onkeyup",processKey);
                } catch(h) {
                    log(h);
                }
            }
        }
    }
    this.listenBody = listenBody;
//***********************************************************
    function processClick(event)
    {
        hideDivs(event);
    }
//***********************************************************
    function listenFocusBlur()
    {
        for(var i=0; i<fields1.length; ++i) {
            try{
                document.getElementById(fields1[i]).addEventListener("focus",processFocus,false);
                document.getElementById(fields1[i]).addEventListener("click",processFocus,false);
                document.getElementById(fields1[i]).addEventListener("blur",processBlur,false);
            } catch(f) {
                try {
                    document.getElementById(fields1[i]).onfocus=function() { processFocus(event); };
                    document.getElementById(fields1[i]).onclick=function() { processFocus(event); };
                    document.getElementById(fields1[i]).onblur=function() { processBlur(event); };
                } catch (g) {
                    try{
                        document.getElementById(fields1[i]).attachEvent("onfocus",processFocus);
                        document.getElementById(fields1[i]).attachEvent("onclick",processFocus);
                        document.getElementById(fields1[i]).attachEvent("onblur",processBlur);
                    } catch(h) {
                        log(h);
                    }
                }
            }
        }
        try {
            getObj('depDateCaller').addEventListener("click",processCal,false);
            getObj('destDateCaller').addEventListener("click",processCal,false);
        } catch (f) {
            try {
                getObj('depDateCaller').onclick=function() { processCal(event); };
                getObj('destDateCaller').onclick=function() { processCal(event); };
            } catch (g) {
                try {
                    getObj('depDateCaller').attachEvent("onclick",processCal);
                    getObj('destDateCaller').attachEvent("onclick",processCal);
                } catch(h) {
                    log(h);
                }
            }
        }

    }
    this.listenFocusBlur = listenFocusBlur;
//***********************************************************
    function processKey(event)
    {
        var id = (event.target) ? event.target.id : event.srcElement.id;
        if(id=='find'){
            id = gLastField;
        }
        if(id){
            hideDivs(event);
        }
        if((id=='dep') || (id=='dest')){
            processSuggest(event, id);
        } else if( (id == 'depDate') || (id == 'destDate')){
            processDate(event);
        } else if( (id == 'depTime') || (id == 'destTime')){
            processTime(event);
        }

    }
//***********************************************************
    function processFocus(event)
    {
        if(focusEnabled!=1){
            focusEnabled=1;
            return;
        }

        var id = (event.target) ? event.target.id : event.srcElement.id;
        if(id){
            gLastField = id;
        } else {
            id = gLastField;
        }
        document.getElementById(id).select();

        var divID;
        for(var i=0; i<fields1.length; ++i){
            if(fields1[i] == id ){
                divID = fields2[i];
                break;
            }
        }

        if((id=='dep') || (id=='dest')){
            processSuggest(event, id);
        } else if( (id == 'depDate') || (id == 'destDate')){
            calObj.showCal(id, divID)
        } else if( (id == 'depTime') || (id == 'destTime')){
            gLastField = id;
            calObj.showTime(id, divID)
        }
    }
//***********************************************************
    function processBlur(event)
    {
        var id = (event.target) ? event.target.id : event.srcElement.id;
        if((id == 'depDate') || (id == 'destDate')){
            calObj.parseDataField(id);
        } else if((id == 'depTime') || (id == 'destTime')){
            calObj.parseTimeField(id);
        }
        document.getElementById('submitEnabled').value = 1;
    }

//***********************************************************
    function processSuggest(event, id)
    {
        var idd = 0;
        idd = (event.target) ? event.target.id : event.srcElement.id;
        if(idd == id) {
            suggObj.processKey(event);
        } else {
            //for IE, after enter
            suggObj.fill(-1, id);
            gotoNext(id);//IE
        }
    }//F:processSuggest
//***********************************************************
    function processDate(event)
    {
        var obj = (event.target) ? event.target : event.srcElement;
        if((event.keyCode !=9 ) && (event.keyCode !=16 )){
            hideDivs();
        }
    }
//***********************************************************
    function processTime(event)
    {
        calObj.navigateTime(event)
    }//F:processTime
//***********************************************************
    function hideDivs(event, field)
    {
        var id=0;
        if(event){
            id = (event.target) ? event.target.id : event.srcElement.id;
        } else {
            if(field){
                id = field;
            }
        }
        if(gLastField == 'sugdepTime' || gLastField == 'sugdestTime'){
            return;
        }
        if(id!=0){
            if((id == 'callinkr') || (id == 'callinkl')) //Opera, Konqueror
                return;
            if((id == 'depDate') || (id == 'destDate')){
                var divID;
                for(var i=0; i<fields1.length; ++i){
                    if(fields1[i] == id ){
                        divID = fields2[i];
                        break;
                    }
                }
            }
        }

        for(var i=0; i<fields1.length; ++i) {
            if(id != fields1[i]) {
              //if(mustUseIframe==1){
                //alert(mustUseIframe);
                try{
                  document.getElementById(fields2[i]+'_iframe').style.visibility='hidden';
                } catch(f){
                  //log(f)
                }
                //}
                try{
                    document.getElementById(fields2[i]).style.visibility='hidden';
                } catch(f) {
                    //log(f)
                }
            }
        }
    }//F:hideDivs
    this.hideDivs=hideDivs;
//***********************************************************
    //some browser after enter don't know where is focus
    function gotoNext(id)
    {
        for(var i=0; i<fields1.length; ++i){
            if((fields1[i] == id) && ((i+1)<fields1.length)){
                focusEnabled=0;
                document.getElementById(fields1[i]).focus();
                hideDivs()
                return;
            }
        }
        document.getElementById('find').focus();
        hideDivs()
        return;
    }//F:gotoNext
    this.gotoNext = gotoNext
//***********************************************************
    function checkBrowserForIframe()
    {
        mustUseIframe=0;
        if(window.clipboardData && document.compatMode){
            if(!window.XMLHttpRequest) {
                mustUseIframe=1;
            }
        } else if(window.clipboardData){
            if( !document.createDocumentFragment){
                mustUseIframe=1;
            }
        }

    }//F:checkBrowserForIframe
//***********************************************************
    function checkForm()
    {
        if(getObj('submitEnabled').value == 1){
            return true;
        }
        return false;
    }
    this.checkForm = checkForm
//***********************************************************
    function log(msg)
    {
        return;
        ++logCounter;
        try {
            console.log(msg);
        } catch(f) {
            try {
                var tmp = document.getElementById('logs').innerHTML;
                document.getElementById('logs').innerHTML=logCounter+'. '+msg+'<br/>'+tmp
            } catch(g) {
                //
            }
        }
    }//F:log
//***********************************************************
    function checkAjax()
    {
        var params='';
        try{
          createAjax(params, execResult);
        } catch(e) {
            //
        }
        function execResult(txt,xmL){
            if(txt == 1) {
                //ok
            } else {
                try {
                    document.getElementById('connMode').value = 'persistent';
                } catch (f) {
                    //log(f)
                }
            }
        }
    }
    //***********************************************************
    function setHolderDivs() {
        coords.setXY("dep", "depSugHolder");
        coords.setXY("dest", "destSugHolder");
        coords.setXY("depDate", "depCalHolder");
        coords.setXY("destDate", "destCalHolder");
        coords.setXY("depTime", "depTimeHolder");
        coords.setXY("destTime", "destTimeHolder");
    }

    function setReportsHeight(lang) {
        try {
            var reports = document.getElementById("reports");
            var info    = document.getElementById("info");
            var sForm   = document.getElementById("searchForm");
            var stat    = document.getElementById("stat");
            var provider    = document.getElementById("provider");

            var imgHeight = -7;

            try {
                var lastEl = document.getElementById("lastElement");
                if(IS_IE) {
                    var display  = lastEl.currentStyle["display"];
                }
                else {
                    var display  = window.getComputedStyle(lastEl, null).display;
                }

                if(display == "block") {
                    imgHeight = 208+10+2;
                }
            } catch(e) {
                // nothing to do
            }

            if(lang == "fr") {
                var lHeight = coords.getOffsetHeight(sForm)+coords.getOffsetHeight(stat)+coords.getOffsetHeight(provider)+imgHeight;
            } else {
                var lHeight = coords.getOffsetHeight(sForm)+coords.getOffsetHeight(stat)+imgHeight;
            }

            if(lang == "fr") {
                var iHeight = coords.getOffsetHeight(info)-2;
            } else {
                var iHeight = coords.getOffsetHeight(info)+5;
            }

            var rHeight =lHeight-iHeight;
            var browser_version = parseFloat(navigator.appVersion);

            if(navigator.appVersion.indexOf("MSIE 5.0") == -1 && navigator.appVersion.indexOf("MSIE 5.01") == -1) {
                reports.style.height = rHeight+"px";
            }

        }
        catch (e) {
            // nothing to do
        }
    }
//***********************************************************

    function changeFormLink(gotoSimple)
    {
        if (translator==-1) {
            translator = new jsTranslator();
            translator.setContext('searchform');
        }
        try {
            var sf_simple   = translator.t('sf_simple');
            var sf_extended = translator.t('sf_extended');
        } catch (ff) {
            sf_simple   = '-';
            sf_extended = '+';
        }
        if (gotoSimple==1) {
            getObj('changeForm').innerHTML   = '<a href="javascript:sf.changeForm()" class="plus">'+sf_extended+'</a>';
        } else {
            getObj('changeForm').innerHTML   = '<a href="javascript:sf.changeForm(1)" class="minus">'+sf_simple+'</a>';
        }
    }//ChangeFormLink



    function changeForm(gotoSimple)
    {
        var depName     = getObj('dep').value;
        var depAirport  = getObj('depAirport').value;
        var destAirport = getObj('destAirport').value;
        var depDate     = getObj('depDate').value;
        var destDate    = getObj('destDate').value;

        var tmpTestFormContent = testFormContent;
        changeFormLink(gotoSimple);
        if (gotoSimple==1) {
            //getObj('changeForm').innerHTML   = '<a href="javascript:sf.changeForm()">'+sf_extended+'</a>';
            getObj('backCity').style.display = "none";
            getObj('backCity').className     = "";
            getObj('depInput').className     = "";
            getObj('depTime').style.display = "none";
            getObj('destTime').style.display = "none";
            calObj.markErrorField('depTimeError',0);
            calObj.markErrorField('destTimeError',0);
            try {
                var formType = getObj('formType').value;
                if (formType == 2) {
                    getObj('depTime').style.display = "block";
                    getObj('destTime').style.display = "block";
                }

            } catch (ff) { }

            try {
                getObj('searchFormVersion').value    = "s";
                getObj('acrissSelect').style.display = "none";
                getObj('acrissSelect').className     = "";
            } catch (ff) { }
        } else {
            //getObj('changeForm').innerHTML   = '<a href="javascript:sf.changeForm(1)">'+sf_simple+'</a>';
            getObj('backCity').style.display = "block";
            getObj('depInput').className     = "ext";
            getObj('depTime').style.display = "block";
            getObj('destTime').style.display = "block";
            try {
                getObj('searchFormVersion').value    = "e";
                getObj('acrissSelect').style.display = "block";
            } catch (ff) { }
            calObj.checkTimeForSingleDay();
        }

        getObj('dep').value         = depName;
        getObj('depAirport').value  = depAirport;
        getObj('destAirport').value = destAirport;
        getObj('depDate').value     = depDate;
        getObj('destDate').value    = destDate;

        coords.setXY("dep", "depSugHolder");
        coords.setXY("dest", "destSugHolder");
        coords.setXY("depDate", "depCalHolder");
        coords.setXY("destDate", "destCalHolder");
        try {
            coords.setXY("destTime", "destTimeHolder");
            coords.setXY("depTime", "depTimeHolder");
        } catch(ff) {
            //
        }
    }
    this.changeForm = changeForm
//***********************************************************
    function prepareTestForm(version,sugg, cal, lang)
    {
        checkBrowserForIframe();
        suggObj = sugg;
        suggObj.setCaller(this);
        suggObj.setLang(lang);
        calObj = cal;
        calObj.setCaller(this);
        listenBody();
        setDefaultDate();
        try {
            var version = getObj('searchFormVersion').value;
            if (version == 's') {
                changeFormLink(1);
            } else {
                changeFormLink(0);
            }
        } catch(f){ /**/}
        if (version==1 || version==5) {
            fields1=new Array('dep',    'dest',    'depDate', 'destDate');//fields
            fields2=new Array('sugdep', 'sugdest', 'cal1',    'cal2'    );//divs
        } else if(version==2 || version==3) {
            fields1=new Array('dep',    'dest',    'depDate', 'destDate', 'depTime', 'destTime' );//fields
            fields2=new Array('sugdep', 'sugdest', 'cal1',    'cal2',     'time1',   'time2' );//divs
        } else if(version==4) {
            fields1=new Array('dep',    'depDate', 'destDate', 'depTime', 'destTime' );//fields
            fields2=new Array('sugdep', 'cal1',    'cal2',     'time1',   'time2' );//divs
        }

        getObj('depAirport').value  = getObj('locDepAirport').value
        getObj('destAirport').value = getObj('locDestAirport').value
        getObj('dep').value         = getObj('locDep').value
        getObj('dest').value        = getObj('locDest').value

        listenFocusBlur();
        //recalculateLayout();
        //getObj('dep').focus();
        try {
            setHolderDivs();
        } catch(ff) {

        }
        setReportsHeight(lang);
    }
    this.prepareTestForm = prepareTestForm

    function setDefaultDate()
    {
        var today = cmCarsCalendar.getToday();
        var depDate = cmCarsCalendar.addInterval(today, 21)
        var destDate = cmCarsCalendar.addInterval(today, 28)
        try {
            if (getObj('depDate').value == '') {
                getObj('depDate').value = depDate;
            }
        } catch (ff) {}

        try {
            if (getObj('destDate').value == '') {
                getObj('destDate').value = destDate;
            }
        } catch (ff) {}
    }
    this.setDefaultDate = setDefaultDate

    function recalculateLayout()
    {
      var searchH = coords.getOffsetHeight(getObj('search'));
      var bestH   = coords.getOffsetHeight(getObj('eyecatcher'));
      var priceH  = bestH - searchH - 38;
      getObj('price').style.height=priceH+'px';
      //console.log(priceH+'='+bestH +'-'+searchH)
    }

//***********************************************************
    function processCal(event)
    {
        var id = (event.target) ? event.target.id : event.srcElement.id;
        if (id=="depDateCaller") {
            setTimeout("document.getElementById('depDate').focus()", 100);
        } else {
            setTimeout("document.getElementById('destDate').focus()", 100);
        }
    }
//***********************************************************

    function showResults()
    {
        document.getElementById('noResults').style.display='none';
        document.getElementById('autoNoResults').style.opacity =1;

    }
    this.showResults = showResults
//***********************************************************
    function createAjax(params, successHandler, errorHandler)
    {
        if(!errorHandler){
            errorHandler = ajaxError;
        }
        var myAjax = new Ajax();
        myAjax.url = url;
        myAjax.params = params;
        myAjax.method = "POST";
        myAjax.onSuccess = successHandler;
        myAjax.onError = ajaxError;
        myAjax.doRequest();
    }
//***********************************************************
    function ajaxError()
    {
        try {
            document.getElementById('connMode').value = 'persistent';
        } catch (f) {
            //log(f);
        }
    }
//***********************************************************

}//F:SearchForm
var sf = new SearchForm();

function backCityToggle() {
    if (document.forms['suche']['backCitySelect'].checked == false) {
        document.getElementById('backCity').style.display = "none";
        document.getElementById('searchFormVersion').value = "s";
        document.getElementById('dest').value = "";
        document.getElementById('backCity').className = "";
        sf.init(sug, cmCarsCalendar, 'fr');
    } else {
        document.getElementById('backCity').style.display = "block";
        document.getElementById('searchFormVersion').value = "new";
        sf.init(sug, cmCarsCalendar, 'fr');
    }
}