// =============== organize global functions and variables =========================================

var mdv;

if (!mdv) {
	mdv = {};
}

mdv.efa = {};

mdv.cal = {
    text: {}
};


// =============== on document ready ===============================================================

// on document ready
mdv.efa.onDocReady = function () {
    jQuery(document).ready(function(){
        mdv.efa.onDocReadyRightCol();
        mdv.efa.onDocReadyLeftCol();
    });
    
    jQuery(window).load(function() {
        // load map
        onLoadMapHandler('map');
    });
}


// on document ready functionality for right column
mdv.efa.onDocReadyRightCol = function () {
    //efa tabs
    mdv.efa.setEfaTab ();
    
    // add info messages 
    mdv.efa.loadAddInfoMsg();
    
    // info messages animation
    $(".aktuelle_meldung").tabs(".addInfoMsg", {tabs: '.addInfoMsgAdv', effect: 'slide', initialIndex: null});
    
    // hide feedback for feedback
    if (jQuery('#feedbackTick').length > 0) {
        jQuery('#feedbackTick').css('display','none');
    }
    if (jQuery('#feedbackError').length > 0) {
        jQuery('#feedbackError').css('display','none');
    }
}


// on document ready functionality for left column
mdv.efa.onDocReadyLeftCol = function () { 

    // odv tabs 
    mdv.efa.setOdvTabFunc();
    
    // remove old odv suggest overlay
	if(document.getElementById('odvOverlay')){
		jQuery('#odvOverlay').remove();
	}
    
    // scroll to line selection (dm result)
    jQuery('#zurLinienauswahl').click(function(){
        $.smoothScroll({
            scrollTarget: '#fahrtAuswahl_Target'
        });
        return false;
    });
    
    // help tooltips
    jQuery("td.help img[title]").tooltip({
        effect: 'slide',
        offset: [20, 0],   
        tipClass: 'efa2010_tooltip'
    }).dynamic({ bottom: { direction: 'down', bounce: true } });    

    jQuery("li.helpbutton img[title]").tooltip({
        effect: 'slide',
        offset: [20, 0],
        tipClass: 'efa2010_tooltip'
    }).dynamic({ bottom: { direction: 'down', bounce: true } });
    jQuery("td.help_long img[title]").tooltip({
        effect: 'slide',
        offset: [20, 0],   
        tipClass: 'efa2010_tooltip'
    }).dynamic({ bottom: { direction: 'down', bounce: true } });    
    
    // key codes
    mdv.efa.keyCodes();
    
    // open/close map overlay
    jQuery("#efa_map a[rel]").overlay({
        mask: {
            color: '#c8c8c8',
            opacity: 0.8
        },
        effect: 'apple',
        onLoad: function (event) {mdv.map.openOverlayMap()},
        onClose: function (event) {mdv.map.closeOverlayMap()}
    });
    
    // trip result screen
    if (document.getElementById('fahrt_overview')) {
        // permalink
        $("#permalink_container a[rel]").overlay({
            mask: {
                color: '#c8c8c8',
                opacity: 0.8
            },
            effect: 'apple',
            onLoad: function (event) {mdv.efa.ModifyPermaLink()}
        });
        
        // iCal
        $("#ical_container a[rel]").overlay({
            mask: {
                color: '#c8c8c8',
                opacity: 0.8
            },
            effect: 'apple'
        });

        $.tools.tabs.addEffect("slide", function(i, done) {
            this.getPanes().slideUp().css({backgroundColor: '#f0f0f0'});
            this.getPanes().eq(i).slideDown(function()  {
                $(this).css({backgroundColor: '#f0f0f0'});
                $.smoothScroll({
                    scrollTarget: '#results'
                });			
                done.call();
            });
        });
        
        // functionality to open/close trip details
        mdv.efa.setOpenDetailsFunc();
        
        // initialize map
        mdv.efa.initMap();
    }
    
    // dm result screen 
    if (document.getElementById('abfahrt_overview')) {
        // center map on stop
        mdv.map.focusDMStop ();
        // get code for overlays
        mdv.efa.getOverlayCode();
    }
    
    // odv suggest 
    initOdvSuggest();
    
    // calendar
    mdv.efa.loadCalendar();
    
    // animated collapse
    animatedcollapse.addDiv('additional_messages', 'fade=1');
    animatedcollapse.addDiv('extend_tab', 'fade=1');
    animatedcollapse.ontoggle=function($, divobj, state){};
    animatedcollapse.init();
    
    // display feedback formular
    if (jQuery('#fahrt_overview').length > 0 && !document.getElementById('abfahrt_overview')) {
        jQuery('#feedbackFormular').css('display','block');
    }
    
    // open PDF
    if (document.getElementById('itdLPxx_screen') && document.getElementById('itdLPxx_screen').value === 'download') {
        document.getElementById('itdLPxx_screen').value = 'pdf';
        document.forms['frmEfa'].target = '_blank';
        document.forms['frmEfa'].submit();
        document.getElementById('itdLPxx_screen').value = '';
        document.forms['frmEfa'].target = '';
    }
    
    // focus
    if (jQuery('#name_origin').length > 0) {
        document.getElementById('name_origin').focus();
    }
    else if (jQuery('#name_dm').length > 0) {
        document.getElementById('name_dm').focus();
    }
}

// Get overlay code 
mdv.efa.getOverlayCode = function() {
   $("#monitor-details a[rel]").overlay({
        mask: {
            color: '#c8c8c8',
            opacity: 0.8
        },
        effect: 'apple',
		fixed:true,
		
		onBeforeLoad: function() {
			var innerwrap = this.getOverlay().find("iframe");
			var urlToLoad = this.getTrigger().attr("href");
			var strTriggerRel = this.getTrigger().attr("rel");

			this.getConf()['fixed']=true;
			this.getConf()['top']='10%';
		
			if( urlToLoad != '#' )
			{
				innerwrap.attr("src", urlToLoad );
			}
		}
	});
}

// Initialize map
mdv.efa.initMap = function () {
    var mapDisplay = 'nop';
        
    if(jQuery('#itdLPxx_mapDisplay').length > 0) {
        mapDisplay = jQuery('#itdLPxx_mapDisplay').attr('value');
    }

    if (mapDisplay === 'clear' || mapDisplay === 'new') {
        mdvJpMaps[jQuery('#itdLPxx_mapType').attr('value')].clearJourneys ();
    }
    // show trip on map
    if (mapDisplay === 'display' || mapDisplay === 'new') { 
         if (jQuery('#res_2').length > 0) {
            jQuery('#itdLPxx_displayJourney').attr('value', '2');
            mdvJpMaps[jQuery('#itdLPxx_mapType').attr('value')].displayJourney (null,null,2,true);
        }
        else {
            jQuery('#itdLPxx_displayJourney').attr('value', '1');
             mdvJpMaps[jQuery('#itdLPxx_mapType').attr('value')].displayJourney (null,null,1,true);
        }
    }
}


// =============== common functionality ============================================================

// event listener
mdv.efa.attachEventListener = function (target, eventType, functionRef, capture) {
    if (typeof target.addEventListener != "undefined") {
        target.addEventListener(eventType, functionRef, capture);
    } else {
        if (typeof target.attachEvent != "undefined") {
            target.attachEvent("on" + eventType, functionRef);
        } else {
            eventType = "on" + eventType;
            if (typeof target[eventType] == "function") {
                var oldListener = target[eventType];
                target[eventType] = function () {
                    oldListener();
                    return functionRef();
                }
            } else {
                target[eventType] = functionRef;
            }
        }
    }
    return true;
}

// Get image
mdv.efa.getImg = function (usage) {
    var img = mdv.efa.imgPath + 'mdvMap/origin.gif';
    if (usage === 'destination') {
        img = mdv.efa.imgPath + 'mdvMap/destination.gif';
    }
    else if (usage === 'via') {
        img = mdv.efa.imgPath + 'mdvMap/via.gif';
    }
    else if (usage.indexOf('via') > -1) {
        img = mdv.efa.imgPath + 'mdvMap/points/' + usage +'.gif'
    }
    
    var i = new Image();
	i.src = img;

	return img;
}

// Toggle all elements with the class "className".
mdv.efa.toggleElemsWithClass = function (className, dispType){
    var disp = 'block';
    if(dispType) {
        disp = dispType;
    }
    
    if($("."+ className)[0].style.display==='' || $("."+ className)[0].style.display==='none') { 
        $("."+ className).css("display",disp);
    }
    else{
        $("."+ className).css("display",'none');
    }
}

// Toggle all elements.
mdv.efa.toggleElem = function (id, dispType) {
    var disp = 'block';
    if(dispType) {
        disp = dispType;
    }
    
    if($("#"+ id)[0].style.display==='none'){
        $("#"+ id).css("display",disp);
    }
    else{
        $("#"+ id).css("display",'none');
    }
}

