var mdv;

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

/*
	organize global functions
*/

mdv.common = {
    dynVal: {}
};

mdv.trip = {
// override value onload if LP 'options' is set to 0 or missing
// and call toggleOptions to hide options wrapperElem
	optionsVisible:			1
};

mdv.request = {
	form:					null
};

mdv.sug = {
    sugFocusId: -1,
    checkText: ''
}


// ================================= request functions ==================================================================

mdv.request.getNewField = function(name, value) {
	var elem = document.createElement('input');
	elem.type = 'hidden';
	elem.name = name;
	elem.id = name;
	elem.value = value || '';
	//append new input field...
	this.form.appendChild(elem);
	//...and return a reference
	return this.form[name];
};

mdv.request.getField = function(name) {
	// try to get input field by name or id, otherwise create one
	var field = this.form[name] || (document.getElementById(name) || this.getNewField(name)); 
	return field;
};

mdv.request.setField = function(name, value) {
	var field = this.getField(name); 
	field.value = (typeof value !== 'undefined') ? value : '';
};

mdv.request.getLPField = function(name) {
	var lpName = 'itdLPxx_' + name;
	return this.getField(lpName);
};

mdv.request.setLPField = function(name, value) {
	var lpName = 'itdLPxx_' + name;
	this.setField(lpName, value);
};

mdv.request.modifyRequest = function(val) {
	this.setLPField('command', val);
	this.setZopeCommand(val);
	this.form.submit();
};

mdv.request.setZopeCommand = function(command) {
	this.setField('zope_command', command);
    this.setField('calcNumberOfTrips', 1);
	this.form.submit();
};

mdv.request.printHTML = function(routeIdx) {
    var j;
    var parameters = 'itdLPxx_screen=print:'
    // single journey
    if (routeIdx) {
        var detail = '';
        if (jQuery('#itdRouteList_' + routeIdx + '_details').is(':visible')) {
            detail = '-d';
        }
        parameters = parameters.concat(routeIdx, detail, ':');
    }
    // overview
    else {
        var tripSelectors = jQuery('input.tripSelector', jQuery('#itdRouteList'));
        for (j=0; j<tripSelectors.length; j++) {
            if (tripSelectors[j].checked) {
                var detail = '';
                parameters = parameters.concat(tripSelectors[j].value, detail, ':');
            }
        }   
    }        
            
	window.open('print_trip?' + parameters);
};

mdv.request.toggleDMFullScreen = function(state) { 
    var imgSrc = jQuery('.motImg').attr('src');
    
    if (state) {
        this.setField('zope_command', 'dmFullScreen');
        jQuery('#itdLPxx_mode').attr('value', 'full_screen');
        //mdv.beg.dmAutoUpdate();
    }
    else {
        this.setField('zope_command', 'dmNormalScreen');
        jQuery('#itdLPxx_mode').attr('value', 'normal_screen');
    }
	this.form.submit();
    
};

mdv.request.isEmptyOdv = function(usage) {
	if (!usage) {
		return false;
	}
	var bool = (mdv.request.getField('placeState_' + usage).value === 'empty' && 
		mdv.request.getField('nameState_' + usage).value === 'empty' && 
		(mdv.request.getField('place_' + usage).value !== '' || 
		mdv.request.getField('name_' + usage).value !== ''));
	
	return bool;

	};
    
mdv.request.toggleLineSelection = function(requestType, bool) {
    
    var i, elemArr = this.form[requestType];
    for (i=0; i<elemArr.length; i+=1) {
        elemArr[i].checked = bool===true ? true : false;
    }
    if (bool === false) {
        if (this.form.dmLineSelectionAll) {
            if (this.form.dmLineSelectionAll.checked) {
                this.form.dmLineSelectionAll.checked = false;
            }
            this.form.dmLineSelectionAll.value = 'false';
        }
        if (this.form.toggleAllLines) {
            this.form.toggleAllLines.checked = false;
        }
    }    
};

mdv.request.filterLineSelection = function(elem) {
    
    var val = (elem.checked) ? 'true' : 'false';
    this.setCommand('nop');
    this.setLPField('enableLineFilter', val);
    this.form.submit();
};

mdv.request.toggleAllLines = function(name, bool) {
    var i, chbArr = this.form[name];
    for (i=0; i<chbArr.length; i+=1) {
        chbArr[i].checked = bool;
    }
};


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

