
//Globals
var objFrm

//Customer spacific code ST
var gShareURL = 'http%3A%2F%2Fwww.ltk.fskab.se%2Fsocial%2F' //URL encoded

var msg = new Object()
var sLang = ""
var sFocusOnControl = ""
var dValidTo = ""
var dValidFr = ""

//resultspage
var gCurrentJourney = 0;
var gBokaTagUrl = "";
var ajax_share_objects = new Array();

	
function processIni() {
	objFrm = document.forms.frmMain
	if (objFrm == null) return 
	
	var bResultsPage = (objFrm.Source.value == "resultspage")? true : false


	if(!bResultsPage) {
		objFrm.SupportsScript.value = 'True'
		}

	if (sFocusOnControl != '') {
		var iNumElems = objFrm.elements.length
		for (var i=0; i<iNumElems; i++){
    		var eElem = objFrm.elements[i]
    		if (sFocusOnControl == eElem.name){eElem.focus()}   
			}
	}

	if (objFrm.Source.value == "querypage_adv") toggleOptReturn() //restores control on brw back 
    
	//defaults
	sLang = objFrm.Language.value.toString().toLowerCase()
	if (sLang == '') sLang == 'se'

	// populate msg object
	
	if(sLang =='en'){
			msg.error='Javascript error:'
			msg.min2chars = 'Please type a seach-word with minimum 2 letters '
			msg.timeformat = 'You have not stated a valid time:'
			msg.dateformat = 'You have used an incorrect date format (yyyy-mm-dd): '
			msg.validto = 'Jouneys can be searched until '
			msg.notrafficselected = 'Choose at least one transport mean'
			msg.noajxlistselected = 'Choose one of the options listed'
			msg.roundtripdate = 'Return trip should not be before departure'
			}
	else if(sLang == 'de') {
			msg.error='Javascript :'
			msg.min2chars = 'Suchwort (mind. 2 Buchstaben) eingeben'
			msg.timeformat = 'Sie gaben eine ungültige Uhrzeit an: '
			msg.dateformat = 'Ungültiges Datumformat (Jahr-Monat-Tag): '
			msg.validto = 'Reisesuche möglich bis einschl. '
			msg.notrafficselected = 'Wählen Sie mindestens einen verkehrsmittel'
			msg.noajxlistselected = 'Wählen Sie eine der aufgeführten Optionen'
			msg.roundtripdate = 'Rückfahrt ist nicht zulässig vor der Abreise'
			}
	else if(sLang == 'dk'){
			msg.error='Javascript fel:'
			msg.min2chars = 'indtast et søgeord med mindst 2 bogstaver'
			msg.timeformat = 'Du har angivet et ugyldigt klokkeslæt: '
			msg.dateformat = 'Du har angivet forkert datoformat (åååå-mm-dd): '
			msg.validto = 'Rejser kan søges til og med '
			msg.notrafficselected = 'Vælg mindst én trafikmidler'
			msg.noajxlistselected = 'Vælg en af de viste indstillinger'
			msg.roundtripdate = 'Returrejsa er ikke tilladt før afgang'
			}
	else {
			msg.error='Javascript fel:'
			msg.min2chars = 'Du måste ange minst 2 tecken'
			msg.timeformat = 'Du har angivit ett icke giltigt klockslag: '
			msg.dateformat = 'Du har angivit fel datum-format (åååå-mm-dd): '
			msg.validto = 'Resor kan sökas t o m '
			msg.notrafficselected = 'Välj minst en trafikslag'
			msg.noajxlistselected = 'Välj ett av alternativen i listan'
			msg.roundtripdate = 'Returresa får inte ske före utresa'
			}
	
}

//Line feed
var lnbreak = (navigator.appVersion.lastIndexOf('Win') != -1)? "\r\n":"\n"

//Global ClientScript Error Handling & logging
function errorHandler(message, url, line)
{
	alert(msg.error + message) //for dubugging purposes only!		
	
 	// stop the event from bubbling up to the default window.onerror handler
   	return true
}

// install the global error-handler
window.onerror = errorHandler

//initialize
window.onload = processIni



