var x10dAjaxRequestObjects = new Array();
var x10dAjaxManagers = new Array();
var x10dAjaxPostArgs = null;
//Called on intiation of a AjaxManager object
function x10dAjaxInit(manID, form, url, timeOut, onAfterResponseMethod)
{
	if (x10dAjaxManagers[manID] != null) return;
	var man = new Object();
	man.id = manID;
	man.url = url==null ? "" : url;
	
	if (form != null)
	{
		man.form = document.forms[form];
		if (!man.form) {
			man.form = eval("document." + form);
		}
	}
	if (man.form == null)
	{
		man.form = document.forms[0];
	}

	man.timeOut = timeOut == null ? 10 : timeOut;
	man.calls = new Array();
	man.onAfterResponseMethod = onAfterResponseMethod;
	man.onAfterResponseMethodCall = null;
	x10dAjaxManagers[manID] = man;
}
//Adds a call to a AjaxManager object
function x10dAjaxAddCall(manID, eventArgument, callMethod, async, url, postArgument, postControls, clientEvents, validation, waitMessage)
{
	//Call object MUST ONLY be used here and in x10dAjaxCall
	var call = new Object();
	call.id = eventArgument;
	call.eventArgument = eventArgument;
	call.callMethod = callMethod;
	call.async = async;
	call.url = url;
	call.validation = validation;
	call.postArgument = postArgument;
	call.postControls = postControls;
	call.waitMessage = waitMessage;
	
	//foreach event, attach
	if (clientEvents != null && clientEvents != "")
	{
		var events = clientEvents.split(",");
		for (var i = 0; i < events.length; i++)
		{
			var ev = events[i];
			if (ev == "") continue;
			var p = ev.lastIndexOf(":");
			var clientCtrl = x10dGetControl(ev.substr(0,p));
			if (clientCtrl == null) continue;
			var doEvent = null;
			var eventName = ev.substr(p + 1);
			x10dAjaxAttachEventCall(clientCtrl, manID, eventArgument, eventName);
		}
	}
	var man = x10dAjaxManagers[manID];
	man.calls[eventArgument] = call;
}
function x10dAjaxAttachEventCall(clientCtrl, manID, eventArgument, eventName)
{
	if (clientCtrl.tagName.toLowerCase() == "input" && (clientCtrl.type == "submit" || clientCtrl.type == "button"))
		doEvent = function(){x10dAjaxCall(manID, eventArgument, clientCtrl.id, null);return false;};
	else
		doEvent = function(){x10dAjaxCall(manID, eventArgument, clientCtrl.id, null);};
	x10dAttachEvent(clientCtrl, eventName, doEvent);
}
//Called from calls added from x10dAjaxCall
function x10dAjaxCall(manID, eventArgument, evtCtrlID, xtraPostArguments, callManID, jsonDataObject)
{
	if (evtCtrlID != null && typeof(evtCtrlID) == 'object') evtCtrlID = evtCtrlID.id;
	if (manID == null || manID == '') manID = 'AjaxManager1';
	var man = x10dAjaxManagers[manID];
	man.onAfterResponseMethodCall = null;
	var call = man.calls[eventArgument];
	if (call.validation)
	{
       if (typeof(Page_ClientValidate) == 'function') {
            validationResult = Page_ClientValidate();
		if (!validationResult) return;
		}
	}
	var postArgs = xtraPostArguments;
	if (call.postArgument != null && call.postArgument != "" && xtraPostArguments != null && xtraPostArguments != '')
		postArgs += "&";
	postArgs += call.postArgument;
	
	if (call.callMethod == "QuickCall")
		return x10dAjaxQuickCall(manID, eventArgument, call.async, call.url, postArgs, call.postControls, callManID, evtCtrlID, call.waitMessage, jsonDataObject);
	else
		return x10dAjaxPostBackCall(manID, eventArgument, call.async, call.url, postArgs, evtCtrlID, call.waitMessage);
}
// QuickCall - either called directly from code or from a x10dAjaxCall
function x10dAjaxQuickCall(manID, eventArgument, async, url, postArgument, postControls, callManID, evtCtrlID, waitMessage, onAfterMethod, jsonDataObject)
{
	if (x10dAjaxManagers[manID] == null) x10dAjaxInit(manID, null, '', null);
	x10dAjaxManagers[manID].onAfterResponseMethodCall = onAfterMethod;
	var postData = "";
	if (postControls == 'form')
	{
		postData = x10dAjaxGetFormPostData();
	}
	else if (postControls != null && postControls != "")
	{
		var arPostCtrls = new Array();
		postCtrls = postControls.split(',');
		for (var i = 0; i < postCtrls.length; i++)
		{
			var c = x10dGetControl(postCtrls[i]);
			if (c != null)
			{
				postData += x10dAjaxGetControlPostData(c, true);
			}
		}
	}
	if (postArgument != null && postArgument != "")
	{
		if (postArgument.substr(postArgument.length) != "&") postArgument += "&";
		postData += postArgument;
	}
	return x10dAjaxExecuteRequest(manID, eventArgument, async, 'QuickCall', url, postData, callManID, evtCtrlID, waitMessage, jsonDataObject);
}
// PostBackCall - same as QuickCall but makes a total ajax postback of the page
function x10dAjaxPostBackCall(manID, eventArgument, async, url, postArgument, evtCtrlID, waitMessage, onAfterMethod)
{
	if (x10dAjaxManagers[manID] == null) x10dAjaxInit(manID, null, '', null);
	x10dAjaxManagers[manID].onAfterResponseMethodCall = onAfterMethod;
	var postData = x10dAjaxGetFormPostData();
	if (postArgument != null && postArgument != "")
	{
		if (postArgument.substr(postArgument.length) != "&") postArgument += "&";
		postData += postArgument;
	}
	return x10dAjaxExecuteRequest(manID, eventArgument, async, 'PostBackCall', url, postData, null, evtCtrlID, waitMessage);
}
//Allways called when a Ajax call is to be executed - both from QuickCall and PoasBackCall
function x10dAjaxExecuteRequest(manID, eventArgument, async, callMethod, url, postData, callManID, evtCtrlID, waitMessage, jsonDataObject)
{
	var man = x10dAjaxManagers[manID];
	if (callManID == null || callManID == "") callManID = manID;
	var allPostData = postData + "__X10DAJAXID=" + x10dAjaxEncodeCallback(callManID) 
	+ "&__X10DAJAXARGS=" + x10dAjaxEncodeCallback(eventArgument + "$" + callMethod);
	if (callManID != null)
		allPostData += "&__X10DAJAXEVTID=" + evtCtrlID;
	if (jsonDataObject != null)
	{
		allPostData += "&__X10DAJAXJSONDATA=" + JSON.stringify(jsonDataObject);
	}
	if (callMethod == 'PostBackCall' && man.postViewState)
	{
		if (theForm["__EVENTVALIDATION"]) allPostData += "&__EVENTVALIDATION=" + x10dAjaxEncodeCallback(theForm["__EVENTVALIDATION"].value);
		if (theForm["__VIEWSTATE"]) allPostData += "&__VIEWSTATE=" + x10dAjaxEncodeCallback(theForm["__VIEWSTATE"].value);
	}
	if (x10dAjaxPostArgs != null)
	{
		allPostData += "&" + x10dAjaxPostArgs;
		x10dAjaxPostArgs = null;
	}
	
	if (url==null || url=="")
	{
		if (man.url!="") 
			url = man.url;
		else
		{
			url = window.document.location.pathname;
			//url = man.form.action;
		}
	}
	if (async == null) async = true;
	var requestObject = x10dAjaxGetRequestObject();
	requestObject.managerID = manID;
	requestObject.eventArgument = eventArgument;
	requestObject.async = async;

	requestObject.evtCtrlID = evtCtrlID;
	requestObject.waitMessage = waitMessage;
	x10dAjaxWaitCursor(true, requestObject);
	
	requestObject.xmlHttpRequest.open("POST", url, async);
	
	requestObject.xmlHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	requestObject.pending = true;
	
	if (async)
	{
		if (!x10dAjaxDebugMode() && man.timeOut > 0)
		{
			requestObject.timeOutID = setTimeout("x10dAjaxTimeOut(" + requestObject.index + ");", 1000 * man.timeOut);
		}
		requestObject.xmlHttpRequest.onreadystatechange = x10dAjaxOnStateChange;
		requestObject.xmlHttpRequest.send(allPostData);
	}
	else {
		requestObject.postData = allPostData;
		requestObject.xmlHttpRequest.onreadystatechange = null;
		return x10dAjaxSendSync(requestObject.index);
		
		//setTimeout("x10dAjaxSendSync(" + requestObject.index + ")",1);
		
	}
	return;
}

function x10dAjaxSendSync(reqObjIndex)
{
	var requestObject = x10dAjaxRequestObjects[reqObjIndex];
	requestObject.xmlHttpRequest.send(requestObject.postData);
	return x10dAjaxResponse(requestObject);
}
//** Postdata **
function x10dAjaxGetControlPostData(element, subSearch)
{
	var postData = "";
    var tagName = element.tagName ? element.tagName.toLowerCase() : "";
    
    if (tagName == "input") {    
        var type = element.type;
        var type = element.type; //alle minus submit
        if ((type == "text" || type == "hidden" || type == "password" ||
            ((type == "checkbox" || type == "radio") && element.checked)) &&
            (element.id != "__EVENTVALIDATION") && (element.id != "__VIEWSTATE")) {
            postData += x10dAjaxPostData(element.name, element.value);
        }
    }
    else if (tagName == "select") {
        var selectCount = element.options.length;
        for (var j = 0; j < selectCount; j++) {
            var selectChild = element.options[j];
            if (selectChild.selected == true) {
                postData += x10dAjaxPostData(element.name, element.value);
            }
        }
    }
    else if (tagName == "textarea") {
        postData += x10dAjaxPostData(element.name, element.value);
    }
    else if (subSearch)
    {
		if (element.hasChildNodes())
		{
			for (var i = 0; i<element.childNodes.length; i++)
			{
				if (element.childNodes[i].nodeType != 1) continue;
   				postData += x10dAjaxGetControlPostData(element.childNodes[i], true);
    		}
    	}
    }
    return postData;
}

function x10dAjaxGetFormPostData() {
	var postData = "";
    var count = theForm.elements.length;
    var element;
    for (var i = 0; i < count; i++) {
        element = theForm.elements[i];
        postData += x10dAjaxGetControlPostData(element, false);
    }
    return postData;
}