// KeyCodes 
mdv.efa.keyCodes = function () {
    $(document).keyup(function(event) {
        // enter
        if(event.keyCode === 13) {
            if ($('#submitButton').length > 0) {
                $('#submitButton').click();
            }
            else if ($('#recalcButton').length > 0) {
                $('#recalcButton').click();
            }
        }
    });
}


// =============== efa request functionality =======================================================

// Set EFA tab
mdv.efa.setEfaTab = function () {
    if (document.getElementById('itdLPxx_efaTab') && document.getElementById('itdLPxx_efaTab').value != '' && document.getElementById('itdLPxx_efaTab') != 'nop') {
        var tabVal = document.getElementById('itdLPxx_efaTab').value;
        var elem = $('#elem_nav_layer_sec_fp_items > li.elem_fp_ac');
        var usage = 'origin';
        // inactivate active tab
        if (elem) {
            elem.removeClass('elem_fp_ac');
            elem.addClass('elem_fp_on');
        }
        
        // hide common help button
        jQuery('.commonHelp').hide();

        if (tabVal != 'none') {
            // activate new tab
            elem = $('#' + tabVal + 'Tab');
            if (elem && (elem.hasClass('elem_fp_on') || elem.hasClass('elem_fp_ac'))) {
                elem.removeClass('elem_fp_on');
                elem.addClass('elem_fp_ac');
            }
            else {
                $('#tripReqTab').removeClass('elem_fp_on');
                $('#tripReqTab').addClass('elem_fp_ac');
            }
            
            // form action and help button
            if (tabVal === 'psReq') {
                document.forms['frmEfa'].action = mdv.efa.path + 'XSLT_PS_REQUEST2';
                jQuery('#helpPS').show();
            }
            else if (tabVal === 'ttbReq') {
                document.forms['frmEfa'].action = mdv.efa.path + 'XSLT_TTB_REQUEST';
                usage = 'ttb';
            }
            else if (tabVal === 'dmReq') {
                document.forms['frmEfa'].action = mdv.efa.path + 'XSLT_DM_REQUEST';
                usage = 'dm';
                jQuery('#helpDM').show();
            }
            else {
                document.forms['frmEfa'].action = mdv.efa.path + 'XSLT_TRIP_REQUEST2';
                jQuery('#helpTrip').show();
            }
            
            // clear map
            mdvJpMaps[jQuery('#itdLPxx_mapType').attr('value')].clearJourneys ();
        }
        
        // reinitialize tab parameter
        document.getElementById('itdLPxx_efaTab').value = '';
        
        // set the correct usage
        mdv.efa.setUsage(usage);
        
        // if not trip request remove destination and via marker and context 
        // menu options for these markers
        if (tabVal === 'ttbReq' || tabVal === 'dmReq') {
            var img;
            jQuery('.mapContextMenuItem')[1].style.display = 'none';
            jQuery('.mapContextMenuItem')[2].style.display = 'none';
            for (var i=0; i<mdvJpMaps[jQuery('#itdLPxx_mapType').attr('value')].odvMarkerLayer.markers.length; i++) {
                img = mdvJpMaps[jQuery('#itdLPxx_mapType').attr('value')].odvMarkerLayer.markers[i].img.src;
                if (((!document.getElementById('name_origin') || document.getElementById('name_origin').value === '') && img.indexOf('origin') != -1) || img.indexOf('destination') != -1 || img.indexOf('via') != -1) {
                    mdvJpMaps[jQuery('#itdLPxx_mapType').attr('value')].odvMarkerLayer.removeMarker(mdvJpMaps[jQuery('#itdLPxx_mapType').attr('value')].odvMarkerLayer.markers[i]);
                }
            }
        }
       else if (tabVal === 'psReq') {
            jQuery('.mapContextMenuItem')[1].style.display = '';
            jQuery('.mapContextMenuItem')[2].style.display = 'none';
            for (var i=0; i<mdvJpMaps[jQuery('#itdLPxx_mapType').attr('value')].odvMarkerLayer.markers.length; i++) {
                img = mdvJpMaps[jQuery('#itdLPxx_mapType').attr('value')].odvMarkerLayer.markers[i].img.src;
                if (img.indexOf('via') != -1 ||
                    ((!document.getElementById('name_origin') || document.getElementById('name_origin').value === '') && img.indexOf('origin') != -1) ||
                    ((!document.getElementById('name_destination') || document.getElementById('name_destination').value === '') && img.indexOf('destination') != -1)) {
                    mdvJpMaps[jQuery('#itdLPxx_mapType').attr('value')].odvMarkerLayer.removeMarker(mdvJpMaps[jQuery('#itdLPxx_mapType').attr('value')].odvMarkerLayer.markers[i]);
                }
            }
        }
        else {
            jQuery('.mapContextMenuItem')[1].style.display = '';
            jQuery('.mapContextMenuItem')[2].style.display = '';
            for (var i=0; i<mdvJpMaps[jQuery('#itdLPxx_mapType').attr('value')].odvMarkerLayer.markers.length; i++) {
                img = mdvJpMaps[jQuery('#itdLPxx_mapType').attr('value')].odvMarkerLayer.markers[i].img.src;
                if (((!document.getElementById('name_origin') || document.getElementById('name_origin').value === '') && img.indexOf('origin') != -1) ||
                    ((!document.getElementById('name_destination') || document.getElementById('name_destination').value === '') && img.indexOf('destination') != -1) ||
                    ((!document.getElementById('name_via') || document.getElementById('name_via').value === '') && img.indexOf('via') != -1)) {
                    mdvJpMaps[jQuery('#itdLPxx_mapType').attr('value')].odvMarkerLayer.removeMarker(mdvJpMaps[jQuery('#itdLPxx_mapType').attr('value')].odvMarkerLayer.markers[i]);
                }
            }
        }
    }
}

// Set usage (after request change)
mdv.efa.setUsage = function (usage) {
    if (usage != mdv.map.text.usage) {
        var old = mdv.map.text.usage;
        mdv.map.text.usage = usage;
        if(document.getElementById('name_' + old)) {
            document.getElementById('name_' + old).name = 'name_' + usage;
            document.getElementById('name_' + old).id = 'name_' + usage;
        }
        if(document.getElementById('nameInfo_' + old)) {
            document.getElementById('nameInfo_' + old).name = 'nameInfo_' + usage;
            document.getElementById('nameInfo_' + old).id = 'nameInfo_' + usage;
        }
        if(document.getElementById('nameState_' + old)) {
            document.getElementById('nameState_' + old).name = 'nameState_' + usage;
            document.getElementById('nameState_' + old).id = 'nameState_' + usage;
        }
        if(document.getElementById('place_' + old)) {
            document.getElementById('place_' + old).name = 'place_' + usage;
            document.getElementById('place_' + old).id = 'place_' + usage;
        }
        if(document.getElementById('placeInfo_' + old)) {
            document.getElementById('placeInfo_' + old).name = 'placeInfo_' + usage;
            document.getElementById('placeInfo_' + old).id = 'placeInfo_' + usage;
        }
        if(document.getElementById('placeState_' + old)) {
            document.getElementById('placeState_' + old).name = 'placeState_' + usage;
            document.getElementById('placeState_' + old).id = 'placeState_' + usage;
        }
        if(document.getElementById('type_' + old)) {
            document.getElementById('type_' + old).name = 'type_' + usage;
            document.getElementById('type_' + old).id = 'type_' + usage;
        }
        if(document.getElementById('typeInfo_' + old)) {
            document.getElementById('typeInfo_' + old).name = 'typeInfo_' + usage;
            document.getElementById('typeInfo_' + old).id = 'typeInfo_' + usage;
        }
        if(document.getElementById('anyObjFilter_' + old)) {
            document.getElementById('anyObjFilter_' + old).name = 'anyObjFilter_' + usage;
            document.getElementById('anyObjFilter_' + old).id = 'anyObjFilter_' + usage;
        }
        if(document.getElementById('itdLPxx_currentTab_' + old)) {
            document.getElementById('itdLPxx_currentTab_' + old).name = 'itdLPxx_currentTab_' + usage;
            document.getElementById('itdLPxx_currentTab_' + old).id = 'itdLPxx_currentTab_' + usage;
        }
    }
}

