function getKeyCode(event) {
	return event.keyCode?event.keyCode:event.which?event.which:event.charCode;
}
function isEnter(event) {
	return (getKeyCode(event) == 13);
}
function doScroll() {
	var destinationLink;
	if (doScroll.arguments[0])
		destinationLink=get_object(doScroll.arguments[0]);
	else
		destinationLink=get_object('scrollHere');
	var desty=destinationLink.offsetTop;
	var thisNode=destinationLink;
	while (thisNode.offsetParent && (thisNode.offsetParent != document.body)) {
		thisNode=thisNode.offsetParent;
		desty+=thisNode.offsetTop;
	}
	window.scrollTo(0,desty-20);
}
function get_object(o) {
	if (document.getElementById && document.getElementById(o) != null)
		return document.getElementById(o);
	else if (document.layers && document.layers[object] != null)
		return document.layers[o];
	else if (document.all)
		return document.all[o];
}
function addOption(theSelect,theValue,theText) {
	var theOption=new Option(theText, theValue, false, false)
	var selectLength=theSelect.options.length;
	theSelect.options[selectLength]=theOption;
}
function trace(output) {
	if (developer) {
		var o;
		if (!get_object('debugger')) {
			o=document.createElement('div');
			o.setAttribute('id','debugger');
			document.body.appendChild(o);
		} else {
			o=get_object('debugger');
		}
		o.innerHTML+=output+'<br />';
	}
}
function isJpg(value) {
	var valueLCase=value.toLowerCase();
	return value.match('.jpg$');
}
function avoidNonSelectable(theSelect) {
	if (theSelect.options[theSelect.selectedIndex].value == '')
		theSelect.selectedIndex=0;
}
function getCheckedRadioValue(theRadio) {
	var considerDisabled=(getCheckedRadioValue.arguments[1]);
	if (theRadio[1]) {
		for (i=0;i<theRadio.length;i++) {
			if (theRadio[i].checked && (!considerDisabled || (considerDisabled && !theRadio[i].disabled)))
				return theRadio[i].value;
		}
	} else {//single element (possible hidden)
		return theRadio.value;
	}
	return '';
}
function getSelectedValues(theSelect,theReturnType,mode) {
	var theReturnType=(theReturnType)?theReturnType:'list';
	var mode=(mode)?mode:'value';
	switch (theReturnType) {
		case 'list':
			var theList='';
			for (i=0;i<theSelect.options.length;i++) {
				if (theSelect.options[i].selected) {
					if (theList.length > 0)
						theList=theList+',';
					theList=eval('theList+theSelect.options[i].'+mode);
				}
			}
			return theList;
		break;
		case 'array':
			var theArray=new Array();
			for (i=0;i<theSelect.options.length;i++) {
				if (theSelect.options[i].selected)
					theArray.push(eval('theList+theSelect.options[i].'+mode));
			}
			return theArray;
		break;
		case 'count':
			var selectedCount=0;
			for (i=0;i<theSelect.options.length;i++) {
				if (theSelect.options[i].selected)
					selectedCount++;
			}
			return selectedCount;
		break;
		case 'boolean':
			for (i=0;i<theSelect.options.length;i++) {
				if (theSelect.options[i].selected) {
					return true;
					break;
				}
			}
		break;
	}
	return false;
}
function getCheckedValues(theCheckbox) {
	if (getCheckedValues.arguments[1])
		theReturnType=getCheckedValues.arguments[1];
	else
		theReturnType='list';
	switch (theReturnType) {
		case 'list'://returns a list with the checked values
			var theList='';
			if (theCheckbox[0])
				for (i=0;i<theCheckbox.length;i++) {
					if (theCheckbox[i].checked) {
						if (theList.length > 0)
							theList=theList+',';
						theList=theList+theCheckbox[i].value;
					}
				}
			else if (theCheckbox.checked)
				theList=theCheckbox.value;
			return theList;
		break;
		case 'array'://returns an array with the checked values
			var theArray=new Array();
			if (theCheckbox[0])
				for (i=0;i<theCheckbox.length;i++) {
					if (theCheckbox[i].checked)
						theArray.push(theCheckbox[i].value);
				}
			else if (theCheckbox.checked)
				theArray.push(theCheckbox.value);
			return theArray;
		break;
		case 'count'://returns number of checked items
			var checkedCount=0;
			if (theCheckbox[0])
				for (i=0;i<theCheckbox.length;i++) {
					if (theCheckbox[i].checked)
						checkedCount++;
				}
			else if (theCheckbox.checked)
				checkedCount++;
			return checkedCount;
		break;
		case 'boolean'://returns if any is checked
			if (theCheckbox[0])
				for (i=0;i<theCheckbox.length;i++) {
					if (theCheckbox[i].checked) {
						return true;
						break;
					}
				}
			else if (theCheckbox.checked)
				return true;
		break;
		case 'indexList'://returns list with the checked indexes
			var theList='';
			if (theCheckbox[0])
				for (i=0;i<theCheckbox.length;i++) {
					if (theCheckbox[i].checked) {
						if (theList.length > 0)
							theList=theList+',';
						theList=theList+''+i;
					}
				}
			else if (theCheckbox.checked)
				theList=-1;
			return theList;
		break;
	}
	return false;
}
function setSelect(o,theValue,type) {
	var i;
	if (!type)
		type='value';
//	trace('setSelect('+o.name+','+theValue+','+type+')');
	switch (type) {
		case 'value':
			for (i=0;i<o.options.length;i++) {
				if (o.options[i].value == theValue) {
					o.selectedIndex=i;
					break;
				}
			}
		break;
		case 'text':
			for (i=0;i<o.options.length;i++) {
				if (o.options[i].text.toUpperCase() == theValue.toUpperCase()) {
					o.selectedIndex=i;
					break;
				}
			}
		break;
		case 'like':
			var myRe;
			var theValueUpperCase;
			for (i=0;i<o.options.length;i++) {
				myRe=new RegExp('^'+o.options[i].text.toUpperCase());
				theValueUpperCase=theValue.toUpperCase();
//				trace(myRe.toString()+' match '+theValueUpperCase);
				if (myRe.test(theValueUpperCase)) {
					o.selectedIndex=i;
					return o.options[i].text;
				}
			}
		break;
	}
}
function LTrim(value) {
	var re=/\s*((\S+\s*)*)/;
	return value.replace(re, "$1");
}
function RTrim(value) {
	var re=/((\s*\S+)*)\s*/;
	return value.replace(re, "$1");
}
function trim(value) {
	return LTrim(RTrim(value));
}
function isValid(type,value) {
	switch (type) {
		case 'email':
			var lCaseValue=value.toLowerCase();
			return lCaseValue.match(/^[\_]*([a-z0-9]+(\.|\_*|\-*)?)+@([a-z0-9\-\.]+(\.|\-*\.))+[a-z]{2,6}$/);
		break;
		case 'webImage':
			var re=/.jpg$/i;
			if (re.test(value))
				return true;
			var re=/.jpeg$/i;
			if (re.test(value))
				return true;
			var re=/.gif$/i;
			if (re.test(value))
				return true;
			var re=/.png$/i;
			if (re.test(value))
				return true;
			return false;
		break;
		case 'swf':
			var re=/.swf$/i;
			if (re.test(value))
				return true;
			return false;
		break;
	}
	return false;
}
// AJAX
function loadAJAX(label,url) {
	var ajaxType=(loadAJAX.arguments[2])?loadAJAX.arguments[2]:'xml';//probably 'text' if not 'xml';
	// branch for native XMLHttpRequest object
	if (window.XMLHttpRequest) {
		eval('AJAXRequest_'+label+'=new XMLHttpRequest();');
		var AJAXRequest=eval('AJAXRequest_'+label);
		AJAXRequest.open("GET",url,true);
		AJAXRequest.onreadystatechange=new Function("processAJAX('"+label+"','"+ajaxType+"')");
		AJAXRequest.send(null);
		// branch for IE/Windows ActiveX version
	} else if (window.ActiveXObject) {
		eval('AJAXRequest_'+label+'=new ActiveXObject("Microsoft.XMLHTTP");');
		var AJAXRequest=eval('AJAXRequest_'+label);
		if (AJAXRequest) {
			AJAXRequest.open("GET",url,true);
			AJAXRequest.onreadystatechange=new Function("processAJAX('"+label+"','"+ajaxType+"')");
			AJAXRequest.send();
		}
	}
}
function processAJAX(label,ajaxType) {
	var theRequest=eval('AJAXRequest_'+label);
	// only if req shows "complete"
	if (theRequest.readyState == 4 && theRequest.status == 200 && eval('window.popAJAX_'+label)) {
		var response=(ajaxType == 'xml')?theRequest.responseXML.documentElement:theRequest.responseText;
		eval('popAJAX_'+label+'(response);');
	}
}
// A R R A Y
Array.prototype.inArray=function (value,caseSensitive) {
	var i;
	for (i=0;i<this.length;i++) {
		if (caseSensitive) {
			if (this[i].toLowerCase() == value.toLowerCase())
				return true;
		} else {
			if (this[i] == value)
				return true;
		}
	}
	return false;
}
Array.prototype.isKey = function(){
  for(i in this){
    if(i === arguments[0])
      return true;
  };
  return false;
};
Array.prototype.removeItems=function(itemsToRemove) {
	if (!/Array/.test(itemsToRemove.constructor))
		itemsToRemove=[itemsToRemove];
	var j;
	for (var i=0;i<itemsToRemove.length;i++) {
		j=0;
		while (j < this.length) {
			if (this[j] == itemsToRemove[i])
				this.splice(j,1);
			else
				j++;
		}
	}
}
Array.prototype.getIndex=function(secondDimensionOrId,value) {
	if (isNaN(secondDimensionOrId)) {
		for (var i=0;i<this.length;i++) {
			if (this[i][secondDimensionOrId] == value)
				return i;
		}
		return -1;
	} else {
		//check for id at index 0
		for (var i=0;i<this.length;i++) {
			if (this[i][0] == secondDimensionOrId)
				return i;
		}
		return -1;
	}
}
Array.prototype.valueCount=function(secondDimension,value) {
	var hitCount=0;
	for (var i=0;i<this.length;i++) {
		if (this[i][secondDimension] == value)
			hitCount++;
	}
	return hitCount;
}
function setParam(variableName,defaultValue) {
	eval(variableName+'=window.'+variableName+' || '+defaultValue+';');
}