function formQueryPage_onSubmit(objForm){
	if (objFrm == null) return false	
	var objCtr	
	objCtr = objFrm.inpPointFr
	if ("text" == objCtr.type) {
		if(objCtr.value.length < 2){alert(msg.min2chars);objCtr.focus();return false}
		}
	objCtr = objFrm.inpPointTo
	if ("text" == objCtr.type) {	
		if(objCtr.value.length < 2){alert(msg.min2chars);objCtr.focus();return false}
    }
    
    if (sumTrafficmask() == 0) { alert(msg.notrafficselected); return false }

    var ret = document.getElementById("optReturn1")
    if (ret.checked) {
        var date1 = new Date(objFrm.inpDate.value.substring(0, 4), objFrm.inpDate.value.substring(5, 7), objFrm.inpDate.value.substring(8, 10), objFrm.inpTime.value.substring(0, 2), objFrm.inpTime.value.substring(3, 5))

        var date2 = new Date(objFrm.inpDate2.value.substring(0, 4), objFrm.inpDate2.value.substring(5, 7), objFrm.inpDate2.value.substring(8, 10), objFrm.inpTime2.value.substring(0, 2), objFrm.inpTime2.value.substring(3, 5))

        if (date1.getTime() - date2.getTime() > 0) { alert(msg.roundtripdate); return false }
    }
    
	return true
}

function formQueryStation_onSubmit(objForm) {
    if (objFrm == null) return false
    var objCtr	
	objCtr = objFrm.inpSingleStation
	if ("text" == objCtr.type) {
	    if (objFrm.inpSingleStation.value == "") { alert(msg.min2chars); objFrm.inpSingleStation.focus(); return false }
	}
    
    if (sumTrafficmask() == 0) { alert(msg.notrafficselected); return false }
    
    return true
}

function formResults_onSubmit(objForm){
	if (objFrm == null) return false
	if (objFrm.inpPointFr_ajax.value == "") {
	    if (objFrm.inpPointFr.value.length < 2) {
	        alert(msg.min2chars);
	    }
	    else {
	        alert(msg.noajxlistselected);
	    }
	    objFrm.inpPointFr.focus(); return false
    }
    if (objFrm.inpPointTo_ajax.value == "") {
        if (objFrm.inpPointTo.value.length < 2) {
            alert(msg.min2chars);
        }
        else {
            alert(msg.noajxlistselected);
        }
        objFrm.inpPointTo.focus(); return false
    }
    if (document.getElementById("inpPointInterm") != null ) {
        if (objFrm.inpPointInterm.value == "") {
            objFrm.selPointInterm.value = "" //remove via
            objFrm.selPointIntermKey.value = ""
        }
    }    
    return true
}


function formStation_onSubmit(objForm) {
    if (objFrm == null) return false
    if (objFrm.inpSingleStation_ajax.value == "") {
        if (objFrm.inpSingleStation.value.length < 2) {
            alert(msg.min2chars);
        }
        else {
            alert(msg.noajxlistselected);
        }
        objFrm.inpSingleStation.focus(); return false
    }    
    return true
}

function sumTrafficmask() {
    var sum = 0
    var iNumElems = objFrm.elements.length
    for (var i = 0; i < iNumElems; i++) {
        var eElem = objFrm.elements[i]
        if ("trafficmask" == eElem.name) {
            if (eElem.checked) { sum += 1 }
        }
    }
    return sum
}

function checkNumeric(oInpBox){
	var inpValue = oInpBox.value
	var sNumericVal = ""
	var i = 0
	while ((i < inpValue.length) ){
		if ( (inpValue.charAt(i) >= "0") && (inpValue.charAt(i) <= "9" )) sNumericVal += inpValue.charAt(i)
		i++
		}
	
	oInpBox.value = sNumericVal
}

function checkMask(e, charMask) {

    var key, keyChar;
    key = getKey(e);
    if (key == null) return true;

    keyChar = String.fromCharCode(key);
    keyChar = keyChar.toLowerCase();
    charMask = charMask.toLowerCase();

    if (charMask.indexOf(keyChar) != -1) return true;

    // control keys
    if (key == null || key == 0 || key == 8 || key == 9 || key == 13 || key == 27) return true;

    // else return false
    return false;
}

function getKey(e) {
    if (window.event) {
        return window.event.keyCode
    } else if (e) {
        return e.which
    } else
        return null
}

