var mdv;

if(!mdv) {
    mdv = {};
}

mdv.efa = {
    help: {},
    text: {}
};

// ======================================== on document ready ======================================

jQuery(document).ready(function(){
     mdv.efa.onDocReady(); 
});
    
jQuery(window).load(function(){
     mdv.efa.onLoad(); 
});    
    
mdv.efa.onDocReady = function () {
    // set message position
    mdv.efa.setMsgPos();
    // key codes
    mdv.efa.keyCodes();
    // help
    mdv.efa.help();
    // TODO_ Auf-/Zuklapp-Funktionalität vorübergehend deaktiviert
    // toggle ttb rows
    //mdv.efa.toggleTTBRows();
    // hide rows and colums for timetable booklet print view
    mdv.efa.setTTBPrint();
    // print
    if (jQuery('#karte_druck').length > 0) {
        window.setTimeout("window.print()", 2000);
    }
}

mdv.efa.onLoad = function () {
    // load print output map
    if (jQuery('#itdLPxx_tripSelector').length > 0 && jQuery('#itdLPxx_tripSelector').attr('value') != '') {
        var id = jQuery('#itdLPxx_tripSelector').attr('value');
        mdv.map.onLoadHandler('karte_rechts_map', jQuery('#sessionID').attr('value'), jQuery('#requestID').attr('value'), id, true);
    }
    // load output map
    else if (jQuery('#itdLPxx_showDetails').length > 0 && jQuery('#itdLPxx_showDetails').attr('value') != '') {
        mdv.map.onLoadHandler('karte_mitte_map' + id, jQuery('#sessionID').attr('value'), jQuery('#requestID').attr('value'));
    }
    // load input map
    else if (jQuery('#karte_rechts_map').length > 0){
        mdv.map.onLoadHandler('karte_rechts_map');
    }
}

// Set position of messages.
mdv.efa.setMsgPos = function () {
    $('div.meldung').css('margin-top', '-35px');
}

// KeyCodes 
mdv.efa.keyCodes = function () {
    $(document).keypress(function(event) {
        // enter
        if(event.keyCode === 13) {
            mdv.efa.fixDate(jQuery('#DPC_tripdate'));
        	if (jQuery('div.actSug').length) {
        		jQuery('div.actSug a').click();
                event.preventDefault();
                return false;
            }
            else{
                $('#submitButton').click();
            }
        }
    });
}

// help
mdv.efa.help = function () {
    // map help
    $('a.hilfeiconkarte').attr('href', mdv.efa.help.map);
    $('a.hilfeiconkarte').attr('target', '_blank');
    // trip help
    $('a.tripHelp').attr('href', mdv.efa.help.trip);
    $('a.tripHelp').attr('target', '_blank');
    // ps help
    $('a.psHelp').attr('href', mdv.efa.help.ps);
    $('a.psHelp').attr('target', '_blank');
    // dm help
    $('a.dmHelp').attr('href', mdv.efa.help.dm);
    $('a.dmHelp').attr('target', '_blank');
    // stt help
    $('a.sttHelp').attr('href', mdv.efa.help.stt);
    $('a.sttHelp').attr('target', '_blank');
    // ttb help
    $('a.ttbHelp').attr('href', mdv.efa.help.ttb);
    $('a.ttbHelp').attr('target', '_blank');
    // lvp help
    $('a.lvpHelp').attr('href', mdv.efa.help.lvp);
    $('a.lvpHelp').attr('target', '_blank');
}


// ======================================== common functionality ===================================

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;
};

// ======================================== efa functionality ======================================

// Select/deselect all checkboxes 
mdv.efa.toggleCheckboxs = function (checked) {
    jQuery('.selElem > input:checkbox').attr('checked', checked);
}

mdv.efa.deleteDefault = function (elem) {
	if (elem.value && elem.value == elem.defaultValue)elem.value = '';
}

mdv.efa.toggleOptions = function (ownID, toggleID) {
    jQuery('#' + ownID).toggleClass("plus minus");
    jQuery('#' + toggleID).toggle();
    if(ownID === 'itdTripOptionsHead') {
        if (jQuery('#itdLPxx_options').attr('value') === '1') {
            jQuery('#itdLPxx_options').attr('value', '-1');
        }
        else {
            jQuery('#itdLPxx_options').attr('value', '1');
        }
    }
}