function x10dAjaxPostData(name, value) {
    return name + "=" + x10dAjaxEncodeCallback(value) + "&";
}
function x10dAjaxEncodeCallback(parameter) {
    if (encodeURIComponent) {
        return encodeURIComponent(parameter);
    }
    else {
        return escape(parameter);
    }
}
// ** RequestObject **
function x10dAjaxGetRequestObject()
{
	var requestObject = null;
	//Is there an existing free object
	var index;
    for (index = 0; index < x10dAjaxRequestObjects.length; index++) {
        var reqObject = x10dAjaxRequestObjects[index];
        if (reqObject.free && !reqObject.pending) requestObject = reqObject;
    }
    //Not found, create a new
    if (requestObject == null)
    {
		requestObject = new Object();
		requestObject.free = false;
		requestObject.waitCtrl = null;
		var index = x10dAjaxRequestObjects.length;
		x10dAjaxRequestObjects[index] = requestObject;
		requestObject.index = index;
		requestObject.xmlHttpRequest = x10dAjaxCreateXMLHttpRequest();
		requestObject.data = null;
		requestObject.hasData = false;
    }
	x10dAjaxResetRequestObject(requestObject, false);    
    return requestObject;
}
function x10dAjaxIsPending()
{
	var index;
    for (index = 0; index < x10dAjaxRequestObjects.length; index++) {
        var reqObject = x10dAjaxRequestObjects[index];
        if (reqObject.pending) return true;
    }
    return false;
}
function x10dAjaxResetRequestObject(requestObject, free)
{
	requestObject.eventArgument = "";
	//requestObject.context = "";
	requestObject.async = true;
	requestObject.pending = false;
	requestObject.free = free;
	requestObject.timeOutID = null;
	requestObject.hasTimedOut = false;
	requestObject.data = null;
	requestObject.hasData = false;
}
function x10dAjaxCreateXMLHttpRequest()
{
	var xmlRequest = null;
	if (window.XMLHttpRequest) {
		xmlRequest = new XMLHttpRequest();
	} else {
		var ex;
		try {
			xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(ex) {}
		if (xmlRequest == null)
		{
			try {
				xmlRequest = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch(ex) {}
		}
	}
	if (xmlRequest != null) return xmlRequest;
	alert('stop');
	top.window.location.href = 	"../Public/Error.aspx?Message=STOOOP";
}
// ** Response **
function x10dAjaxOnStateChange()
{
    for (index = 0; index < x10dAjaxRequestObjects.length; index++) 
    {
		var requestObject = x10dAjaxRequestObjects[index];
        if (requestObject.pending && requestObject.xmlHttpRequest.readyState == 4) {
			requestObject.pending = false;
            
            x10dAjaxResponse(requestObject);
        }
    }
}
function x10dAjaxTimeOut(reqObjIndex)
{
	var requestObject = x10dAjaxRequestObjects[reqObjIndex];
	requestObject.timeOutID = null;
	requestObject.hasTimedOut = true;
	requestObject.xmlHttpRequest.abort();
}
function x10dAjaxResponse(requestObject)
{
	var ex;
	var res;
	var resType = "";
	
	if (requestObject.free) return;
	
	if (requestObject.hasTimedOut)
	{
		res = "";
		resType = "TimeOut";
	}
	else
	{
		if (requestObject.timeOutID != null)
		{
			clearTimeout(requestObject.timeOutID);
			requestObject.timeOutID = null;
		}
		res = requestObject.xmlHttpRequest.responseText;
		resType = res.substr(0,4);
		res = res.substr(5);
	}
	
	x10dAjaxWaitCursor(false, requestObject);
	var cancelOnAfterResponse = false;

	if (requestObject.xmlHttpRequest.status != 200)
	{
		cancelOnAfterResponse = true;
		if (resType == "TimeOut")
			alert('Handlingen tog for lang tid og blev afbrudt (Timeout error)');
		else if (x10dAjaxDebugMode())
		{
			if (confirm('Fejl ved kontakt til serveren: ' + requestObject.xmlHttpRequest.status + ' ' + requestObject.xmlHttpRequest.statusText + '\n\nVil du se hele fejlen?')) alert(res);
		} else {
			alert('Fejl ved kontakt til serveren, måske er adgangen til Internettet midlertidigt afbrudt (' + requestObject.xmlHttpRequest.status + ' ' + requestObject.xmlHttpRequest.statusText + ')');
		}
	}
	else if (resType == "Java")
	{
		try
		{
			eval(res);
		}
		catch (ex)
		{
			cancelOnAfterResponse = true;
			alert('Der opstod en javascript fejl: ' + ex.message);
		}
	}
	else if (resType == "Func")
	{
		if (typeof(x10dAjaxOnResponse) == "object" || typeof(x10dAjaxOnResponse) == "function")
		{
			x10dAjaxOnResponse(requestObject.eventArgument, res, requestObject);
		}
		else
		{
			alert('A function called x10dAjaxOnResponse must exist when setting the return method to Function');
		}
	}
	else if (resType == "HTML" || resType == "Text" || resType == "PopU")
	{
		var pos = res.indexOf('|');
		if (pos > -1)
		{
			var ctrl = res.substr(0, pos);
			res = res.substr(pos + 1);
			//Dette må ikke bare ændres! Hvis det skal kunne sættes, så skal det pakkes ind i ajax retur svaret fra serveren (i ReturnSettings)
			if (resType == "PopU" && !x10dExistControl(ctrl)) x10dPop_Create(ctrl, x10dGetControl('WUCPlaceHolder'), 655, 350);
			
			if (x10dExistControl(ctrl))
			{
				x10dAjaxPanelInnerHTML(ctrl, res, resType);
				
				x10dAjaxRunAnyScript(res);
			}
			if (resType == "PopU" && x10dExistControl(ctrl) && x10dPop_IsVisible(ctrl) == false) x10dPop_Show(ctrl);
		}
	}
	else if (resType == "JSON")
	{
		if (res != '')
		{
			try
			{
				eval('requestObject.data = ' + res);
				requestObject.hasData = requestObject.data != null;
			}
			catch (ex)
			{
				cancelOnAfterResponse = true;
				alert('Der opstod en javascript fejl: ' + ex.message);
			}
		}
		else
			requestObject.hasData = false;
	}
	else if (resType == "Mess")
	{
		alert(res);
	}
	else if (resType == "Canc")
	{
		cancelOnAfterResponse = true;
		//Call is canceled
	}
	else if (resType == "Cust")
	{
		x10dAjaxRunAnyScript(res);
		//Custom - do nothing
	}
	else
	{
		cancelOnAfterResponse = true;
		if (typeof(x10dAjaxOnError) != 'undefined')
			x10dAjaxOnError(requestObject.eventArgument, res, resType);
		else
		{
			if (resType == "Erro") 
				alert(res);
			else if (resType == "TimeOut") 
				alert("Timeout error");
			else
			{
				if (res.indexOf("action=\"Login.aspx") > -1)
				{
					alert('Du er blevet logget af, måske fordi der er gået for lang tid hvor der ikke har været aktivitet');
					window.top.location.href = "../default.aspx";
					return;
				}
				alert("The AJAX request '" + requestObject.eventArgument + "' was unhandled");
			}
		}
	}
	if (!cancelOnAfterResponse && (typeof(x10dAjaxOnAfterResponse) == "object" || typeof(x10dAjaxOnAfterResponse) == "function"))
	{
		x10dAjaxOnAfterResponse(requestObject.eventArgument, res, requestObject);
	}
	var man = x10dAjaxManagers[requestObject.managerID];
	if (!cancelOnAfterResponse && man.onAfterResponseMethod != null && man.onAfterResponseMethod != '')
	{
		try
		{
			eval(man.onAfterResponseMethod + "(requestObject.eventArgument, res, requestObject);");
		}
		catch (ex)
		{
			alert('There was an error in the client method ' + man.onAfterResponseMethod + ': ' + ex.message);
		}
	}
	if (!cancelOnAfterResponse && man.onAfterResponseMethodCall != null && man.onAfterResponseMethodCall != '')
	{
		try
		{
			eval(man.onAfterResponseMethodCall + "(requestObject.eventArgument, res, requestObject);");
		}
		catch (ex)
		{
			alert('There was an error in the client method ' + man.onAfterResponseMethodCall + ': ' + ex.message);
		}
	}

	x10dAjaxResetRequestObject(requestObject, true);
	return res;
}

function x10dAjaxRunAnyScript(runScript)
{
	//Find any script tags
	var p = 0;
	while (p > -1)
	{
		p = runScript.indexOf("<script", p);
		if (p > -1)
		{
			var endP = runScript.indexOf("</script>", p);
			if (endP > -1)
			{
				var p2 = runScript.indexOf(">", p);
				if (p2 > -1 && p2 < endP)
				{
					var js = runScript.substr(p2 + 1, endP - p2 - 1);
					try
					{
						eval(js);
					}
					catch (ex)
					{
						alert('Der opstod en javascript fejl. (' + ex.description + ')');
					}
				}
			}
			p++;
		}
	}
}

function x10dAjaxWaitCursor(show, requestObject)
{
	if (show)
	{
		var pos = Array();
		if (requestObject.evtCtrlID != null)
		{
			//alert(requestObject.evtCtrlID);
			var lastEvtCtrl = null;
			if (typeof(requestObject.evtCtrlID) == 'object')
				lastEvtCtrl = requestObject.evtCtrlID;
			else
				lastEvtCtrl = x10dGetControl(requestObject.evtCtrlID);
			if (lastEvtCtrl != null)
			{
				pos = x10d_GetRealTopLeft(lastEvtCtrl);
			}
		}
		if (pos[0] == null)
		{
			pos[0] = null;
			pos[1] = "200";
			pos[2] = "200";
		}
		if (requestObject.waitCtrl == null)
		{
			var div =  document.createElement('div');
			div.style.position = 'absolute';
			div.style.zIndex = '10000000';
			div.style.display = 'none';	
			
			document.getElementsByTagName("BODY")[0].appendChild(div);
			requestObject.waitCtrl = div;
		}
		
		var image = "<img src='../ajaxwait.gif' />";
		if (requestObject.waitMessage != null && requestObject.waitMessage != "")
		{
			requestObject.waitCtrl.innerHTML = "<table border='0' class='AjaxWait' cellpadding='2' cellspacing='0' style='border:solid 1px black;background-color:yellow'><tr><td style='padding-left:6px'>" + image + "</td><td style='padding-right:6px'>" + requestObject.waitMessage + "</td></tr></table>";		
		}
		else
		{
			requestObject.waitCtrl.innerHTML = image;
		}
		
		requestObject.waitCtrl.style.display = 'inline';
		requestObject.waitCtrl.style.left = pos[1] + "px";
		requestObject.waitCtrl.style.top = pos[2] + "px";
	}
	else if (requestObject.waitCtrl != null)
	{
		requestObject.waitCtrl.style.display = 'none';
		requestObject.evtCtrlID = null;
		requestObject.waitMessage = null;
	}
}
function x10dAjaxPanelInnerHTML(panelID, html, resType)
{
	var panel = x10dGetControl(panelID);
	var panelPostData = x10dGetControl(panelID + '_PostData');
	if (panel != null) 
	{
		if (resType == "Text")
			panel.innerText = html;
		else
			panel.innerHTML = html;
		if (panelPostData != null) panelPostData.value = html;
	}	
}
function x10dAjaxDebugMode()
{
	return (typeof(x10dAjaxIsDebugMode) != 'undefined' && x10dAjaxIsDebugMode);
}
function x10dAjaxGetFunctionParameters(res)
{
	return res.split('#x10d#');
}
// ** JSON ** 
//Konverterer et JSON object til JSON text der kan postes
//Dette skal/kan måske skiftes med noget andet 

"use strict";

if (!this.JSON) {
    this.JSON = {};
}

(function () {

    function f(n) {
        return n < 10 ? '0' + n : n;
    }

    if (typeof Date.prototype.toJSON !== 'function') {

        Date.prototype.toJSON = function (key) {

            return isFinite(this.valueOf()) ?
                   this.getUTCFullYear()   + '-' +
                 f(this.getUTCMonth() + 1) + '-' +
                 f(this.getUTCDate())      + 'T' +
                 f(this.getUTCHours())     + ':' +
                 f(this.getUTCMinutes())   + ':' +
                 f(this.getUTCSeconds())   + 'Z' : null;
        };

        String.prototype.toJSON =
        Number.prototype.toJSON =
        Boolean.prototype.toJSON = function (key) {
            return this.valueOf();
        };
    }

    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        gap,
        indent,
        meta = {    
            '\b': '\\b',
            '\t': '\\t',
            '\n': '\\n',
            '\f': '\\f',
            '\r': '\\r',
            '"' : '\\"',
            '\\': '\\\\'
        },
        rep;


    function quote(string) {

        escapable.lastIndex = 0;
        return escapable.test(string) ?
            '"' + string.replace(escapable, function (a) {
                var c = meta[a];
                return typeof c === 'string' ? c :
                    '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
            }) + '"' :
            '"' + string + '"';
    }


    function str(key, holder) {

        var i,
            k,
            v,
            length,
            mind = gap,
            partial,
            value = holder[key];
        if (value && typeof value === 'object' &&
                typeof value.toJSON === 'function') {
            value = value.toJSON(key);
        }

        if (typeof rep === 'function') {
            value = rep.call(holder, key, value);
        }

        switch (typeof value) {
        case 'string':
            return quote(value);

        case 'number':

            return isFinite(value) ? String(value) : 'null';

        case 'boolean':
        case 'null':

            return String(value);

        case 'object':

            if (!value) {
                return 'null';
            }

            gap += indent;
            partial = [];

            if (Object.prototype.toString.apply(value) === '[object Array]') {

                length = value.length;
                for (i = 0; i < length; i += 1) {
                    partial[i] = str(i, value) || 'null';
                }

                v = partial.length === 0 ? '[]' :
                    gap ? '[\n' + gap +
                            partial.join(',\n' + gap) + '\n' +
                                mind + ']' :
                          '[' + partial.join(',') + ']';
                gap = mind;
                return v;
            }

            if (rep && typeof rep === 'object') {
                length = rep.length;
                for (i = 0; i < length; i += 1) {
                    k = rep[i];
                    if (typeof k === 'string') {
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
                        }
                    }
                }
            } else {

                for (k in value) {
                    if (Object.hasOwnProperty.call(value, k)) {
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
                        }
                    }
                }
            }

            v = partial.length === 0 ? '{}' :
                gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
                        mind + '}' : '{' + partial.join(',') + '}';
            gap = mind;
            return v;
        }
    }

    if (typeof JSON.stringify !== 'function') {
        JSON.stringify = function (value, replacer, space) {

            var i;
            gap = '';
            indent = '';

            if (typeof space === 'number') {
                for (i = 0; i < space; i += 1) {
                    indent += ' ';
                }

            } else if (typeof space === 'string') {
                indent = space;
            }

            rep = replacer;
            if (replacer && typeof replacer !== 'function' &&
                    (typeof replacer !== 'object' ||
                     typeof replacer.length !== 'number')) {
                throw new Error('JSON.stringify');
            }

            return str('', {'': value});
        };
    }

    if (typeof JSON.parse !== 'function') {
        JSON.parse = function (text, reviver) {

            var j;

            function walk(holder, key) {

                var k, v, value = holder[key];
                if (value && typeof value === 'object') {
                    for (k in value) {
                        if (Object.hasOwnProperty.call(value, k)) {
                            v = walk(value, k);
                            if (v !== undefined) {
                                value[k] = v;
                            } else {
                                delete value[k];
                            }
                        }
                    }
                }
                return reviver.call(holder, key, value);
            }

            cx.lastIndex = 0;
            if (cx.test(text)) {
                text = text.replace(cx, function (a) {
                    return '\\u' +
                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
                });
            }

            if (/^[\],:{}\s]*$/.
test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {

                j = eval('(' + text + ')');

                return typeof reviver === 'function' ?
                    walk({'': j}, '') : j;
            }

            throw new SyntaxError('JSON.parse');
        };
    }
}());
function x10dSilentLogOut() {
	return;
	x10dAjaxQuickCall('', 'LogOut', false, '../PublicAjax/AjaxCall.aspx', null, null, 'AjaxManager1');
}


/*
var oldPostBack
var oldWebForm_DoPostBackWithOptions;
function window.onload() {
	if (typeof (__doPostBack) != "undefined") {
		oldPostBack = __doPostBack;
		__doPostBack = MyFuntion;

		oldWebForm_DoPostBackWithOptions = WebForm_DoPostBackWithOptions;
		WebForm_DoPostBackWithOptions = MyWebForm_DoPostBackWithOptions;

	}
}
function MyWebForm_DoPostBackWithOptions(options) {
	if (!options.clientSubmit) {
		x10dShowPostBack();
	}
	oldWebForm_DoPostBackWithOptions(options);
}

function MyFuntion(eventTarget, eventArgument) {
	x10dShowPostBack();
	oldPostBack(eventTarget, eventArgument);
}
function x10dShowPostBack() {
	var image = "<img src='../ajaxwait.gif' />";

	var div = document.createElement('div');
	div.style.position = 'absolute';
	div.style.zIndex = '10000000';
	div.style.display = 'inline';
	div.style.left = "50px";
	div.style.top = "50px";
	document.getElementsByTagName("BODY")[0].appendChild(div);
	div.innerHTML = image;
}
*/

var x10dDateOrder = '';
var x10dDateSeparator = '-';
var x10dNumberDecimalSeparator = ',';
var x10dNumberGroupSeparator = '.';

function x10dCallFunction(fn, args) {
	fn = (typeof fn == "function") ? fn : window[fn];  // Allow fn to be a function object or the name of a global function     
	return fn.apply(this, args || []);  // args is optional, use an empty array by default 
}
//Nedenstående to funktioner skal flyttes hen et andet sted der har med ToolBar at gøre!
function x10dToolBarSearchInput(e, c)
{
	if (e && e.keyCode == 13)
	{
		e.returnValue=false;
		e.cancel = true;
		__doPostBack(c.id,'Search');
		return false;
	}
	if (c.value.indexOf(c.defaultValue) > -1 && c.style.fontStyle != '')
	{
		c.style.color = '';
		c.style.fontStyle = '';	
		c.value = c.value.replace(c.defaultValue,'');
	}
}
function x10dToolBarAdvSearch(ctrlID, advPanelID)
{
	if (x10dExistControl(advPanelID))
	{
		x10dPop_Show(advPanelID, 0, 21, ctrlID);
	}
}
var x10dResCache = new Array();
function x10dGetRes(name, resourceObject) {
	if (x10dResCache[name + '_' + resourceObject] != null) {
		return x10dResCache[name + '_' + resourceObject];
	}
	else {
		var res = x10dAjaxQuickCall('', 'GetResource', false, '../PublicAjax/AjaxResource.aspx', 'name=' + name + '&Resource=' + resourceObject, null, 'AjaxManager1', null, '', null);
		if (name.indexOf(',') > -1) {
			res = res.split(String.fromCharCode(160));
		}
		else {
			res = (res == null) ? '' : res;
		}
		x10dResCache[name + '_' + resourceObject] = res;
		return res;
	}
}
function x10dFreeze(msg)
{
	if (x10dExistControl('popWait'))
		x10dPop_Show('popWait', 200, 200, null, true, true);
}
function x10dWaitMsg(msg)
{
	if (x10dExistControl('popWait'))
		x10dPop_Show('popWait', 200, 200, null);
}
//GetControl(ctrlID)
function x10dGetControl(ctrlID)
{
	if (typeof(ctrlID) == 'object') return ctrlID;
	if (ctrlID == null || ctrlID.length == 0)
	{
		return null;
	}
	if (window.document.getElementById)
	{
		return window.document.getElementById(ctrlID);
	}
	else
	{
		return document.getElementById(ctrlID);
	}
}
function x10dGetControlsByName(name) {
    if (name == null || name.length == 0) {
        return null;
    }
    if (window.document.getElementsByName) {
        return window.document.getElementsByName(name);
    }
    else {
        return document.getElementsByName(name);
    }
}
function x10dGetSelectedRadioButton(groupName) {
    var rbs = x10dGetControlsByName(groupName);
    for (var i = 0; i < rbs.length; i++) {
        if (rbs[i].checked) return rbs[i];
    }
    return null;
}
function x10dExistControl(ctrlID)
{
	return (x10dGetControl(ctrlID) != null);
}
function x10dIsVisible(c)
{
	if (c != null)
	{
		c = x10dGetControl(c);
		return c.style.display != "none" && c.style.visibility != "hidden" && c.className != 'hidden';
	}
	return false;	
}
function x10dGetEventSource(evnt)
{
	if (evnt == null) return null;
	if (evnt.srcElement)
	{
		return evnt.srcElement;
	}
	else
	{
		return evnt.target;
	}
}
//function AttachEvent(ctrl, eventName, event)
function x10dAttachEvent(ctrl, eventName, myEvent) {
	ctrl = x10dGetControl(ctrl);
	if (ctrl == null) return;
	if (window.attachEvent)
		ctrl.attachEvent(eventName, myEvent);		
	else
	{
		if (eventName.indexOf('on') == 0)
			eventName = eventName.substring(2);
		ctrl.addEventListener(eventName, myEvent, false);
	}
}
//GetAttrib(ctrl, att)
function x10dGetAttrib(ctrl, att) {
	ctrl = x10dGetControl(ctrl);
	if (ctrl == null) {
		return "";
	}
	var val = eval("ctrl." + att);
	if (val != null) return val;
    if (ctrl.getAttribute)
        return ctrl.getAttribute(att);
    if (ctrl.attributes) {
        var a = ctrl.attributes[att];
        if (a) return a.value;
    } else
        return ctrl[att];
}
function x10dSetAttrib(ctrl, att, val)
{
    if (ctrl.getAttribute)
    {
        ctrl.setAttribute(att, val);
    }
    else
    { 
        ctrl[att] = val;
	}
}
function x10dGetValue(ctrlID)
{
	if (x10dExistControl(ctrlID))
	{
		return x10dGetControl(ctrlID).value;
	}
	return "";
}
function x10dGetNumValue(ctrlID)
{
	if (x10dExistControl(ctrlID))
	{
		var val = x10dGetValue(ctrlID);
		if (val == "") return 0;
		return parseFloat(x10dToNum(val));
	}
	else
	return 0;
}
function x10dSetNumValue(ctrlID, num)
{
	var value = x10dToText(num);
	x10dSetValue(ctrlID, value);
}
function x10dToNum(num) {
	num = num.toString();
	num = x10dNumberGroupSeparator == '.' ? num.replace(/\./g, "") : num.replace(/\,/g, "");
	num = num.replace(x10dNumberDecimalSeparator, '.');
	return parseFloat(num);
 }
