/**
 * Copyright (C) 2007 Nexus Consulting AS
 * http://www.nxc.no
 *
 * @author: Lars Fugelseth
 **/

function mouseOverRediger(id) {
	var sectionDiv = document.getElementById(id);
	if(sectionDiv.tagName == 'DIV') {
		sectionDiv.className = 'section section-edit';
	} else {
		sectionDiv.className = 'selected';
	}
}

function mouseOutRediger(id) {
	var sectionDiv = document.getElementById(id);
	if(sectionDiv.tagName == 'DIV') {
		sectionDiv.className = 'section';
	} else {
		sectionDiv.className = '';
	}
}


/**
 *
 * @access public
 * @return void
 **/
function toggleCheckbox(checkboxId) {
	var checkbox = document.getElementById(checkboxId);
	if(checkbox != null) {
		if(checkbox.checked) checkbox.checked = false;
		else checkbox.checked = true;
	}
}
function clickIt(id) {
	var input = document.getElementById(id);
	if(input != null) {
		input.click();
	}
}
function showIfChecked(element,ids) {
	if(element.checked) {
		for(var i=0;i < ids.length;i++) {
			document.getElementById(ids[i]).className = 'label space';
		}
	} else {
		for(var i=0;i < ids.length;i++) {
			document.getElementById(ids[i]).className = 'label space hide';
		}
	}
}

function showFilter() {
	if(document.getElementById('filter').className == 'hide') {
		document.getElementById('filter').className = '';
		document.getElementById('filter-link').innerHTML = 'Skjul filter';
	} else {
		document.getElementById('filter').className = 'hide';
		document.getElementById('filter-link').innerHTML = 'Vis filter';
	}
}

function checkAll(id) {
	var inputs = document.getElementById('filter').getElementsByTagName('input');
	for(var i=0;i < inputs.length;i++) {
		if(inputs[i].type == 'checkbox') {
			inputs[i].checked = true;
		}
	}
}

function checkNone(id) {
	var inputs = document.getElementById('filter').getElementsByTagName('input');
	for(var i=0;i < inputs.length;i++) {
		if(inputs[i].type == 'checkbox') {
			inputs[i].checked = false;
		}
	}
}

function showhide( elm_id ){
	var elm = document.getElementById( elm_id );
	var current_state=elm.style.display;
	if(current_state == 'none'){
		elm.style.display='';
	}else{
		elm.style.display='none';
	}
}

/* Datetime JavaScript funksjoner - START */

/**
 * Funksjonen fjerner alt som står i en tekstfeltet (felt) dersom det ikke
 * inneholder et heltall.
 *
 * @access public
 * @return void
 **/
function dtOnFocus(felt) {
	if(felt.value!=parseInt(felt.value,10)) {
		felt.value = '';
	}
}

/**
 * Funskjonen erstatter alt som står i tekstfeltet med "YYYY" (eller tilsvarende
 * for den gitte locale) dersom feltets verdi ikke er et heltall. Dersom feltet
 * er et heltall ser vi på om verdien er mindre enn hundre og avgjør om verdien
 * skal adderes med 1900 eller 2000 avhengig av om verdien er større eller mindre
 * enn de verdien på de to siste sifrene i nåværende år.
 *
 * Dersom verdien er mindre eller lik årets dato adderes verdien og 2000, ellers
 * adderes verdien og 1900.
 *
 * Bruksområde:
 * Datoer (årstall) som ikke skal være større enn dagens dato.
 *
 * @access public
 * @return void
 **/
function dtOnBlurDownYYYY(felt,yyyy) {
	/* Dersom feltet ikke inneholder et heltall erstattes innholdet med "YYYY" */
	if(felt.value!=parseInt(felt.value,10)) {
		felt.value = yyyy;
	} else {
		if(parseInt(felt.value,10) < 100) {
			currentTime = new Date();
			felt.value = parseInt(felt.value,10) + (parseInt(felt.value,10) <= currentTime.getFullYear() % 100 ? 2000 : 1900);
		}
	}
}