mdv.efa.toggleMap = function (ownID, toggleID, classID) {
    var id = ownID.substring(ownID.indexOf('toggleMap') + 9);
	jQuery('#' + ownID).toggleClass("plus minus");
	cla = $('.'+classID);
	cla.each(function(){
       		$(this).toggle();
      	});
	elem = document.getElementById(toggleID);
    if(jQuery("#legendTab" + id).hasClass('active')) {
        mdv.map.toggleLegend(id);
    }
    if(jQuery("#lvpTab" + id).hasClass('active')) {
        mdv.map.toggleLVPFunc(id);
    }
    jQuery(elem).toggle();
}

mdv.efa.showStopOnMap = function (x, y, zl, routeIdx, sessionID, reqID) {
    jQuery('#itdLPxx_view').attr('value', jQuery('#itdLPxx_view').attr('value') + 'showStop');
    // remove services
    if (jQuery('#itdLPxx_service').length > 0) {
        if(jQuery("#lvpTab" + routeIdx).hasClass('active')) {
            mdv.map.toggleLVPFunc(routeIdx);
            jQuery('#itdLPxx_service').attr('value', '');
        }
    }
    jQuery('#itdLPxx_mapCenterX').attr('value', x);
    jQuery('#itdLPxx_mapCenterY').attr('value', y);
    jQuery('#itdLPxx_mapZoomLevel').attr('value', zl);
    // open map if closed
    if (document.getElementById('karte_mitte_map' + routeIdx).style.display === 'none') {
       mdv.efa.toggleMap('toggleMap' + routeIdx, 'karte_mitte_map' + routeIdx, 'mapNav' + routeIdx);
    }
    mdv.map.onLoadHandler('karte_mitte_map'+ routeIdx, sessionID, reqID, routeIdx, true);
}

mdv.efa.togglePath = function (ownID, toggleID, untoggleID) {
	own = document.getElementById(ownID);
	$(own).toggleClass("plus minus");
	un = document.getElementById(untoggleID);
	$(un).toggle();	
	elem = document.getElementById(toggleID);
	$(elem).toggle();	
}

mdv.efa.toggleFareInfo = function (ownID, toggleID) {
    // deactivate old fare info
    jQuery('.info_aktiv').not('#' + ownID).addClass('info');
    jQuery('.info_aktiv').not('#' + ownID).removeClass('info_aktiv');
    jQuery('.fare_tooltip').not('#' + toggleID).css('display', 'none');
    // toggle fare info
	jQuery('#' + ownID).toggleClass("info info_aktiv");
	jQuery('#' + toggleID).toggle();	
}

mdv.efa.toggleTableCell = function (ownID, toggleID, cellID) {
	jQuery('#' + ownID).toggleClass("plus minus");
	jQuery('#' + cellID).toggleClass("minus plus");	
	jQuery('#' + toggleID).slideToggle("slow");
}

mdv.efa.toggleVisibility = function (toggleID) {
	elem = jQuery('#' + toggleID);
	$(elem).toggle();
}

mdv.efa.clearInput = function (usage, obj) {
    if(obj && obj.value && obj.value===obj.defaultValue) {    
        obj.value='';
        jQuery('#nameInfo_' + usage).attr('value','invalid');
        jQuery('#typeInfo_' + usage).attr('value','invalid');
    }
    else {
        jQuery('#nameInfo_' + usage).attr('value','invalid');
        jQuery('#typeInfo_' + usage).attr('value','invalid');
    }
    jQuery('#messageBox_' + usage).css('display','none');
}

mdv.efa.setObjFilter = function (usage, type) {
    jQuery('#itdLPxx_type_' + usage).attr('value', type);
}


// ======================================== stop timetable functionality ===========================

// submit stop timetable and choose odv verification or line verification
mdv.efa.submitSTT = function(defaultText, mode) {
    // line input error
    if (mode === 'error') {
        jQuery('#sessionID').attr('value','0');
        jQuery('#requestID').attr('value', '0');
    }
    // line input
    if(jQuery('#lineName').attr('value') != '' && jQuery('#lineName').attr('value') != defaultText) {
        jQuery('#mode').attr('value', 'line');
        jQuery('#lineName').attr('name', 'lineName');
        if (jQuery('#action').length > 0) {
            jQuery('#action').attr('value', 'XSLT_SEL_STT_REQUEST');
        }
        else {
            jQuery('#EFA-Form').attr('action', 'XSLT_SEL_STT_REQUEST');
        }
        jQuery('#sessionID').attr('value', '0');
        jQuery('#requestID').attr('value', '0');
    }
    // odv input
    else {
        jQuery('#mode').attr('value', 'odv');
        jQuery('#lineName').attr('name', 'itdLPxx_lineName');
    }      
    jQuery('#itdLPxx_print').attr('value', '');
    jQuery('#EFA-Form').submit();
}