///Converts a true number into a string number
function x10dToText(num) {
	num = num.toString();
	/*
	num = num.replace(x10dNumberGroupSeparator, "");
	num = num.replace(".", x10dNumberDecimalSeparator);
	*/
	//num = num.replace(",", ".");
	num = num.replace(".", x10dNumberDecimalSeparator); 
	return num;
}
function x10dSetThousands(S) {
	S = String(S);
	var RgX = x10dNumberDecimalSeparator ? /^(,*\s)?([-+\u00A3\u20AC]?\d+)(\d{3}\b)/ : /^(.*\s)?([-+\u00A3\u20AC]?\d+)(\d{3}\b)/;
	return S == (S = S.replace(RgX, "$1$2" + x10dNumberGroupSeparator + "$3")) ? S : x10dSetThousands(S);
}
function x10dSetValue(ctrlID, value)
{
	if (ctrlID == null) return;
	ctrlID = ctrlID.replace(":", "_");
	if (x10dExistControl(ctrlID))
	{
		x10dGetControl(ctrlID).value = value;
	}
}
function x10dSetValueFromControl(ctrlIDSet, ctrlIDGet)
{
	if (x10dExistControl(ctrlIDGet) && x10dExistControl(ctrlIDSet))
	{
		x10dSetValue(ctrlIDSet,x10dGetControl(ctrlIDGet).value);
	}
}
function x10dSetInnerHTML(ctrlID, value)
{
	if (ctrlID == null) return;
	ctrlID = ctrlID.replace(":", "_");
	if (x10dExistControl(ctrlID))
	{
		x10dGetControl(ctrlID).innerHTML = value;
	}
}
function x10dSetInnerText(ctrlID, value)
{
	if (ctrlID == null) return;
	ctrlID = ctrlID.replace(":", "_");
	if (x10dExistControl(ctrlID))
	{
		x10dGetControl(ctrlID).innerText = value;
	}
}
function x10dGetListValue(listID)
{
	var list = x10dGetControl(listID);
	if (list != null) return list.options[list.selectedIndex].value;
	return "";
}
function x10dGetListIndexFromValue(listID, value) {
	var list = x10dGetControl(listID);
	for (var i = 0; i < list.options.length; i++ ) {
		if (list.options[i].value == value) {
			return i;
		}
	}
	return -1;
}
function x10dGetListText(listID, index)
{
	var list = x10dGetControl(listID);
	if (list != null) {
		if (index == null) index = list.selectedIndex;
		return list.options[index].text;
	}
	return "";
}
function x10dSetListIndex(listID, index)
{
	var list = x10dGetControl(listID);		
	if (list != null) list.selectedIndex = index;
}
function x10dSetListValue(listID, value)
{
	var list = x10dGetControl(listID);		
	if (list != null)
	{
		for (i=0;i<list.length;i++)
		{
			if (list.options[i].value == value)
			{
				list.selectedIndex = i;
				return true;
			}
		}
	}
	return false;
}
function x10dGetCheckBoxListCheckedItems(ctrlID)
{
	var i = 0;
	var ar = new Array();
	while (x10dExistControl(ctrlID + '_' + i))
	{
		var cb = x10dGetControl(ctrlID + '_' + i);
		if (cb.checked) ar[ar.length] = cb;
		i++;
	}
	return ar;
}
function x10dClearCheckBoxList(ctrlID) {
	var cbl = x10dGetControl(ctrlID);
	if (cbl != null) {
		var count = 0;
		while (x10dExistControl(ctrlID + '_' + count)) {
			x10dGetControl(ctrlID + '_' + count).checked = false;
			count++;
		}
		
	}
}
function x10dSetCheckBox(id, checked)
{
	if (x10dExistControl(id)) x10dGetControl(id).checked = checked;
}
function x10dRound(num, N) {
	if (isNaN(num))
		num = 0;
	num = (Math.round(num*Math.pow(10,N))) / Math.pow(10,N);
	return parseFloat(num);
}
function x10dFillList(arTxt, arValue, listName, addEmpty) {
	var list = x10dGetControl(listName);
	if (list == null) return;
	list.length = 0;
	if (arValue != null)
	{
		if (addEmpty)
		{
			list.options[list.options.length] = new Option("", "");		
		}
		for (i=0; i<arTxt.length; i++) {
			list.add(new Option(arTxt[i],arValue[i]));
		} 
	}
}
function x10dInsertListItem(listName, text, value, index)
{
	var list = x10dGetControl(listName);
	var insertBeforeOption = null;
	if (index != null && list.length >= index) 
		insertBeforeOption = list.options[index];
	//list.options[index] = new Option(text,value);
	var newOption = new Option(text,value);
	try
	{
		list.add(newOption, insertBeforeOption);
	}
	catch(ex)
	{
		list.add(newOption, index);
	}
	
}
function x10dWindowOpen(url, windowName, width, height)
{
	return window.open(url, windowName, "width=" + width + ",height=" + height + ",scrollbars=1,resizable=1,status=1");
}
function x10dWindowClose(win) {
		try {
			if (win != null) win.close();
		}
		catch (e) { }
}
function x10dArrayIndex(arr, val)
{
	for (var i = 0; i < arr.length; i++) 
	{
		if (arr[i] == val) { return i; }
	}
	return -1;
}
function x10dSetDisabled(ctrl, disable)
{
	var c = x10dGetControl(ctrl);
	if (c != null) {
		if (c.type == "radio" || c.type == "checkbox") {
			x10dSetCheckBoxDisabled(c.id, disable);
		}
		else {
			c.disabled = disable;
		}
		if (c.childNodes)
		{
			for (var i = 0; i<c.childNodes.length; i++)
			{
				var cc = c.childNodes[i];
				if (cc.tagName == "INPUT" || cc.tagName == "SELECT" || cc.tagName == "DIV") x10dSetDisabled(cc, disable);
			}
		}
	}		
}
function x10dSetReadOnlyPanel(ctrl, readOnly, dontSetClass)
{
	ctrl = x10dGetControl(ctrl);
	if (ctrl!=null)
	{
		ctrl.readOnly = readOnly;
		if (!dontSetClass)
		{
			if (ctrl.tagName == "DIV")
			{
				if (ctrl.childNodes != null)
				{
					for (var i = 0; i<ctrl.childNodes.length; i++)
					{
						var c = ctrl.childNodes[i];
						if (x10dIsTagNameControl(c.tagName) || c.tagName == "DIV")
							x10dSetReadOnlyPanel(c, readOnly, dontSetClass);
					}
				}
			}
			else
			{
				if (ctrl.tagName == "button" || ctrl.type == "submit")
				{
					ctrl.disabled = readOnly;
				}
				else
				{
					if (readOnly)
					{
						if (ctrl.className.indexOf('right') > -1)
							ctrl.className = 'editreadonlyright';
						else
							ctrl.className = 'editreadonly';
					}
					else
					{
						if (ctrl.className.indexOf('right') > -1)
							ctrl.className = 'txtright';
						else
							ctrl.className = '';
					}
				}
			}
		}
	}
}
function x10dSetReadOnly(ctrl, readOnly, dontSetClass)
{
	ctrl = x10dGetControl(ctrl);
	if (ctrl!=null)
	{
		ctrl.readOnly = readOnly;
		if (!dontSetClass)
		{
			if (readOnly)
			{
				if (ctrl.className.indexOf('right') > -1)
					ctrl.className = 'editreadonlyright';
				else
					ctrl.className = 'editreadonly';
			}
			else
			{
				if (ctrl.className.indexOf('right') > -1)
					ctrl.className = 'txtright';
				else
					ctrl.className = '';
			}
		}
	}
}
function x10dSetSpecialReadOnly(ctrl, readOnly)
{
	ctrl = x10dGetControl(ctrl);
	if (ctrl!=null)
	{
		var id = ctrl.id + '_shadow';
		var c = x10dGetControl(id);
		if (readOnly)
		{
			if (c == null)
			{
				if (ctrl.tagName == 'SELECT')
				{
					c = document.createElement("select");
				}
				else if (ctrl.type == 'radio')
				{
					c = document.createElement("input");
					c.type = 'radio';
				}
				
				c.id = id;
				c.name = id;
				c.style.zIndex = ctrl.style.zIndex;
				c.style.width = ctrl.style.width;
				c.style.height = ctrl.style.height;
				c.style.left = ctrl.style.left;
				c.style.top = ctrl.style.top;
				c.style.position = ctrl.style.position;
				c.disabled = 'disabled';
				ctrl.parentNode.insertBefore(c, ctrl);
			}
			
			if (ctrl.tagName == 'SELECT') {
				for (var i = 0; i < ctrl.options.length; i++) {
					var opt = ctrl.options[i];
					c.add(new Option(opt.text, opt.value));
				}
				c.selectedIndex = ctrl.selectedIndex;
				//c.options[0] = new Option(ctrl.options[ctrl.selectedIndex].text, '');
			}
			else if (ctrl.type == 'radio')
			{
				c.checked = ctrl.checked;
			}
			x10dDisplay(ctrl, false);
			x10dDisplay(c, true);
		}
		else
		{
			if (c != null)
			{
				x10dDisplay(c, false);
			}
			x10dDisplay(ctrl, true);
		}
	}	
}
function x10dDisplayCtrlID(ctrlID, display)
{
	x10dDisplay(x10dGetControl(ctrlID), display)
}
function x10dDisplay(ctrl, display) {
	ctrl = x10dGetControl(ctrl);
	if (ctrl != null)
	{
		if (display == null)
		{
			//Toggle
			if (ctrl.style.display == "none" || ctrl.style.visibility == "hidden") display = true;
		}
		ctrl.style.display = display ? "" : "none";
		ctrl.style.visibility = display ? "visible" : "hidden";
		if ((ctrl.type == "radio" || ctrl.type == "checkbox") && ctrl.parentNode.tagName == 'SPAN')
		{
			var labels = ctrl.parentNode.getElementsByTagName("label");
			for (var i = 0; i < labels.length; i++) {
				labels[i].style.display = display ? "" : "none";
				labels[i].style.visibility = display ? "visible" : "hidden";
			}
		}
	}
	return display;
}
function x10dDisplayPanel(ctrl, display, isChild)
{
	var c = x10dGetControl(ctrl);
	if (c != null)
	{
		if (c.childNodes)
		{
			for (var i = 0; i<c.childNodes.length; i++)
			{
				var cc = c.childNodes[i];
				if (cc.style != null) x10dDisplay(cc, display);
				if (cc.tagName == "DIV") x10dDisplayPanel(cc, display, true);
			}
		}
	}		
}
function x10dDisplayLabelAndControl(id, display, preName, pre)
{
	if (pre == null) pre = "tb";
	x10dDisplayCtrlID(preName + pre + id, display);
	x10dDisplayCtrlID(preName + "lbl" + id, display);
}
function x10dClearControls(ctrls) {
	for (var i = 0; i < ctrls.length; i++) {
		x10dSetValue(ctrls[i], '');
	}
}
function x10dClearChildControls(panelID, clearChildPanels, excludeArray)
{
	var panel = x10dGetControl(panelID);
	if (panel != null)
	{
		for (var i = 0; i<panel.childNodes.length; i++)
		{
			var c = panel.childNodes[i];
			if (c.tagName == "INPUT")
			{
				if (c.type == "text")
				{
					if (excludeArray == null || x10dArrayIndex(excludeArray, c.id) == -1)
						c.value="";
				}
			}
			else if (clearChildPanels && c.tagName == "DIV" && c.childNodes != null && c.childNodes.length > 0)
			{
				if (excludeArray == null || x10dArrayIndex(excludeArray, c.id) == -1)
					x10dClearChildControls(c, true, excludeArray);
			}
		}
	}		
}
var x10dWaitCtrl = null;
var x10dWaitCtrlCount = 0;
function x10dPost()
{
	//Denne funktion er ikke færdigudviklet - bruges til at vise en "vent" box ved postbacks der kan tage lidt tid...
	var w = document.createElement("div");
	x10dWaitCtrl = w;
	w.innerHTML = "<b>Vent</b>";
	w.style.fontWeight = "bold";
	w.style.backgroundColor = "white";
	w.style.border = "solid 2px gray";
	w.style.padding = "15px";
	w.style.left = "100px";
	w.style.top = "20px";
	w.style.zIndex = 10000000;
	w.style.position = "absolute";
	w.style.width = "150px";
	w.style.height = "50px";
	window.document.forms[0].appendChild(w);
	setTimeout("x10dPosting()", 300);
}
function x10dPosting()
{
	x10dWaitCtrlCount++;
	if (x10dWaitCtrlCount > 3) x10dWaitCtrlCount = 0;
	var s = "Vent";
	for (var i = 0; i < x10dWaitCtrlCount; i++) s += ".";
	x10dWaitCtrl.innerHTML = s;
	setTimeout("x10dPosting()", 300);
}
function x10dAddHiddenTextBox(id, parentID, value)
{
	if (!x10dExistControl(parentID)) return false;
	if (x10dExistControl(id))
	{
		x10dSetValue(id, value);
	}
	else
	{
		var tb = document.createElement("input");
		tb.id = id;
		tb.name = id;
		tb.value = value;
		tb.type = "text";
		tb.style.display = 'none';
		tb.style.visibility = 'hidden';
		x10dGetControl(parentID).appendChild(tb);
	}
	return true;
}
function x10dIsTagNameControl(tagName)
{
	return (tagName == "INPUT" || tagName == "SELECT" || tagName == "TEXTAREA" || tagName == "BUTTON");
}
var x10dFocusIndex;
var x10dFocusCtrl;
function x10dSetFirstFocus(ctrl) {
	x10dFocusIndex = null;
	x10dFocusCtrl = null;
	if (!x10dFindFirstFocus(ctrl) && x10dFocusCtrl != null) {
		try {
			x10dFocusCtrl.focus();
			return true;
		}
		catch (e) { }
	}
}
function x10dFindFirstFocus(ctrl)
{
	if (ctrl != null) {
		for (var i = 0; i < ctrl.childNodes.length; i++)
		{
			var c = ctrl.childNodes[i];
			var cid = c.id;
			if (x10dIsTagNameControl(c.tagName)) {
				if (x10dIsActive(c)) {
					try {
						if (x10dFocusIndex == null && c.tabIndex == 0) {
							c.focus();
							return true;
						}
						if (c.tabIndex > 0 && (x10dFocusIndex == null || c.tabIndex < x10dFocusIndex)) {
							x10dFocusIndex = c.tabIndex;
							x10dFocusCtrl = c;
						}
					}
					catch (e) { }
				}
			}
			else if (x10dHasChildren(c, true)) {
				if (x10dFindFirstFocus(c)) return true;
			}
		}
	}
	return false;
}
function x10dHasChildren(c, onlyActive) {
	return (c.childNodes != null && c.childNodes.length > 0 && (!onlyActive || x10dIsActive(c)) && (c.tagName == "DIV" || c.tagName == "SPAN" || c.tagName == "TABLE" || c.tagName == "TBODY" || c.tagName == "TR" || c.tagName == "TD"));
}
function x10dSetFocus(ctrl)
{
	var c = x10dGetControl(ctrl);
	if (c != null && x10dIsActive(c))
	{
		c.focus();
	}	
}
function x10dSetCheckBoxDisabled(ctrlID, disabled) {
	var cb = x10dGetControl(ctrlID);
	if (disabled)
	{
		cb.disabled = 'disabled';
		if (cb.parentNode.tagName == 'SPAN') cb.parentNode.disabled = 'disabled';
	}
	else
	{
		cb.disabled = '';
		if (cb.parentNode.tagName == 'SPAN') cb.parentNode.disabled = '';
	}
}
function x10dIsActive(c)
{
	return (c!=null && !c.readOnly && !c.disabled && c.style.display != "none" && c.style.visibility != "hidden" && c.style.display != "none");
}
function x10dMethodExist(method) {
	return (typeof (method) == "object" || typeof (method) == "function");
}
function x10dOpenerMethodExist(opener, openerMethod)
{
	if (opener != null && !window.opener.closed)
	{
		return eval("(typeof(opener." + openerMethod + ") == 'object' || typeof(opener." + openerMethod + ") == 'function')");
	}
	return false;
}
function x10dOpenerExist(opener)
{
	return (opener != null && !window.opener.closed);
}
function x10dShowDBLog(tableName, id)
{
	x10dWindowOpen('DBLog.aspx?TableName=' + tableName + '&TableRecordID=' + id, "DBLog" + id, 1310, 850);
}
function x10dEditNote(noteType, noteID, recordUID, recordUID1)
{
	if (noteID != null && noteID != '' && noteID != '0')
		url = "Note.aspx?NoteID=" + noteID;
	else
	{
		recordUID = x10dReplaceText(recordUID, '=', '%3d');
		recordUID1 = x10dReplaceText(recordUID1, '=', '%3d');
		url = 'Note.aspx?NoteType=' + noteType + '&RecordUID=' + recordUID + '&RecordUID1=' + recordUID1;
	}
	x10dWindowOpen(url, 'Note', 770, 830);
}

function x10dReplaceText(text, search, replaceWith)
{
	//Global and caseinsensitive
	if (text == null) return null;
	var match = new RegExp(search, "ig");
	var res = text.replace(match, replaceWith);
	return res;
}
function x10dPadText(text, length, padChar, rightPadding)
{
	if (text == null) text = "";
	while (text.length < length)
	{
		text = rightPadding ? text + padChar : padChar + text;
	}
	return text;
}
//KAN SLETTES NÅR DEN GAMLE SYSTEM REPORT IKKE MERE BRUGES HOS IKANO
function Toggle(id)
{
	var c = x10dGetControl(id);
	c.style.display = '';
	c.style.visibility = 'visible';
}



/*** OLD X10DMISC.JS ***/