/**
 * Funskjonen erstatter alt som står i tekstfeltet med "YYYY" (eller tilsvarende
 * for den gitte locale) dersom feltets verdi ikke er et heltall. Dersom feltet
 * er et heltall ser vi på om verdien er mindre enn hundre adderer verdien med
 * 2000 dersom dette er tilfelle.
 *
 * Bruksområde:
 * Datoer (årstall) som skal være større eller lik dagens dagens dato.
 *
 * @access public
 * @return void
 **/
function dtOnBlurUpYYYY(felt,yyyy) {
	/* Dersom feltet ikke inneholder et heltall erstattes innholdet med "YYYY" */
	if(felt.value!=parseInt(felt.value,10)) {
		felt.value = yyyy;
	} else {
		if(parseInt(felt.value,10) < 100) {
			felt.value = parseInt(felt.value,10) + 2000;
		}
	}
}

/**
 * Funskjonen erstatter alt som står i tekstfeltet med "MM" (eller tilsvarende
 * for den gitte locale) dersom feltets verdi ikke er et heltall. Dersom feltet
 * er et heltall ser vi på om verdien er mindre enn ti og legger til 0 dersom
 * veriden ikke er skrevet med to tegn (0 + tallet).
 *
 * Bruksområde:
 * Bruker for å passe på at feltet inneholder et heltall med to sifre.
 *
 * @access public
 * @return void
 **/
function dtOnBlurMM(felt,mm){
	if(felt.value!=parseInt(felt.value,10)) {
		felt.value = mm;
	} else {
		if(parseInt(felt.value,10) < 10 && felt.value.length == 1) {
			felt.value = '0'+felt.value;
		}
	}
}

/**
 * Funskjonen erstatter alt som står i tekstfeltet med "DD" (eller tilsvarende
 * for den gitte locale) dersom feltets verdi ikke er et heltall. Dersom feltet
 * er et heltall ser vi på om verdien er mindre enn ti og legger til 0 dersom
 * veriden ikke er skrevet med to tegn (0 + tallet).
 *
 * Bruksområde:
 * Bruker for å passe på at feltet inneholder et heltall med to sifre.
 *
 * Denne er laget som en egen funskjon i tilfelle det senere blir aktuelt med
 * egen funksjonalitet for dato feltet
 *
 * @access public
 * @return void
 **/
function dtOnBlurDD(felt,dd){
	dtOnBlurDD(felt,dd);
}

/* Datetime JavaScript funksjoner - SLUTT */

/**
 * Funksjonen benyttes for at kun tall og backspace skal kunne skrives inn i en
 * tekstboks.
 **/
function numOnly(event) {
	if (event.keyCode) char=event.keyCode;
	else char=event.which;
	if((char >= "0".charCodeAt() && char <= "9".charCodeAt()) || char == 0 || char == 8 || char == 9 || char == 46 || char == 37 || char == 39) return true;
	else return false;
}

/**
 * Henter addressen og endrer adressen for den gitte typen og indexen.
 **/