// ======================================== timetable booklet functionality ========================

// submit stop timetable and choose odv verification or line verification
mdv.efa.submitTTB = function(defaultText, mode) {
    // line input error
    if (mode === 'error') {
        jQuery('#sessionID').attr('value', '0');
        jQuery('#requestID').attr('value', '0');
    }
    // line input
    if(jQuery('#lineName').attr('value') != '' && jQuery('#lineName').attr('value') != defaultText) {
        jQuery('#mode').attr('value', 'line');
        jQuery('#lineName').attr('name', 'lineName');
        jQuery('#sessionID').attr('value', '0');
        jQuery('#requestID').attr('value', '0');
    }
    // odv input
    else {
        jQuery('#mode').attr('value', 'odv');
        jQuery('#lineName').attr('name', 'itdLPxx_lineName');
    }      
    jQuery('#itdLPxx_print').attr('value', '');
    jQuery('#EFA-Form').submit();
}

// toggle outbound/return journey and weekday type
mdv.efa.toggleTTB = function () {
    var dir = 'H';
    var pos = '1';
    var weekday = jQuery('.weekdayRadio:checked')[0].id
    
    // determine position and direction
    pos = weekday.substr(weekday.length - 1, 1);
    if (jQuery('.dirSel:checked')[0].id.indexOf('R') > -1) {
        dir = 'R';
    }
    
    // hide old timetable booklet
    jQuery('.ttbLeft').css('display', 'none');
    jQuery('.ttbRight').css('display', 'none');
    // hide legend and caption
    jQuery('.ttbLegend').css('display', 'none');
    jQuery('.blau').css('display', 'none');
    
    // set weekday type
    jQuery('#weekday_' + dir + '_' + pos).attr('checked','checked');
    // set direction
    jQuery('#dir_' + dir).attr('checked','checked');
    
    // outbound journey
    if (dir === 'H') {
        // weekday selection
        jQuery('#weekdaySel_H').css('display', 'block');
        jQuery('#weekdaySel_R').css('display', 'none');
        // title
        jQuery('#direction_H').css('display', 'block');
        jQuery('#direction_R').css('display', 'none');
        // additional text
        jQuery('.ttbHintsH').css('display', 'block');
        jQuery('.ttbHintsR').css('display', 'none');
    }
    // return journey
    else {
        // weekday selection
        jQuery('#weekdaySel_H').css('display', 'none');
        jQuery('#weekdaySel_R').css('display', 'block');
        // title
        jQuery('#direction_H').css('display', 'none');
        jQuery('#direction_R').css('display', 'block');
        // additional text
        jQuery('.ttbHintsH').css('display', 'none');
        jQuery('.ttbHintsR').css('display', 'block');
    }
    
    // timetable booklet
    jQuery('#ttb_left_' + dir + '_' + pos).css('display', 'block');
    jQuery('#ttb_right_' + dir + '_' + pos).css('display', 'block');
    // legend
    jQuery('#hint_' + dir + '_' + pos).css('display', 'block');
    jQuery('#hint_' + dir + '_' + pos).css('display', 'block');
    // caption
    jQuery('#caption_' + pos).css('display', 'block');
    jQuery('#caption_' + pos).css('display', 'block');
}

// show hide ttb rows 
mdv.efa.toggleTTBRows = function () {
    jQuery('.ttbRowToggle').click(function(){
        var id = this.id;
        var cl = jQuery('#' + id).parent().parent().attr('class').substr(jQuery('#' + id).parent().parent().attr('class').indexOf('even') + 1);
       // open
        if(jQuery('#' + id).hasClass('plus')) {
            jQuery('#' + id).removeClass('plus');            
            jQuery('#' + id).addClass('minus');            
            jQuery('.' + cl + '_child').css('display','');
        }
        // close 
        else {
            jQuery('#' + id).removeClass('minus');  
            jQuery('#' + id).addClass('plus'); 
            jQuery('.even.' + cl + '_child').css('display','none');
        }
    }); 
}

