//*****************************************************************************
// standard variabler, vilka används vid de olika funktionerna
//*****************************************************************************
	var fail
	var flagga=false
	var filtal=0	
	var login_d
	var login_h
	var login_m
	var login_s
	var InfoTimeout
	
	feltext='Correct following errors.\n\n'
	
	var table
	var rowArray = new Array()
	var titleRowArray = new Array()
	var titleRowCellArray = new Array()		// Dynamically constructed title cells
	var titleSpanCellArray = new Array()	// Title elelments from row-spanned
	var colSpanArray = new Array()			// Rows col-spanned
	var colTitleFilled = new Array()		// Indicates whether title is filled
	var sortIndex							// Selected index for sort
	var descending = false					// Descending order
	var nRow, actualNRow, maxNCol			// Various table stats
	var origColor							// Holds original default color
	var isIE								// True if IE
	var linkEventString =					// What's insider <a> tag
		'onMouseOver=\'setCursor(this);' +
		'setColor(this,"selected");\' ' +
		'onMouseOut=\'setColor(this,"default");\' ' +
		'onClick=\'sortTable('

	var ascChr = "^"			// Symbol for ascending sort
	var desChr = "v"			// Symbol for descending sort
	var selectedColor = "blue"	// Color for sort focus
	var defaultColor = "black"	// Default color for sort off-focus
	var recDelimiter = '|'		// Char used as a record separator
	var titleFace = 'b'			// Specifies the HTML tag for titles
	var updownColor = 'gray'	// Specified the color for up/downs 

//*****************************************************************************
//
// failed_occured()
//
// anropas av andra valideringsfunktioner
//*****************************************************************************
	function failed_occured(faltnamn,falttext){
		flagga=true
		fail=true
		feltext+='*'+faltnamn+falttext
	}
		
//*****************************************************************************
//
// showWaitingInfo()
//
// visas efter att man gjort en sökning
//*****************************************************************************
	function showWaitingInfo(){		
		document.all.item("WaitingInfo").style.position='static'
		document.all.item("WaitingInfo").style.visibility='visible'
	}
	
//*****************************************************************************
//
// goto_site()
//
// Omkastning av sidorna
//*****************************************************************************
	function goto_site(site){
		document.location.href=site
	}

//*****************************************************************************
//
// GoBack()
//
// ett steg tillbaka
//*****************************************************************************
	function GoBack(){
		window.history.back()
	}

//*****************************************************************************
//
// GoForward()
//
// ett steg framåt
//*****************************************************************************
	function GoForward(){
		window.history.forward()
	}
	
//*****************************************************************************
//
// backa()
//
// backar ett steg
//*****************************************************************************
	function backa(){
		window.history.go(-1);
	}

//*****************************************************************************
//
// move_to_egnakontakter()
//
// har anropats av kundlogin/utskick/addverify
//*****************************************************************************
	function move_to_egnakontakter(site){
		width=1;height=1
		window.open(site,'','top=10,left=10,resizable=0,scrollbars=0,menubar=0,toolbar=0,directories=0,statusbar=0,width='+width+',height='+height+'')
	}
	
//*****************************************************************************
//
// medialistaprintview()
//
// öppnar ett fönster med listornas mottagare
//*****************************************************************************
	function medialistaprintview(site,width,height){
		width=590;height=400
		window.open(site,'','top=10,left=10,resizable=1,scrollbars=1,menubar=0,toolbar=0,directories=0,statusbar=0,width='+width+',height='+height+'')
	}
	
//*****************************************************************************
//
// printview()
//
// öppnar ett fönster med informationen om mottagaren
//*****************************************************************************
	function printview(site,width,height){
		window.open(site,'','top=10,left=10,resizable=1,scrollbars=1,menubar=0,toolbar=0,directories=0,statusbar=0,width='+width+',height='+height+'')
	}
	
//*****************************************************************************
//
// pressreleaseview()
//
// öppnar ett fönster med pressrelease informationen
//*****************************************************************************
	function pressreleaseview(site,width,height){
		width=690;height=500
		window.open(site,'','top=10,left=10,resizable=1,scrollbars=1,menubar=0,toolbar=0,directories=0,statusbar=0,width='+width+',height='+height+'')
	}

//*****************************************************************************
//
// etikettview()
//
// öppnar ett fönster med pressrelease informationen
//*****************************************************************************
	function etikettview(site){
		width=690;height=50
		window.open(site,'','top=10,left=10,resizable=1,scrollbars=1,menubar=0,toolbar=0,directories=0,statusbar=0,width='+width+',height='+height+'')
	}

//*****************************************************************************
//
// open_check_antalSimultanious
//
// öppnar fönster där antalet simultana utskick utvärderas
//*****************************************************************************
	function open_check_antalSimultanious(site){
		width=10;height=10
		window.open(site,'','top=10,left=10,resizable=0,scrollbars=0,menubar=0,toolbar=0,directories=0,statusbar=0,width='+width+',height='+height+'')		
	}

//*****************************************************************************
//
// open_addcheck
//
// öppnar fönster där antalet simultana utskick utvärderas
//*****************************************************************************
	function open_addcheck(site){
		width=10;height=10
		window.open(site,'','top=10,left=10,resizable=0,scrollbars=0,menubar=0,toolbar=0,directories=0,statusbar=0,width='+width+',height='+height+'')
	}

//*****************************************************************************
//
// mailview()
//
// öppnar ett fönster med mailformatet
//*****************************************************************************
	function mailview(site,width,height){		
		window.open(site,'','top=10,left=10,resizable=1,scrollbars=1,menubar=0,toolbar=0,directories=0,statusbar=0,width='+width+',height='+height+'')
	}
			