// Trip functions (retoure, go on, etc.)
mdv.efa.tripFunc = function (func, add) {
    var req = mdv.efa.path + 'XSLT_TRIP_REQUEST2';
    var URL;
    
    var _params = { 
        itdLPxx_command: func
    };
    
    _params.itdLPxx_debug = mdv.efa.debug;
    
    switch (func) {
        case 'dmNext': 
             mdv.efa.getSession(_params);
            _params.command = 'dmNext';
            break;
        case 'dmPrev':
            mdv.efa.getSession(_params);
            _params.command = 'dmPrev';
            break;
        case 'tripPrev':
            mdv.efa.getSession(_params);
            _params.command = 'tripPrev';
            break;
        case 'tripFirst':
            mdv.efa.getSession(_params);
            _params.command = 'tripFirst';
            break;
        case 'tripNext':
            mdv.efa.getSession(_params);
            _params.command = 'tripNext';
            break;
        case 'tripLast':
            mdv.efa.getSession(_params);
            _params.command = 'tripLast';
            break;
        case 'back': 
            _params.command = 'nop';
            _params.itdLPxx_efaTab = 'tripReq';
            mdv.efa.getSession(_params);
            break;
        case 'backDM': 
            req = 'XSLT_DM_REQUEST';
            _params.itdLPxx_efaTab = 'dmReq';
            _params.command = 'nop';
            mdv.efa.getSession(_params);
            break;
        case 'fare':
            mdv.efa.getSession(_params);
            _params.itdLPxx_route = add;
            break;
        case 'tripReq': 
            mdv.efa.getReqParams(_params);
            _params.sessionID = '0';
            _params.requestID = '0';
            if (add) {
                mdv.efa.getOdvParamsPermalink(_params, 'origin', true);
            }
            else {
                mdv.efa.getOdvParams(_params, 'origin');
            }
             mdv.efa.getDateTimeParams(_params);
            if (jQuery('#frmEfa').attr('action').indexOf('DM_REQUEST') < 0 && jQuery('#frmEfa').attr('action').indexOf('PS_REQUEST') < 0) {
                mdv.efa.getTripOptionsParams(_params);
            }
            _params.itdLPxx_efaTab = 'tripReq';
            _params.execInst = 'verifyOnly';
            mdv.map.text.usage = 'origin';
            break;
        case 'psReq': 
            req = 'XSLT_PS_REQUEST2';
            mdv.efa.getReqParams(_params);
            _params.sessionID = '0';
            _params.requestID = '0';
            if (document.getElementById('itdLPxx_weekday')) {
                _params.itdLPxx_weekday = document.getElementById('itdLPxx_weekday').value;
            }
            if (add) {
                mdv.efa.getOdvParamsPermalink(_params, 'origin', true);
            }
            else {
                mdv.efa.getOdvParams(_params, 'origin');
            }
            _params.itdLPxx_efaTab = 'psReq';
            _params.execInst = 'verifyOnly';
            mdv.map.text.usage = 'origin';
            break;
        case 'dmReq': 
            req = 'XSLT_DM_REQUEST';
            mdv.efa.getReqParams(_params);
            _params.sessionID = '0';
            _params.requestID = '0';
            if (add) {
                mdv.efa.getOdvParamsPermalink(_params, 'dm', true);
            }
            else {
                mdv.efa.getOdvParams(_params, 'dm');
            }
            mdv.efa.getDateTimeParams(_params);
            _params.itdLPxx_efaTab = 'dmReq';
            _params.execInst = 'verifyOnly';
            mdv.map.text.usage = 'dm';
            break;
        case 'tripRetoure':
            mdv.efa.getReqParams (_params);
            mdv.efa.getSession (_params);
            mdv.efa.getTripRetoureParams (_params);
            mdv.efa.getDateTimeParams (_params);
            mdv.efa.getTripOptionsParams (_params);
            _params.itdLPxx_efaTab = 'nop';
            break;
        case 'tripGoOn':
            mdv.efa.getReqParams (_params);
            mdv.efa.getSession (_params);
            mdv.efa.getTripGoOnParams (_params);
            mdv.efa.getDateTimeParams (_params);
            mdv.efa.getTripOptionsParams (_params);
            _params.itdLPxx_efaTab = 'nop';
            _params.execInst = 'verifyOnly';
            break;
        case 'changeReq':
            mdv.efa.getReqParams (_params);
            mdv.efa.getSession (_params);
            mdv.efa.getChangeReqParams (_params);
            mdv.efa.getDateTimeParams (_params);
            mdv.efa.getTripOptionsParams (_params);
            _params.itdLPxx_efaTab = 'nop';
            _params.itdLPxx_mapDisplay = 'new';
            break;
        case 'newDM':
            req = 'XSLT_DM_REQUEST';
        case 'newTrip':
            _params.sessionID = '0';
            _params.requestID = '0';
            _params.itdLPxx_efaTab = 'nop';
            mdvJpMaps[jQuery('#itdLPxx_mapType').attr('value')].odvMarkerLayer.removeAllMarkers();
            break;
    }
    
    
    if (mdv.efa.debu != 'true') {
        URL = mdv.efa.path + req
    }
    else {
        URL = '/' + mdv.efa.virtDir + '/' + req;
    }
    
    if (document.getElementById('itdLPxx_tripOptions')) {
        _params.itdLPxx_tripOptionsResult = document.getElementById('itdLPxx_tripOptions').value;
    }
    if (document.getElementById('itdLPxx_tripOptionsResult')) {
        _params.itdLPxx_tripOptionsResult = document.getElementById('itdLPxx_tripOptionsResult').value;
    }

    var _ajax = mdvLib.ajax({ host: URL, parameters: _params, onComplete: tripFunc_onAjaxComplete});
}

function tripFunc_onAjaxComplete (response) {
 	if (response && response.responseText)	{      
        $('#leftCol')[0].innerHTML = response.responseText;
        mdv.efa.onDocReadyLeftCol();
        // set efa tab?
        if (document.getElementById('itdLPxx_efaTab') && document.getElementById('itdLPxx_efaTab').value!='' && document.getElementById('itdLPxx_efaTab').value!='nop') {
            mdv.efa.setEfaTab ();
        }
    }
}

 // Send form
 mdv.efa.sendForm = function (func) {
    var URL;
  
    document.getElementById('itdLPxx_command').value = func;
    document.getElementById('execInst').value = 'normal';
    
    if (func === 'submitDM' && document.getElementById('assignedStop_1')) {
        jQuery('#nameInfo_dm').attr('value', 'invalid');
        jQuery('#placeInfo_dm').attr('value', 'invalid');
    }
    if(jQuery('#nameInfo_dm').attr('value') === '') {
        jQuery('#nameInfo_dm').attr('value', 'invalid');
    }
    
    URL = document.forms['frmEfa'].action;
  
    var _ajax = jQuery.post(URL, $("#frmEfa").serialize(), sendForm_onAjaxComplete, 'html');
 }
 
 function sendForm_onAjaxComplete (response) {
    if (response)	{
        $('#leftCol').html(response);
        mdv.efa.onDocReadyLeftCol();
    }
 }
 
 
// =============== get parameters ==================================================================

// get request parameter
mdv.efa.getReqParams = function (_params) {
    _params.language = mdv.efa.language;
    _params.stateless = '1';
    _params.locationServerActive = '1';
    _params.convertStopsPTKernel2LocationServer = '1';
    _params.convertPOIsITKernel2LocationServer = '1';
    _params.convertAddressesITKernel2LocationServer = '1';
    _params.convertCrossingsITKernel2LocationServer = '1';
    _params.anyMaxSizeHitList = '26';
    _params.ptOptionsActive = '1';
    _params.itOptionsActive = '1';
    _params.outputOptionsActive = '1';
    _params.dataType = 'html';
}

// get session ID and request ID 
mdv.efa.getSession = function (_params) {
    if (document.getElementById('itdLPxx_sessionID_0')) {
        // fix session ID after ROP request
        _params.sessionID = document.getElementById('itdLPxx_sessionID_0').value; 
    }
    else if (document.getElementById('sessionID')) {
        _params.sessionID = document.getElementById('sessionID').value;
    }
    if (document.getElementById('itdLPxx_requestID_0')) {
        // fix request ID after ROP request 
        _params.requestID = document.getElementById('itdLPxx_requestID_0').value; 
    }
    else if (document.getElementById('requestID')) {
        _params.requestID = document.getElementById('requestID').value;
    }
}