// Set print parameter for HTML timetable
mdv.efa.printTTB = function () {
    var rows = '';
    var cols = ''
    var i;
    var width = 0;
    jQuery('.ttbLeft:visible .ttbRowCheck:checked').each(function() {
        rows = rows.concat(jQuery(this).attr('value'));
    });
    jQuery('.ttbRight:visible .ttbColCheck:checked').each(function() {
        cols = cols.concat(jQuery(this).attr('value'));
        width += 80;
    });
    jQuery('#itdLPxx_direction').attr('value', jQuery('.dirSel:checked').attr('value'));
    jQuery('#itdLPxx_weekdaytype').attr('value', jQuery('.weekdayRadio:checked').attr('id').substring(10));
    jQuery('#itdLPxx_rows').attr('value', rows);
    jQuery('#itdLPxx_cols').attr('value', cols);
    jQuery('#EFAPrintIMap').submit();
}

// HTML timetable print view
mdv.efa.setTTBPrint = function () { 
    if(jQuery('#itdLPxx_rows').length > 0 && jQuery('#itdLPxx_cols').length > 0) {
        // print 
        if (jQuery('#headerlogo').length > 0) {
            window.print();
        }
   }
}

// Earlier/later scroll functionality for HTML timetable
mdv.efa.ttbScroll = function (scrollDir) {
    var colno = 6; 
    var tdwidth = 93;
    var step = (tdwidth * colno);
    var left = parseInt(jQuery('.ttbRight table').css('left').substring(0, jQuery('.ttbRight table').css('left').indexOf('px')), 10);
    var realwidth = parseInt(jQuery('.ttbRight table').css('width').substring(0, jQuery('.ttbRight table').css('width').indexOf('px')), 10);
    var width = Math.ceil(realwidth / step) * step;
    var scroll = 0;
    
    // later (scroll right)
    if (scrollDir === 'later') {
        scroll = left <= (width - step) * -1 ? (width - step) * -1 : (left - step);
    }
    // earlier (scroll left)
    else {
        scroll = (left + step) > 0 ? 0 : (left + step); 
    }
    jQuery('.ttbRight table').css('left', scroll + 'px');
}

// ======================================== rop functionality ======================================

// submit stop timetable and choose odv verification or line verification
mdv.efa.submitROP = function(defaultText, mode) {
    // line input error
    if (mode === 'error') {
        jQuery('#sessionID').attr('value', '0');
        jQuery('#requestID').attr('value', '0');
    }
    // line input
    if(jQuery('#lineName').attr('value') != '' && jQuery('#lineName').attr('value') != defaultText) {
        jQuery('#mode').attr('value', 'line');
        jQuery('#lineName').attr('name', 'lineName');
        jQuery('#sessionID').attr('value', '0');
        jQuery('#requestID').attr('value', '0');
    }
    // odv input
    else {
        jQuery('#mode').attr('value', 'odv');
        jQuery('#lineName').attr('name', 'itdLPxx_lineName');
    }      
    jQuery('#itdLPxx_print').attr('value', '');
    jQuery('#EFA-Form').submit();
}

// ======================================== trip functionality =====================================

// Find the next ticket counter.
mdv.efa.tripTicketCounter = function (x, y, routeIdx){
    var URL = mdv.map.vars.coordURL + 
                '&language=de&itdLPxx_routeIdx=' + routeIdx + '&locationServerActive=1&coord=' + x + ':' + y + 
                ':NBWT&coordListFormat=STRING&coordListOutputFormat=STRING&inclFilter=1&type_1=POI_POINT&inclDrawClasses_1=74&radius_1=1000&outputFormat=JSON';

    jQuery.ajax({ url: URL, success: tripTicketCounter_onAjaxComplete});
};

