
function cloneObject(obj) {
    for (i in obj) {
        this[i] = obj[i];
    }
}

function triggerEvent(e, by) {
	var src = e.srcElement ? e.srcElement : e.target;
	if (by) e.retrigger = by;
	
	while (src) {
		if (typeof(src["on"+e.type]) == 'function') {
			var fn = src["on"+e.type]
			fn(e);
			if (e.cancelBubble) return false;
		}
		
		if (src == document) break;
		src = src.parentNode;
	}
}

/*
	Select a range of text in a textfield
*/
function selectRange (txtfld, iStart, iLength) {
    if (txtfld.createTextRange) {
		var oRange = txtfld.createTextRange(); 
		oRange.moveStart("character", iStart); 
		oRange.moveEnd("character", iLength - txtfld.value.length); 
		oRange.select();
    } else if (txtfld.setSelectionRange) {
		txtfld.setSelectionRange(iStart, iLength);
    }
    txtfld.focus();
}

function addEvent(obj, evType, fn) {
	alert('You are calling addEvent (methods.js) for '+ func +' , which is deprecated. Please update your javascript code to a jQuery selector');	
	if (obj.addEventListener) {
		obj.addEventListener(evType, fn, false);
		return true;
	} else if (obj.attachEvent) {
		var r = obj.attachEvent("on"+evType, fn);
		return r;
	} else {
		var old_fn = obj["on" + evType];
		obj["on" + evType] = function (e) {
			var res = old_fn();
			if (!res && typeof(res) != "undefined") return false;
			
			var res = fn();
			if (!res && typeof(res) != "undefined") return false;
		};
	}
}

function addLoadEvent(func, beginning) {
	alert('You are calling addLoadEvent (methods.js) for '+ func +' , which is deprecated. Please update your javascript code to a jQuery selector');	
	var oldonload = window.onload;
	window.onload = typeof(window.onload) == 'function' ? beginning ? 
		function() {func(); oldonload();} : 
		function() {oldonload(); func();} : 
		func;
}


function hidebutton_click(element, status, self, desc_on, desc_off) {	
	if (status == -1 || typeof(status) == "undefined") {
		element.style.display = (element.style.display == "none" ? "block" : "none");
	} else {
		element.style.display = (status==0 ? "none" : "block");
	}
	
	if (typeof(self) != "undefined") {
		self.className = (element.style.display == "none" ? "off" : "on");
		
		desc = (element.style.display == "none" ? desc_off : desc_on);
		if (typeof(desc) != "undefined") self.title = desc;
	}
}

function checkAll(obj, name)
{
	alert('You are calling a deprecated checkAll function (methods.js). Please update this function to jQuery');
	var checked = obj.checked;
	var elements = obj.form.elements;
	var number = elements.length;

	for (i=0; i<number; i++){
		var el = elements[i];
		if (el.type == 'checkbox' && (!name || el.name==name)) el.checked = checked;
	}
}

function in_array(val, arr) {
	for (var i=0; i<arr.length; i++) {
		if (arr[i] == val) return true;
	}
	return false;
}

function displayFieldsFromRadio(inifile, triggerfield, arrayfield)
{
	
	var fieldname=inifile+'['+triggerfield+']';
	
	var resultfield = new Array();	
	
	for (var i=0; i<arrayfield.length; i++){	
		
		if (arrayfield[i].indexOf("#alias:")==-1){
			resultfield[i]=inifile+'['+arrayfield[i]+']';		
		}else{
			resultfield[i]=arrayfield[i].replace("#alias:","");
			
		}
	}
	
	var list = document.forms[0].elements;	
	for (var i=0; i<list.length; i++){	
		
			if(list[i].getAttribute('name')==fieldname)
			{				
				if(list[i].checked==true){					
					waarde = list[i].value;
				}
			}
	}
	var listshowfor = document.forms[0].elements;
	for (var i=0; i<listshowfor.length; i++){
		if (list[i].getAttribute('show_for')) {
			var showfor = list[i].getAttribute('show_for').split(",");
			fieldn = list[i].getAttribute('name');			
			if(in_array(fieldn,resultfield) && in_array(waarde, showfor)){						
			  showField(list[i]);
			}else if(in_array(fieldn,resultfield)){
				hideField(list[i]);					
			}
		}
	}
}

function fieldDisplayStatus(f)
{
	while (f && f.tagName != "TR") f = f.parentNode;
	try {
		var displayStatus =  f.style.display;
	} catch (e) {		
		// do nothing
	}
	return displayStatus;
}

function showField(f)
{
	while (f && f.tagName != "TR") f = f.parentNode;
	try {
		f.style.display = "";
	} catch (e) {		
		// do nothing
	}
}