// ODV parameter for ajax requests
mdv.efa.getOdvParams = function (_params, usage) {
    // origin parameter
    if (usage === 'origin' && document.getElementById('type_' + mdv.map.text.usage)) {
        _params.type_origin = document.getElementById('type_' + mdv.map.text.usage).value;
        _params.name_origin = document.getElementById('name_' + mdv.map.text.usage).value;
        if (document.getElementById('nameInfo_' + mdv.map.text.usage)) {
            _params.nameInfo_origin = document.getElementById('nameInfo_' + mdv.map.text.usage).value;
        }
        if (document.getElementById('place_' + mdv.map.text.usage)) {
            _params.place_origin = document.getElementById('place_' + mdv.map.text.usage).value;
        }
        if (document.getElementById('placeInfo_' + mdv.map.text.usage)) {
            _params.placeInfo_origin = document.getElementById('placeInfo_' + mdv.map.text.usage).value;
        }
        if (document.getElementById('anyObjFilter_' + mdv.map.text.usage)) {
            _params.anyObjFilter_origin = document.getElementById('anyObjFilter_' + mdv.map.text.usage).value;
        }
        if (document.getElementById('typeInfo_' + mdv.map.text.usage)) {
            _params.typeInfo_origin = document.getElementById('typeInfo_' + mdv.map.text.usage).value;
        }
        if (document.getElementById('itdLPxx_currentTab_' + mdv.map.text.usage)) {
            _params.itdLPxx_currentTab_origin = document.getElementById('itdLPxx_currentTab_' + mdv.map.text.usage).value;
        }
    }
    // dm parameter
    else if (usage === 'dm' && document.getElementById('type_' + mdv.map.text.usage)) {
        _params.type_dm = document.getElementById('type_' + mdv.map.text.usage).value;
        _params.name_dm = document.getElementById('name_' + mdv.map.text.usage).value;
        if (document.getElementById('nameInfo_' + mdv.map.text.usage) && !document.getElementById('assignedStop_1')) {
            _params.nameInfo_dm = document.getElementById('nameInfo_' + mdv.map.text.usage).value;
        }
        if (document.getElementById('place_' + mdv.map.text.usage)) {
            _params.place_dm = document.getElementById('place_' + mdv.map.text.usage).value;
        }
        if (document.getElementById('placeInfo_' + mdv.map.text.usage) && !document.getElementById('assignedStop_1')) {
            _params.placeInfo_dm = document.getElementById('placeInfo_' + mdv.map.text.usage).value;
        }
        if (document.getElementById('anyObjFilter_' + mdv.map.text.usage)) {
            _params.anyObjFilter_dm = document.getElementById('anyObjFilter_' + mdv.map.text.usage).value;
        }
        if (document.getElementById('typeInfo_' + mdv.map.text.usage)) {
            _params.typeInfo_dm = document.getElementById('typeInfo_' + mdv.map.text.usage).value;
        }
        if (document.getElementById('itdLPxx_currentTab_' + mdv.map.text.usage)) {
            _params.itdLPxx_currentTab_dm = document.getElementById('itdLPxx_currentTab_' + mdv.map.text.usage).value;
        }
    }
    // only available for trip request or ps request
    if (mdv.map.text.usage === 'origin' && document.getElementById('type_destination')) {
        // destination parameter
        _params.type_destination = document.getElementById('type_destination').value;
        _params.name_destination = document.getElementById('name_destination').value;
        if (document.getElementById('nameInfo_destination')) {
            _params.nameInfo_destination = document.getElementById('nameInfo_destination').value;
        }
        if (document.getElementById('place_destination')) {
            _params.place_destination = document.getElementById('place_destination').value;
        }
        if (document.getElementById('placeInfo_destination')) {
            _params.placeInfo_destination = document.getElementById('placeInfo_destination').value;
        }
        if (document.getElementById('anyObjFilter_destination')) {
            _params.anyObjFilter_destination = document.getElementById('anyObjFilter_destination').value;
        }
        if (document.getElementById('typeInfo_destination')) {
            _params.typeInfo_destination = document.getElementById('typeInfo_destination').value;
        }   
        if (document.getElementById('itdLPxx_currentTab_destination')) {
            _params.itdLPxx_currentTab_destination = document.getElementById('itdLPxx_currentTab_destination').value;
        }
        // via parameter
        if (document.getElementById('name_via')) {
            _params.type_via = document.getElementById('type_via').value;
            _params.name_via = document.getElementById('name_via').value;
            if (document.getElementById('nameInfo_via')) {
                _params.nameInfo_via = document.getElementById('nameInfo_via').value;
            }
            if (document.getElementById('place_via')) {
                _params.place_via = document.getElementById('place_via').value;
            }
            if (document.getElementById('placeInfo_via')) {
                _params.placeInfo_via = document.getElementById('placeInfo_via').value;
            }
            if (document.getElementById('anyObjFilter_via')) {
                _params.anyObjFilter_via = document.getElementById('anyObjFilter_via').value;
            }
            if (document.getElementById('typeInfo_via')) {
                _params.typeInfo_via = document.getElementById('typeInfo_via').value;
            }
            if (document.getElementById('itdLPxx_currentTab_via')) {
                _params.itdLPxx_currentTab_via = document.getElementById('itdLPxx_currentTab_via').value;
            }
        }
    }
}

// ODV parameter for ajax requests (permalink)
mdv.efa.getOdvParamsPermalink = function (_params, usage, place) {
    // origin parameter
    if (usage === 'origin' && document.getElementById('type_' + mdv.map.text.usage)) {
        _params.type_origin = 'any';
        if (document.getElementById('nameInfo_' + mdv.map.text.usage).value != 'invalid') {
            _params.name_origin = document.getElementById('nameInfo_' + mdv.map.text.usage).value;
        }
        else {
            _params.itdLPxx_name_origin = document.getElementById('name_' + mdv.map.text.usage).value;
        }    
        if (document.getElementById('itdLPxx_currentTab_' + mdv.map.text.usage)) {
            _params.itdLPxx_currentTab_origin = document.getElementById('itdLPxx_currentTab_' + mdv.map.text.usage).value;
        }
        // place
        if (document.getElementById('itdLPxx_currentTab_' + mdv.map.text.usage).value != 'any') {
            if (document.getElementById('placeInfo_' + mdv.map.text.usage).value != 'invalid') {
                _params.place_origin = document.getElementById('placeInfo_' + mdv.map.text.usage).value;
            }
            else {
                _params.itdLPxx_place_origin = document.getElementById('place_' + mdv.map.text.usage).value;
            }    
        }
    }
    // dm parameter
    else if (usage === 'dm' && document.getElementById('type_' + mdv.map.text.usage)) {
        _params.type_dm = 'any';
        if (document.getElementById('nameInfo_' + mdv.map.text.usage).value != 'invalid') {
            _params.name_dm = document.getElementById('nameInfo_' + mdv.map.text.usage).value;
        }
        else {
            _params.itdLPxx_name_dm = document.getElementById('name_' + mdv.map.text.usage).value;
        }
        if (document.getElementById('itdLPxx_currentTab_' + mdv.map.text.usage)) {
            _params.itdLPxx_currentTab_dm = document.getElementById('itdLPxx_currentTab_' + mdv.map.text.usage).value;
        }
        // place
        if ( document.getElementById('itdLPxx_currentTab_' + mdv.map.text.usage).value != 'any') {
            if (document.getElementById('placeInfo_' + mdv.map.text.usage).value != 'invalid') {
                _params.place_dm = document.getElementById('placeInfo_' + mdv.map.text.usage).value;
            }
            else {
                _params.itdLPxx_place_dm = document.getElementById('place_' + mdv.map.text.usage).value;
            }
        }
    }
    // only available for trip request or ps request
    if (mdv.map.text.usage === 'origin' && document.getElementById('type_destination')) {
        // destination parameter
        if (document.getElementById('nameInfo_destination').value != 'invalid') {
            _params.type_destination = 'any';
            _params.name_destination = document.getElementById('nameInfo_destination').value;
        }
        else {
            _params.itdLPxx_name_destination = document.getElementById('name_destination').value;
        }
        if (document.getElementById('itdLPxx_currentTab_destination')) {
            _params.itdLPxx_currentTab_destination = document.getElementById('itdLPxx_currentTab_destination').value;
        }
        // place
        if (document.getElementById('itdLPxx_currentTab_destination').value != 'any') {
            if (document.getElementById('placeInfo_destination').value != 'invalid') {
                _params.place_destination = document.getElementById('placeInfo_destination').value;
            }
            else {
                _params.itdLPxx_place_destination = document.getElementById('place_destination').value;
            }
        }
        // via parameter
        if (document.getElementById('name_via')) {
            _params.type_via = 'any';
            if (document.getElementById('nameInfo_via').value != 'invalid') {
                _params.name_via = document.getElementById('nameInfo_via').value;
            }
            else {
                _params.itdLPxx_name_via = document.getElementById('name_via').value;
            }
            if (document.getElementById('itdLPxx_currentTab_via')) {
                _params.itdLPxx_currentTab_via = document.getElementById('itdLPxx_currentTab_via').value;
            }
            // place
            if (document.getElementById('itdLPxx_currentTab_via').value != 'any') {
                if (document.getElementById('placeInfo_via').value != 'invalid' && document.getElementById('itdLPxx_currentTab_via').value != 'any') {
                    _params.place_via = document.getElementById('placeInfo_via').value;
                }
                else {
                    _params.itdLPxx_place_via = document.getElementById('place_' + mdv.map.text.usage).value;
                }
            }
        }
    }
}