function checkTime(oInpTime){	
	var retVal = false
	var strVal = oInpTime.value
	
	//try to correct userinput
	if (strVal.length == 4 && !isNaN(strVal)) { strVal = strVal.substr(0, 2) + ':' + strVal.substr(2, 2) } //case ####
	strVal = strVal.replace(".", ":") //case ##.##
	if (strVal.length == 1 && !isNaN(strVal)) { strVal = "0" + strVal + ':' + "00" } //case #
	if (strVal.length == 2 && !isNaN(strVal)) { strVal = strVal + ':' + "00" } //case ##
	if (strVal.length == 3 && !isNaN(strVal)) { strVal = "0" + strVal.substr(0, 1) + ':' + strVal.substr(1, 2) } //case ###
	
	oInpTime.value = strVal 
	
	
	strVal = strVal.substr(0,2) + strVal.substr(3,2) 

	if(strVal.length == 4){
		if(!isNaN(strVal)){
			while(strVal.charAt(0) == '0') strVal = strVal.substring(1, strVal.length)
			if(strVal == '') strVal = '0'
			var intTime = parseInt(strVal)
			if(intTime<2400 && intTime >= 0){
				if(intTime%100<60){
					retVal = true
				}
			}
		}
	}

	if (retVal == false) {
			alert(msg.timeformat + oInpTime.value)
			oInpTime.focus()		
			}				
}


function checkDate(oInpDate){
	var bValid = false;
	var strVal = oInpDate.value
	//try to correct userinput
	if (strVal.length == 8 && !isNaN(strVal)) { strVal = strVal.substr(0, 4) + '-' + strVal.substr(4, 2) + '-' + strVal.substr(6, 2) } //case ########
	if (strVal.substr(4, 1) == ' ' || strVal.substr(7, 1) == ' ') { strVal.replace(" ", "-") }
	if (strVal.length == 8 && isNaN(strVal)) { strVal = "20" + strVal } //case #####-##-##
	if (strVal.length == 6 && !isNaN(strVal)) { strVal = "20" + strVal.substr(0, 2) + '-' + strVal.substr(2, 2) + '-' + strVal.substr(4, 2)  } //case ######
	
	oInpDate.value = strVal 

	if (oInpDate.value.length == 10)	
	{
		var day = oInpDate.value.substr(8,2);
		var month = oInpDate.value.substr(5,2);
		var year = oInpDate.value.substr(0,4);
			
    	var today = new Date();
   		 year = ((!year) ? y2k(today.getYear()):year);
  		  month = ((!month) ? today.getMonth():month-1);
  		  if (day) {
   		 	var test = new Date(year,month,day);
   		 	if ( (y2k(test.getYear()) == year) &&
   		  	    (month == test.getMonth()) &&
   		  	    (day == test.getDate()) )
   		   	  bValid = true;		   			 
			}
	}
			
	if(!bValid) {
		alert(msg.dateformat + oInpDate.value)
		oInpDate.focus()
		}

	if (dValidTo != '') {
	    var aDatePart = dValidTo.toString().split("-")
	    var dTo = new Date(aDatePart[0], aDatePart[1] - 1, aDatePart[2])

	    aDatePart = strVal.toString().split("-")
	    var dInput = new Date(aDatePart[0], aDatePart[1] - 1, aDatePart[2])

	    if (dInput > dTo) {
	        alert(msg.validto + ' ' + dValidTo.toString())
	        oInpDate.focus()
	    }
	}
}

function y2k(number) { 
	return (number < 1000) ? number + 1900 : number;
}


function ResetAjax(){
	objFrm.inpPointFr_ajax.value=""
	objFrm.inpPointTo_ajax.value=""
}

function chLang(lang){
	if (objFrm == null) processIni() 
    objFrm.Language.value = lang
    Reload('chtab') 
}

// Submits frm to querypage_adv
function Reload(sCmdOpt){
	if (objFrm == null) return 	
	objFrm.cmdAction.value=sCmdOpt
	if (objFrm.Source.value == "querypage_adv") objFrm.action = "querypage_adv.aspx"
	if (objFrm.Source.value == "querystation") objFrm.action = "querystation.aspx"
	objFrm.submit()
}

function NewSearch(sTarget){
	if (objFrm == null) processIni() 
	
	if (sTarget=='querypage_adv.aspx' || sTarget=='querystation.aspx'){
		objFrm.action=sTarget
		objFrm.cmdAction.value=""
		objFrm.submit()	
	}
}