function getAndSetAddress(baseUrl,type,index) {

	var url = baseUrl+'?address_type='+type+'&index='+index;

	http = zXmlHttp.createRequest();
	http.onreadystatechange=function() {
		var navn = '';
		var adresse1 = '';
		var adresse2 = '';
		var adresse3 = '';
		var postnr = '';
		var poststed = '';
		var telefon = '';
		var type = '';
		var rnavn = '';
		var radresse1 = '';
		var radresse2 = '';
		var radresse3 = '';
		var rpostnr = '';
		var rpoststed = '';
		var rtelefon = '';
		var rtype = '';
		var arbeidssektor = '';
		var arbeidsstederIndex = -1;
		var arbeidsstederNavn = new Array();
		var arbeidsstederNo = new Array();

		var antall = 0;
		if(http.readyState==4) {
			if(http.status==200) {

				var nodes = http.responseXML.firstChild;

				while(nodes != null) {

					if(nodes.nodeType == 1) {

						switch(nodes.tagName) {
							case 'address':
								nodes = nodes.firstChild;
								break;
							case 'type':
								type = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'navn':
								navn = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'adresse1':
								adresse1 = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'adresse2':
								adresse2 = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'adresse3':
								adresse3 = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'postnr':
								postnr = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'poststed':
								poststed = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'telefon':
								telefon = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'address':
								nodes = nodes.firstChild;
								break;
							case 'type':
								type = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'navn':
								navn = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'adresse1':
								adresse1 = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'adresse2':
								adresse2 = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'adresse3':
								adresse3 = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'postnr':
								postnr = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'poststed':
								poststed = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'telefon':
								telefon = getValue(nodes);
								nodes = nodes.nextSibling;
								break;

							case 'raddress':
								nodes = nodes.firstChild;
								break;
							case 'rtype':
								rtype = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'rnavn':
								rnavn = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'radresse1':
								radresse1 = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'radresse2':
								radresse2 = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'radresse3':
								radresse3 = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'rpostnr':
								rpostnr = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'rpoststed':
								rpoststed = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'rtelefon':
								rtelefon = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'arbeidssektor':
								arbeidssektor = getValue(nodes);
								nodes = nodes.nextSibling;
								break;

							case 'arbeidssteder':
								nodes = nodes.firstChild;
								break;
							case 'arbeidssted':
							    arbeidsstederIndex = arbeidsstederIndex + 1;
								nodes = nodes.firstChild;
								break;
							case 'arbeidsstednavn':
								arbeidsstederNavn[arbeidsstederIndex] = getValue(nodes);
								nodes = nodes.nextSibling;
								break;
							case 'arbeidsstedno':
								arbeidsstederNo[arbeidsstederIndex] = getValue(nodes);
								nodes = nodes.parentNode;
                                nodes = nodes.nextSibling;
								break;

							default:
								alert('Unknown: '+nodes.tagName);
						}
					} else {
						nodes = nodes.nextSibling;
					}
				}
			}
			else {
				alert('En feil oppstod ved tilkobling til serveren (HTTP Feilkode: ' + http.status + ')');
			}

			document.getElementById(type+'_navn').innerHTML = navn;
			document.getElementById(type+'_adresse1').innerHTML = adresse1;
			document.getElementById(type+'_adresse2').innerHTML = adresse2;
			document.getElementById(type+'_adresse3').innerHTML = adresse3;
			document.getElementById(type+'_postnr').innerHTML = postnr;
			document.getElementById(type+'_poststed').innerHTML = poststed;
			if(telefon != '' && telefon != null) {
				document.getElementById(type+'_telefon').innerHTML = telefon;
				document.getElementById(type+'_telefon_title').style.display = '';
			} else {
				document.getElementById(type+'_telefon').innerHTML = telefon;
				document.getElementById(type+'_telefon_title').style.display = 'none';
			}

			if(type == 'arbeidsgiver') {
			    type = 'region';
    			document.getElementById(type+'_navn').innerHTML = rnavn;
    			document.getElementById(type+'_adresse1').innerHTML = radresse1;
    			document.getElementById(type+'_adresse2').innerHTML = radresse2;
    			document.getElementById(type+'_adresse3').innerHTML = radresse3;
    			document.getElementById(type+'_postnr').innerHTML = rpostnr;
    			document.getElementById(type+'_poststed').innerHTML = rpoststed;
    			if(rtelefon != '' && rtelefon != null) {
    				document.getElementById(type+'_telefon').innerHTML = rtelefon;
    				document.getElementById(type+'_telefon_title').style.display = '';
    			} else {
    				document.getElementById(type+'_telefon').innerHTML = rtelefon;
    				document.getElementById(type+'_telefon_title').style.display = 'none';
    			}

    			document.getElementById('arbeidssektor').innerHTML = arbeidssektor;

                type = 'arbeidssted';
                document.getElementById('arbeidssted_select').innerHTML = '';
    			document.getElementById(type+'_navn').innerHTML = '';
    			document.getElementById(type+'_adresse1').innerHTML = '';
    			document.getElementById(type+'_adresse2').innerHTML = '';
    			document.getElementById(type+'_adresse3').innerHTML = '';
    			document.getElementById(type+'_postnr').innerHTML = '';
    			document.getElementById(type+'_poststed').innerHTML = '';
    			document.getElementById(type+'_telefon').innerHTML = '';
    			document.getElementById(type+'_telefon_title').style.display = 'none';

    			for(var i=0;i < arbeidsstederNavn.length;i++) {
                    var option = document.createElement('option');
                    option.value = arbeidsstederNo[i];
                    option.appendChild( document.createTextNode( arbeidsstederNavn[i] ));
                    document.getElementById('arbeidssted_select').appendChild( option );
    			}
    			if(document.getElementById('arbeidssted_select').options.length > 1) {
                    document.getElementById('arbeidssted_select').selectedIndex = 1;
                    getAndSetAddress('/abcmedlem/getaddressxml','arbeidssted',arbeidsstederNo[1]);
    			}
			}

			var types = new Array('arbeidssted','arbeidsgiver','region');
			var fields = new Array('navn','adresse1','adresse2','adresse3','postnr','poststed','telefon');
			for(var i=0;i < types.length;i++) {
                type = types[i];
                for(var j=0;j < fields.length;j++) {
                    if(document.getElementById(type+'_'+fields[j]) != null) {
                         if(document.getElementById(type+'_'+fields[j]).innerHTML != '') {
                            document.getElementById(type+'_'+fields[j]).style.display = '';
                         } else {
                            document.getElementById(type+'_'+fields[j]).style.display = 'none';
                         }
                    }
                }
    		}
		}
	}
	http.open("get",url,true);
	http.send(null);
}