// Date/ time parameter for ajax requests
mdv.efa.getDateTimeParams = function (_params) {
    mdv.efa.getDateParams (_params);
    mdv.efa.getTimeParams (_params);
}

// Date parameters for ajax requests
mdv.efa.getDateParams = function (_params) {
    if(document.getElementById('itdDateDay')) {
        _params.itdDateDay = document.getElementById('itdDateDay').value;
    }
    if(document.getElementById('itdDateMonth')) {
        _params.itdDateMonth = document.getElementById('itdDateMonth').value;
    }
    if(document.getElementById('itdDateYear')) {
        _params.itdDateYear = document.getElementById('itdDateYear').value;
    }
}

// Time parameters for ajax request
mdv.efa.getTimeParams = function (_params) {
    if(document.getElementById('itdTripDateTimeDepArr')) {
        _params.itdTripDateTimeDepArr = document.getElementById('itdTripDateTimeDepArr').value;
    }
    if(document.getElementById('itdTimeHour')) {
        _params.itdTimeHour = document.getElementById('itdTimeHour').value;
    }
    if(document.getElementById('itdTimeMinute')) {
        _params.itdTimeMinute = document.getElementById('itdTimeMinute').value;
    }
}

// Trip options parameter for ajax request 
mdv.efa.getTripOptionsParams = function (_params) {
    if(document.getElementById('noElevationProfile') && document.getElementById('noElevationProfile').checked) {
        _params.noElevationProfile = document.getElementById('noElevationProfile').value;
    }
    if(document.getElementById('noElevationSummary')) {
        _params.noElevationSummary = document.getElementById('noElevationSummary').value;
    }
    if(document.getElementById('useElevationData') && document.getElementById('useElevationData').checked) {
        _params.useElevationData = document.getElementById('useElevationData').value;
    }
    if(document.getElementById('routeType_leasttime') && document.getElementById('routeType_leasttime').checked) {
        _params.routeType = document.getElementById('routeType_leasttime').value;
    }
    if(document.getElementById('routeType_leastwalking') && document.getElementById('routeType_leastwalking').checked) {
        _params.routeType = document.getElementById('routeType_leastwalking').value;
    }
    if(document.getElementById('routeType_leastinterchange') && document.getElementById('routeType_leastinterchange').checked) {
        _params.routeType = document.getElementById('routeType_leastinterchange').value;
    }
    if(document.getElementById('changeSpeed_normal') && document.getElementById('changeSpeed_normal').checked) {
        _params.changeSpeed = document.getElementById('changeSpeed_normal').value;
    }
    if(document.getElementById('changeSpeed_fast') && document.getElementById('changeSpeed_fast').checked) {
        _params.changeSpeed = document.getElementById('changeSpeed_fast').value;
    }
    if(document.getElementById('changeSpeed_slow') && document.getElementById('changeSpeed_slow').checked) {
        _params.changeSpeed = document.getElementById('changeSpeed_slow').value;
    }
    if(document.getElementById('maxChanges_0') && document.getElementById('maxChanges_0').checked) {
        _params.maxChanges = document.getElementById('maxChanges_0').value;
    }
    if(document.getElementById('maxChanges_1') && document.getElementById('maxChanges_1').checked) {
        _params.maxChanges = document.getElementById('maxChanges_1').value;
    }
    if(document.getElementById('maxChanges_2') && document.getElementById('maxChanges_2').checked) {
        _params.maxChanges = document.getElementById('maxChanges_2').value;
    }
    if(document.getElementById('maxChanges_9') && document.getElementById('maxChanges_9').checked) {
        _params.maxChanges = document.getElementById('maxChanges_9').value;
    }
    if(document.getElementById('useProxFootSearch') && document.getElementById('useProxFootSearch').checked) {
        _params.useProxFootSearch = 'on';
    }
    if(document.getElementById('trITDepMOTvalue100')) {
        _params.trITDepMOTvalue100 = document.getElementById('trITDepMOTvalue100').value;
    }
    if(document.getElementById('trITArrMOTvalue100')) {
        _params.trITArrMOTvalue100 = document.getElementById('trITArrMOTvalue100').value;
    }
    _params.includedMeans = 'checkbox';
    if(document.getElementById('inclMOT_0') && document.getElementById('inclMOT_0').checked) {
        _params.inclMOT_0 = 'on';
    }
    _params.inclMOT_1 = 'on';
    if(document.getElementById('inclMOT_2') && document.getElementById('inclMOT_2').checked) {
        _params.inclMOT_2 = 'on';
    }
    _params.inclMOT_3 = 'on';
    if(document.getElementById('inclMOT_4') && document.getElementById('inclMOT_4').checked) {
        _params.inclMOT_4 = 'on';
    }
    if(document.getElementById('inclMOT_5') && document.getElementById('inclMOT_5').checked) {
        _params.inclMOT_5 = 'on';
    }
    if(document.getElementById('inclMOT_6') && document.getElementById('inclMOT_6').checked) {
        _params.inclMOT_6 = 'on';
    }
    _params.inclMOT_7 = 'on';
    _params.inclMOT_8 = 'on';
    _params.inclMOT_9 = 'on';
    if(document.getElementById('inclMOT_10') && document.getElementById('inclMOT_10').checked) {
        _params.inclMOT_10 = 'on';
    }
    _params.inclMOT_11 = 'on';
}

// trip retoure parameter
mdv.efa.getTripRetoureParams = function (_params) {
    _params.name_origin = $('#nameInfo_destination')[0].value;
    _params.name_destination = $('#nameInfo_origin')[0].value; 
    _params.itdLPxx_currentTab_origin = $('#itdLPxx_currentTab_destination')[0].value;
    _params.itdLPxx_currentTab_destination = $('#itdLPxx_currentTab_origin')[0].value;
    _params.type_origin = 'any';
    _params.type_destination = 'any';
}

// trip go on parameter
mdv.efa.getTripGoOnParams = function (_params) {
    _params.name_origin = $('#nameInfo_destination')[0].value;
    _params.name_destination = '';
    _params.itdLPxx_currentTab_origin = $('#itdLPxx_currentTab_destination')[0].value;
    _params.itdLPxx_currentTab_destination = 'any';
    _params.type_origin = 'any';
    _params.type_destination = 'any';
}

// change request parameter
mdv.efa.getChangeReqParams = function (_params) {
    if ($('#nameInfo_origin')[0].value != 'invalid') {
        _params.name_origin = $('#nameInfo_origin')[0].value;
    }
    else {
        _params.name_origin = $('#name_origin')[0].value;
        _params.place_origin = '';
        _params.placeInfo_origin = 'invalid';
    }
    if ($('#nameInfo_destination')[0].value != 'invalid') {
        _params.name_destination = $('#nameInfo_destination')[0].value;
    }
    else {
        _params.name_destination = $('#name_destination')[0].value;
        _params.place_destination = '';
        _params.placeInfo_destination = 'invalid';
    }
    if (document.getElementById('nameInfo_via')) {
        if ($('#nameInfo_via')[0].value != 'invalid') {
            _params.name_via = $('#nameInfo_via')[0].value;
        }
        else {
            _params.name_via = $('#name_via')[0].value;
            _params.place_via = '';
            _params.placeInfo_via = 'invalid';
        }
        _params.type_via = 'any';
        _params.anyObjFilter_via = '0';
    }
    _params.type_origin = 'any';
    _params.type_destination = 'any';
    _params.anyObjFilter_origin = '0';
    _params.anyObjFilter_destination = '0';
    _params.itdLPxx_currentTab_origin = $('#itdLPxx_currentTab_origin')[0].value;
    _params.itdLPxx_currentTab_destination = $('#itdLPxx_currentTab_destination')[0].value;
}


// =============== odv functionality ===============================================================