mdv.common.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 browser width and hight.
mdv.common.getInnerBrowser = function() {

	var windowHeight, windowWidth;
	
	// get overall screen dimensions
	if (self.innerHeight) {
		windowHeight = self.innerHeight;
		windowWidth = self.innerWidth;
	}
	else if (document.documentElement && document.documentElement.clientHeight) {
		windowHeight = document.documentElement.clientHeight;
		windowWidth = document.documentElement.clientWidth;
	}
	else if (document.body) {
		windowHeight = document.body.clientHeight;
		windowWidth = document.body.clientWidth;
	}

	return {
		width: windowWidth,
		height: windowHeight
	}
}

// Return IE Version or -1.
mdv.common.getIEVersion = function() {
    var ua, re, rv = -1;

    if (navigator.appName == 'Microsoft Internet Explorer') {
        ua = navigator.userAgent;
        re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (re.exec(ua) != null) {
            rv = parseFloat(RegExp.$1);
        }
    }
    return rv;
}

mdv.common.createElem = function(tag, id, propObj) {
    var elem = document.createElement(tag);
    if (id) {
        elem.id = id;
    }
    if (propObj) {
        if (typeof propObj === 'object') {
            for(var prop in propObj) {
                elem[prop] = propObj[prop];
            }
        }
    }
    return elem;
}

mdv.common.css = function(a, o, c1, c2) {
    switch (a)
    {
        case'swap':
            o.className =! this.css('check',o,c1) ? o.className.replace(c2,c1) : o.className.replace(c1,c2);
            break;

        case 'add':
            if (!this.css('check',o,c1)) {    o.className += o.className ? ' ' + c1 : c1;    }
            break;

        case 'remove':
            var rep = o.className.match(' ' + c1) ? ' ' + c1 : c1;
            o.className = o.className.replace(rep,'');
            break;

        case 'check':
            return new RegExp('\\b'+c1+'\\b').test(o.className);
    }
}

mdv.common.getStyle = function(el, styleProp) {
	var y;
	if (el.currentStyle) {
		y = el.currentStyle[styleProp];
    } else if (window.getComputedStyle) {
		y = document.defaultView.getComputedStyle(el,null).getPropertyValue(styleProp);
    }
	return y;
}

mdv.common.createBlockDiv = function (zIndex) {

    var div = document.createElement('div');
    div.id = 'blockInputLayer';

    mdvLib.style([div], {
        position: 'absolute',
        left: 0,
        top: 0,
        zIndex: zIndex || 99,
        width: mdv.common.getInnerBrowser().width + 'px',
        height: mdv.common.getInnerBrowser().height + 'px',
        backgroundColor: '#000',
        opacity: 0.3,
        filter: 'alpha(opacity=30)',
        display: 'block'
    });

    document.body.appendChild(div);

}
    
mdv.common.undoBlockDiv = function() {
    var blockDiv = mdvLib.$('blockInputLayer');
    if (blockDiv) {
        mdv.common.toggleElem(blockDiv);
        document.body.removeChild(blockDiv);
    }
}

mdv.common.toggleElem = function(elem) {
    if (!elem) { 
        return;
    }
    elem.style.display = (mdv.common.getStyle(elem, 'display') !== 'none') ? 'none' : '';
}

mdv.common.toggleOverlayElem = function(elem) {
    jQuery('.singleOverlay').css('display', 'none');
    mdv.common.toggleElem (elem);
}

mdv.common.toggleElem2 = function(elem, state) {
    if (!elem) { 
        return;
    }
    elem.style.display = state ? '' : 'none';
}

mdv.common.toggleChildren = function (elem, name, state) {
    var node;
    for (i = elem.childNodes.length-1; i >= 0; i--) {
        node = elem.childNodes[i];
        if (node.nodeType === 1 && (node.id.indexOf(name) > -1)) {
            if (!state) {
                node.checked = 'checked';
            }
            else {
                node.checked = '';
            }
        }
    }
    
}

mdv.common.deleteInput = function (elem) {
    if(elem && elem.value === elem.defaultValue) {
       elem.value='';
    }
}


// This function determines the top offset of an HTML element.
mdv.common.absTop = function (el) {
	return (el.offsetParent)? el.offsetTop + absTop(el.offsetParent) : el.offsetTop;
}

 
mdv.common.init = function() {
	//request form to operate on
	mdv.request.form = document.forms.efaRequest;
    if(jQuery('#itdLPxx_mode').attr('value') === 'full_screen') {
        window.setInterval(mdv.beg.dmAutoUpdate, mdv.common.dynVal.dmAutoupdate);
    }
};

mdv.common.checkKey = function () {
    jQuery(document).keyup(function(event) {
        // enter
        if(event.keyCode === 13) {
            if (jQuery('#itdLPxx_addInfo').length > -1) {
                mdv.beg.setSearchFilter();
            }
        }
    });
}

mdv.common.attachEventListener(window, 'load', mdv.common.init, false);