///Adds months and days to a string date (dd-mm-yyyy)
function AddToDateString(dateString, months, days) {
	var date = new Date(dateString.substr(6, 4), Number(dateString.substr(3, 2)) - 1, dateString.substr(0, 2));
	date = AddToDate(date, months, days);
	return ConvertDateToString(date);
}
function AddToDate(date, months, days) {
	date.setMonth(date.getMonth() + Number(months));
	date = new Date(date.getTime() + (days * 24 * 60 * 60 * 1000));
	return date;
}
///Converts a true date to a string date (dd-mm-yyyy)
function ConvertDateToString(fromDate) {
	var date = new Date(fromDate);
	var day = date.getDate();
	if (day < 10) day = "0" + String(day);
	var month = date.getMonth() + 1;
	if (month < 10) month = "0" + String(month);
	return day + "-" + month + "-" + date.getFullYear();
}
///Sets a control to the specified value
function SetValue(ctrlID, value) {
	ctrlID = ctrlID.replace(":", "_");
	if (x10dExistControl(ctrlID)) {
		x10dGetControl(ctrlID).value = value;
	}
}
///Sets a control to the specified numeric value and converts the numeric value into text
function SetNumValue(ctrlID, num) {
	var value = x10dToText(num);
	SetValue(ctrlID, value);
}
///Sets a control to the specified amount - amount must be an amount (123456.56)
function SetAmount(ctrlID, amount) {
	if (x10dExistControl(ctrlID)) {
		var value = RoundFormat(amount, 2);
		value = x10dToText(value);
		value = x10dSetThousands(value);
		SetValue(ctrlID, value);
	}
}
///Returns a controls value
function GetValue(ctrlID) {
	if (x10dExistControl(ctrlID)) {
		return x10dGetControl(ctrlID).value;
	}
	return "";
}
///Returns a controls numeric value
function GetNumValue(ctrlID) {
	if (x10dExistControl(ctrlID)) {
		var val = GetValue(ctrlID);
		if (val == "") return 0;
		var num = x10dToNum(val);
		return parseFloat(num);
	}
	else
		return 0;
	//her
}
///Rounds a number into a "string" format with x decimals and trailing zeroes, fx 12.3 => 12.30
function RoundFormat(num, N) {
	num = Round(num, N);
	num = String(num);
	if (N > 0) {
		if (num.indexOf(".") == -1)
			num += ".";
		while (num.substring(num.indexOf(".")).length < N + 1) {
			num += "0";
		}
	}
	return num;
}
///Rounds a number to x decimals, but without trailing zeroes (x=2): 12.3 => 12.3
function Round(num, N) {
	if (isNaN(num))
		num = 0;
	num = (Math.round(num * Math.pow(10, N))) / Math.pow(10, N);
	return parseFloat(num);
}
/*

function SetThousands(S) {
	S = String(S);
	var RgX = /^(,*\s)?([-+\u00A3\u20AC]?\d+)(\d{3}\b)/;
	return S == (S = S.replace(RgX, "$1$2.$3")) ? S : SetThousands(S);
}

///Converts a string number into a true number
function ToNum(num) {
num = num.toString();
num = num.replace(/\./g, "");
num = num.replace(",", ".");
return parseFloat(num);
}

///Converts a true number into a string number
function ToText(num) {
num = num.toString();
num = num.replace(",", ".");
num = num.replace(".", ",");
return num;
}
///Sets one control (ctrlIDSet) to the value of another control (ctrlIDGet)
function SetValueFromControl(ctrlIDSet, ctrlIDGet) {
if (x10dExistControl(ctrlIDGet)) {
SetValue(ctrlIDSet, x10dGetControl(ctrlIDGet).value);
}
}
///Searches a js array and returns the index
function arraysearch($arr, $search) {
$count = $arr.length;
for (ii = 0; ii < $count; ii++) {
if ($arr[ii] == $search) {
return ii;
}
}
return -1;
}
function FillList(arTxt, arValue, listName, addEmpty) {
var list = x10dGetControl(listName);
list.length = 0;
if (addEmpty) {
list.options[list.length] = new Option(" - V" + unescape('%E6') + "lg - ", "");
}
for (i = 0; i < arTxt.length; i++) {
list.options[list.length] = new Option(arTxt[i], arValue[i]);
}
}
function x10dModalDialog(modalDialogUrl, url, argument, width, height) {
if (window.showModalDialog) {
var posX = event.screenX;
var posY = event.screenY + 20;
var screenW = screen.width;
var screenH = screen.height - 20;
if (posX + width > screenW) { posX = posX - width - 40; }
if (posY + height > screenH) { posY = posY - height - 80; }
var wPosition = 'dialogLeft:' + posX + '; dialogTop:' + posY;
modalDialogUrl += "?Url=" + url;
if (argument != null && argument != "") {

modalDialogUrl += "&" + argument;
}
var returnValue = showModalDialog(modalDialogUrl, null, 'dialogWidth: ' + width + 'px; dialogHeight: ' + height + 'px; resizable: yes; help: no; status: no; scroll: no; ' + wPosition);
return returnValue;
}
else {
alert('Browseren skal vaere Internet Explorer 4 eller nyere for at denne funktion kan benyttes');
return null;
}
}
*/function x10dCustomControlExist() {}
//Floating menu
function JSFX_FloatTopDiv(floatName)
{
	var vMargin = "";
	var hMargin = "";
	var ns = (navigator.appName.indexOf("Netscape") != -1);
	var d = document;
	function ml(id)
	{
		var el=d.getElementById?d.getElementById(id):d.all?d.all[id]:d.layers[id];
		vMargin = Number(el.vMargin);
		hMargin = Number(el.hMargin);
		
		if(d.layers)el.style=el;
		el.sP=function(x,y){this.style.left=x;this.style.top=y;};
		if (el.hAlignment=="Left")
			el.x = hMargin;
		else {
			el.x = ns ? pageXOffset + innerWidth : document.body.scrollLeft + document.body.clientWidth;
		}
		if (el.vAlignment=="Top")
		el.y = vMargin;
		else{
		el.y = ns ? pageYOffset + innerHeight : document.body.scrollTop + document.body.clientHeight;
		el.y -= vMargin;
		}
		
		return el;
	}
	window.stayTopLeft=function()
	{
		if (ftlObj.vAlignment=="Top"){
			var pY = ns ? pageYOffset : document.body.scrollTop;
			ftlObj.y += (pY + vMargin - ftlObj.y)/4;
		}
		else{
			var pY = ns ? pageYOffset + innerHeight : document.body.scrollTop + document.body.clientHeight;
			ftlObj.y += (pY - vMargin - ftlObj.y - ftlObj.clientHeight)/4;
		}
		if (ftlObj.hAlignment=="Left"){
			var pX = ns ? pageXOffset : document.body.scrollLeft;
			ftlObj.x += (pX + hMargin - ftlObj.x)/4;
		}
		else{
			var pX = ns ? pageXOffset + innerWidth : document.body.scrollLeft + document.body.clientWidth;
			ftlObj.x += (pX - hMargin - ftlObj.x - ftlObj.clientWidth)/4;
		}
		ftlObj.sP(ftlObj.x, ftlObj.y);
		setTimeout("stayTopLeft()", 30);
	}
	var ftlObj = ml(floatName);
	stayTopLeft();
}

function x10d_GetRealTopLeft(ctrl) {
  var ar = new Array();
  var yPos = 0;  var xPos = 0;  var xAdd = 0;  var yAdd = 0;
  while (ctrl != null) {
	yAdd = ctrl.offsetTop;
	if (yAdd == null)
		yAdd = 0;
	else if (yAdd == 0)
	{
		yAdd = parseInt(ctrl.style.top);
		if (isNaN(yAdd))
			yAdd = 0;		
	}
	if (ctrl.scrollTop != null && ctrl.scrollTop > 0)
		yPos -= ctrl.scrollTop;
	yPos += yAdd;

	xAdd = ctrl.offsetLeft;
	if (xAdd == null)
		xAdd = 0;
	else if (xAdd == 0)
	{
		xAdd = parseInt(ctrl.style.left);
		if (isNaN(xAdd))
			xAdd = 0;		
	}
	if (ctrl.scrollLeft != null && ctrl.scrollLeft > 0)
		xPos -= ctrl.scrollLeft;
    xPos += xAdd;
    ar[0] = ctrl;
    ctrl = ctrl.offsetParent;
  }
  ar[1] = xPos;
  ar[2] = yPos;
  return ar;
}
function x10d_GetRealLeft(ctrl) {
  var ar = x10d_GetRealTopLeft(ctrl);
  return ar[1];
}
function x10d_GetRealTop(ctrl) {
  var ar = x10d_GetRealTopLeft(ctrl);
  return ar[2];
}
var x10dPopUpCurrent = new Array();
//x10dPopUpCurrent = null;
x10dPopUpInit = false;
function x10dPop_Init()
{
	if (x10dPopUpInit == false)
	{
		x10dAttachEvent(document, "onmouseup", x10dPop_Hide);
		//document.onmouseup = function() { x10dPop_Hide(); }
	}
	x10dPopUpInit = true;
}
function x10dPop_IsVisible(popupID)
{
	return (x10dExistControl(popupID) && x10dPopUpCurrent.length > 0 && x10dGetControl(popupID).style.display == "" && x10dArrayIndex(x10dPopUpCurrent, x10dGetControl(popupID)) > -1);
}
function x10dPop_Create(popupID, parentContainer, width, height)
{
	var popup = x10dGetControl(popupID);

	if (popup == null)
	{
		var parentPanel = parentContainer;
		if (parentPanel == null) parentPanel = document.body.childNodes[0];
		popup = document.createElement('div');
		popup.id = popupID;
		popup.className = "x10dPopUp";
		popup.style.position = "absolute";
		popup.style.visibility = "hidden";
		popup.style.display = "none";
		popup.style.zIndex = "9999";
		popup.style.top = "0px";
		popup.style.left = "0px";

		var onkeyupEvent = function(){if (event.keyCode == 27) x10dPop_Hide();};
		x10dAttachEvent(popup, "onkeyup", onkeyupEvent);
		var onmouseupEvent = function(){return x10dPop_CancelMouse(event);};
		x10dAttachEvent(popup, "onmouseup", onmouseupEvent);

		parentPanel.appendChild(popup);
		x10dPop_Init();
	}
	popup.style.width = "500px";
	popup.style.height = "500px";
	if (width != null && width > 0) popup.style.width = width;
	if (height != null && height > 0) popup.style.height = height;
	
	return popup;
}

function x10dPop_Show(popupID, left, top, ctrlToPositionOverID, stayOpen, transparentImage, url, width, height, innerHTML)
{
	var popupBackFrameID = "x10dFrame" + popupID;
	var popupTransparentDivID = "x10dTransparent" + popupID;
	var urlFrameID = popupID + "_iframe" + popupID;
	var popup = x10dGetControl(popupID);
	
	if (left == null || left == 'undefined')
		left = (popup.LeftPosition > 0) ? popup.LeftPosition : left = 0;
	if (top == null || top == 'undefined')
		top = (popup.TopPosition > 0) ? popup.TopPosition : left = 0;
	if (popup == null) 
	{
		var parentContainer = null;
		if (ctrlToPositionOverID != null && ctrlToPositionOverID != "") 
		{
			parentContainer = x10dGetControl(ctrlToPositionOverID);
			if (parentContainer != null && parentContainer.tagName != "DIV") parentContainer = x10dGetControl(ctrlToPositionOverID).parentNode;
		}
		popup = x10dPop_Create(popupID, parentContainer, width, height);
	}
	else if ((ctrlToPositionOverID == null || ctrlToPositionOverID == '') && popup.CtrlToPositionOverID != null) ctrlToPositionOverID = popup.CtrlToPositionOverID;
	if (width != null && width > 0) popup.style.width = width;
	if (height != null && height > 0) popup.style.height = height;
	
	//Bakcframe (hides select controls)
	var backFrame = x10dGetControl(popupBackFrameID);
	if (backFrame == null)
	{
		backFrame = document.createElement('iframe');
		backFrame.src = "javascript:this.empty=\'\';"
		backFrame.id = popupBackFrameID;
		backFrame.name = popupBackFrameID;
		backFrame.style.width = '300px';
		backFrame.style.height = '300px';
		backFrame.style.position = 'absolute';
		backFrame.style.top = '60px';
		backFrame.style.left = '60px';
		backFrame.zIndex = 0;
		backFrame.visibility = 'hidden'; 
		backFrame.display = 'none';
		popup.parentNode.appendChild(backFrame);
	}

	var tDiv = null;
	if (transparentImage == true || stayOpen) transparentImage = '../LNFApp/Image/SemiTransparent.gif'
	if (transparentImage != null)
	{
		tDiv = x10dGetControl(popupTransparentDivID);
		if (tDiv == null)
		{
			tDiv = document.createElement('div');
			tDiv.id = popupTransparentDivID;
			tDiv.style.backgroundImage = 'url(' + transparentImage + ')';
			tDiv.style.width = '100%';
			tDiv.style.height = '100%';
			tDiv.style.position = 'absolute';
			tDiv.style.top = '0px';
			tDiv.style.left = '0px';
			tDiv.style.zIndex = '2000';
			//Will not work if is FORM
			popup.parentNode.appendChild(tDiv);
		}
		tDiv.style.visibility = "visible";
		tDiv.style.display = "";
	}
	
	var urlFrame = x10dGetControl(urlFrameID);
	if (url != null && url != "") {
		//Show url in iframe - if it does not exist, add it
		/* Rydder en gammel iframe - ikke elegant dog
		if (urlFrame != null) {
			urlFrame.style.display = 'none';
			urlFrame = null;
		}
		*/
		if (urlFrame == null)
		{
			urlFrame = document.createElement('iframe');
			urlFrame.style.width = '98%';
			urlFrame.style.height = '98%';
			urlFrame.style.position = 'absolute';
			urlFrame.style.top = '0px';
			urlFrame.style.left = '0px';
			urlFrame.style.zIndex = '500';
			urlFrame.frameBorder = '0';
			
			urlFrame.id = urlFrameID;
			popup.appendChild(urlFrame);
		}
		else {
			if (url != 'dont:load') urlFrame.src = "about:blank";
			urlFrame.style.visibility = 'visible';
		}
		if (url != 'dont:load')
			urlFrame.src = url;
	}
	else if (urlFrame != null)
	{
		urlFrame.style.visibility = 'hidden';
	}
	if (innerHTML != null && innerHTML != '')
	{
		popup.innerHTML = innerHTML;
	}
	
	var ctrlToPositionOver = null;
	if (ctrlToPositionOverID != null && ctrlToPositionOverID != "")
	{
		ctrlToPositionOver = x10dGetControl(ctrlToPositionOverID);
	}
	if (popup.disabled)
	{
		return;
	}
	
	popup.style.visibility = "visible"; //popup must be visible at this time for getreal pos to work
	popup.style.display = "";
	
	if (ctrlToPositionOver != null)
	{
		//Find delta i real pos ml ctrlToPositionOver og popup
		var posTopDelta = (x10d_GetRealTop(ctrlToPositionOver) + top) - x10d_GetRealTop(popup);
		var posLeftDelta = (x10d_GetRealLeft(ctrlToPositionOver) + left) - x10d_GetRealLeft(popup);
		//Adder forskel til popup
		popup.style.top = parseInt(popup.style.top) + posTopDelta;
		popup.style.left = parseInt(popup.style.left) + posLeftDelta;
	}
	else if (left != null && left > 0)
	{
		popup.style.left = left;
		popup.style.top = top;
	}
	x10d_MoveCtrlIntoView(popup);
	backFrame.style.left = popup.style.left;
	backFrame.style.top = popup.style.top;
	backFrame.style.width = popup.style.width;
	backFrame.style.height = popup.style.height;
	var ind = popup.style.zIndex - 1;
	backFrame.style.zIndex = ind;
	ind--;
	if (tDiv != null) tDiv.style.zIndex = ind;
	
	var _val_agt=navigator.userAgent.toLowerCase();
	var _val_is_ie=((_val_agt.indexOf("msie")!=-1) && (_val_agt.indexOf("opera")==-1));
	if (_val_is_ie)
	{
		backFrame.style.visibility = "visible";
		backFrame.style.display = "";
	}
	if (stayOpen == null || stayOpen == false)
	{
		x10dPopUpCurrent[x10dPopUpCurrent.length] = popup;
	}
}
function x10d_MoveCtrlIntoView(ctrlToMove)
{
	var ctrl = ctrlToMove;
	var screenBottom = window.innerHeight != null ? window.innerHeight: document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight:document.body != null? document.body.clientHeight:null; //ClientHeight
	screenBottom += document.body.scrollTop;
	var screenTop = document.body.scrollTop;
	var screenRight = window.innerWidth != null? window.innerWidth: document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth:document.body != null? document.body.clientWidth:null; //ClientWidth
	screenRight += document.body.scrollLeft;
	var screenLeft = document.body.scrollLeft;

	ctrl.style.visibility = "visible";
	ctrl.style.display = "";
	
	var ar = x10d_GetRealTopLeft(ctrl);
	var ctrlRealTop = ar[2];
	var ctrlRealLeft = ar[1];
	var ctrlRealBottom = parseInt(ctrlRealTop) + parseInt(ctrl.style.height);
	var ctrlRealRight = parseInt(ctrlRealLeft) + parseInt(ctrl.style.width);

	var ctrlBottom = ctrlRealBottom;
	var ctrlTop = ctrlRealTop;
	var ctrlLeft = ctrlRealLeft;
	var ctrlRight = ctrlRealRight;
	
	if (ctrlTop < screenTop)
	{
		ctrl.style.top = x10d_MoveTo(screenTop - ctrlTop, screenBottom - ctrlBottom, parseInt(ctrl.style.top)) + "px";
	}
	else if (ctrlBottom > screenBottom && ctrlTop > screenTop)
	{
		ctrl.style.top = x10d_MoveTo(screenBottom - ctrlBottom, screenTop - ctrlTop, parseInt(ctrl.style.top)) + "px";
	}

	if (ctrlRight > screenRight && ctrlLeft > screenLeft)
	{
		ctrl.style.left = x10d_MoveTo(screenRight - ctrlRight, screenLeft - ctrlLeft, parseInt(ctrl.style.left)) + "px";
	}
}
function x10d_MoveTo(best, max, curPos)
{
		if (best == 0) return curPos;
		if (best < 0)
		{
			best -= 15;
		}
		else
		{
			best += 15;			
		}
		var move = 0;
		if ((best > 0 && best < max) || (best < 0 && best > max))
			move = best
		else
			move = max

		move = curPos + move; 
		return move;
}
function x10dPop_Hide() {
	if (x10dPopUpCurrent.length > 0) {
		x10dPop_HidePopUp(x10dPopUpCurrent[x10dPopUpCurrent.length - 1]);
	}
}
function x10dPop_HidePopUp(popupCtrl) {
	popupCtrl = x10dGetControl(popupCtrl);
	if (popupCtrl == null) return;
	popupCtrl.style.visibility = "hidden";
	popupCtrl.style.display = "none";
	//backFrame
	var backFrame = x10dGetControl("x10dFrame" + popupCtrl.id);
	if (backFrame != null)
	{
		//In firefox, the iframe cannot be found!
		backFrame.style.visibility = "hidden";
		backFrame.style.display = "none";
	}
	var trans = x10dGetControl("x10dTransparent" + popupCtrl.id);
	if (trans != null)
	{
		trans.style.visibility = "hidden";
		trans.style.display = "none";
	}
	var i = x10dArrayIndex(x10dPopUpCurrent, popupCtrl);
	if (i > -1)
	{
		x10dPopUpCurrent.splice(i, 1);
	}
}