/* Create the ticket Counter Address div */
function tripTicketCounter_onAjaxComplete(response){
 	var json = null;
 	var efa = null;

	// 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 + ';'); 	
    
    if (efa.pins.length < 1) {
        return false;
    }
    
    var routeIdx = '1';
    var div = '';
	var link = '';   
    var link2 = '';
    var urlLink = '';
    var coords = efa.pins[0].coords;
    var cName = efa.pins[0].desc;
    
    if(efa.parameters.length > 0) {
        for (var i=0; i < efa.parameters.length; i++) {
           if (efa.parameters[i].name === 'routeIdx') {
                routeIdx = efa.parameters[i].value;
           } 
        }
    }
    
    // open map and center on ticket counter
    if (coords!='') {
        var x = coords.substring(0, coords.indexOf(','));
        var y = coords.substring(coords.indexOf(',') +1);
         
         link2 = 'javascript:mdv.efa.displayTicketCounter(' + routeIdx + ',' + x + ',' + y +');';
        
        // create name with link
        cName = '<a href=\"' + link2 + '\">' + cName + '</a>';
    }
    link = cName.concat('<br/>');
    
    for (var i=0; i < efa.pins[0].attrs.length; i++) {
        var a = efa.pins[0].attrs[i];	
        if (a.name == 'POI_ADDRESS') {
            link = link.concat(a.value, '<br/>');
        }
        if (a.name == 'POI_TEXT3') {
            link = link.concat(a.value, '<br/>');
        }		
    } 
    if (!link){
        link = efa.pins[0].desc + '<br/>';
    }
    
    for (var i=0; i < efa.pins[0].attrs.length; i++) {
        var a = efa.pins[0].attrs[i];

        if (a.name === 'LINK') { 		
            var url = a.value;
            if (url.indexOf('http://') < 0) {
                url = 'http://' + url;
            }
            urlLink = '<a href="' + url + '" target="_blank">' + url + '</a>';
        }
    }	
    if (!urlLink) {
        for (var i=0; i < efa.pins[0].attrs.length; i++) {
            var a = efa.pins[0].attrs[i];

            if (a.name === 'POI_LINK') { 		
                urlLink = '<a href="' + a.value.substring(a.value.indexOf('$') +1) + '" target="_blank">' + efa.pins[0].desc + '</a>';
            }
        }
    }
    
    
    link = link.concat(urlLink);
    
    div = '<br /><strong>' + mdv.efa.text.ticketcounter + '</strong>';
    jQuery('ticketCounterCap').html(div); 
    
    div ='<tr><td style="vertical-align:middle"><img src="' 
          + mdv.map.vars.imgPath + 'efa_ico/karte_vvk.png" width="25" height="30" /></td><td><div class="ticketCounter">' + link + '</div></td></tr>';
	jQuery('.ticketCounter').html(div); 
};

// Show ticket counter on map.
mdv.efa.displayTicketCounter = function (routeIdx, x, y) {
    // open trip details if closed
    if(document.getElementById('tripDetails' + routeIdx).style.display === 'none') {
        mdv.efa.toggleTableCell('tripHead' + routeIdx, 'tripDetails' + routeIdx, 'tripDetailsCell' + routeIdx);
    }
    // open map if closed
    if (document.getElementById('karte_mitte_map' + routeIdx).style.display === 'none') {
       mdv.efa.toggleMap('toggleMap' + routeIdx, 'karte_mitte_map' + routeIdx, 'mapNav' + routeIdx);
       mdv.map.onLoadHandler('karte_mitte_map' + routeIdx, jQuery('#sessionID').attr('value'), jQuery('#requestID').attr('value'), routeIdx,true);
    }
    // set zoom level and center
    mdv.map.setMapCenter('karte_mitte_map' + routeIdx, x, y, 7);
}


// Get leg timetable.
mdv.efa.getLegTT = function (contentID, orig, dest, date, time, mode, suffix) {
    var suf = 'dep';
    if (suffix) {
        suf = suffix;
    }
    var URL = mdv.map.vars.legTTURL + '&hideBannerInfo=1&type_orig=stopID&name_orig=' + orig + '&type_dest=stopID&name_dest=' + dest 
                + '&itdDate' + suf + '=' + date + '&itdTime' + suf + '=' + time + '&itdLPxx_altJourneys=' + contentID;

    jQuery.ajax({ url: URL, success: legTT_onAjaxComplete});
}

function legTT_onAjaxComplete (response) {
    var target = response.substring(response.indexOf('inner_') + 6, response.indexOf('__'));
    
    if (target != '' && jQuery('#' + target).length > 0) {
        jQuery('#' + target).html(response);
    } 
}

// Fix date input
mdv.efa.fixDate = function() {
    if (jQuery('#DPC_tripdate').length > 0) {
        var date = jQuery('#DPC_tripdate').attr('value').split('.');
        if (date[0] && date[0].length < 2) {
            date[0] = '0' + date[0];
        }
        if (date[1] && date[1].length < 2) {
            date[1] = '0' + date[1];
        }
        if (date[2] && date[2].length == 2) {
            date[2] = '20' + date[2];
        }
         jQuery('#DPC_tripdate').attr('value', date[0] + '.' + date[1] + '.' +date[2]);
    }
}


// toggle max changes
mdv.efa.toggleMaxChanges = function (state) {
    if (state) {
        jQuery('#maxChanges').attr('value', '0');
    }
    else {
        jQuery('#maxChanges').attr('value', '9');
    }
}