// Set tab toggle functionality.
mdv.efa.setOdvTabFunc = function () {
    $("ul.tabs > li").click(function() {
        if (this.className === 'odvType' &&this.children[0].className.indexOf('current') === -1) {
            var tab, usage, i, cl;
            cl = this.children[0].className;
            tab = this.id.substr(this.id.indexOf('_') + 1);

            usage = cl.substr(6);
            
            // reset odv suggest
            if(document.getElementById('odvOverlay')){
                $('#odvOverlay').remove();
            }
    
            // reset tabs
            if ($("ul.tabs > li > a.current.odv_" + usage)) {
                $("ul.tabs > li > a.current.odv_" + usage).removeClass('current');   
            }
            this.children[0].className = 'current ' + cl;
            
            // anyObjFilter and type
            $('#anyObjFilter_' + usage)[0].value = mdv.efa.anyObjFilters[tab];
            $('#type_' + usage)[0].value = 'any';
            $('#typeInfo_' + usage)[0].value = 'invalid';
            $('#nameState_' + usage)[0].value = 'empty';
            $('#placeState_' + usage)[0].value = 'empty';
            $('#nameInfo_' + usage)[0].value = 'invalid';
            $('#placeInfo_' + usage)[0].value = 'invalid';

            // name label
            $('#nameLabel_' + usage + '_' + mdv.efa.anyObjFilters['stop'])[0].style.display = 'none';
            $('#nameLabel_' + usage + '_' + mdv.efa.anyObjFilters['address'])[0].style.display = 'none';
            $('#nameLabel_' + usage + '_' + mdv.efa.anyObjFilters['poi'])[0].style.display = 'none';
            if (tab != 'any') {
                $('#nameLabel_' + usage + '_' + mdv.efa.anyObjFilters[tab])[0].style.display = '';
            }

            // place input
            switch (tab) {
                case 'any':
                    $('#placeContainer_' + usage)[0].style.display = 'none';
                    $('#name_' + usage)[0].style.width = '410px';
                    $('#itdLPxx_currentTab_' + usage)[0].value = 'any';
                    break;
                case 'stop':
                    $('#placeContainer_' + usage)[0].style.display = '';
                    $('#name_' + usage)[0].style.width = '144px';
                    $('#place_' + usage)[0].style.width = '145px';
                    $('#itdLPxx_currentTab_' + usage)[0].value = 'stop';
                    break;
                case 'address':
                    $('#placeContainer_' + usage)[0].style.display = '';
                    $('#name_' + usage)[0].style.width = '138px';
                    $('#place_' + usage)[0].style.width = '138px';
                    $('#itdLPxx_currentTab_' + usage)[0].value = 'address';
                    break;
                case 'poi':
                    $('#placeContainer_' + usage)[0].style.display = '';
                    $('#name_' + usage)[0].style.width = '129px';
                    $('#place_' + usage)[0].style.width = '125px';
                    $('#itdLPxx_currentTab_' + usage)[0].value = 'poi';
                    break;
                default: 
                    break;
            }
           
        }
    });
}

// Reset ODV. 
mdv.efa.resetOdv = function (usage, noPlace) {
    var any = false;
    
    if ($("ul.tabs > li") && $("ul.tabs > li")[1] && $("ul.tabs > li")[1].children[0].className.indexOf('current') > -1) {
        any = true;
    }
    
    $('#nameInfo_' + usage)[0].value = 'invalid';
    if (document.getElementById('nameState_' + usage)) {
        $('#nameState_' + usage)[0].value = 'empty';
    }
    //if (any || !noPlace) {
    if (document.getElementById('placeInfo_' + usage)) {
        $('#placeInfo_' + usage)[0].value = 'invalid';
    }
    if (document.getElementById('placeState_' + usage)) {
        $('#placeState_' + usage)[0].value = 'empty';
    }
    $('#typeInfo_' + usage)[0].value = 'invalid';
    $('#type_' + usage)[0].value = 'any';
    if (document.getElementById('ihre_eingaben')) { 
        $('#anyObjFilter_' + usage)[0].value = '0';
        $('#place_' + usage)[0].value = '';
    }
    else {
        var tab = $("ul.tabs > li[id*=" + usage + "]").has("a.current").attr('id').substr($("ul.tabs > li[id*=" + usage + "]").has("a.current").attr('id').indexOf('_') + 1);
        $('#anyObjFilter_' + usage)[0].value = mdv.efa.anyObjFilters[tab];
    }
}

// Activate any-tab
mdv.efa.activateAnyTab = function (usage) {
    if  (document.getElementById('tab-' + usage + '_stop')) {
        $('#tab-' + usage + '_stop > a').removeClass('current');
        $('#tab-' + usage + '_address > a').removeClass('current');
        $('#tab-' + usage + '_poi > a').removeClass('current');
        $('#tab-' + usage + '_any > a').addClass('current');
        $('#nameLabel_' + usage + '_' + mdv.efa.anyObjFilters['stop'])[0].style.display = 'none';
        $('#nameLabel_' + usage + '_' + mdv.efa.anyObjFilters['address'])[0].style.display = 'none';
        $('#nameLabel_' + usage + '_' + mdv.efa.anyObjFilters['poi'])[0].style.display = 'none';
        $('#placeContainer_' + usage)[0].style.display = 'none';
        $('#name_' + usage)[0].style.width = '410px';
        $('#itdLPxx_currentTab_' + usage)[0].value = 'any';
    }
}


// =============== odv list functionality ==========================================================

// Set name and place input field.
mdv.efa.setListOdv = function (name, place, x, y, usage, stateless) {
    var point_name, point_place = '';
    var any = false;
    
    // odv list ausblenden ausblenden
    $('#odvListContainer').css("display",'none');
            
    if ($("ul.tabs > li") && $("ul.tabs > li")[1] && $("ul.tabs > li")[1].children[0].className.indexOf('current') > -1) {
        any = true;
    }
    
    // text
    if (any) {
        if(place && place != '') {
            name === '' ? point_name = place : point_name = place + ', '; 
        }
        point_name += name;
    }
    else {
        point_name = name;
        point_place = place;
    } 
    
    // type
    document.getElementById('type_' + usage).value = 'any';

    // place
    if (!any && point_place != '') {
        document.getElementById('place_' + usage).value = point_place;
        document.getElementById('placeInfo_' + usage).value = stateless;
        document.getElementById('placeState_' + usage).value = 'empty';
    }
    // name
    if (name != '') {
        document.getElementById('name_' + usage).value = point_name;
        document.getElementById('nameInfo_' + usage).value = stateless;
        document.getElementById('nameState_' + usage).value = 'empty';
    }
    
    // if place choosen and name input not empty try to verify name
    if (name === '' && document.getElementById('name_' + usage).value != '' && !any) {
        sendOdvSuggest(document.getElementById('name_' + usage).value, usage, false);
    }
    // show odv on map
    else if (x && y) {
        setMapCenter(jQuery('#itdLPxx_mapType').attr('value'), x, y, mdv.map.text.detailScale, true, mdv.efa.getImg(usage));
    }
}


// =============== date/time functionality =========================================================

// Select previous or next day/month.
mdv.efa.navigateDate = function (dir, month) {
    var d, m, y;
    d = $('#itdDateDay')[0].value;
    m = $('#itdDateMonth')[0].value;
    y = $('#itdDateYear')[0].value;
    wd = -1;
    
    if(document.getElementById('itdLPxx_weekday')) {
        wd = document.getElementById('itdLPxx_weekday').value;
    }
    
	m = m - 1;  
	var currDate = null; 
    // set day
    if (!month) {
        currDate = new Date(y, m, d);
        var msec = currDate.getTime();
        
        if (dir != 'prev') {
            msec = msec + (24*60*60*1000); 
            if(wd != -1) {
                wd += 1;
                if (wd === 0) {
                    wd = 0;
                }
            }
        }
        else {  
            msec = msec - (24*60*60*1000); 
            if(wd != -1) {
                wd -= 1;
                if (wd === 0) {
                    wd = 7;
                }
            }
        }
        currDate.setTime(msec);
    }
    // set month
    else {
        if (dir != 'prev') {
            m = m + 1;
        }
        else {  
           m = m - 1; 
        }
        if (Math.floor(m / 12) > 0) {
            y = parseInt(y, 10) + Math.floor(m / 12);
        } 
        m = m % 12;
        currDate = new Date (y, m, d);
    }
    
	d = currDate.getDate();
	if (d > 0 && d < 10) { 
        d = "0"+d; 
    }

	m = currDate.getMonth() + 1;
	if (m > 0 && m < 10) { 
        m = "0"+m; 
    }

	y = "" + currDate.getFullYear();

    $('#itdDateDay')[0].value = d;
    $('#itdDateMonth')[0].value = m;
    $('#itdDateYear')[0].value = y;
	$('#datepicker')[0].value = d + '.' + m + '.' + y;
    
    if(wd != -1) {
        document.getElementById('itdLPxx_weekday').value = wd;
    }
}