//*****************************************************************************
//
// open_application_window()
//
// öppnar administrationsfönstret
//*****************************************************************************
	function open_application_window(mode){
		if (mode==1)
			window.open('admin/object/add.asp','winadmin','top=10,left=10,menubar=0,toolbar=1,location=0,status=1,directories=0,resizable=1,left=15,top=30,width=777,height=570')
		if (mode==2)
			window.open('Grupplogin.asp','winkund','top=10,left=10,menubar=0,toolbar=1,location=0,status=1,directories=0,resizable=1,left=15,top=30,width=777,height=570')
		if (mode==3)
			window.open('multilogo.asp','winkund','top=10,left=10,menubar=0,toolbar=1,location=0,status=1,directories=0,resizable=1,left=15,top=30,width=777,height=570')
		if (mode==4)
			window.open('kundlogin/utskick/add.asp?RELOAD=1','winkund','top=10,left=10,menubar=0,toolbar=1,location=0,status=1,directories=0,resizable=1,left=15,top=30,width=777,height=570')
	}	

//*****************************************************************************
//
// openprintview()
//
// anropar printview funktionen
//*****************************************************************************
	function openprintview(login,mode,Id,width,height){	
		printview('printview.asp?login='+login+'&print=0&mode='+mode+'&Id='+Id,width,height)
	}
			
//*****************************************************************************
//
// check_if_empty()
//
// kollar om fältet är tom // antal inmatade tecken=0
//*****************************************************************************
	function check_if_empty(falt,faltnamn){
		fail=false
		if (falt.value.length==0){
			failed_occured(faltnamn,'. Fält saknas!\n')
			return true
		}
		return false
	}

//*****************************************************************************
//
// check_if_digit()
//
// kollar om inmatade data innehåller tecken som [+ 0123456789]
//*****************************************************************************
	function check_if_digit(falt,faltnamn){
		fail=false
		digits = "+ 0123456789"
		AntalPlus=0;PlusArray=new Array()		
		AntalSpace=0;SpaceArray=new Array()
		//Töm arrayerna
		for (var i = 0; i < falt.value.length; i++){
			PlusArray[i]=0
			SpaceArray[i]=0
		}
		//genomsök faltet
		for (var i = 0; i < falt.value.length; i++){
			//räkna antalet +
			if (falt.value.substring(i, i+1)=='+'){
				PlusArray[i]=1
				AntalPlus++
			}
			//ränka antalet mellanslag
			if (falt.value.substring(i, i+1)==' '){
				//inga dubbla mellanslag
				if (SpaceArray[i-1]==1){
					failed_occured(faltnamn,'. Mellanslag förekommer efter varandra!\n\nRätt format:+<landskod> <stadskod(utan nollan)> <numret>\nObservera mellanslagen mellan landskoden och stadskoden!\n')
					return false
				}
				else{
					SpaceArray[i]=1
					AntalSpace++
				}
			}
			//felaktig tecken
			if (digits.indexOf(falt.value.substring(i, i+1)) == -1){
				failed_occured(faltnamn,'. Ange siffror!\nTillåtna tecken:\n0 till 9, plus[+] och mellanslag[ ]\n')
				return false
			}
		}				
		//+ i början
		if (falt.value.substring(0,1)!='+'){
			failed_occured(faltnamn,'. + i början saknas!\n\nRätt format:+<landskod> <stadskod(utan nollan)> <numret>\nObservera mellanslagen mellan landskoden och stadskoden!\n')
			return false
		}
		//ingen 0 efter +
		if (falt.value.substring(1,2)=='0'){
			failed_occured(faltnamn,'. Fel landskod!\n\nRätt format:+<landskod> <stadskod(utan nollan)> <numret>\nObservera mellanslagen mellan landskoden och stadskoden!\n')
			return false
		}
		//ingen mellanslag efter +
		if (falt.value.substring(1,2)==' '){
			failed_occured(faltnamn,'. Fel landskod!\n\nRätt format:+<landskod> <stadskod(utan nollan)> <numret>\nObservera mellanslagen mellan landskoden och stadskoden!\n')
			return false
		}
		//+ bara ett tecken
		if (AntalPlus>1){
			failed_occured(faltnamn,'. Många + tecken! (Max ett tecken)\n\nRätt format:+<landskod> <stadskod(utan nollan)> <numret>\nObservera mellanslagen mellan landskoden och stadskoden!\n')
			return false
		}
		//Mer än 9 tecken
		if (falt.value.length<10){
			failed_occured(faltnamn,'. Få antal nummer! (Min tio tecken)\n\nRätt format:+<landskod> <stadskod(utan nollan)> <numret>\nObservera mellanslagen mellan landskoden och stadskoden!\n')
			return false
		}
		//Mellanslag tecken mer än 2
		if (AntalSpace<2){
			failed_occured(faltnamn,'. Få mellanslag! (Min två tecken)\n\nRätt format:+<landskod> <stadskod(utan nollan)> <numret>\nObservera mellanslagen mellan landskoden och stadskoden!\n')
			return false
		}		
		// ingen mellanslag i slutet
		if (SpaceArray[falt.value.length-1]==1){
			failed_occured(faltnamn,'. Mellanslag i slutet\n\nRätt format:+<landskod> <stadskod(utan nollan)> <numret>\nObservera mellanslagen mellan landskoden och stadskoden!\n')
			return false
		}		
		return true
	}