function x10dPop_CancelMouse(event)
{
		event.cancelBubble = true; 
		event.returnValue = false; 
		return false;
}
var x10dMaximizerCtrl = new Object();
function x10dMaximizer_Init(ctrlID, maxDivID, bottomMargin)
{
	x10dMaximizerCtrl = document.getElementById(ctrlID);
	x10dSetAttrib(x10dMaximizerCtrl, "MaxDivID", maxDivID);
	x10dSetAttrib(x10dMaximizerCtrl, "BottomMargin", bottomMargin);
	x10dAttachEvent(window, "onresize", x10dMaximizer_MaxIt);
	x10dAttachEvent(window, "onload", x10dMaximizer_MaxIt);
	x10dMaximizer_MaxIt();
}
function x10dMaximizer_MaxIt()
{
	if (x10dMaximizerCtrl == null) return;
	var maxDiv = document.getElementById(x10dGetAttrib(x10dMaximizerCtrl, "MaxDivID"));
	var bottomMargin = x10dGetAttrib(x10dMaximizerCtrl, "BottomMargin");
	var divTotalHeight = 0;	var divTotalPercentageHeight = 0;
	for (var i = 0; i < x10dMaximizerCtrl.childNodes.length; i++)
	{
		if (x10dMaximizerCtrl.childNodes[i].style && x10dMaximizerCtrl.childNodes[i].nodeType == 1 && x10dMaximizerCtrl.childNodes[i] != maxDiv)
			divTotalHeight += x10dMaximizerCtrl.childNodes[i].offsetHeight;
	}
	var maxHeight = document.body.offsetHeight - 2 - bottomMargin;
	x10dMaximizerCtrl.style.height = maxHeight;
	if ((maxHeight - divTotalHeight) > 50)
	{
		maxDiv.style.height = maxHeight - divTotalHeight;
		document.body.style.overflow = "hidden";
	}
	else
	{
		document.body.style.overflow = "auto";
	}
}
function x10dWinOpen_Open(ctrlID, html, winWidth, winHeight, url)
{
	var ctrl = x10dGetControl(ctrlID);
	if (url == null || url == "") url = "javascript:this.empty=''";//Needed because of HTTPS
	if (winWidth == "") winWidth = 1000;
	if (winHeight == "") winHeight = 750;
	var mainWin = x10dWinOpen_GetMainWin();	
	var winName = "";
	if (mainWin == null) winName = ctrlID;
	var win = window.open(url, winName, "");
	if (html != "")
	{
		try
		{
			win.document.write(html);
		}
		catch (e) {}
	}
	if (mainWin != null) mainWin.winHandle = win;
	return (url != "");
}
function x10dWinOpen_OpenInExistingWindow(url, ctrlID, html, winWidt, winHeight, openUrlManuallyHTMLMessage)
{
	var mainWin = x10dWinOpen_GetMainWin();
	if (mainWin != null && mainWin.winHandle != null)
	{
		mainWin.winHandle.document.open();
		if (openUrlManuallyHTMLMessage != null && openUrlManuallyHTMLMessage != "")
			mainWin.winHandle.document.write(openUrlManuallyHTMLMessage);
		else if (openUrlManuallyHTMLMessage == "")
			mainWin.winHandle.document.write("<b>Filen hentes...</b><br><br>Hvis filen ikke automatisk vises efter noget tid, og browseren ikke viser nogen aktivitet, <a href='" + url + "'>tryk her</a>");
		mainWin.winHandle.document.close();
		//mainWin.winHandle.document.onload = Gurli;
		mainWin.winHandle.location.href = url;
		mainWin.winHandle = null;
	}
	else
		x10dWinOpen_Open(ctrlID, html, winWidt, winHeight, url);
}
function x10dWinOpen_CloseExistingWindow(ctrlID)
{
	var mainWin = x10dWinOpen_GetMainWin();
	if (mainWin != null && mainWin.winHandle != null)
	{
		mainWin.winHandle.close();
	}
}
function x10dWinOpen_GetMainWin()
{
	var mainWin = null;
	if (this != top)
		mainWin = this.top;				
	else if (this.opener != null)
		mainWin = opener.top;
	else
		mainWin = null;
	return mainWin;
}
function x10dMultiValue_GetValue(id, key)
{
	var c = x10dGetControl(id);
	if (c != null)
	{
		var t = c.value;
		var tag = '#' + key + '>';
		var p0 = t.indexOf(tag);
		if (p0 > -1)
		{
			p0 += tag.length;
			var p1 = t.indexOf('#/' + key + '>', p0);
			if (p1 > -1)
			{
				return t.substr(p0, p1 - p0);
			}			
		}
	}
	return "";
}
function x10dMultiValue_SetValue(id, key, value)
{
	//Does it exist allready - then remove it!
	var c = x10dGetControl(id);
	if (c != null)
	{
		var t = c.value;
		var tag = '#' + key + '>';
		var p0 = t.indexOf(tag);
		if (p0 > -1)
		{
			tag = '#/' + key + '>';
			var p1 = t.indexOf(tag, p0);
			p1 += tag.length;
			t = t.substr(0, p0) + t.substr(p1);
		}
		else
		{
			tag = '#' + key + ' />';
			p0 = t.indexOf(tag);
			if (p0 > -1)
			{
				t = t.substr(0, p0) + t.substr(p0 + tag.length);
			}
		}
		if (p0 == -1)
		{
			p0 = 0;
		}
		t = t.substr(0, p0) + '#' + key + '>' + value + '#/' + key + '>' + t.substr(p0);
		c.value = t;
	}
}

function x10dList_AddRowHtml(listID, rowsHtml)
{
	var table = x10dGetControl(listID + '_Items');
	//var rowHtml = '<tr id="lbCustomer_R0" dataID="102090" onclick="x10dList_Select(event,this);" ><td><nobr>Elgiganten</nobr></td><td><nobr>Stenhusvej 70</nobr></td><td>&nbsp;</td></tr><tr id="lbCustomer_R1" dataID="102091" onclick="x10dList_Select(event,this);" ><td><nobr>Elgiganten</nobr></td><td><nobr>Stenhusvej 70</nobr></td><td>&nbsp;</td></tr>';
	//Find each <tr . In each tr find each <td
	var p = -1;
	var rowNo = 0;
	while ((p = rowsHtml.indexOf('<tr ')) > -1)
	{
		var pEnd = rowsHtml.indexOf('</tr>');
		var rowHtml = rowsHtml.substr(p, pEnd - p + 5);
		rowsHtml = rowsHtml.substr(pEnd + 5);
		//Add row
		var row = table.insertRow(table.rows.length);
		row.id = listID + '_R' + rowNo;
		var pid = rowHtml.indexOf('dataID=');
		if (pid > -1)
		{
			pid = pid + 8;
			var pidend = rowHtml.indexOf('"', pid); 
			alert(pid + " - " + pidend);
			
			var id = rowHtml.substr(pid, pidend - pid);
			alert(id);
			row.dataID = id;
		}
		
		if (window.attachEvent)
		{	
			row.onclick = new Function("x10dList_Select(event,this);");
		}
		else
			x10dAttachEvent(row, "onclick", function(e){x10dList_Select(e,this);});
		
		//Add cells
		var pCell = rowHtml.indexOf('<td');
		if (pCell > -1)
		{
			var arCells = rowHtml.substr(pCell).split('<td>');
			for (var i = 0; i < arCells.length; i++)
			{
				if (arCells[i] == '') continue;
				var cell = row.insertCell(row.cells.length);
				var l = arCells[i].length;
				cell.innerHTML = arCells[i].substr(0, l - 5);
			}
		}
		rowNo++;
	}
	x10dList_Init(listID);
}



// ** x10dList **
var x10dListTimerActionRow = null;
var x10dListTimerID = null;
function x10dList_Init(listID, doPostBack, selectMethod)
{
	var list = x10dGetControl(listID);
	if (list == null) return;
	if (doPostBack != null) list.postback = doPostBack;
	if (selectMethod != null) list.SelectMethod = selectMethod;
	var tableHeader = x10dGetControl(listID + "_Header");
	var tableItems = x10dGetControl(listID + "_Items");
	tableHeader.style.width = tableItems.offsetWidth;
}
function x10dList_Key(e)
{
	var key = e.keyCode;
	if (key == 40 || key == 38)
	{
		switch (key)
		{
			case 38 :
				//Arrow up
				x10dList_ScrollRow(e, -1);
				return false;
			case 40 :
				//Arrow down
				x10dList_ScrollRow(e, 1);
				return false;
		}
	}
	return true;
}
function SetSrollRow()
{
	x10dListTimerID = null;
	x10dList_SelectAction(x10dListTimerActionRow);
	x10dListTimerActionRow = null;
}
function x10dList_ScrollRow(e, scrollNo)
{
	e.cancelBubble = true; 
	e.returnValue = false; 
	var grid = x10dGetEventSource(e); 
	while (grid != null && grid.tagName != "TABLE")
		grid = grid.parentNode;
	var listID = grid.id.substr(0, grid.id.length - 6); //xxx_Items
	var index = document.getElementById(listID).value;
	var nextSelectedIndex = parseInt(index) + parseInt(scrollNo);
	if (nextSelectedIndex < 0 || nextSelectedIndex >= grid.rows.length) return;
	if (x10dListTimerID != null)
	{
		x10dListClearTimeOut();
	}
	var item = grid.rows[nextSelectedIndex];
	x10dList_SetSelectedRow(item);
	x10dListTimerID = setTimeout("SetSrollRow()", 600);
	x10dListTimerActionRow = item;
}
function x10dList_GetSelectedIndex(listID)
{
	return document.getElementById(listID).value;
}
function x10dList_GetSelectedDataID(listID)
{
	var index = x10dList_GetSelectedIndex(listID);
	if (index != "" && index > -1)
	{
		//Get the item
		var itemID = listID + "_R" + index;
		var dataID = x10dGetAttrib(document.getElementById(itemID), "dataID");
		return dataID;
	}
	return "";
}
function x10dListClearTimeOut()
{
	clearTimeout(x10dListTimerID);
	x10dListTimerID = null;
	x10dListTimerActionRow = null;
}
function x10dList_ScrollIntoView(listID)
{
	var index = document.getElementById(listID).value;
	if (index != "" && index > -1)
	{
		var item = x10dList_GetItemFromIndex(listID, index);
		if (item != null)
		{
			var v = x10dList_IsInView(item.id, listID + '_Scroll');
			if (v != 0) item.scrollIntoView();
		}
	}
}
function x10dList_Select(evt,item)
{
	var source = x10dGetEventSource(evt);
	if (source.tagName == 'INPUT')
	{
		if (typeof(x10dList_CheckBoxClicked) == "object" || typeof(x10dList_CheckBoxClicked) == "function")
		{
			var dataID = x10dGetAttrib(item, "dataID");
			x10dList_CheckBoxClicked(source, x10dList_GetListIDFromItemID(item.id), item.id, dataID);
		}
		return;
	}
	x10dListTimerID = null;
	x10dList_SetSelectedRow(item);
	x10dList_SelectAction(item);
}
function x10dList_SetRowHTMLData(listID, rowData)
{
	x10dList_ClearList(listID);
	var panel = x10dGetControl('panellbLCContract');
	panel.innerHTML = s;
	x10dList_Init('lbLCContract', false, '');

}
function x10dList_SetSelectedRow(item)
{
	var itemID = item.id;
	var listID = x10dList_GetListIDFromItemID(itemID);
	var dataID = x10dGetAttrib(document.getElementById(itemID), "dataID");
	x10dList_ClearSelection(listID);
	var newIndex = x10dList_GetItemIndexFromItemID(itemID);
	var newItem = document.getElementById(listID + "_R" + newIndex);
	newItem.style.backgroundColor = "highlight";
	newItem.style.color = "white";
	var v = x10dList_IsInView(itemID, listID + '_Scroll');
	if (v != 0) newItem.scrollIntoView((v == -1));
	document.getElementById(listID).value = newIndex;
}
function x10dList_ClearSelection(listID)
{
	var oldIndex = document.getElementById(listID).value;
	if (oldIndex != "" && oldIndex > -1)
	{
		var oldItem = document.getElementById(listID + "_R" + oldIndex);
		if (oldItem != null)
		{
			oldItem.style.backgroundColor = "";
			oldItem.style.color = "";
		}
	}
	document.getElementById(listID).value = "";
}
function x10dList_SelectAction(item)
{
	var itemID = item.id;
	var listID = x10dList_GetListIDFromItemID(itemID);
	var dataID = x10dGetAttrib(document.getElementById(itemID), "dataID");

	if (typeof(x10dList_ItemSelected) == "object" || typeof(x10dList_ItemSelected) == "function")
	{
		x10dList_ItemSelected(listID, itemID, dataID);
	}
	var list = x10dGetControl(listID);
	if (list.SelectMethod != null && list.SelectMethod != "") eval(list.SelectMethod + "(listID, itemID, dataID);");
	var postback = list.postback;
	if (postback)
	{
		var newIndex = x10dList_GetItemIndexFromItemID(itemID);
		var uniqueID = x10dGetAttrib(x10dGetControl(listID), "name");
		__doPostBack(uniqueID, "x10dSel$R" + newIndex);
	}
}
function x10dList_GetCheckBoxDataIDs(listID, ctlNo)
{
	var index = 0;
	var arDataID = new Array();
	while (x10dExistControl(listID+'_ctl'+ctlNo+'_R'+index))
	{
		if (x10dGetControl(listID+'_ctl'+ctlNo+'_R'+index).checked)
		{
			var dataID = x10dGetAttrib(document.getElementById(listID + "_R" + index), "dataID");
			arDataID[arDataID.length] = dataID;
		}
		index++;
	}
	return arDataID;
}

function x10dList_GetListIDFromItemID(itemID)
{
	var pos = itemID.lastIndexOf("_R");
	if (pos > -1) return itemID.substr(0, pos);
	return "";
}
function x10dList_GetItemIndexFromItemID(itemID)
{
	var p = itemID.lastIndexOf("_");
	if (p > -1) return itemID.substr(p + 2);		
	return "-1";
}
function x10dList_GetItemFromIndex(listID, index)
{
	var itemID = listID + '_R' + index;
	return document.getElementById(itemID);
}
function x10dList_IsInView(objID, viewID)
{
	var obj = document.getElementById( objID );
	var scrollView = document.getElementById(viewID);
	var viewY1 = scrollView.scrollTop;
	var viewY2 = viewY1 + scrollView.offsetHeight;
	var objY1 = obj.offsetTop;
	var objY2 = objY1 + obj.offsetHeight;
	if (objY1 < viewY1) return -1
	if (objY2 > viewY2) return 1;
	return 0;
}
function x10dList_SetCellText(listID, index, cellNo, value)
{
	if (index == null || index == '' || index == -1) index = x10dList_GetSelectedIndex(listID);
	var row = x10dList_GetItemFromIndex(listID, index);
	if (row != null) row.cells[cellNo].innerHTML = "<nobr>" + value + "</nobr>";
}
function x10dList_ClearList(listID)
{
	//Dette virker ikke ved postback!!!
	var table = x10dGetControl(listID + '_Items');
	if (table == null) return;
	for(var i = table.rows.length - 1; i >= 0; i--)
	{    
		table.deleteRow(i);
	}
}
function x10dList_NoOfRows(listID)
{
	var table = x10dGetControl(listID + '_Items');
	if (table == null) return 0;
	return table.rows.length;
}
var x10dSyncCtrls = new Array();
function x10dSyncControl(e, primaryCtrl)
{
	var ctrl1 = null;
	if (primaryCtrl != null)
		ctrl1 = primaryCtrl;
    else
		ctrl1 = x10dGetEventSource(e);
	if (ctrl1 != null && x10dSyncCtrls[ctrl1.id] != null)
	{
		var arCtrlID2 = x10dSyncCtrls[ctrl1.id].split(',');
		for (var i = 0; i < arCtrlID2.length; i++)
		{
			var ctrl2 = x10dGetControl(arCtrlID2[i]);
			if (ctrl2 != null) {
				if (ctrl2.type == "radio" || ctrl2.type == "checkbox") {
					ctrl2.checked = ctrl1.checked;
				}
				else {
					ctrl2.value = ctrl1.value;
				}
			}
		}
	}
}
function x10dSyncControlInit(syncCtrls1, syncCtrls2)
{
	if (syncCtrls1 != "" && syncCtrls2 != "")
	{
		var arSyncID1 = syncCtrls1.split(',');
		var arSyncID2 = syncCtrls2.split(',');
		
		for (var i = 0; i < arSyncID1.length; i++)
		{
			//Hook up to onchange event
			x10dAddSyncControl(arSyncID1[i], arSyncID2[i]);
		}
	}
}
function x10dAddSyncControl(ctrl1, ctrl2) {
	ctrl1 = x10dGetControl(ctrl1);
	ctrl2 = x10dGetControl(ctrl2);

	if (ctrl1 != null && ctrl2 != null) {
		if (x10dSyncCtrls[ctrl1.id] == null) {
			x10dSyncCtrls[ctrl1.id] = "";
			x10dAttachEvent(ctrl1, "onchange", x10dSyncControl);
		}
		if (x10dSyncCtrls[ctrl2.id] == null) {
			x10dSyncCtrls[ctrl2.id] = "";
			x10dAttachEvent(ctrl2, "onchange", x10dSyncControl);
		}

		x10dSyncCtrls[ctrl1.id] = x10dSyncCtrls[ctrl1.id] + ctrl2.id + ",";
		x10dSyncCtrls[ctrl2.id] = x10dSyncCtrls[ctrl2.id] + ctrl1.id + ",";

		x10dSyncControl(null, ctrl1);
	}
}
function x10dHelpButtonInit(ctrlID, showForCtrlID)
{
	var c = x10dGetControl(showForCtrlID);
	if (c == null || c.style.visibility == "hidden" || c.style.display == "none")
	{
		c2 = x10dGetControl(ctrlID);
		if (c2 != null)
		{
			c2.style.visibility = "hidden";
			c2.style.display = "none";
		}
	}
}
function x10dHelpOpen(helpUID)
{
	//FIX Help funktionen er ikke færdigt - lige nu er en hardcoded, men mange af værdierne skal flyttes til parametre
	//FIX desuden skal denne metode flyttes til x10dCustomControl når der engang er lavet en Help custom control link!
	var url = "Help.aspx?HelpUID=" + helpUID;
	window.open(url, "Help", "width=300,height=500,scrollbars=1,resizable=1,status=1");
}
function x10dCP_CreateColorScheme()
{
	var colors = new Array('00','33','66','99','CC','FF');
	var color = new String();
	color = '<table cellspacing=3 cellpadding=0 border=0>';
	for (i = 5; i >= 0; i--) {
		if (i==5)
		{
			color = color + '<tr><td><table cellspacing=1 class="x10dCPgrid" border=0>';
		}
		if (i==2)
		{
			color = color + '<\/table></td><td><table cellspacing=1 class="x10dCPgrid" border=0>';
		}
		
		for (j = 5; j >= 0; j--) {
			color = color + '<tr>';
			for (k= 5; k >= 0; k--) {
				var col = colors[i]+colors[j]+colors[k];
				color = color + '<td class="x10dCPTD" style="background: #'+col+';"><a class="x10dCPA" href="javascript:x10dCP_SetColor(\'#'+col+'\');"><\/a><\/td>';
			}
			color = color + '<\/tr>';
		}
	}
	color = color + '</td></tr><\/table>';
	color = color + '<\/table>';
	x10dGetControl('panelx10dCPColor').innerHTML = color;
}