function hideField(f)
{		
	while (f && f.tagName != "TR") f = f.parentNode;
	try {
		f.style.display = "none";
	} catch (e) {		
		// do nothing
	}
}

function setCheckListFromCombo(veld1,veld2)
{		
	var comboval = getComboValue(veld1.name);		
	var list = document.forms[0].elements;		
	
	for (var i=0; i<list.length; i++){	
		var checkname = veld2+'[]';	
		if(list[i].name == checkname){			
			if(list[i].value==comboval){
				list[i].checked = true;
			}			
		}
	}	
}


function checkEmptyField(id, name, type) {	
	
	if(type=='optgroup'){
		
		var chk = false;		
		
		try{
			//checklist
			var objects = document.getElementsByName(name+'[]');
			var objslength = objects.length;
		}catch(e){			
		}			
		//radio
		if(objects.length==0){
			var objects = document.getElementsByName(name);			
			var objslength = objects.length-1;
		}
		
		for (var i=0; i<objslength; i++){		
			//obj1 first checkbox or rafio for proper tootltip position
			var obj1 = document.getElementById(id+'__0');	
			var obj =  document.getElementById(id+'__'+i);						
			if(obj.type!='hidden'){				
				if(obj.checked==true){	   
				    chk =  true;				   
				}					
			}						
		}	
			
		return [chk,obj1];		
		
	}else if(type=='select'){		
		//combobox
		var obj = getCombo(id).DOMelem_input;		
		var f= obj;
		while (f && f.tagName != 'TR')f = f.parentNode;
		if(f.style.display=='none') {		
			
			return [true,f];			
			
		}else if (getComboValue(id)==''|| getComboValue(id)==null) return [false,obj];	
	
	}else if(document.getElementById(id)){
		//text input fields
		var obj = document.getElementById(id);		
		var f= obj;
		while (f && f.tagName != 'TR')f = f.parentNode;
		if(f.style.display=='none') {	
		
			return [true,f];			
			
		}else if ((obj.value.length==0) || (obj.value==null))  return [false,obj];	
		
	}
	return false;	
}

function setCheckListFromCombo(veld1,veld2)
{		
	var comboval = getComboValue(veld1.name);		
	var list = document.forms[0].elements;		
	
	for (var i=0; i<list.length; i++){	
		var checkname = veld2+'[]';	
		if(list[i].name == checkname){			
			if(list[i].value==comboval){
				list[i].checked = true;
			}			
		}
	}	
}	

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}


function getElementsByClassName(classname, node) {
	alert('You are calling getElementByClassName (methods.js), which is deprecated. Please update your javascript code to a jQuery selector');
	
	if(!node) node = document.getElementsByTagName("body")[0];
	var a = [];
	var re = new RegExp(classname);
	var els = node.getElementsByTagName("*");
	for(var i=0,j=els.length; i<j; i++)
		if(re.test(els[i].className))a.push(els[i]);
	
	return a;
}

/**
  * Attach progress animation for Ajax requests
  * jQueryObj is the container for the progress animation
  */
function attachProgressAnimation(jQueryObj)
{
	var anim = $('<center style="display:none"><img src="/gfx/progress.gif" border="0" /><br /><font color="#666">Laden...</font></center>');
	anim.ajaxStart(function() { $(this).show();	});	
	anim.ajaxComplete(function() { $(this).remove(); });
	
	jQueryObj.append(anim);
}


function getManual(curitem, curaction) 
{
	var containerid = 'manual_container';
	var container = $('div#'+containerid);
	
	if (container.html() != null) {
		closeManual();
		return;
	}
	
	// container is not yet defined, create html element
	container = $("<div>").attr('id','manual_container');
	$('div#content_container').append(container)
	attachProgressAnimation(container);
	
	var tekst = $.get("/beheer.actions/manual", { item: ""+curitem+"", action: ""+curaction+"" }, function(data){
		container.append(data);
	});
	
	$('.right').attr('class', 'active');
}

function closeManual() {
	$('div#manual_container').hide('fast');
	$('div#manual_container').remove();
	$('.active').attr('class', 'right');
}

function advancedSearch(curitem, curtable) 
{
	var containerid = 'search_form_advanced';
	var container = $('div#'+containerid);
	
	if (container.html() != null) {
		closeSearch();
		return;
	}
	
	container = $("<div>").attr('id',containerid);
	
	$('div#content_container').append(container);

	attachProgressAnimation($('div#search_form_advanced'));

	var tekst = $.get("/beheer.actions/advanced", { item: ""+curitem+"", table: ""+curtable+""}, function(data){
		container.append(data);
	});
	
	$('div#content_container').append(container);
}

function closeSearch() {
	$('div#search_form_advanced').hide('fast');
	$('div#search_form_advanced').remove();
}