//*****************************************************************************
//
// check_if_digits()
//
// kollar om inmatade data innehåller tecken som [0123456789]
//*****************************************************************************
	function check_if_digits(falt,faltnamn){
		fail=false
		digits = "0123456789"
		//genomsök faltet
		for (var i = 0; i < falt.value.length; i++){
			//felaktig tecken
			if (digits.indexOf(falt.value.substring(i, i+1)) == -1){
				failed_occured(faltnamn,'. Ange siffror!\n')
				return false
			}
		}
		return true
	}
	
//*****************************************************************************
//
// check_if_float()
//
// kollar om inmatade data innehåller tecken som [.0123456789]
//*****************************************************************************
	function check_if_float(falt,faltnamn){
		fail=false
		digits = ".0123456789"
		//genomsök faltet
		for (var i = 0; i < falt.value.length; i++){
			//felaktig tecken
			if (digits.indexOf(falt.value.substring(i, i+1)) == -1){
				failed_occured(faltnamn,'. Ange siffror, Obs [,] får inte förekomma vid inmatning av decimalvärden!\n')
				return false
			}
		}
		return true
	}
	
//*****************************************************************************
//
// check_if_orgnr()
//
// kollar om inmatade data uppfyller organisationsnummer kravet
//*****************************************************************************
	function check_if_orgnr(falt,faltnamn){
		fail=false
		digits = "-0123456789"
		for (var i = 0; i < falt.value.length; i++){
			if (digits.indexOf(falt.value.substring(i, i+1)) == -1){
				failed_occured(faltnamn,'. Ange siffror!\nTillåtna tecken:\n0 till 9, bindestreck[-]\n')
				return false
			}
		}
		return true
	}
	
//*****************************************************************************
//
// check_if_loginkod()
//
// kollar om inmatade data uppfykker användarnamn,lösenord kravet
//*****************************************************************************
	function check_if_loginkod(falt,faltnamn){
		//132=[ä], 134=[å], 142=[Ä], 143=[Å], 148=[ö], 153=[Ö]
		countdigit=0;countstr=0;fail=false
		digits = "åäöÅÄÖ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
		for (var i = 0; i < falt.value.length; i++){
			if (digits.indexOf(falt.value.substring(i, i+1)) == -1){
				failed_occured(faltnamn,'. Ange siffror eller bokstäver!\n')
				return false
			}			
			else{
				tal=falt.value.charCodeAt(i)
				if (tal>=48 && tal<=57)
					countdigit+=1
				else if((tal>=65 && tal<=90) || 
						(tal>=97 && tal<=122) || 
						(tal==132) ||
						(tal==134) ||
						(tal==142) ||
						(tal==143) ||
						(tal==148) ||
						(tal==153))
					countstr+=1
			}
		}
		if (countdigit>5){
			failed_occured(faltnamn,'. Ange minst 3 bokstäver!\n')
			return false
		}
		if (countstr>5){
			failed_occured(faltnamn,'. Ange minst 3 siffror!\n')
			return false
		}
		return true
	}
	
//*****************************************************************************
//
// check_if_correct_clock()
//
// kollar om inmatade data uppfyller tidsangivelse kravet
//*****************************************************************************
	function check_if_correct_clock(falt,faltnamn){
		//d=new Date();h=d.getHours();m=d.getMinutes()
		h=parseInt(Clock_h)
		m=parseInt(Clock_m)
		m+=10
		if (m>=60){ h++;m-=60 }
		if (h>23) h=0
		//if (h<10) h='0'+h
		//if (m<10) m='0'+m		
		hour=falt.value.substr(0, 2)
		minute=falt.value.substr(3, 2)
		if(hour<h){
			failed_occured(faltnamn,'. Ange senare tid!\nUtskickstiden måste vara minst 10 minuter fram i tiden\n(se klockslaget på vänster sida under menyn).\n')
			return false
		}
		if (hour==h)
			if(minute<m){
				failed_occured(faltnamn,'. Ange senare tid!\nUtskickstiden måste vara minst 10 minuter fram i tiden\n(se klockslaget på vänster sida under menyn).\n')
				return false
			}
		return true
	}
	
//*****************************************************************************
//
// check_if_clock()
//
// kollar om inmatade data är en tidsangivelse
//*****************************************************************************
	function check_if_clock(falt,faltnamn){
		var hour=falt.value.substr(0, 2)
		var minute=falt.value.substr(3, 2)
			
		fail=false
		digits = ":0123456789"
		for (var i = 0; i < falt.value.length; i++){
			if (digits.indexOf(falt.value.substr(i, 1)) == -1){		
				failed_occured(faltnamn,'. Ange siffror!\n')
				return false
			}
		}
		if(falt.value.length!=5){
			failed_occured(faltnamn,'. Fyll i samtliga fält!\n')
			return false
		}		
		if (hour<00 || hour>23){
			failed_occured(faltnamn,'. Ange rätt timme, [00] till [23]!\n')
			return false
		}
		if (minute<00 || minute>59){
			failed_occured(faltnamn,'. Ange rätt minut, [00] till [59]!\n')
			return false
		}		
		return true
	}
	