function x10dCP_SetRGB()
{
	var hex = x10dGetControl('tbx10dCPHex').value.toUpperCase();
	x10dGetControl('tbx10dCPHex').value = hex;
	pound=0;
	var hexidec = new Array();
	for (i=0;i<7;i++){
		hexidec[i]=hex.charAt(i);
		temp=hexidec[i];

		if (temp=='#')
			pound++;
		if (temp=='A')
			hexidec[i]=10;
		if (temp=='B')
			hexidec[i]=11;
		if (temp=='C')
			hexidec[i]=12;
		if (temp=='D')
			hexidec[i]=13;
		if (temp=='E')
			hexidec[i]=14;
		if (temp=='F')
			hexidec[i]=15;
	}
	red = ((hexidec[0+pound]*16)-(-hexidec[1+pound]));
	green = ((hexidec[2+pound]*16)-(-hexidec[3+pound]));
	blue = ((hexidec[4+pound]*16)-(-hexidec[5+pound]));
	
	x10dGetControl('tbx10dCPRed').value = red;
	x10dGetControl('tbx10dCPGreen').value = green;
	x10dGetControl('tbx10dCPBlue').value = blue;
	
	x10dCP_ShowColor();
}
function x10dCP_SetHex()
{
	var red = x10dGetControl('tbx10dCPRed').value;
	var green = x10dGetControl('tbx10dCPGreen').value;
	var blue = x10dGetControl('tbx10dCPBlue').value;

	var c="0123456789ABCDEF";

	if ((red < 256) && (green < 256) && (blue < 256))
	{
		with (Math) 
		{
			numOne=c.substring(floor(red/16),floor(red/16)+1);
			numTwo=c.substring(red%16,(red%16)+1);
			numThree=c.substring(floor(green/16),floor(green/16)+1);
			numFour=c.substring(green%16,(green%16)+1);
			numFive=c.substring(floor(blue/16),floor(blue/16)+1);
			numSix=c.substring(blue%16,(blue%16)+1);
		}
		var hex = "#"+numOne+""+numTwo+""+numThree+""+numFour+""+numFive+""+numSix;
		x10dGetControl('tbx10dCPHex').value = hex;
		x10dCP_ShowColor();
	}
}
function x10dCP_ShowColor()
{
	x10dGetControl('x10dCPShowColor').style.backgroundColor = x10dGetControl('tbx10dCPHex').value;
}
function x10dCP_SetColor(color) {
	x10dGetControl('x10dCPShowColor').bgColor = color;
	x10dGetControl('tbx10dCPHex').value = x10dGetControl('x10dCPShowColor').bgColor;
	x10dCP_SetRGB();
}
var colorTextBox = new String();

function x10dCP_ReturnSelectedColor()
{
	if (x10dGetControl('tbx10dCPHex').value != "")
	{
		if (typeof(x10dCP_ColorSelected) == 'function' || typeof(x10dCP_ColorSelected) != 'undefined')
		{
			x10dCP_ColorSelected(x10dGetControl('tbx10dCPHex').value);
		}
		else if (colorTextBox != "")
		{
			x10dGetControl(colorTextBox).value = x10dGetControl('tbx10dCPHex').value;
		}
	}
	x10dCP_HideCP();
}
function x10dCP_ShowCP(colorTextBoxCtrl, colorButton)
{
	colorTextBox = colorTextBoxCtrl;
	x10dGetControl('x10dCPColorPickerControl').style.visibility = "visible";	
	x10dGetControl('x10dCPColorPickerControl').style.left = x10d_GetRealLeft(colorButton);
	x10dGetControl('x10dCPColorPickerControl').style.top = x10d_GetRealTop(colorButton);
	if (x10dGetControl(colorTextBox).value != "")
	{
		x10dCP_SetColor(x10dGetControl(colorTextBox).value);
	}
}
function x10dCP_ShowPopUpCP(color, popupID, left, top, ctrlToPositionOverID)
{
	colorTextBox = "PopUpCP";
	x10dPop_Show(popupID, left, top, ctrlToPositionOverID);
	if (color != "")
	{
		x10dCP_SetColor(color);
	}
}
function x10dCP_HideCP()
{
	if (colorTextBox == "PopUpCP")
	{
		x10dPop_Hide();
	}
	else
	{
		x10dGetControl('x10dCPColorPickerControl').style.visibility = "hidden";	
	}
}
function x10dEditGridGetSum(gridID, ctrlID) {
	var sum = 0;
	var baseid = gridID + '__ctl';
	var count = 0;
	while (x10dExistControl(baseid + count + '_' + ctrlID)) {
		sum += GetNumValue(baseid + count + '_' + ctrlID);
		count++;
	}
	return sum;
}
var x10dTab_All = new Array();
//Initiering
function x10dTab_Init(tbcID, selectedIndex, panelIDs) {
	//Add a tabcontrol object to array
	x10dTab_All[tbcID] = x10dTab_All[x10dTab_All.length] = new x10dTab_New(tbcID, selectedIndex, panelIDs);
}
function x10dTab_New(tbcID, selectedIndex, panelIDs) {
	var tabControl = x10dGetControl(tbcID + "_tbc");
	this.id = tbcID;
	this.selectedIndex = selectedIndex;

	var arPanelIDs = new Array();
	var arPanelIDs = panelIDs.split(',');
	this.noOfTabs = arPanelIDs.length;

	//Tab page buttons
	var arTab = new Array();
	var arTabSep = new Array();
	//Tab page panel
	var arPanel = new Array();

	//Add events for each tab
	for (var i = 0; i < arPanelIDs.length; i++) {
		//Tabs
		var tab = x10dGetControl(tbcID + "_tb" + i);
		if (tab != null) {
			tab.tabPageNo = i;
			tab.tbcID = tbcID;
			//*CHECK
			//tab.attachEvent("onclick", x10dTab_TabClick);
			x10dAttachEvent(tab, "onclick", x10dTab_TabClick);

			//tab.attachEvent("onmouseover", x10dTab_TabMouseOver);
			x10dAttachEvent(tab, "onmouseover", x10dTab_TabMouseOver);

			//tab.attachEvent("onmouseout", x10dTab_TabMouseOut);
			x10dAttachEvent(tab, "onmouseout", x10dTab_TabMouseOut);

			//Tab seperators
			var tabSepID = tbcID + "_tbS" + i;
			tab.tabSepID = tabSepID;

			arTab[i] = tab;

			//Panels
			var panel = x10dGetControl(arPanelIDs[i]);
			arPanel[i] = panel;

			if (panel == null) {
				alert('Error: Tab page panel does not exist: ' + arPanelIDs[i]);
			}

			if (x10dGetAttrib(panel, 'ChangeParent') == 'true') {
				panel.parentNode.removeChild(panel);
				tabControl.parentNode.appendChild(panel);
			}

			//If style is not set on panels, set them
			panel.style.width = tabControl.style.width;
			panel.style.top = (parseInt(tabControl.style.top) + parseInt(tabControl.style.height)) + 'px';
			panel.style.left = tabControl.style.left;

		}
	}
	this.arTab = arTab;
	this.arPanel = arPanel;
}
function x10dTab_TabClick(e) {
	//*CHECK
	var tab = x10dGetEventSource(e);
	x10dTab_SelectTab(tab.tbcID, tab.tabPageNo);
}
function x10dTab_TabMouseOver(e) {
	//var tab = e.srcElement;
	var tab = x10dGetEventSource(e);
	if (tab.tabPageNo != x10dTab_GetCurTabPageNo(tab.tbcID)) {
		tab.className = "x10dTabHov";
		x10dGetControl(tab.tabSepID).className = "x10dTabSHov";
	}
}
function x10dTab_TabMouseOut(e) {
	//var tab = e.srcElement;
	var tab = x10dGetEventSource(e);
	if (tab.tabPageNo != x10dTab_GetCurTabPageNo(tab.tbcID)) {
		tab.className = "x10dTab";
		x10dGetControl(tab.tabSepID).className = "x10dTabS";
	}
}
function x10dTab_SelectTab(tbcID, selectedIndex) {
	var tbc = x10dTab_All[tbcID];
	//Nuværende tab og panel
	var curTab = tbc.arTab[tbc.selectedIndex];
	var curPanel = tbc.arPanel[tbc.selectedIndex];
	//Nye
	var newTab = tbc.arTab[selectedIndex];
	var newPanel = tbc.arPanel[selectedIndex];
	//Gem gammel
	curTab.className = "x10dTab";
	x10dGetControl(curTab.tabSepID).className = "x10dTabS";
	curPanel.style.visibility = "hidden";
	curPanel.style.display = "none";
	//Vis ny
	newTab.className = "x10dTabSel";
	x10dGetControl(newTab.tabSepID).className = "x10dTabSSel";
	newPanel.style.visibility = "visible";
	newPanel.style.display = "";

	tbc.selectedIndex = selectedIndex;
	x10dTab_SetCurTabPageNo(tbcID, selectedIndex);
	x10dSetFirstFocus(newPanel);
}
function x10dTab_GetCurTabPageNo(tbcID) {
	return x10dGetControl(tbcID).value;
}
function x10dTab_SetCurTabPageNo(tbcID, selectedIndex) {
	x10dGetControl(tbcID).value = selectedIndex;
}function x10dValidatorInit(val)
{
	var evalFunc = val.evaluationfunction ;
	val.className = "x10dVal";
	var msg = "";
	
	if (val.errormessage == null)
	{
		val.errormessage = x10dValGetErrorMessage(evalFunc);
		val.innerText = val.errormessage;
	}
}
function x10dValGetErrorMessage(evalFunc)
{
	if (evalFunc == "x10dNumberEvaluateIsValid")
		return x10dErrMsgNum;
	else if (evalFunc == "x10dDateEvaluateIsValid")
		return x10dErrMsgDate;
}
function xValNum(id, type, usegroup, digits) {
	var c = x10dGetControl(id);
	if (c != null)
	{
		c.evaluationfunction = "x10dNumberEvaluateIsValid";
		c.type = type;
		c.decimalchar = x10dNumberDecimalSeparator;
		c.groupchar = x10dNumberGroupSeparator;
		
		if (type == "Currency")
		{
			c.digits = 2;
			c.useGroup = "true";
		}
		else if (type == "Integer")
		{
			c.digits = 0;
			c.useGroup = (usegroup == 1) ? "true" : "false";
		}
		else
		{
			c.digits = (digits == null) ? 0 : digits;
			c.useGroup = (usegroup == 1) ? "true" : "false";
		}
		
		if (type == "Integer") {
			c.maxValue = Math.pow(10, 9);
		}
		else
		{
			var mm = 18 - c.digits;
			if (mm > 15) mm = 15;
			c.maxValue = Math.pow(10, mm) - 1;
		}
	}
}

// ** Date **
function x10dGetYear(year)
{
	if (year == null || year.length > 2) return year;
	var y = Number(year);
	if (isNaN(y)) return year;
	if (y > 80) return "19" + x10dPadText(String(y), 2, "0");
	return "20" + x10dPadText(String(y), 2, "0");
}
function x10dDateEvaluateIsValid(val) 
{
	var value = ValidatorGetValue(dom_getAttribute(val, "controltovalidate"));
	if (value == "") return true;

	if (dom_getAttribute(val, "format") == "Time")
	{
		if (value.length == 4) 
			value = value.substr(0,2) + ":" + value.substr(2,2);
		var arTime = value.split(":");
		if (arTime.length < 2 || arTime.length > 3) return false;
		if (isNaN(arTime[0]) || arTime[0] < 0 || arTime[0] > 24 || arTime[0].length != 2) return false;
		if (isNaN(arTime[1]) || arTime[1] < 0 || arTime[1] > 59 || arTime[1].length != 2) return false;
		if (arTime.length == 3 && (isNaN(arTime[2]) || arTime[2] < 0 || arTime[2] > 99 || arTime[2].length != 2)) return false;
		window.document.getElementById(dom_getAttribute(val, "controltovalidate")).value = value;
		return true;
	}

	var dateTypeFormat = dom_getAttribute(val, "format");
	var myDate = null;
	if (value == "t" || value == "d")
	{
		myDate = new Date();
	}
	else if (value.substr(0, 1) == "-" || value.substr(0, 1) == "+")
	{
		var addDays = Number(value);
		if (!isNaN(addDays))
		{
			myDate = new Date();
			myDate.setDate(myDate.getDate() + addDays);
		}
	}
	else if (value.length < 3)
	{
		var day = Number(value);
		if (!isNaN(day))
		{
			myDate = new Date();
			myDate.setDate(day);
		}
	}
	else {
		var ar = value.split(x10dDateSeparator);
		if (ar.length == 1)
		{
			if (value.length == 6 || value.length == 8)
			{
				if (x10dDateOrder == "ymd")
				{
					var le = value.length;						
					ar[0] = value.substr(0, le - 4);
					ar[1] = value.substr(le - 4, 2);
					ar[2] = value.substr(le - 2, 2);
				}
				else
				{
					ar[0] = value.substr(0,2);
					ar[1] = value.substr(2,2);
					ar[2] = value.substr(4);
				}
			}
		}
		if (ar.length > 1)
		{
			if (x10dDateOrder == "ymd")
				ar[0] = x10dGetYear(ar[0]);
			else
				ar[2] = x10dGetYear(ar[2]);

			var tDate = ar.join(x10dDateSeparator);
			var msDate = ValidatorConvert(tDate, "Date", val);
			if (msDate != null) myDate = new Date(msDate);
		}
	}
	if (myDate != null)
	{
		if (dateTypeFormat == "DateFirstOf" && myDate.getDate() != 1) return false;

		var day = myDate.getDate();
		day = x10dPadText(String(day), 2, "0");
		//if (day < 10) day = "0" + String(day);
		var month = myDate.getMonth() + 1;
		month = x10dPadText(String(month), 2, "0");
		//if (month < 10) month = "0" + String(month);
		var strDate = (x10dDateOrder == "ymd") ? myDate.getFullYear() + x10dDateSeparator + month + x10dDateSeparator + day : day + x10dDateSeparator + month + x10dDateSeparator + myDate.getFullYear();
		window.document.getElementById(dom_getAttribute(val, "controltovalidate")).value = strDate;
		return true;
	}
	return false;		
}