function getFilePath(filePath) {
	return filePath.substr(0,filePath.lastIndexOf('/'));
}
function getFileExt(filePath) {
	var temp=filePath.split('.');
	var lastIndex=temp.length-1;
	return temp[lastIndex];
}
function getFile(filePath) {
	var temp=filePath.split('/');
	var lastIndex=temp.length-1;
	return file=temp[lastIndex];
}
function getFileName(filePath) {
	var temp=filePath.split('/');
	var lastIndex=temp.length-1;
	var file=temp[lastIndex];
	return file.substr(0,file.lastIndexOf('.'));
}

function findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent) {
		while (1) {
			curleft+=obj.offsetLeft;
			if (!obj.offsetParent) {
				break;
			}
			obj=obj.offsetParent;
		}
	} else if (obj.x) {
		curleft+=obj.x;
	}
	return curleft;
}
function findPosY(obj) {
	var curtop = 0;
	if (obj.offsetParent) {
		while (1) {
			curtop+=obj.offsetTop;
			if (!obj.offsetParent) {
				break;
			}
			obj=obj.offsetParent;
		}
	} else if (obj.y) {
		curtop+=obj.y;
	}
	return curtop;
}
// S U G G E S T I O N   A J A X   L I S T
var suggestion_active=-1;
var suggestion_array=new Array();
var suggestionSelectionEnabled=true;
function doSuggest(e,field,id,label,extendedUrlVars) {
	var debug=false;
	var input=trim(field.value);
	switch (getKeyCode(e)) {
		case 38://up
			var nearSuggestion=parseInt(suggestion_active)-1;
			if (input.length > 1 && suggestion_array.length != 0 && suggestion_active != 0 && get_object('suggestion_'+label+'_'+id+'_'+nearSuggestion))
				markSuggestion(get_object('suggestion_'+label+'_'+id+'_'+nearSuggestion));
		break;
		case 39://right
			hideSuggest(id,label);
		break;
		case 40://down
			var nearSuggestion=parseInt(suggestion_active)+1;
			if (input.length > 1 && suggestion_active < suggestion_array.length-1 && get_object('suggestion_'+label+'_'+id+'_'+nearSuggestion))
				markSuggestion(get_object('suggestion_'+label+'_'+id+'_'+nearSuggestion));
		break;
		case 13://enter
			if (suggestion_active == -1)
				doSuggestionOnEnter(id,label,suggestion_active)
			else
				selectSuggestion(get_object('suggestion_'+label+'_'+id+'_'+suggestion_active));
		break;
		default:
			if (input.length > 1) {
				var url='ajax_suggestion.php?id='+id+'&input='+escape(input)+'&lb='+label;
				if (extendedUrlVars)
					url+='&'+extendedUrlVars;
				if (debug) trace(url);
				loadAJAX('suggestion',url);
			}
	}
	if (input.length < 2)
		hideSuggest(id,label);
//	if (debug) { get_object('debugwindow').innerHTML+='<br>getKeyCode(e): '+getKeyCode(e)+' id: '+id+' label: '+label; }
}
function selectSuggestion(o) {
	var debug=false;
	if (debug) trace('suggestionSelectionEnabled='+suggestionSelectionEnabled);
	if (suggestionSelectionEnabled) {
		var label=o.id.split('_')[1];
		var id=o.id.split('_')[2];
		var i=o.id.split('_')[3];
		if (get_object('suggestionValue_'+label+'_'+id+'_'+i)) {//the object could be gone due to remove click
			if (suggestion_array.length != 0) {
				var inputField=get_object('inputted_value_'+id);
				inputField.value=get_object('suggestionValue_'+label+'_'+id+'_'+i).innerHTML;
			}
			doSuggestionOnEnter(id,label,suggestion_active);
			hideSuggest(id,label);//AFTER above, because suggestion_active is resetted!!!
			if (debug) trace('id: '+id+' label: '+label);
		}
	}
}
function onBlurSuggestField(id,label) {
	var debug=false;
	if (debug) { get_object('debugwindow').innerHTML+='id: '+id+' label: '+label; }
	setTimeout("hideSuggest("+id+",'"+label+"')",200);
}
function hideSuggest(id,label) {
	var debug=false;
//	resetSuggestionActive();
	if (debug) { get_object('debugwindow').innerHTML+='id: '+id+' label: '+label; }
	get_object('suggestions_'+label+'_'+id).style.visibility='hidden';
}
function resetSuggestionActive() {
	suggestion_active=-1;
}
function markSuggestion(o) {
	var label=o.id.split('_')[1];
	var id=o.id.split('_')[2];
	var i=o.id.split('_')[3];
	var debug=false;
	if (debug) { get_object('debugwindow').innerHTML+=suggestion_array[suggestion_active]+':'+suggestion_array[i]+'<br>'; }
	if (suggestion_active != -1)
		get_object('suggestion_'+label+'_'+id+'_'+suggestion_active).className='suggestion_item';
	o.className='suggestion_item_on';
	suggestion_active=i;
}
function popAJAX_suggestion(responseXML) {
	var debug=false;
	var id=responseXML.getElementsByTagName('id')[0].firstChild.data;
	var label=responseXML.getElementsByTagName('lb')[0].firstChild.data;
	var sgTag=responseXML.getElementsByTagName('sg');
	var showLimit=parseInt(responseXML.getElementsByTagName('lm')[0].firstChild.data);
	var theId,theName,className,useCount;
	var o=get_object('suggestions_'+label+'_'+id);
	o.innerHTML='';
	suggestion_array=new Array();
	resetSuggestionActive();
	var sggHolder,sggValue,removeIcon;
	for (var i=0;i<sgTag.length;i++) {
		sgId=sgTag[i].attributes[0].nodeValue;
		theName=sgTag[i].firstChild.data;
		suggestion_array.push(sgId);
		sggHolder=document.createElement('div');
		sggHolder.setAttribute('id','suggestion_'+label+'_'+id+'_'+i);
		sggHolder.onclick=function() {
			selectSuggestion(this);
		}
		sggHolder.onmouseover=function() {
			markSuggestion(this);
		}
		o.appendChild(sggHolder);
		sggHolder.className='suggestion_item';
		sggValue=document.createElement('span');
		sggValue.setAttribute('id','suggestionValue_'+label+'_'+id+'_'+i);
		sggValue.innerHTML=theName;
		sggHolder.appendChild(sggValue);
		if (i == 0)
			markSuggestion(sggHolder);
		if (i > showLimit)
			break;
	}
	//append hit count info
	var totalHits=parseInt(responseXML.getElementsByTagName('rc')[0].firstChild.data);
	newDiv=document.createElement('div');
	newDiv.setAttribute('class','suggestion_hitCountInfo');
	newDiv.innerHTML=(totalHits > showLimit)?'(Visar '+showLimit+' tr&auml;ffar av '+totalHits+')':'(Visar alla tr&auml;ffar)';
	o.appendChild(newDiv);
	get_object('suggestions_'+label+'_'+id).style.visibility=(sgTag.length != 0)?'visible':'hidden';
}
function doSuggestionOnEnter(id,label,suggestion_active_atCall) {
	var newSg=trim(get_object('inputted_value_'+id).value);
	if (newSg.length != 0 && suggestion_active_atCall != -1) {
		switch(label) {
			case 'tck':
				getPerson(newSg,suggestion_array[suggestion_active_atCall]);
			break;
		}
	}
}