/**
 * Hjelpefunksjon som benyttes av getAndSetAddress for parsing av XML
 **/
function getValue(node) {
	while(node != null) {
		if(node.nodeType == 3) {
			return node.nodeValue;
		}
		node = node.firstChild;
	}
	return '';
}

/**
 *
 * @access public
 * @return void
 **/
function saveFormState(form) {
	form.originalstate = Array();
	for(var i=0;i<form.elements.length;i++) {
		form.originalstate[i] = form.elements[i].value;
	}
}

/**
 *
 * @access public
 * @return void
 **/
function isStateChanged(form) {
	for(var i=0;i<form.elements.length;i++) {
		if(form.originalstate[i] != form.elements[i].value) return true;
	}
	return false;
}

/**
 *
 * @access public
 * @return void
 **/
function showConfirmDialog(text,type,form) {
	isChanged = isStateChanged(form);
	if(isChanged) {
		isChanged = !confirm(text);
	}
	if(!isChanged) {
		form.edit.value = type;
		form.submit();
	}
	return false;
}

/**
 *
 * @access public
 * @return void
 **/
function enableDisableSaveButton(form,button) {
	if(isStateChanged(form)) {
		button.disabled = false;
	} else {
		button.disabled = true;
	}
}

/**
 *
 * @access public
 * @return void
 **/
function checkMaxSize(evt,maxSize) {
	evt = (evt) ? evt : ((window.event) ? window.event : null);
	if(evt) {
		if (evt.target) {
			var targ = evt.target;
		} else if (evt.srcElement) {
			var targ = evt.srcElement;
		}
		if(targ) {
			if(targ.value.toString().length <= maxSize-12) return true;
			var charCode = (evt.charCode || evt.charCode == 0) ? evt.charCode : ((evt.keyCode) ? evt.keyCode : evt.which);
			var okChars = Array(0,8,16,17,18,33,34,35,36,37,38,39,40,46);
			for(var i=0;i<okChars.length;i++) {
				if(charCode == okChars[i]) {
					return true;
				}
			}
			return false;
		}
	}
	return true;
}