// Load datepicker.
mdv.efa.loadCalendar = function() {
    if(document.getElementById("datepicker")) {
        var lang = mdv.efa.language;
        if (lang = 'en') {
            lang = 'en-GB';
        }
        jQuery("#datepicker").datepicker({
            showOn: 'button',
            buttonImage: mdv.efa.imgPath + 'ico_red_calendar_20.png',
            buttonImageOnly: true,
            buttonText: 'Kalender',
            showAnim: 'fadeIn',
            minDate: '-1M',
            maxDate: '+1Y',
            showOtherMonths: true, 
            selectOtherMonths: true,
            dateFormat: 'dd.mm.yy'
        });
        jQuery("#datepicker").datepicker(jQuery.datepicker.regional[lang]);
    }
}

// Get the datepicker date and set the EFA date 
mdv.efa.setDate = function() {
    var dateArr = mdvLib.$('datepicker').value.split('.');
    $('#itdDateDay')[0].value = dateArr[0];
    $('#itdDateMonth')[0].value  = dateArr[1];
    $('#itdDateYear')[0].value  = dateArr[2];
}

// Get the EFA date and set the datepicker input.
mdv.efa.getDate = function() {
    var d, m, y; 
    d = $('#itdDateDay')[0].value;
    m = $('#itdDateMonth')[0].value;
    y = $('#itdDateYear')[0].value;
    $('datepicker')[0].value = d + '.' + m + '.' + y;
}


// =============== service selection functionality =================================================

// Set services group.
mdv.efa.setServiceOptions = function (select, option, motType) {
    if (document.getElementById('itdLPxx_MOT_' + motType)) {
        if (select.options[option].selected) {
            document.getElementById('itdLPxx_MOT_' + motType).name = 'MOT';
            document.getElementById('itdLPxx_MOT_' + motType).value = motType;
        }
        else {
           document.getElementById('itdLPxx_MOT_' + motType).name = 'itdLPxx_MOT_' + motType;
        }
    }
    // option "all"
    if (document.getElementById('dmLineSelectionAll')) {
        if (select.options[0].selected) {
            document.getElementById('dmLineSelectionAll').value = 1;
        }
        else {
           document.getElementById('dmLineSelectionAll').value = 0;
        }
    }
    // store selection
    if (document.getElementById('itdLPxx_services')) {
        document.getElementById('itdLPxx_services').value = ':';
        for (var i=0; i<select.options.length; i++) {
            if (select.options[i].selected) {
                document.getElementById('itdLPxx_services').value += i + ':';
            }
        }
    }
}


// =============== request stop list of a service ==================================================

// Get stop list of a service
mdv.efa.getStopList = function (service, sessionID, requestID, request, lineText) {
    var url = mdv.efa.path + 'XSLT_SEL_STT_REQUEST?';
    if (mdv.efa.debug) {
        url = '/' + mdv.efa.virtDir + '/XSLT_SEL_STT_REQUEST?';
    }
    var s = service.split(':');
     
    var _params = {
        itdLPxx_command: 'stopList',
        itdLPxx_lineName: s[2],
        itdLPxx_lineText: lineText,
        itdLPxx_sessionID: sessionID,
        itdLPxx_requestID: requestID,
        itdLPxx_request: request,
        itdLPxx_debug: mdv.efa.debug,
        itdLPxx_efaTab: 'none',
        sessionID: '0',
        mrgSt: '1',
        bothDirection: '1',
        mode: 'line',
        linePreSel: service
    };
    
	var ajax = mdvLib.ajax({ host: url, parameters: _params, method: 'get', onComplete: stopList_onAjaxComplete });
}

function stopList_onAjaxComplete (response) {
    if (response && response.responseText) {
        jQuery('#leftCol')[0].innerHTML = response.responseText;
        mdv.efa.setEfaTab ();
    }
}


// =============== permalink functionality =========================================================

// Modifies the permalink overview 
mdv.efa.ModifyPermaLink = function () {
    if(document.getElementById('name_destination')) {
        jQuery('#permalink_destination').css('display', 'block');
        jQuery('#permalink_options').css('display', 'block');
    }
    if(document.getElementById('name_via')) {
        jQuery('#permalink_via').css('display', 'block');
    }
}

// Request permalink
mdv.efa.getPermalink = function () {
    var URL = document.forms['frmEfa'].action;
    if (mdv.efa.debug != 'true') { 
        URL = mdv.efa.permalink + URL.substring(URL.indexOf('=')+1);
    }
    var content;
    var getKeys = function(obj){
       var keys = [];
       for(var key in obj){
            if (obj.hasOwnProperty(key)) {
                keys.push(key);
            }
       }
       return keys;
    };
    
    if (URL.indexOf('?') < 0) {
        URL = URL.concat('?');
    }
    
    // get parameter
    var _params = {};
    _params.sessionID = 0;
    _params.itdLPxx_mapType = jQuery('#itdLPxx_mapType').attr('value');
    mdv.efa.getReqParams (_params);
    if (URL.indexOf('DM_REQUEST') > -1) {
        _params.limit = jQuery('#limit').attr('value');
        _params.mode = 'direct';
        _params.deleteAssignedStops_dm = 1;
        mdv.map.storeMapCenter(jQuery('#itdLPxx_mapType').attr('value')); 
        _params.itdLPxx_pMapCenter = jQuery('#itdLPxx_mapCenter').attr('value');
    }
    if (URL.indexOf('TRIP_REQUEST2') > -1) {
        _params.itdLPxx_mapDisplay = 'display';
        _params.itdLPxx_displayJourney = jQuery('#itdLPxx_displayPJourney').attr('value');
    }
    if (document.getElementById('itdLPxx_pl_odv_origin') && document.getElementById('itdLPxx_pl_odv_origin').checked) {
        mdv.efa.getOdvParamsPermalink (_params, mdv.map.text.usage);
    }
    if (document.getElementById('itdLPxx_pl_odv_destination') && document.getElementById('itdLPxx_pl_odv_destination').checked) {
        mdv.efa.getOdvParamsPermalink (_params, 'destination');
    }
    if (document.getElementById('itdLPxx_pl_odv_via') && document.getElementById('itdLPxx_pl_odv_via').checked) {
        mdv.efa.getOdvParamsPermalink (_params, 'via');
    }
    if (document.getElementById('itdLPxx_pl_date') && document.getElementById('itdLPxx_pl_date').checked) {
        mdv.efa.getDateParams (_params);
    }
    if (document.getElementById('itdLPxx_pl_time') && document.getElementById('itdLPxx_pl_time').checked) {
        mdv.efa.getTimeParams (_params);
    }
    if (document.getElementById('itdLPxx_pl_options') && document.getElementById('itdLPxx_pl_options').checked && !document.getElementById('abfahrt_overview')) {
        mdv.efa.getTripOptionsParams (_params);
    }
    _params.itdLPxx_debug = mdv.efa.debug;
    
    var keys = getKeys(_params);
    
    for (var i=0; i<keys.length; i++) {
        URL += keys[i] + '=' + _params[keys[i]] + '&';
    }
    
    jQuery('#frmPermalink').attr('action', URL);
    content = '<div style="width:100%;font-size:10pt; text-align:center;">';
    content += '<strong>Permalink</strong>';
	content += '</div><br/>';
    content += '<input type="text" value="' + URL + '" class="permalinkInput"/><br/>';
    
    $('#efa_permalink_content')[0].innerHTML = content;
    
    // set focus
    jQuery('.permalinkInput').focus();
    jQuery('.permalinkInput').select();
}


// =============== trip options functionality ======================================================

// Toggle output of elevation profile in PDF
mdv.efa.toggleElevationOutput = function (state) {
    $('#noElevationSummary')[0].value = state;
}

// Toggle display of options on result screen.
mdv.efa.toggleResultOptions = function () {
    if (document.getElementById('itdLPxx_tripOptionsResult')) {
        if (jQuery('#extend_tab').css('display') === 'block') {
            document.getElementById('itdLPxx_tripOptionsResult').value='false';
        } 
        else {
            document.getElementById('itdLPxx_tripOptionsResult').value='true';
        }
    }
}

// =============== trip request functionality ======================================================

// Set open detailview functionality.
mdv.efa.setOpenDetailsFunc = function () {
    if (document.getElementById( "detail_showAll") && document.getElementById( "detail_hideAll")) {
        $("#results").tabs("#results div.res_pane", {tabs: 'div.res_head', effect: 'slide', initialIndex: null});
        var api = $("#results").data("tabs");
        
        $('td.hovercell').click(function(){
           $.smoothScroll({
                scrollTarget: '#results'
            });
            return false;
        });
        
        var arrTabs = document.getElementsByTagName( 'td' );
        for( var i = 0; i < arrTabs.length; ++i ) 
        {
            if( arrTabs[i].getAttribute( "title" ) != null )
            {
                if(  arrTabs[i].getAttribute( "title" ).substr( 0, 14 ) == "detail_anchor_" )
                {
                    var attrTemp = arrTabs[i].getAttribute( "style" );
                    arrTabs[i].setAttribute( "style", (attrTemp + "cursor:pointer;") );
                    arrTabs[i].onclick = function( )
                    {
                        api.click( parseInt( this.getAttribute( "title" ).substr( 14, 1 ) ) - 1 );
                    };
                }
            }
        }   

        document.getElementById( "detail_showAll" ).onclick = function()
        {
            for( var j = 0; j < api.getPanes().length; j++ )
            {
                api.getPanes().slideDown( j );
            }
        }
        document.getElementById( "detail_hideAll" ).onclick = function()
        {
            for( var j = 0; j < api.getPanes().length; j++ )
            {
                api.getPanes().slideUp( j );
            }
        }
    }
}