function wOpen(inURL,inHeight,inWidth,sName){
	if (objFrm == null) return 
	if (objFrm.Source.value == "querypage_adv"){
		objFrm.Submit.focus()
	    }

	var newWindow
	var xLeft
	var yTop
	newWindow=window.open (inURL, sName, 'resizable=0,scrollbars=0,width='+inWidth+',height='+inHeight)

	xLeft=(screen.width-inWidth)/2
	yTop=(screen.height-inHeight-50)/2
	newWindow.moveTo(xLeft,yTop) // absolute positioning
	newWindow.focus()
}

function wOpenHelp(inType,strParam){
	if (objFrm == null) return 
	//inType = 0(index) 1(help) 2(faq)
	if (objFrm.Source.value == "querypage_adv"){
		objFrm.Submit.focus()
	 }

	 var sUrl = 'stat/help/default.asp?'
	if (inType == 0) sUrl += 'show=' + strParam
	else if(inType == 1) sUrl += 'page=' + strParam
	else sUrl += 'faq=true'

	sUrl += '&lang=' + sLang 
	sUrl += '&EU_spirit=' + objFrm.EU_Spirit.value 
	
	var newWindow
	var xLeft
	var yTop
	newWindow=window.open (sUrl, 'help', 'resizable=0,scrollbars=0,width=445,height=545')

	xLeft=(screen.width-500)/2
	yTop=(screen.height-550)/2
	newWindow.moveTo(xLeft,yTop) // absolute positioning
	newWindow.focus()
}


function addClass(eName,cls) {
    var ele = document.getElementById(eName)
    if (ele != null) {
        if (!this.hasClass(ele, cls)) ele.className += " " + cls;
    }    
}

function removeClass(eName,cls) {
    var ele = document.getElementById(eName)
    if (ele != null) {
        if (hasClass(ele, cls)) {
            var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
            ele.className = ele.className.replace(reg, ' ');
        }
    }    
}

function hasClass(ele, cls) {
    try{
	    return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
	}
	catch(err){
	    return false
	}
}

function toggleClass(eName,cls) {
	var ele = document.getElementById(eName)
	if (this.hasClass(ele,cls)) removeClass(eName,cls)
	else addClass(eName, cls)
}


var ajax_cal_objects = new Array();
var currInpDateElement 

function showCalendar(eName, offsetTop, offsetLeft) {
    var ele = document.getElementById(eName)
    var cal = document.getElementById("calendar")

    cal.style.top = (ajax_getTopPos(ele) + offsetTop - getSubcontTop() ) + 'px';
    cal.style.left = (ajax_getLeftPos(ele) + offsetLeft - getSubcontLeft()) + 'px';
	
	removeClass("calendar","hidden")
	currInpDateElement = ele //save to global var
    callCalContent('')
}


function getSubcontTop() {
    var subcont = document.getElementById("subcontainer");
    if (subcont == null) return 0;
    var result = ajax_getTopPos(subcont) - 14;
    if (result < 0) result = 0;
    return result;
}
function getSubcontLeft() {
    var subcont = document.getElementById("subcontainer");
    if (subcont == null) return 0;
    var result = ajax_getLeftPos(subcont) - 7;
    return result;
}   
    
function callCalContent(extraParams){
    // extraParams = m, y
    if (objFrm == null) processIni() 
	var sUrl = 'calendar.aspx?' 
    sUrl += 'lang=' + sLang 
	sUrl += '&net=' + objFrm.TNSource.value
	sUrl += '&dValidFr=' + dValidFr
	sUrl += '&dValidTo=' + dValidTo
	sUrl += '&' + extraParams

	ajax_cal_objects[0] = new sack();
	ajax_cal_objects[0].requestFile = sUrl ;	// Specifying which file to get
	ajax_cal_objects[0].onCompletion = function(){ showCalContent(); };	// Specify function that will be executed after file has been found

	ajax_cal_objects[0].runAJAX();

}

function showCalContent(){
    var cal = document.getElementById("calendar")
    cal.innerHTML = ajax_cal_objects[0].response
    //alert(ajax_cal_objects[0].response) //debug
}

function pasteDate(datVal){
    currInpDateElement.value = datVal
    currInpDateElement.focus()
    addClass('calendar', 'hidden')

    if (document.getElementById("searchBtn") != null) setRedBtn()
     
}




///////////////////// Customer specific code - Kartena maps for Kronoberg /////////////////////////////////////