//*****************************************************************************
//
// check_if_correct_date()
//
// kollar om inmatade data uppfyller datumangivelse kravet
//*****************************************************************************
	function check_if_correct_date(datefalt,clockfalt,faltnamn){
		//d=new Date()
		Y=parseInt(Clock_Y)
		M=parseInt(Clock_M)
		D=parseInt(Clock_D)
		var year=datefalt.value.substr(0, 4)
		var month=datefalt.value.substr(5, 2)
		var day=datefalt.value.substr(8, 2)
		if (year<Y){
			failed_occured(faltnamn,'. Ange senare tid!\nUtskickstiden måste vara minst 10 minuter fram i tiden\n(se klockslaget på vänster sida under menyn).\n')
			return false
		}
		if (year==Y){
			if (month<M){
				failed_occured(faltnamn,'. Ange senare tid!\nUtskickstiden måste vara minst 10 minuter fram i tiden\n(se klockslaget på vänster sida under menyn).\n')
				return false
			}
			if (month==M){
				if (day<D){
					failed_occured(faltnamn,'. Ange senare tid!\nUtskickstiden måste vara minst 10 minuter fram i tiden\n(se klockslaget på vänster sida under menyn).\n')
					return false
				}
				if (day==D)
					return check_if_correct_clock(clockfalt,'Klockslag')
			}
		}
		return true
	}
	