// ** CVR **
function x10dCVREvaluateIsValid(val) {
	var cvr = ValidatorGetValue(dom_getAttribute(val, "controltovalidate"));	
	if (cvr == "") return true;
	cvr = cvr.replace(/\s+/g, "");
	//Get method - kan nok optimeres
	var length = "";
	var method = null;
	var countryCode = "";
	if (val.CountryCodeControl != null && x10dExistControl(val.CountryCodeControl))
	countryCode = x10dGetControl(val.CountryCodeControl).value;
	var methods = val.ValMethods != null ? val.ValMethods.split(';') : null;
	if (methods != null)
	{
		for (var i=0; i < methods.length; i++)
		{
			var pos = methods[i].indexOf('=');
			if (methods[i].substr(0, pos + 1).toLowerCase() == countryCode.toLowerCase() + '=')
			{
				method = methods[i].substr(countryCode.length + 1);
				var ar = method.split('#');
				method = ar[0];
				length = ar[1];
			}
		}
	}
	if (length != '' && length > 0 && length != cvr.length) return false;
	var ok = method == null || method == '';
	if (method == 'Mod11' && x10dModulus11EvaluateIsValid(cvr)) ok = true;
	if (method == 'Mod10' && x10dModulus10EvaluateIsValid(cvr)) ok = true;
	if (ok) window.document.getElementById(dom_getAttribute(val, "controltovalidate")).value = cvr;
	return ok;
}
function x10dCPREvaluateIsValid(val) {
  var cpr = ValidatorGetValue(dom_getAttribute(val, "controltovalidate"));
  if (cpr == "") return true;
  var length = val.ValLength;
  if (length != '' && length > 0 && length != cpr.length) return false;
  if (val.ValMethod == 'Mod11') return x10dModulus11EvaluateIsValid(cpr);
  if (val.ValMethod == 'Mod10') return x10dModulus10EvaluateIsValid(cpr);
  return true;
}
function x10dModulusEvaluateIsValid(val) {
  var text = ValidatorGetValue(dom_getAttribute(val, "controltovalidate"));
  if (text == "") return true;
  if (val.RemoveSpace != null && val.RemoveSpace.toUpperCase() == "TRUE") text = text.replace(" ", "");
  var length = val.TextLength;
  if (length != '' && length > 0 && length != text.length) return false;
  if (val.ModulusMethod == null || val.ModulusMethod == '') return true;
  var modMethods = val.ModulusMethod.split(',');
  var ok = false;
  for (var i = 0; i < modMethods.length; i++)
  {
	if (modMethods[i] == 'Mod11')
	{
		if (x10dModulus11EvaluateIsValid(text)) ok = true;
	}
	else if (modMethods[i] == 'Mod10') 
	{
		if (x10dModulus10EvaluateIsValid(text)) ok = true;
	}
  }
  if (ok) window.document.getElementById(dom_getAttribute(val, "controltovalidate")).value = text;
  return ok;
}
function x10dPreciseLengthEvaluateIsValid(val) 
{
	var value = ValidatorGetValue(dom_getAttribute(val, "controltovalidate"));
	if (value == "") return true;
	var ctrlToValidate = window.document.getElementById(dom_getAttribute(val, "controltovalidate"));
	var length = dom_getAttribute(ctrlToValidate, "maxlength");
	return (value.length == length);
}

function x10dModulus11EvaluateIsValid(digits) 
{
   var sum = 0;
   var weight = 1;
   var numvar = 0;
   for(var i = digits.length - 1; i >= 0; i--)
   {
     numvar = parseInt(digits.charAt(i));
     sum += (numvar * weight);
     weight++;
     if (weight > 7) weight = 2;
   }
   return sum % 11 == 0;
}
function x10dModulus10EvaluateIsValid(digits) 
{
   var sum = 0;
   var alt = false;
   var numvar = 0;
   for(var i = digits.length - 1; i >= 0; i--)
   {
     numvar = parseInt(digits.charAt(i));
     if(alt)
     {
       numvar *= 2;
       if(numvar > 9)
       {
         numvar -= 9;
       }
     }
     sum += numvar;
     alt = !alt;
   }
   return sum % 10 == 0;
}
function RoundToDecimals(x, n) {
    return (Math.round(x * Math.pow(10, n))) / Math.pow(10, n);
}
function x10dNumberEvaluateIsValid(val)
{
	var num, cleanInput, m, exp, op;
	var maxValue = dom_getAttribute(val, "maxValue");
	var valdigits = dom_getAttribute(val, "digits");
	op = ValidatorGetValue(dom_getAttribute(val, "controltovalidate"));
	if (op == "") return true;
	var decimalChar = dom_getAttribute(val, "decimalchar");
	var groupChar = dom_getAttribute(val, "groupchar");
	//Fjern tusind seperator
	op = op.replace(new RegExp("(\\" + groupChar + ")", "g"), "");
	//Konverter til double
	op = ValidatorConvert(op, "Double", val);
	if (op == null ) return false;
	//Round to max decimals
	op = RoundToDecimals(op,valdigits);
	exp = new RegExp("^\\s*([-\\+])?(\\d+)?(\\.(\\d+))?\\s*$");
	op = String(op);
	m = op.match(exp);
	m = x10dCleanMatchResult(m);
	if (m == null) return false;
	cleanInput = m[1] + (m[2].length>0 ? m[2] : "0") + "." + m[4];
	if (isNaN(parseFloat(cleanInput))) return false;
	if (cleanInput > maxValue) 
	{
		return false;
	}
	if (dom_getAttribute(val, "usegroup") == "true" || dom_getAttribute(val, "type") == "Currency")
	{
		var intPart = "";
		for (var i = m[2].length; i > 3; i = i-3) {
			intPart = groupChar + m[2].substr(i-3,3) + intPart;
		} 
		m[2] = m[2].substr(0,i) + intPart;
	}
	if (dom_getAttribute(val, "type") == "Integer" || valdigits == "0")
		cleanInput = m[1] + (m[2].length>0 ? m[2] : "0");
	else
	{
		//Adds digit zeroes
		while (m[4].length < valdigits)
			m[4] = m[4] + "0";
		cleanInput = m[1] + (m[2].length>0 ? m[2] : "0") + decimalChar + m[4];
	}
	window.document.getElementById(dom_getAttribute(val, "controltovalidate")).value = cleanInput;
	return true;
}
function x10dCleanMatchResult(m)
{
	if (m != null)
	{
		for (var i = 0; i < m.length; i++)
		{
			if (m[i] == undefined)
			{
				m[i] = "";
			}
		}
	}
	return m;
}
/** RMF Validation **/
function x10dRMFValidationExist() {}
var rmfControl = '';
var rmfBackColor = '';
var rmfBackColorNone = '';
function rmfInit(controlToValidate, backColor, backColorNone)
{
	if (typeof(document.getElementById(controlToValidate)) == 'undefined')
	{
		alert('The control to validate is missing: ' + controlToValidate);
		return false;
	}
	else
	{
		rmfControl = document.getElementById(controlToValidate);
		rmfBackColor = backColor;
		rmfBackColorNone = backColorNone;
		rmfSetBackColor();
	}
}
function rmfEvaluateIsValid(val) {
    var arControls = rmfGetControls();
    var missingControls = '';
    var ignoreIndex = rmfFindControl(arControls, 'rmfIgnore');
    if (ignoreIndex > -1) {
        return true;
    }
    var emptyFound = false;
    for ($i = 0; $i < arControls.length; $i++) {
        var ctrl = document.getElementById(arControls[$i]);
        if (ctrl != null) {
            if (ctrl.type == 'radio') {
                if (x10dGetSelectedRadioButton(ctrl.name) == null) emptyFound = true;
            }
            else if (ctrl.value == '' && !rmfIsControlIgnored(arControls, ctrl.id)) {
                emptyFound = true;
            }
        }
    }
    if (emptyFound) {
        rmfFocusNo = $i;
        setTimeout("rmfSetFocus()", 300);
        return false;
    }
    return true;
}


function rmfSetBackColor(backColor)
{
	var arControls = rmfGetControls();
	for (var i = 0; i < arControls.length; i++)
	{
		var controlID = arControls[i];
		var c = x10dGetControl(controlID);
		//if (document.getElementById(controlID) != null && typeof(document.getElementById(controlID)) == 'object' &&  !rmfIsControlIgnored(arControls, controlID))
		if (c != null &&  !rmfIsControlIgnored(arControls, controlID))
		{
			c.style.backgroundColor = backColor != null ? backColor : rmfBackColor;
			//c.style.backgroundColor = '';
			/*
			if (c.type == 'text')
			{
				c.style.border = 'solid 1px blue';
			}
			*/
		/*
			if (backColor != null && backColor != "")
			{
				document.getElementById(controlID).style.backgroundColor = backColor;
			}
			else
			{
				document.getElementById(controlID).style.backgroundColor = rmfBackColor;
			}
			*/
		}
	}
}

function rmfSetIgnore(ignore)
{
	if (ignore)
		rmfAddControl('rmfIgnore');
	else
		rmfRemoveControl('rmfIgnore');
}
function rmfSetIgnoreControl(controlID, ignore)
{
	if (ignore)
	{
		rmfAddControl('#' + controlID);
	}
	else
	{
		rmfRemoveControl('#' + controlID);
	}
}
function rmfIsControlIgnored(arControls, controlID)
{
	return rmfFindControl(arControls, '#' + controlID) > -1;	
}

var rmfFocusNo;
function rmfSetFocus()
{
	var arControls = rmfGetControls();
	if (rmfFocusNo < arControls.length)
	{
		try
		{
			var ctrl = document.getElementById(arControls[rmfFocusNo]);
			ctrl.focus();
		}
		catch (ex)
		{
			rmfFocusNo++;
			rmfSetFocus();
		}
	}
}
function rmfAddControl(controlID)
{
	//Get the controls
	var arControls = rmfGetControls();
	//Check if the control allready "exist"
	if (rmfFindControl(arControls,controlID)==-1)
	{
		if (x10dExistControl(controlID) || controlID == 'rmfIgnore')
		{
			arControls.push(controlID);
			rmfSetControls(arControls);
			if (x10dExistControl(controlID)) document.getElementById(controlID).style.backgroundColor = rmfBackColor;
		}
		else if (controlID.substr(0,1) == '#')
		{

			arControls.push(controlID);
			rmfSetControls(arControls);
			controlID = controlID.substr(1);
			if (x10dExistControl(controlID)) document.getElementById(controlID).style.backgroundColor = rmfBackColorNone;
		}
	}
	else
	{
		if (x10dExistControl(controlID)) document.getElementById(controlID).style.backgroundColor = rmfBackColor;		
	}
}
function rmfRemoveControl(controlID)
{
	//Get the controls
	var arControls = rmfGetControls();
	//Check if the control allready "exist"
	var index = rmfFindControl(arControls,controlID);
	if (index > -1)
	{
		arControls.splice(index,1);
		rmfSetControls(arControls);
		if (x10dExistControl(controlID))
		{
			document.getElementById(controlID).style.backgroundColor = rmfBackColorNone;
		}
		else if (controlID.substr(0,1) == '#')
		{
			controlID = controlID.substr(1);
			rmfAddControl(controlID);
		}
	}
}
function rmfUpdateControls(controlIDs) {
	var arNew = controlIDs.split(',');
	var arOld = rmfGetControls();
	var i = 0;
	for (i = 0; i < arOld.length; i++) {
		rmfRemoveControl(arOld[i]);
	}
	rmfSetControls(arNew);
	rmfSetBackColor();
}
function rmfGetControls()
{
	var controls = rmfControl.value;
	if (controls != "")
	{
		return controls.split(',');
	}
	else
	{
		return new Array(0);	
	}
}
function rmfSetControls(arControls)
{   
	rmfControl.value = arControls.join(',');
}
function rmfFindControl(arControls, controlID) {
  for (i=0; i < arControls.length; i++) {
    if (arControls[i] == controlID) {
      return i;
    }
  }
  return -1;
}
/** Lock/Warn validation **/
var arValidatorInfoCtrl = new Array();
var validatorInfoCtrlID = "";
function ValidatorAddInfo(ctrlID, locked, type, message, remember)
{
	var ctrl = x10dGetControl(ctrlID);
	if (ctrl != null)
	{
		if (type != 1)
		{
			var info = document.createElement("div");
			info.style.padding = "1px";
			info.style.cursor = "pointer";
			var infoStyle = "x10dValidatorInfoWarn";
			if (locked)
				infoStyle = "x10dValidatorInfoLock";
			info.innerHTML = "<table border='0' cellspacing='0'><tr><td class ='" + infoStyle + "Img'></td><td class ='" + infoStyle + "' style='display:none;'>" + message + "</td></table>";
			info.style.zIndex = Number(ctrl.style.zIndex) + 100;
			info.style.position = ctrl.style.position;
			
			var top = 0;
			var left = 0;
			if (ctrl.style.position == 'absolute')
			{
				left = parseInt(ctrl.style.left);
				top = parseInt(ctrl.style.top);
			}
			else
			{
				left = ctrl.offsetLeft;
				top = ctrl.offsetTop;
			}
			left = left + ctrl.offsetWidth;
			info.style.left = left + 'px';
			info.style.top = top + 'px';
			ctrl.parentNode.appendChild(info);
			
			x10dAttachEvent(info, "onclick", ValidatorShowInfoMessage);
			x10dAttachEvent(info, "onmouseover", ValidatorShow);
			x10dAttachEvent(info, "onmouseout", ValidatorHide);
			arValidatorInfoCtrl[arValidatorInfoCtrl.length] = info;
		}
		if (type != 2)
		{
			var view = x10dGetControl(validatorInfoCtrlID + "View");
			if (view.innerHTML == "") view.innerHTML = "<ul></ul>";
			view.innerHTML = view.innerHTML.substr(0, view.innerHTML.length - 5) + "<li>" + message + "</li></ul>";
			view.style.display = "";
		}
		
		if (remember)
		{
			var c = x10dGetControl(validatorInfoCtrlID);
			c.value += "#" + ctrlID + ";" + locked + ";" + message;
		}
	}
}
function ValidatorShow(e)
{

	ValidatorGetInfoCtrl(e).childNodes[0].rows[0].cells[1].style.display = "";
}
function ValidatorHide(e)
{
	ValidatorGetInfoCtrl(e).childNodes[0].rows[0].cells[1].style.display = "none";
}
function ValidatorInitInfo(ctrlID)
{
	validatorInfoCtrlID = ctrlID;
}
function ValidatorShowInfoMessage(e)
{
	var msg = ValidatorGetInfoCtrl(e).childNodes[0].rows[0].cells[1].innerHTML;
	alert(msg.replace('<BR>', '\n'));
}
function ValidatorClearInfo()
{
	for (i=0;i<arValidatorInfoCtrl.length;i++)
	{
		var info = arValidatorInfoCtrl[i];
		info.parentNode.removeChild(info);
	}
	arValidatorInfoCtrl = new Array();
	var view = x10dGetControl(validatorInfoCtrlID + "View");
	if (view != null)
	{
		view.innerHTML = "";
		view.style.display = "none";
	}
}
function ValidatorGetInfoCtrl(e)
{
	var ctrl = x10dGetEventSource(e);
	while (ctrl != null && ctrl.tagName != "DIV")
		ctrl = ctrl.parentNode;
	return ctrl;
}
function x10dGridSyncDummySize(gn)
{
	var dummy = document.getElementById(gn + "_SpacerDiv");
	var mainTable = document.getElementById(gn + "_MainTable");
	if (dummy != null && mainTable != null)
	{
		var width = x10dGridGetTableWidth(mainTable);
		if (isNaN(width)) width = 0;
		dummy.style.width = width;
		
		var height = x10dGridGetTableHeight(mainTable);
		dummy.style.height = height;
	}
}

//0-left 1-top 2-right 3-bottom
function x10dGridGetBorderWidth(table, border)
{
	var borderstyle;
	var borderwidth;
	
	switch(border)
	{
		case 0:	borderstyle=table.style.borderLeftStyle; borderwidth=table.style.borderLeftWidth;break;
		case 1:	borderstyle=table.style.borderTopStyle;	borderwidth=table.style.borderTopWidth;	break;
		case 2:	borderstyle=table.style.borderRightStyle; borderwidth=table.style.borderRightWidth;	break;
		case 3:	borderstyle=table.style.borderBottomStyle; borderwidth=table.style.borderBottomWidth; break;
	}
	
	if (borderstyle)
	{
		if (borderstyle!="none" && borderwidth)
			return parseInt(borderwidth);
	}else
	{
		borderwidth=table.border;
		if (borderwidth)	
			return parseInt(borderwidth);
	}
	
	return 0;
}

function x10dGridGetTableWidth(table)
{	
	var colWidth=0;
	if (table!=null && table.rows.length>0)
	{
		var cellspacing = 0;
		if (table.cellSpacing)
			cellspacing = parseInt(table.cellSpacing);

		colWidth = x10dGridGetBorderWidth(table, 0) + x10dGridGetBorderWidth(table, 2);
		
		var colGroup = x10dGetColGroupFromTable(table);
		
		if (colGroup != null && colGroup.tagName=="COLGROUP")
		{
			for(var i=0; i< colGroup.childNodes.length; i++)
			{
				var col = colGroup.childNodes[i];
				if (col.style.display == "")
					colWidth += parseInt(col.width) + cellspacing;
			}
		}
		else
		{
			if (table.rows.length>0)
			{	
				var firstRow = table.rows[0];
				for(var i=0; i < firstRow.cells.length; i++)
				{
					var col = firstRow.cells[i];
					if(col.style.display == "" && col.offsetWidth>0)
					{
						colWidth += col.offsetWidth + cellspacing;
					}
				}
			}
		}
	}

	return colWidth;
}

function x10dGridGetTableHeight(table)
{	
	var rowHeight=0;
	
	if (table!=null && table.rows!=null)
	{
		var cellspacing = 0;
		if (table.cellSpacing)
			cellspacing = parseInt(table.cellSpacing);

		rowHeight = x10dGridGetBorderWidth(table, 1) + x10dGridGetBorderWidth(table, 3);

		for(var i=0; i < table.rows.length; i++)
		{
			var row = table.rows[i];
			if(row.style.display=="" && row.offsetHeight>0)
				rowHeight+=row.offsetHeight + cellspacing;
		}
	}
	
	return rowHeight;
}

function x10dGridResetPos(gn)
{
	var spacerDiv = document.getElementById(gn + "_SpacerDiv");
	if (spacerDiv!=null)
	{
		spacerDiv.style.left=0;
		spacerDiv.style.top=0;
	}

	var headerDiv = document.getElementById(gn + '_HeaderDiv');
	if (headerDiv != null)
	{
		headerDiv.style.left=0;
		headerDiv.style.top=0;
	}

	var itemDiv = document.getElementById(gn + 'Div');
	if (itemDiv != null)
	{
		itemDiv.style.left=0;
		itemDiv.style.top=0;
	}
}