function wOpenMap(iFrTo, sUrl) {
    removeClass("curtain", "hidden");
    document.getElementById("curtain").style.zIndex = "110";
    removeClass("userMsg", "hidden");
    document.getElementById("userMsg").style.zIndex = "111";
    document.getElementById("userMsg").style.top = '5%';
    document.getElementById("userMsg").style.left = '0%';

    sUrl += '?optFrTo=' + iFrTo;
    sUrl += '&lang=' + sLang + '&optType=0';
    document.getElementById("mapFrame").src = sUrl;
}

function closeMap() {
    addClass("curtain", "hidden");
    addClass("userMsg", "hidden");
}
    
    

function wOpenShowOnMap(iFrTo){
    var currDomain = 'fskab.se'
    document.domain = 'fskab.se'

    var sUrl = 'http://www.ltk.fskab.se/kartor/StopViewer.html?'

    var sName
    var iItemIndex
    var i

    sUrl += 'lang=' + sLang

    sUrl += '&FromTo=' + iFrTo + "&"


    if (iFrTo == 0) {//From
        iItemIndex = objFrm.selPointFr.selectedIndex
        sName = objFrm.selPointFr.options[objFrm.selPointFr.selectedIndex].value
        sName = sName.substring(0, sName.length - 8)	//trim out |0			
        sName = URLEncode(sName)
        sUrl += 'name=' + sName + aCoordsFr[iItemIndex]
    }
    else if (iFrTo == 1) {//To
        iItemIndex = objFrm.selPointTo.selectedIndex
        sName = objFrm.selPointTo.options[objFrm.selPointTo.selectedIndex].value
        sName = sName.substring(0, sName.length - 8)	//trim out |0			
        sName = URLEncode(sName)
        sUrl += 'name=' + sName + aCoordsTo[iItemIndex]
    }
    else if (iFrTo == 2) {//Interm
        iItemIndex = objFrm.selPointInterm.selectedIndex
        sName = objFrm.selPointInterm.options[objFrm.selPointInterm.selectedIndex].value
        sName = sName.substring(0, sName.length - 8)	//trim out |0			
        sName = URLEncode(sName)
        sUrl += 'name=' + sName + aCoordsInterm[iItemIndex]
    }

    else if (iFrTo == -1) {//queryStation
        iItemIndex = objFrm.selSingleStation.selectedIndex
        sName = objFrm.selSingleStation.options[objFrm.selSingleStation.selectedIndex].value
        sName = sName.substring(0, sName.length - 8)	//trim out |0			
        sName = URLEncode(sName)
        sUrl += 'name=' + sName + aCoordsFr[iItemIndex]

    }


    removeClass("curtain", "hidden");
    document.getElementById("curtain").style.zIndex = "110";
    removeClass("userMsg", "hidden");
    document.getElementById("userMsg").style.zIndex = "111";
    document.getElementById("userMsg").style.top = '10%';
    document.getElementById("userMsg").style.left = '0%';

  
    document.getElementById("mapFrame").src = sUrl;
    
}

function getRSH(){
	if (objFrm == null) return 0

	var RSHsum = 0
	var iNumElems = objFrm.elements.length
		for (var i=0; i<iNumElems; i++){
    		var eElem = objFrm.elements[i]
    		if ("RSH" == eElem.name){
			if(eElem.checked == true) RSHsum += eElem.value
			}   
		} 	
	return parseInt(RSHsum)
}

//Encode URL on client rather then Servrer.URLEncode
function URLEncode(inUrlString)
{
	var SAFECHARS = "0123456789" +					// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetci
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()&?/:=[]";					// RFC2396 Mark characters
	var HEX = "0123456789ABCDEF";

	var plaintext = inUrlString;
	var encoded = "";
	for (var i = 0; i < plaintext.length; i++ ) {
		var ch = plaintext.charAt(i);
	    if (ch == " ") {
		    encoded += "%20";				
		} else if (ch == "," || ch == "&") {
		    encoded += ""; //forbidden chars in Sweco code
		} else if (SAFECHARS.indexOf(ch) != -1) {
		    encoded += ch;
		} else {
		    var charCode = ch.charCodeAt(0);
			if (charCode > 255) {
			    alert( "Unicode Character '" + ch + "' cannot be encoded using standard URL encoding.\n" +
				        "(URL encoding only supports 8-bit characters.)\n" +
						"A space (+) will be substituted." );
				encoded += "+";
			} else {				
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	} // for	
	return  encoded;
} 