//*****************************************************************************
//
// check_if_date()
//
// kollar om inmatade data är datumangivelse
//*****************************************************************************
	function check_if_date(falt,faltnamn){
		//d=new Date()
		Y=Clock_Y
		var year=falt.value.substr(0, 4)
		var month=falt.value.substr(5, 2)
		var day=falt.value.substr(8, 2)
		var days_of_month
		
		fail=false
		digits = "-0123456789"
		for (var i = 0; i < falt.value.length; i++){
			if (digits.indexOf(falt.value.substr(i, 1)) == -1){		
				failed_occured(faltnamn,'. Ange siffror!\n')
				return false
			}
		}
		if(falt.value.length!=10){
			failed_occured(faltnamn,'. Fyll i samtliga fält!\n')
			return false
		}
		if (year<(parseInt(Y)-5) || year > (parseInt(Y)+15)){
			failed_occured(faltnamn,'. Ange rätt årtal, ['+(parseInt(Y)-5)+'] till ['+(parseInt(Y)+15)+']!\n')
			return false
		}		
		if (month<1 || month>12){
			failed_occured(faltnamn,'. Månaden ligger inte i spannet [1] till [12]!\n')
			return false
		}
		
		if (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
			days_of_month=31
		else if(month==2)
			days_of_month=28
		else
			days_of_month=30			
		if (day<1 || day>days_of_month){
			failed_occured(faltnamn,'. Angivna dagen ligger inte i spannet [1] till ['+days_of_month+']!\n')
			return false
		}
		return true
	}
	
//*****************************************************************************
//
// check_if_correct_rubrik()
//
// kollar om inmatade data innehåller [retur] tecknet
// detta används vid inmatning av rubrik vid utskick
// för att runriken i mailet inte ska kappas av så får det 
// inte finnas med några [retur] tecken
//*****************************************************************************
	function check_if_correct_rubrik(falt,faltnamn){		
		for (var i=0;i<falt.value.length;i++){			
			if (falt.value.charCodeAt(i)==13){		
				failed_occured(faltnamn,'. Mata in Rubrik utan radbrytning!\n')
				return false
			}
		}
		return true
	}
	
//*****************************************************************************
//
// check_if_correct_digits()
//
// kollar om antalet inmatade data är korrekt antal
//*****************************************************************************
	function check_if_correct_digits(falt,antal,faltnamn){
		fail=false
		if (falt.value.length==antal){
			return true
		}
		else{
			failed_occured(faltnamn,'. Ange '+(antal-1)+' siffror!\n')
			return false
		}
	}
	
//*****************************************************************************
//
// check_if_correct_digits1()
//
// kollar om antalet inmatade data är korrekt antal
//*****************************************************************************
	function check_if_correct_digits1(falt,antal,faltnamn){
		fail=false
		if (falt.value.length==antal){
			return true
		}
		else{
			failed_occured(faltnamn,'. Ange '+antal+' tecken!\n')
			return false
		}
	}
	
//*****************************************************************************
//
// check_if_correct_HTTP()
//
// kollar om inmatade data är en http adress
//*****************************************************************************
	function check_if_correct_HTTP(falt,faltnamn){		
		fail=false
		s = "http://"
		if (falt.value.substring(0,7)!='http://'){
			failed_occured(faltnamn,'. Ange http:// i början!\n')
			return false
		}		
		if (falt.value.length<8){
			failed_occured(faltnamn,'. Fält saknas!\n')
			return false
		}
		return true		
	}
	
//*****************************************************************************
//
// check_if_correct_FTP()
//
// kollar om inmatade data är en ftp adress
//*****************************************************************************
	function check_if_correct_FTP(falt,faltnamn){
		fail=false
		s = "ftp://"
		if (falt.value.substring(0,6)!='ftp://'){
			failed_occured(faltnamn,'. Ange ftp:// i början!\n')
			return false
		}		
		if (falt.value.length<7){
			failed_occured(faltnamn,'. Fält saknas!\n')
			return false
		}
		return true
	}
	
//*****************************************************************************
//
// check_if_epost()
//
// kollar om inmatade data är epost
//*****************************************************************************
	function check_if_epost(falt,faltnamn){
		var digits="&_-@.0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
		var StartEnddigits="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
		fail=false
		//@ och . måste finnas		
		if ((falt.value.indexOf ('@',0) == -1 || falt.value.indexOf ('.',0) == -1)){
			failed_occured(faltnamn,'. Ange rätt format!\nTecknen [@] eller [.] saknas!\n')
			return false
		}
		//loopa fältet
		for (var i = 0; i < falt.value.length; i++){
			//inga felaktiga tecken i början
			if (digits.indexOf(falt.value.substring(i, i+1)) == -1){
				failed_occured(faltnamn,'. Ange bokstäver!\nTillåtna bokstäver:\n[a] till [z]\n[A] till [Z]\n[0] till [9]\nSnabela [@]\nBindestreck [-]\nUnderscore [_]\nPunkt [.]\n')
				return false
			}
		}		
		//inga @ och . i början
		if (StartEnddigits.indexOf(falt.value.substring(0,1))==-1){
			failed_occured(faltnamn,'. [@] eller [.] eller [-] förekommer i början av epostadressen!\n')
			return false
		}
		//inga @ och . i slutet
		if (StartEnddigits.indexOf(falt.value.substring(falt.value.length-1,falt.value.length))==-1){
			failed_occured(faltnamn,'. [@] eller [.] eller [-] förekommer i slutet av epostadressen!\n')
			return false
		}
		return true
	}

//*****************************************************************************
//
// check_if_selected()
//
// kollar om något fält är markerad
//*****************************************************************************
	function check_if_selected(falt,faltnamn){
		fail=false
		if ((falt.options[falt.selectedIndex].value==0)){
			failed_occured(faltnamn,'. Välj '+faltnamn+'!\n')
			return false
		}
		return true
	}
	
//*****************************************************************************
//
// check_if_file_exists()
//
// kollar om angivna filen finns
//*****************************************************************************
	function check_if_file_exists(falt,faltnamn){		
		var fso = new ActiveXObject("Scripting.FileSystemObject")
		fail=false
		if (!fso.FileExists(falt.value)){
			failed_occured(faltnamn,'. Angivna fil/er finns inte!\n')
			return false
		}
		return true
	}
	
//*****************************************************************************
//
// check_if_correct_path()
//
// kollar om angivna mappen finns
//*****************************************************************************
	function check_if_correct_path(falt,faltnamn){
		fail=false		
		if (falt.value.indexOf(" ")>0){			
			failed_occured(faltnamn,'. Ange filsökvägar utan mellanslag!\n')
			return false
		}				
		return true
	}
	
//*****************************************************************************
//
// check_if_selected_any()
//
// kollar om lista innehåller något fält
//*****************************************************************************
	function check_if_selected_any(falt,faltnamn){
		fail=false
		if (falt.length==0){
			failed_occured(faltnamn,'. Fyll i '+faltnamn+'!\n')
			return false
		}
		return true
	}
	
//*****************************************************************************
//
// check_if_selected1()
//
// kollar om något fält är markerad
//*****************************************************************************
	function check_if_selected1(falt,faltnamn){
		fail=false
		for(i=0;i<falt.length;i++)
			if(falt.options[i].selected)
				return true
		failed_occured(faltnamn,'. Ange '+faltnamn+'!\n')
		return false				
	}
	
//*****************************************************************************
//
// feed_digits()
//
//*****************************************************************************
	function feed_digits(falt,point,digit){		
		if (falt.value.length==point-1)
			if(falt.value.charCodeAt(falt.value.length-1)>47 && falt.value.charCodeAt(falt.value.length-1)<58)
				falt.value+=digit		
	}

//*****************************************************************************
//
// show()
//
// visar info rutorna
//*****************************************************************************
	function show(tal,time){
		if (time==null || time==0)
			time=6500
		document.all.item("Inforuta"+tal).style.visibility='visible'
		InfoTimeout=setTimeout("hide("+tal+")",time)
	}

//*****************************************************************************
//
// hide()
//
// gömmer info rutorna
//*****************************************************************************
	function hide(tal){
		document.all.item("Inforuta"+tal).style.visibility='hidden'
		clearTimeout(InfoTimeout)
	}
	
//*****************************************************************************
//
// add_div()
//
// lägger till en ett div fält
//*****************************************************************************
	function add_div(div,htmltext){
		div.insertAdjacentHTML('BeforeEnd',htmltext)		
	}
	
//*****************************************************************************
//
// move_selected_file_to_list()
//
// matar in en angiven fil till en lista
//*****************************************************************************
	function move_selected_file_to_list(div,falt,faltnamn,listA){
		if (check_if_correct_path(falt,faltnamn))
			if (check_if_file_exists(falt,faltnamn)){
				var exists=false
				var fil=falt.value.substring(falt.value.lastIndexOf('\\')+1,falt.value.length)
				for(i=0;i<listA.length;i++)
					if (listA.options[i].value==fil)
						exists=true
				if (!exists){
					div.insertAdjacentHTML('BeforeEnd','<input type=hidden name=FilDir'+filtal+' value='+falt.value+'>')
					filtal++
					if (!check_if_empty(falt,faltnamn)){
						var O=new Option()
						O.value=fil
						O.text=fil
						listA[listA.length]=O
					}
					else{
						alert(feltext)
						feltext=''
					}
				}
				else{
					alert('Filen finns redan!')
				}
			}
			else{
				alert(feltext)
				feltext=''
			}
		else{
			alert(feltext)
			feltext=''
		}
	}
	
//*****************************************************************************
//
// move_selected_file_to_list1()
//
// matar in angiven filnamn till en lista
//*****************************************************************************
	function move_selected_file_to_list1(div,listA,listB){
		listBValuecpy=new Array();listBTextcpy=new Array()
		for(i=0;i<listA.length;i++){
			flag=false
			if(listA.options[i].selected && listA.options[i].value==0){				
				flag=true
				break
			}
			for(j=0;j<listB.length;j++)
				if (listA.options[i].value==listB.options[j].value){
					flag=true
					break				
				}			
			if (flag==false && listA.options[i].selected){				
				listBValuecpy[0]=listA.options[i].value
				listBTextcpy[0]=listA.options[i].text
				for(k=0;k<listB.length;k++){
					listBValuecpy[k+1]=listB.options[k].value
					listBTextcpy[k+1]=listB.options[k].text
				}
				listB.length=0
				for(k=0;k<listBValuecpy.length;k++){
					O=new Option()
					O.value=listBValuecpy[k]
					O.text=listBTextcpy[k]
					listB[k]=O				
				}
			}
		}
		filtal=0
		div.insertAdjacentHTML('BeforeEnd','')
		for(i=0;i<listBValuecpy.length;i++){
			div.insertAdjacentHTML('BeforeEnd','<input type=hidden name=FilDir'+filtal+' value='+listBTextcpy[i]+'>')
			filtal++
		}
	}
		
//*****************************************************************************
//
// move_selected_to_list()
//
// matar in ett fält in i en lista
//*****************************************************************************
	function move_selected_to_list(listA,listB){
		listBValuecpy=new Array();listBTextcpy=new Array()		
		for(i=0;i<listA.length;i++){
			flag=false
			if(listA.options[i].selected && listA.options[i].value==0){				
				flag=true
				break
			}
			for(j=0;j<listB.length;j++)
				if (listA.options[i].value==listB.options[j].value){
					flag=true
					break				
				}			
			if (flag==false && listA.options[i].selected){				
				listBValuecpy[0]=listA.options[i].value
				listBTextcpy[0]=listA.options[i].text
				for(k=0;k<listB.length;k++){
					listBValuecpy[k+1]=listB.options[k].value
					listBTextcpy[k+1]=listB.options[k].text
				}				
				listB.length=0
				for(k=0;k<listBValuecpy.length;k++){
					O=new Option()
					O.value=listBValuecpy[k]
					O.text=listBTextcpy[k]
					listB[k]=O				
				}
			}
		}
		Sort(listB)
	}
	
//*****************************************************************************
//
// move_all_to_list()
//
// fyller en lista med innehållet av en annan
//*****************************************************************************
	function move_all_to_list(listtemp,list){
		listBValuecpy=new Array();listBTextcpy=new Array()		
		for(i=0;i<listtemp.length;i++){
			flag=false
			for(j=0;j<list.length;j++)
				if (listtemp.options[i].value==list.options[j].value){
					flag=true
					break				
				}			
			if (flag==false){				
				listBValuecpy[0]=listtemp.options[i].value
				listBTextcpy[0]=listtemp.options[i].text
				for(k=0;k<list.length;k++){
					listBValuecpy[k+1]=list.options[k].value
					listBTextcpy[k+1]=list.options[k].text
				}
				list.length=0
				for(k=0;k<listBValuecpy.length;k++){
					O=new Option()
					O.value=listBValuecpy[k]
					O.text=listBTextcpy[k]
					list[k]=O				
				}
			}
		}
		Sort(list)
	}
	
//*****************************************************************************
//
// remove_selected_from_list()
//
// tar bort en rad från en lista
//*****************************************************************************
	function remove_selected_from_list(removelist,list){
		listValuecopy=new Array();listTextcopy=new Array()		
		for(i=0,j=0;i<list.length;i++){
			flag=false
			for(k=0;k<removelist.length;k++)
				if (removelist.options[k].value==list.options[i].value)
					flag=true
			if(!flag){
				listValuecopy[j]=list.options[i].value
				listTextcopy[j]=list.options[i].text
				j++
			}
		}
		list.length=0
		for(i=0;i<listTextcopy.length;i++){
			O=new Option()
			O.value=listValuecopy[i]
			O.text=listTextcopy[i]
			list[i]=O
		}
		Sort(list)
	}
	
//*****************************************************************************
//
// delete_selected_from_list()
//
// tar bort en rad från en lista
//*****************************************************************************
	function delete_selected_from_list(list){		
		if(list.length>0){
			if(list.selectedIndex>-1){
				listValuecopy=new Array();listTextcopy=new Array()
				for(i=0,j=0;i<list.length;i++){	
					if (!list.options[i].selected){
						listValuecopy[j]=list.options[i].value
						listTextcopy[j]=list.options[i].text
						j++
					}
				}		
				list.length=0
				for(i=0;i<listTextcopy.length;i++){
					O=new Option()
					O.value=listValuecopy[i]
					O.text=listTextcopy[i]
					list[i]=O
				}
				Sort(list)
			}
			else{				
				alert('Välj ett alternativ')
			}
		}
		else
			alert('Välj ett alternativ')
	}
	
//*****************************************************************************
//
// Sort()
//
// sorterar arrayer
//*****************************************************************************
	function Sort(list){
		var temp_opts = new Array();
		var temp = new Object();
		for(var i=0; i<list.options.length; i++)
			temp_opts[i] = list.options[i];		
		for(var x=0; x<temp_opts.length-1; x++)
			for(var y=(x+1); y<temp_opts.length; y++)
				if(temp_opts[x].text > temp_opts[y].text){
					temp = temp_opts[x].text;
					temp_opts[x].text = temp_opts[y].text;
					temp_opts[y].text = temp;
					temp = temp_opts[x].value;
					temp_opts[x].value = temp_opts[y].value;
					temp_opts[y].value = temp;
				}					
		list.length=0
		for(var i=0; i<temp_opts.length; i++){
			O=new Option()
			O.value=temp_opts[i].value;
			O.text=temp_opts[i].text;			
			list[i]=O 
		}
	}
		
//*****************************************************************************
//
// set_logintime()
//
// sätter den aktuella tiden som loggningstid
//*****************************************************************************
	function set_logintime(){
		d=new Date()
		login_d=d.getDate()
		login_h=d.getHours()
		login_m=d.getMinutes()
		if (login_m<10) login_m='0'+login_m		
		login_s=d.getSeconds()
		if (login_s<10) login_s='0'+login_s
	}

//*****************************************************************************
//
// initTable()
//
// sätts ihop med <body> taggen vid Load händelsen
//*****************************************************************************
function initTable(obj)
{
	// Check whether it's viewed by IE 5.0 or greater
	if (! checkBrowser()) 
		return;

	// Local variables
	var countCol;
	var nChildNodes;
	var innerMostNode;
	var nColSpan, nRowSpannedTitleCol, colPos;
	var cell, cellText;
	var titleFound = false;
	var rNRowSpan, rNColSpan;

	// Initializing global table object variable
	if (obj.tagName == "TABLE"){
		// Assumes that the obj is THE OBJECT
		table = obj;
	}
	else{
		// Assumes that the obj is the id of the object
		table = document.getElementById(obj);
	}

	// Check whether it's an object
	if (table == null)
		return;

	// Check whether it's a table
	if (table.tagName != "TABLE")
		return;

	// Initializing the max col number with the size of last data row
	maxNCol = table.rows[table.rows.length-1].cells.length;

	// Initializing arrays
	rowArray = new Array();
	colSpanArray = new Array();
	colTitleFilled = new Array();
	titleRowArray = new Array();
	titleRowCellArray = new Array();
	
	for (var i=0; i<maxNCol; i++)
		colTitleFilled[i] = false;

	// Setting the number of rows
	nRow = table.rows.length;	

	// Should have at least 1 row
	if (nRow < 1) return;

	// Initialization of local variables
	actualNRow = 0;			// Number of actual data rows
	rNRowSpan = 0;			// Remaining rows in the row span
	rNColSpan = 0;			// Remaining cols in the col span
	nRowSpannedTitleCol = 0;	// Number of title cols from row span
		
	// Loop through rows
	for (var i=0; i<nRow; i++){
		nColSpan = 1, colPos = 0;
		// Loop through columns
		// Initializing
		for (var j=0; j<table.rows[i].cells.length; j++){
			// Do this iff title has not been found
			if (titleFound == false)
				if (table.rows[i].cells[j].rowSpan > 1){
					if (table.rows[i].cells[j].colSpan < 2){
						titleSpanCellArray[colPos] = table.rows[i].cells[j];
						colTitleFilled[colPos] = true;
						nRowSpannedTitleCol++;
					}
					if (table.rows[i].cells[j].rowSpan - 1 > rNRowSpan){
						rNRowSpan = table.rows[i].cells[j].rowSpan - 1;
						if (table.rows[i].cells[j].colSpan > 1)
							rNColSpan = rNRowSpan + 1;
					}
				}			
			if (table.rows[i].cells[j].colSpan > 1 && rNColSpan == 0){ 
				nColSpan = table.rows[i].cells[j].colSpan;
				colPos += nColSpan;
			}
			else			
				colPos++;					
		}
					
		// Setting up the title cells
		if (titleFound == false && nColSpan == 1 && rNRowSpan == 0 && rNColSpan == 0 && titleFound == false){
			colSpanArray[i] = true;
			titleFound = true;

			// Using indivisual cell as an array element
			countCol = 0;
			for (var j=0;j<table.rows[i].cells.length + nRowSpannedTitleCol; j++){
				if (colTitleFilled[j] != true){
					titleRowCellArray[j] =	table.rows[i].cells[countCol];
					countCol++;
				}
				else				
					titleRowCellArray[j] = titleSpanCellArray[j];				
			}
		}
		// Setting up the data rows
		else if (titleFound == true && nColSpan == 1 && rNRowSpan == 0){
			for (var j=0; j<table.rows[i].cells.length; j++){
				// Can't have row span in record rows ...
				if (table.rows[i].cells[j].rowSpan > 1)
					return;
				
				nChildNodes = table.rows[i].cells[j].firstChild.childNodes.length;
				innerMostNode = table.rows[i].cells[j].firstChild;
				while ( nChildNodes != 0){
					innerMostNode =	innerMostNode.firstChild;
					nChildNodes = innerMostNode.childNodes.length;
				}
				if (j == 0)				
					rowArray[actualNRow] = innerMostNode.data;				
				else				
					rowArray[actualNRow] += recDelimiter + innerMostNode.data;				
			}
			// Inconsistent col lengh for data rows
			if (table.rows[i].cells.length > maxNCol)
				return;
			actualNRow++;
			colSpanArray[i] = false;
		}
		else if (nColSpan == 1 && rNRowSpan == 0 && rNColSpan == 0 && titleFound == false)
			colSpanArray[i] = false;		
		else
			colSpanArray[i] = true;		
		
		// Counters for row/column spans
		if (rNRowSpan > 0) rNRowSpan--;
		if (rNColSpan > 0) rNColSpan--;
	}

	// If the row number is < 1, no need to do anything ...
	if (actualNRow < 1) return;

	// Re-drawing the title row
	for (var j=0; j<maxNCol; j++){
		// If for some reason, the rows do NOT have any child, then
		// simply return ...
		if (titleRowCellArray[j].childNodes.length == 0) return;
		if (titleRowCellArray[j].firstChild != null){
			nChildNodes = titleRowCellArray[j].firstChild.childNodes.length;
			innerMostNode = titleRowCellArray[j].firstChild;
			while ( nChildNodes != 0){
				innerMostNode =	innerMostNode.firstChild;
				nChildNodes = innerMostNode.childNodes.length;
			}
			cellText = innerMostNode.data;
		}
		else{
			cellText = "column(" + j + ")";
		}
		titleRowArray[j] = cellText;
		titleRowCellArray[j].innerHTML = '<a ' +	linkEventString + j + ',' + '"' + table.id + '"' + ');\'>' + '<' + titleFace + '>' + cellText + '</' + titleFace +'></a>';
	}
}

//*****************************************************************************
//
// sortTable()
//
// sorterar tabellens rader
//*****************************************************************************
function sortTable(index,obj)
{
	// Re-inializing the table object
	initTable(obj);

	// Local variables
	var nChildNodes;
	var innerMostNode;
	var rowContent;
	var rowCount;
	var cell, cellText;
	var newTitle;
	
	// Can't sort past the max allowed column size
	if (index < 0 || index >= maxNCol) return;
	
	// Assignment of sort index
	sortIndex = index;
	// Doing the sort using JavaScript generic function for an Array
	rowArray.sort(compare);

	// Re-drawing the title row
	for (var j=0; j<maxNCol; j++){
		cellText = titleRowArray[j];
		cellText = '<' + titleFace +'>' + cellText + '</' + titleFace + '></a>';
		newTitle = '<a ' + linkEventString + j + ',' + '"' + table.id + '"' + ');\'>' +	cellText + '</a>';
		if (j == sortIndex){
			newTitle += '&nbsp;<font color=' + updownColor + '>';
			if (descending)
				newTitle += desChr;
			else
				newTitle += ascChr;
			newTitle += '</font>';
		}
		titleRowCellArray[j].innerHTML = newTitle;
	}

	// Re-drawing the table
	rowCount = 0;
	for (var i=0; i<nRow; i++){
		if (! colSpanArray[i]){
			for (var j=0; j<maxNCol; j++){
				rowContent = rowArray[rowCount].split(recDelimiter);
				nChildNodes = table.rows[i].cells[j].firstChild.childNodes.length;
				innerMostNode = table.rows[i].cells[j].firstChild;
				while ( nChildNodes != 0){
					innerMostNode =	innerMostNode.firstChild;
					nChildNodes = innerMostNode.childNodes.length;
				}
				innerMostNode.data = rowContent[j];
			}
			rowCount++;
		}
	}

	// Switching btw descending/ascending sort
	if (descending)
		descending = false;
	else
		descending = true;
}

//*****************************************************************************
//
// compare()
//
// ställer om sort funktionen
//*****************************************************************************
function compare(a, b)
{
	// Getting the element array for inputs (a,b)
	var aRowContent = a.split(recDelimiter);
	var bRowContent = b.split(recDelimiter);
	
	// Needed in case the data conversion is necessary
	var aToBeCompared, bToBeCompared;

	if (! isNaN(aRowContent[sortIndex]))
		aToBeCompared = parseInt(aRowContent[sortIndex], 10);
	else
		aToBeCompared = aRowContent[sortIndex];

	if (! isNaN(bRowContent[sortIndex]))
		bToBeCompared = parseInt(bRowContent[sortIndex], 10);
	else
		bToBeCompared = bRowContent[sortIndex];

	if (aToBeCompared < bToBeCompared)
		if (!descending)		
			return -1;		
		else		
			return 1;
		
	if (aToBeCompared > bToBeCompared)
		if (!descending)
			return 1;		
		else
			return -1;		
	
	return 0;
}

//*****************************************************************************
//
// setCursor()
//
// sätter en hand som pilikon
//*****************************************************************************
function setCursor(obj){
	// Show hint text at the browser status bar
	window.status = "Sort by " + obj.firstChild.innerHTML;
	// Change the mouse cursor to hand or pointer
	if (isIE)
		obj.firstChild.style.cursor = "hand";
	else
		obj.firstChild.style.cursor = "pointer";
}

//*****************************************************************************
//
// setColor()
//
// ändrar färg på kolumnheaden
//*****************************************************************************
function setColor(obj,mode){
	if (mode == "selected"){
		// Remember the original color
		if (obj.style.color != selectedColor) 
			defaultColor = obj.style.color;
		obj.style.color = selectedColor;
	}
	else{	
		// Restoring original color and re-setting the status bar
		obj.style.color = defaultColor;
		window.status = '';
	}
}

//*****************************************************************************
//
// checkBrowser()
//
// kollar typ av browser
//*****************************************************************************
function checkBrowser(){
	if (navigator.appName == "Microsoft Internet Explorer" && navigator.appVersion.indexOf("5.") >= 0){
		isIE = true;
		return true;
	}
	// For some reason, appVersion returns 5 for Netscape 6.2 ...
	else if (navigator.appName == "Netscape" && navigator.appVersion.indexOf("5.") >= 0){
		isIE = false;
		return true;
	}
	else
		return false;
}


	//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
	//	Ex. functions
	//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
	//från http://www.webdevelopersjournal.com/articles/jscript_forms3.html
	//	function highlight(state){
	//		element=event.srcElement;
	//		if (element.tagName=='INPUT'){
	//				etype=element.type;
	//			if ((etype=='submit' || etype=='reset') && state==1)
	//				state=2;
	//			element.style.backgroundColor=clr[state];
	//			element.focus();
	//		}
	//	}