function x10dGridSyncMainDivSize(gn)
{
	var scrollDiv = document.getElementById(gn + "_ScrollDiv");
	var mainDiv = document.getElementById(gn + "_MainDiv");
	
	if ((scrollDiv != null) && (mainDiv != null))
	{
		mainDiv.style.left = scrollDiv.offsetLeft;
		mainDiv.style.top = scrollDiv.offsetTop;
		mainDiv.style.width = scrollDiv.clientWidth;
		mainDiv.style.height = scrollDiv.clientHeight;
	}
}

function x10dGetColGroupFromTable(ctrl)
{
	var child = null;
	if (ctrl.childNodes[0].nodeType == 1)
		return ctrl.childNodes[0];
	else
		return ctrl.childNodes[1];
}

function x10dGridSyncMainTable(gn)
{
	var totalwidth = 0;
	var totalheight = 0;	
	var mainTable = document.getElementById(gn + "_MainTable");
	var maindiv = document.getElementById(gn + "_MainDiv");
	
	if (maindiv!=null)
	{
		var colGroups = x10dGetColGroupFromTable(mainTable);

		if (colGroups!=null && colGroups.tagName=="COLGROUP")	
		{
			var width;
			var itemTable = document.getElementById(gn);
			width = x10dGridGetTableWidth(itemTable);
			totalwidth += width;
			
			colGroups.childNodes[0].width=(width==0) ? "" : width;
		}

		if (mainTable.rows.length==2)
		{
			var height;
			if (mainTable.rows[0].style.display != "none")
			{
				//Header table
				var headerTable = document.getElementById(gn + "_HeaderTable");
				height = x10dGridGetTableHeight(headerTable);	
				totalheight = height;
				mainTable.rows[0].style.height = (height==0) ? "" : height;
			}
			//Item table
			var itemTable = document.getElementById(gn);
			height = x10dGridGetTableHeight(itemTable);
			totalheight += height;
			mainTable.rows[1].style.height=(height==0) ? "" : height;
		}
		
		mainTable.style.left=0;
		mainTable.style.top=0;
		mainTable.style.width = (totalwidth==0) ? "" : totalwidth;
		mainTable.style.height = (totalheight==0) ? "" : totalheight;

		/*
		maindiv.firstChild.style.left=0;
		maindiv.firstChild.style.top=0;
		maindiv.firstChild.style.width=(totalwidth==0) ? "" : totalwidth;
		maindiv.firstChild.style.height=(totalheight==0) ? "" : totalheight;
		*/
	}
}

var savedTop=0;
var savedLeft=0;

function x10dGridOnScroll(e, scrollDiv)
{
	
	if (scrollDiv == null)
	{
		scrollDiv = x10dGetEventSource(e); // gridname_ScrollDiv
	}
	
	while (scrollDiv != null && scrollDiv.tagName != "DIV")
	{
		scrollDiv = scrollDiv.parentNode;
	}
	
	var pos = scrollDiv.id.indexOf('_');
	var gn = scrollDiv.id.substr(0, pos);

	if (scrollDiv != null)
	{
    	if (scrollDiv.scrollLeft!=savedLeft)
		{
			var headerTable = document.getElementById(gn + '_HeaderTable');
			if (headerTable != null)
				headerTable.style.left = -scrollDiv.scrollLeft;

			var itemTable = document.getElementById(gn);
			if (itemTable != null)
				itemTable.style.left = -scrollDiv.scrollLeft;

			savedLeft = scrollDiv.scrollLeft;
		} 

    	if (scrollDiv.scrollTop!=savedTop)
		{
			
			var itemTable = document.getElementById(gn);
			if (itemTable != null)
				itemTable.style.top = -scrollDiv.scrollTop;

			savedTop = scrollDiv.scrollTop;
		}
	}
}

function x10dGridLayOut(gn)
{
	x10dGridSyncMainTable(gn);
	x10dGridSyncDummySize(gn);
	x10dGridResetPos(gn);
	x10dGridSyncMainDivSize(gn);
}

function x10dGridReLayout(gn)
{
	x10dGridSyncMainTable(gn);
	x10dGridSyncDummySize(gn);
	x10dGridSyncMainDivSize(gn);
}

function x10dGridScrollDivResize(e, scrollDiv)
{
	if (scrollDiv == null)
	{
	//Get the gridname...
		scrollDiv = x10dGetEventSource(e); 
	}

	var pos = scrollDiv.id.indexOf('_');
	var gn = scrollDiv.id.substr(0, pos);

	x10dGridReLayout(gn);

	if (scrollDiv != null)
	{
    		scrollDiv.scrollLeft = 0;
    		scrollDiv.scrollTop = 0;
	}
}

function x10dGridScrollDivResizeM()
{
	for (var i = 0; i < x10dGridScrollDivArray.length; i++)
	{
		x10dGridScrollDivResize(null, x10dGridScrollDivArray[i]);		
	}
}
/*
function x10dGridMouseOver(e)
{
	var ctrl = x10dGetEventSource(e);
	
	if (ctrl.tagName == "TD" && ctrl.innerText != null && ctrl.innerText.length > 5)
	{
		document.getElementById('tbSuperSearch').value = ctrl.innerText;
	}
}
*/

var x10dGridScrollDivArray = new Array();
function x10dGridInit(gridID, rowSelect)
{
	var gridTable = document.getElementById(gridID);
	if (gridTable == null) return;

	gridTable.style.position = "relative";
	gridTable.style.left = "0px";
	gridTable.style.top = "0px";
	if (gridTable.tabIndex == -1) gridTable.tabIndex = 0;
	
	x10dGridLayOut(gridID);
	x10dGridReLayout(gridID);

	var scrollDiv = document.getElementById(gridID + '_ScrollDiv');
	x10dGridScrollDivArray[x10dGridScrollDivArray.length] = scrollDiv;
	
	var _val_agt=navigator.userAgent.toLowerCase();	
	var _val_is_ie = ((_val_agt.indexOf("msie")!=-1) && (_val_agt.indexOf("opera")==-1));
	if (_val_is_ie)
	{
		x10dAttachEvent(scrollDiv, "onresize", x10dGridScrollDivResize);
	}
	else
	{
		x10dAttachEvent(window, "onresize", x10dGridScrollDivResizeM);
	}
	
	//The event is set directly on the scroll div - so it works in firefox!
	x10dAttachEvent(scrollDiv, "onscroll", x10dGridOnScroll);
	
	//Activate row select
	if (rowSelect == "Server")
	{
		x10dAttachEvent(gridTable, "onclick", x10dGridServerRowSelect);
	}
	else if (rowSelect == "Client")
	{
		x10dAttachEvent(gridTable, "onclick", x10dGridClientRowSelect);
		x10dAttachEvent(gridTable, "onkeydown", x10dGridOnKeyDown);
	}
	
	//Set column resize postdata
	var headerTable = document.getElementById(gridID + '_HeaderTable');
	for (i = 0; i < headerTable.rows[0].cells.length; i++)
	{
		if (i == 1)
			Drag.init(headerTable.rows[0].cells[i], "gurli");
		else
			Drag.init(headerTable.rows[0].cells[i], gridID);
	}

	gridTable.x10dRow = new Array();

	var selectedIndex = x10dGridGetSelectedIndex(gridID);
	if (selectedIndex > -1) {
		var selectedRow = gridTable.rows[selectedIndex];
		x10dGridSetSelectedIndex(gridID, -1);
		x10dGridSetSelectedRow(selectedRow);
	}
	else
		x10dGridScrollIntoView(gridID);
}

function c1g_findPosX(o)
{
	if (typeof(o) != 'object' || o == null)
		return 0;
	else
		return o.offsetLeft + c1g_findPosX(o.offsetParent);
}

function x10dGridSetSelectedIndex(gridID, index)
{
	var data = x10dGridGetPostData(gridID);
	var arData = data.split(';');
	arData[0] = index;
	x10dGridSetPostData(gridID, arData.join(';'));
}
function x10dGridGetSelectedIndex(gridID)
{
	var data = x10dGridGetPostData(gridID);
	var arData = data.split(';');
	return arData[0];
}
function x10dGridGetPostData(gridID)
{
	return document.getElementById(gridID + "_PostData").value;
}

function x10dGridSetPostData(gridID, postData)
{
	document.getElementById(gridID + "_PostData").value = postData;
}

function x10dGridScrollIntoView(gridID)
{
	var itemTable = document.getElementById(gridID);
	var selectedIndex = x10dGridGetSelectedIndex(gridID);

	if (itemTable != null && selectedIndex != "" && selectedIndex > -1)
	{
		var selectedRow = itemTable.rows[selectedIndex];
		//Only scroll if the row is outside the scroll ScrollDiv
		if (selectedRow != null && selectedRow.className.indexOf('SelectedRow') > -1 )
		{
			var scrollDiv =  document.getElementById(gridID + "_ScrollDiv");
			var clientHeight = scrollDiv.offsetHeight - document.getElementById(gridID + "_HeaderDiv").offsetHeight;

			if (selectedRow.offsetTop < scrollDiv.scrollTop)
			{
				//Scroll to top
				scrollDiv.scrollTop = selectedRow.offsetTop;
				x10dGridOnScroll(null, scrollDiv);
			}
			else if ((selectedRow.offsetTop + selectedRow.offsetHeight) > (scrollDiv.scrollTop + clientHeight))
			{
				//Scroll to bottom
				scrollDiv.scrollTop = selectedRow.offsetTop - clientHeight + selectedRow.offsetHeight + 3 + 30;
				x10dGridOnScroll(null, scrollDiv);
			}
		}
	}
}

// ** Select row **

function x10dGridServerRowSelect(evt)
{
	var row = x10dGridGetRowFromEvent(evt);
	if (row != null)
	{
		x10dGridSetSelectedRow(row);
		x10dGridServerRowSelectAction(row);
	}
}
function x10dGridServerRowSelectAction(row)
{
	var tbody = row.parentNode;
	var grid = tbody.parentNode;
	var selectedIndex = row.rowIndex;
	__doPostBack(grid.id,'Select$' + selectedIndex);
}

function x10dGridClientRowSelect(evt)
{
	var row = x10dGridGetRowFromEvent(evt);    
	if (row != null)
	{
		x10dGridClearTimeOut();
		x10dGridSetSelectedRow(row);
		x10dGridClientRowSelectAction(row);
	}
}
function x10dGridClientRowSelectAction(row)
{
	//Find the gridID from the row
	var grid = row.parentNode.parentNode;
	if (grid == null || grid.id == null || grid.id == "") return;

	if (typeof(x10dGrid_RowSelected) == "object" || typeof(x10dGrid_RowSelected) == "function")
	{
		x10dGrid_RowSelected(grid.id, row, x10dGetAttrib(row, "dataID"));
	}
}

function x10dGridSetSelectedRow(row)
{
	//Find the gridID from the row
	var tbody = row.parentNode;
	var grid = tbody.parentNode;
	if (grid == null || grid.id == null || grid.id == "") return;
	var selectedIndex = x10dGridGetSelectedIndex(grid.id);

	if (selectedIndex > -1)
	{
		var oldSelectedRow = tbody.rows[selectedIndex];
		if (grid.x10dRow[oldSelectedRow.rowIndex] != null) {
			oldSelectedRow.className = grid.x10dRow[oldSelectedRow.rowIndex];
		}
		else
			oldSelectedRow.className = "";
	}
	if (grid.x10dRow[row.rowIndex] == null) {
		grid.x10dRow[row.rowIndex] = row.className;
	}
	//Get the selected row index from the row (maybe we need a index attribute in the row?)
	selectedIndex = row.rowIndex;

	//Select the new row and set postdata
	row.className = "x10dGridSelectedRow";
	x10dGridSetSelectedIndex(grid.id, selectedIndex);
	
	x10dGridScrollIntoView(grid.id);
}

function x10dGridGetRowFromEvent(evt)
{
	var ctrl = x10dGetEventSource(evt);
	return x10dGridGetRowFromControl(ctrl, true);
}
function x10dGridGetRowFromControl(ctrl, cancelClickEvent)
{
	//Find the TR - if it exist... only continue up until TABLE element is reached
	var row = ctrl;
	while (row != null && row.tagName.toLowerCase() != "tr" && row.tagName.toLowerCase() != "table")
	{
		//Dont fire the row click event if:
		if (cancelClickEvent && (row.tagName.toLowerCase() == "a" || row.tagName.toLowerCase() == "input")) break;
		row = row.parentNode;
	}
	if (row.tagName.toLowerCase() == "tr")
	{
		return row;
	}
	return null;
}

// ** Scroll row **

var x10dGridTimerRowActionRow = null;
var x10dGridTimerID = null;
function SetTaskGridRowID()
{
	x10dGridTimerID = null;
	x10dGridClientRowSelectAction(x10dGridTimerRowActionRow);
	x10dGridTimerRowActionRow = null;
}


function x10dGridKeyRowScroll(e, scrollNo)
{
	var grid = x10dGetEventSource(e);
	
	while (grid != null && grid.tagName.toLowerCase() != "table")
	{
		grid = grid.parentNode;
	}

	e.cancelBubble = true; 
	e.returnValue = false; 

	if (grid.rows.length == 0) return;
	
	//Get the current selected row index
	var selectedIndex = x10dGridGetSelectedIndex(grid.id);
	
	//Scroll to row index
	var nextSelectedIndex = 0;
	if (selectedIndex == "")
		selectedIndex = 0;
	else
		nextSelectedIndex = parseInt(selectedIndex) + parseInt(scrollNo);
	
	if (nextSelectedIndex < 0 || nextSelectedIndex >= grid.rows.length) return;
	
	
	if (x10dGridTimerID != null)
	{
		x10dGridClearTimeOut();
	}

	x10dGridSetSelectedRow(grid.rows[nextSelectedIndex]);
	x10dGridScrollIntoView(grid.id);

	x10dGridTimerID = setTimeout("SetTaskGridRowID()", 600);
	x10dGridTimerRowActionRow = grid.rows[nextSelectedIndex];
}
function x10dGridClearTimeOut()
{
	clearTimeout(x10dGridTimerID);
	x10dGridTimerID = null;
	x10dGridTimerRowActionRow = null;
}

function x10dGridGetCheckBoxDataIDs(gridID, cbID)
{
	var index = 0;
	var arDataID = new Array();
	while (x10dExistControl(gridID+'__ctl'+index+'_'+cbID) || index < 4)
	{
		var ctrl = x10dGetControl(gridID+'__ctl'+index+'_'+cbID);
		if (ctrl != null && ctrl.checked)
		{
			var row = x10dGridGetRowFromControl(ctrl);
			var dataID = x10dGetAttrib(row, "dataID");
			arDataID[arDataID.length] = dataID;
		}
		index++;
	}
	return arDataID;
}

function x10dGridOnKeyDown(e)
{
	//
	switch (e.keyCode)
	{
		case 38 :
			//Arrow up
			x10dGridKeyRowScroll(e, -1);
			return false;
		case 40 :
			//Arrow down
			x10dGridKeyRowScroll(e, 1);
			return false;
	}
}




var Drag = {

    obj : null,

    init : function(o)
    {
        o.onmousedown = Drag.start;
        o.onmousemove = Drag.setCursor;

        o.onDragStart = new Function();
        o.onDragEnd = new Function();
        o.onDrag = new Function();
    },

    start : function(e)
    {
        if (this.style.cursor == "")
			return false;
				
        var o = Drag.obj = this;
        e = Drag.fixE(e);

        var widthInPx = o.style.width;
        var x = parseInt(widthInPx.substr(0, widthInPx.length - 2));
	        
        o.onDragStart(x);
        o.lastMouseX = e.clientX;

        document.onmousemove = Drag.drag;
        document.onmouseup = Drag.end;

        return false;
    },

    drag : function(e)
    {
        e = Drag.fixE(e);
        var o = Drag.obj;
        
        var ex = e.clientX;
        var widthInPx = o.style.width;
        var x = parseInt(widthInPx.substr(0, widthInPx.length - 2));
        var nx = x + (ex - o.lastMouseX);
        
        if (nx > 10)
        {
	        o.style["width"] = nx + "px";
		    o.onDrag(nx);
	        o.lastMouseX = ex;
        }
        
        return false;
    },

    end : function()
    {
        document.onmousemove = null;
        document.onmouseup   = null;
        Drag.obj.onDragEnd(parseInt(Drag.obj.style["width"]));

		var gridID = Drag.obj.parentNode.id;
		var pos = gridID.indexOf('_');
		gridID = gridID.substr(0, pos);

        Drag.obj = null;
        
        //Set the column width in the item table to match the header column
        var grid = document.getElementById(gridID);
		var headerGrid = document.getElementById(gridID + '_HeaderTable');
		var itemGrid = document.getElementById(gridID);
		//Itterate each column and set the width!
		var arCellWidths = new Array();
		for (var i = 0; i  < headerGrid.rows[0].cells.length; i++)
		{
			arCellWidths[i] = headerGrid.rows[0].cells[i].style.width;
			if (itemGrid.rows.length > 0)
				itemGrid.rows[0].cells[i].style.width = arCellWidths[i];
		}

      	x10dGridLayOut(gridID);
		x10dGridReLayout(gridID);
        
        //Save the grid column widths to postdata
        var index = x10dGridGetSelectedIndex(gridID);
        x10dGridSetPostData(gridID, index + ';' + arCellWidths.join(','));
    },

    setCursor : function(e)
    {
        e = Drag.fixE(e);
        
        //If cursor is close to the right side, then change cursor
        
        var widthInPx = this.style.width;
        var x = parseInt(widthInPx.substr(0, widthInPx.length - 2));
        var absLeft = c1g_findPosX(this);
        if (e.clientX < (absLeft + x - 5))
			this.style.cursor = "";
        else
			this.style.cursor = "W-resize";

        return false;
    },

    fixE : function(e)
    {
        if (typeof e == 'undefined') e = window.event;
        if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
        return e;
    }
};