// =============== add info functionality ==========================================================

// Load add info messages.
mdv.efa.loadAddInfoMsg = function() {
    if (jQuery('#efa2010_meldungen').length > 0) {
        var url = mdv.efa.path + 'XSLT_ADDINFO_REQUEST';
        if (mdv.efa.debug === 'true') { 
            url = '/' + mdv.efa.virtDir + '/XSLT_ADDINFO_REQUEST';
        }
        var _params = { filterPublicationStatus: 'current',
                        dataType: 'html'};
        _params.itdLPxx_debug = mdv.efa.debug;
        var ajax = mdvLib.ajax({ host: url, parameters: _params, method: 'get', onComplete: addInfo_onAjaxComplete });
    }
}

function addInfo_onAjaxComplete (response) {
    if (response && response.responseText) {
        $('#addInfoMsgBox')[0].innerHTML = response.responseText;
    }
}


// =============== departure monitor functionality =================================================

mdv.efa.getDepartureMonitor = function(stopID, year, month, day, hour, minute, x, y) {
    var url = mdv.efa.path + 'XSLT_DM_REQUEST';
    if (mdv.efa.debug === 'true') { 
        url = '/' + mdv.efa.virtDir + '/XSLT_DM_REQUEST';
    }
    var _params = { useRealtime: 1, 
                    sessionID: 0,
                    language: mdv.efa.language, 
                    name_dm: stopID,
                    type_dm: 'stopID', 
                    mode: 'direct', 
                    limit: 26, 
                    itdLPxx_command:'dmReq',
                    itdLPxx_efaTab: 'dmReq',
                    hideBannerInfo: 1,
                    deleteAssignedStops_dm: 1,
                    useProxFootSearch: 0,
                    stateless: 1,
                    itdLPxx_debug: mdv.efa.debug,
                    dataType: 'html'};
    
    if (year && month && day && hour && minute) {
        _params.itdDateDay = day;
        _params.itdDateMonth = month;
        _params.itdDateYear = year;
        _params.itdTimeMinute = minute;
        _params.itdTimeHour = hour;
    }
                    
    mdv.map.text.usage = 'dm';
    if (x && y) {
        setMapCenter(jQuery('#itdLPxx_mapType').attr('value'), x, y, 7, true, mdv.efa.getImg('origin'));
     }
	var ajax = mdvLib.ajax({ host: url, parameters: _params, method: 'get', onComplete: getDepartureMonitor_onAjaxComplete });
}

function getDepartureMonitor_onAjaxComplete (response) {
    if (response && response.responseText) {
        jQuery('#leftCol')[0].innerHTML = response.responseText;
        mdv.efa.setEfaTab();
    }
}


// =============== LVP functionality ===============================================================

mdv.efa.getLVP = function (dir, line, net, pj, sup) {
    var url = mdv.efa.path + 'XSLT_ROP_REQUEST';
    if (mdv.efa.debug === 'true') {
        url = '/' + mdv.efa.virtDir + '/XSLT_ROP_REQUEST';
    }
    var _params = { sessionID: 0,
                    requestID: 0,
                    language: mdv.efa.language, 
                    command: 'direct',
                    direction: dir,
                    line: line,
                    net: net,
                    project: pj,
                    sup: sup,
                    itdLPxx_efaTab: 'none',
                    itdLPxx_screen: 'lvp',
                    itdLPxx_debug: mdv.efa.debug,
                    itdLPxx_sessionID: jQuery('#itdLPxx_sessionID').attr('value'),
                    itdLPxx_requestID: jQuery('#itdLPxx_requestID').attr('value'),
                    dataType: 'html'};
                    
	var ajax = mdvLib.ajax({ host: url, parameters: _params, method: 'get', onComplete: getLVP_onAjaxComplete });
}

function getLVP_onAjaxComplete (response) {
    if (response && response.responseText) {
        var action = mdv.efa.path + 'XSLT_ROP_REQUEST';
        if (mdv.efa.debug === 'true') {
            action = 'XSLT_ROP_REQUEST';
        }
        jQuery('#selSttParams')[0].innerHTML = response.responseText;
        document.forms['frmEfa'].target = '_blank'; 
        document.forms['frmEfa'].action = action;
        document.forms['frmEfa'].submit();
    }
}


// =============== service information functionality ===============================================

// display stop on map
/*mdv.efa.dmStopOnMap = function (stop) {
   var url = mdv.efa.path + 'XSLT_STOPFINDER_REQUEST';
    if (mdv.efa.debug === 'true') {
        url = '/' + mdv.efa.virtDir + '/XSLT_STOPFINDER_REQUEST';
    }
    var _params = { language: mdv.efa.language,
			locationServerActive: '1',
			anyObjFilter_sf: '2',
			anyMaxSizeHitList: '26',
			type_sf: 'any',
			name_sf: stop,
            outputFormat: 'JSON',
            dataType: 'html',
            itdLPxx_debug: mdv.efa.debug};
                    
	var ajax = mdvLib.ajax({ host: url, parameters: _params, method: 'get', onComplete: getStop_onAjaxComplete });
}

function getStop_onAjaxComplete (response) {
    var json = null;
 	var efa = null;
    var usage = null;
    var odvSuggestPlace = "false";
	
	// Check if we need to use the prototype lib.
 	if (response && response.responseText)	{
 		json = response.responseText;
 	// Otherwise use jQuery lib.
 	} else if (response) {
 		json = response;
 	}
 
 	eval('efa = ' + json + ';'); 
    
    // no hits
    if(!efa.stopFinder){
		return false;
        
	}
    
    var point =  efa.stopFinder[0] || efa.stopFinder.point;
    var ptCoords;
    
    // coordinates
    if(!point.ref.coords){
        return;
    }   
    else {
        ptCoords =  point.ref.coords.split(',');
    }
    
    setMapCenter(jQuery('#itdLPxx_mapType').attr('value'), ptCoords[0], ptCoords[1], mdv.map.text.detailScale, false, null);
}*/


// =============== feedback formular ===============================================================

// send feedback formular
mdv.efa.sendFeedback = function () {
    var URL = document.forms['frmEfa'].action;
    var emailRegEx = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;

    jQuery('#command').attr('value', 'feedbackMail');
    jQuery('#itdLPxx_command').attr('value', 'feedback');

    if (jQuery('#fahrt_overview').length === 0 && jQuery('#afahrt_overview').length === 0) {
        URL = mdv.efa.path + 'XSLT_SEL_STT_REQUEST?';
        if (mdv.efa.debug === 'true') {
            URL = '/' + mdv.efa.virtDir + '/XSLT_SEL_STT_REQUEST?';
        }
    }
    
    if (jQuery('#addEmailAddress').attr('value').search(emailRegEx) == -1) { 
        jQuery('#feedbackError').css('display','block');
    }
    else {
        var _ajax = jQuery.post(URL, $("#frmEfa").serialize(), sendFeedback_onAjaxComplete, 'html'); 
    }
}

function sendFeedback_onAjaxComplete () {
    // emty input
    jQuery('#addEmailAddress').attr('value','');
    jQuery('#itdMPxx_Feedback').attr('value','');
    jQuery('#feedbackError').css('display','none');
    // feedback
    jQuery('#feedbackTick').css('display','inline');
}


// =============== iCal functionality ==============================================================

// get iCal link
mdv.efa.getICalLink = function (sessionID, routeIdx) {
    var url = mdv.efa.path + 'XSLT_TRIP_REQUEST2';
    if (mdv.efa.debug === 'true') {
        url = '/' + mdv.efa.virtDir + '/XSLT_TRIP_REQUEST2';
    }
    
     var _params = { sessionID: sessionID,
                    requestID: 1,
                    language: mdv.efa.language, 
                    command: 'iCal:' + routeIdx,
                    dataType: 'html'};
                    
	var ajax = mdvLib.ajax({ host: url, parameters: _params, method: 'get', onComplete: getICalLink_onAjaxComplete });
}

function getICalLink_onAjaxComplete (response) {
    if (response && response.responseText) {
        jQuery('#iCal').html(response.responseText);
    }
}
