/**
 * Standaard JS file voor SQLToTable.class.php
  * 
 * author Clemens Mol
 * version 2.0.1
 *
 * 22-05-2007 Update aan editable field verbeterd
 */


function getElementsByClassName(node, classname)
{
	var a 		= [];
	var re 		= new RegExp('\\b' + classname + '\\b');
	if (node)
	{
		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;
}

function dblclick_editable(afzender)
{
	id		= afzender.getAttribute("row")+"_"+afzender.getAttribute("column");
	if(afzender.getAttribute('editing')!='true')
	{						
		afzender.setAttribute('editing',"true");
		validator_event		= "";
		if(afzender.getAttribute("validator"))
		{
			var validator_event		= "return Validator(event,this);";
		}
		afzender.innerHTML					= "<input type='text' style='width: 100%;' row='"+afzender.getAttribute("row")+"' value='"+afzender.innerHTML+"' id='"+id+"_txt' td='"+id+"_td' validator='"+afzender.getAttribute("validator")+"' onkeypress=\""+validator_event+"\" onblur=\"hideAndSaveField(this);\" savefunction='"+afzender.getAttribute("savefunction")+"'>";
		document.getElementById(id+"_txt").select();
		document.getElementById(id+"_txt").focus();
	}
}

function hideAndSaveField(afzender)
{	
	var url		= "?savefunction="+afzender.getAttribute("savefunction")+"&value="+afzender.value+"&row="+afzender.getAttribute("row");
	request(url,afzender,"hideSaveFieldConfirmed");	
}

function hideSaveFieldConfirmed(status,afzender)
{
	if(status.substring(status.length-5)=="saved")
	{
		var colors		= new Array("#8de092","white","#8de092","white");
		blinkField(afzender,colors,"hideSaveFieldNow");		
					
	}else
	{
		alert(status);
		var colors		= new Array("white","red","white","red");
		blinkField(afzender,colors);	
	}
}

function hideSaveFieldNow(afzender)
{
	document.getElementById(afzender.getAttribute("td")).innerHTML		= afzender.value;
	document.getElementById(afzender.getAttribute("td")).setAttribute('editing',"false");
}

function saveField(afzender)
{
	var url		= "?savefunction="+afzender.getAttribute("savefunction")+"&value="+afzender.value+"&row="+afzender.getAttribute("row");
	request(url,afzender,"saveFieldConfirmed");
}

function saveCheckbox(afzender)
{
	if(afzender.checked)
	{
		value			= afzender.value;
	}else
	{
		value			= "";
	}
	
	var url		= "?savefunction="+afzender.getAttribute("savefunction")+"&value="+value+"&row="+afzender.getAttribute("row");
	request(url,afzender,"saveFieldConfirmed");
}

function saveFieldConfirmed(status,caller)
{

	if(status.substring(status.length-5)=="saved")
	{
		var colors		= new Array("#8de092","white","#8de092","white");
		blinkField(caller,colors);						
	}else
	{	
		alert(status);
		var colors		= new Array("white","red","white","red");
		blinkField(caller,colors);
	}
}

function blinkField(field,colors,callback)
{
	var blinkfield		= new Blink(field,colors,callback);
	blinkfield.BlinkNow();
}

function setFieldColor(field_id,colors)
{				
	document.getElementById(field_id).style.backgroundColor		= colors[0];
}

function request(url,afzender,callback)
{
	new Ajax(url, {
		method: 'get',
		evalScripts:true,
		onComplete: function(response){
			try
			{
				eval(callback+"(response,afzender)");
			}catch(e){}
		},
		onFailure: function(){
			alert("Helaas, er kon geen xmlhttp object worden gegenereerd. Zonder dit object kan de applicatie niet goed genereren.");
		}
	}).request();
	
}

function Validator(event,caller)
{
	if(event.which)
	{
		keycode			= event.which;
	}else
	{
		keycode			= event.keyCode;
	}
	
	if(keycode==8 || keycode==9)
	{
		return true;
	}
		
	var text		= String.fromCharCode(keycode);	
	eval("var reg	= new RegExp("+caller.getAttribute("validator")+");");
	var result		= text.match(reg);
		
	if(result)
	{
		return true;
	}else
	{
		return false;
	}
}

function showsubmenu(caller)
{
	var form		= caller.form;
	var submenu		= getElementsByClassName(form,"submenu");
	for(var i=0; i<submenu.length; i++)
	{
		if(submenu[i].id==caller.getAttribute("submenu"))
		{
			// Het gaat om dit menu
			var status		= caller.getAttribute("submenu_status");
			if(status=="open")
			{
				caller.setAttribute("submenu_status","closed");
				submenu[i].style.display		= 'none';
			}else
			{
				caller.setAttribute("submenu_status","open");
				submenu[i].style.display		= 'block';
			}
			submenu[i].style.left			= (parseInt(caller.offsetLeft)+parseInt(caller.offsetWidth))-(submenu[i].offsetWidth)+"px";
			submenu[i].style.top			= caller.offsetTop+caller.offsetHeight;
		}
	}					
}

function delete_items(caller)
{
	if(confirm('Weet u zeker dat u de geselecteerde items ('+caller.form.getAttribute('checked_items')+') wilt verwijderen?'))
	{
		var elements		= caller.form.elements;
		var name			= caller.form['name'];
		
		for(var j=0; j<elements.length; j++)
		{
			if(elements[j].name==name+'_act')
			{
				elements[j].value			= "delete";
				caller.form.submit();
			}
		}
	}
}
								
function Blink(field,colors,callback)
{
	this.field 			= field;
	this.colors			= colors;
	this.callback		= callback;
	this.current_color	= 0;
	
	this.BlinkNow = function BlinkNow()
	{			
		if(this != arguments.callee._oScope)
		{
			return arguments.callee.apply(arguments.callee._oScope, arguments);
		};		
		
		if(this.current_color<this.colors.length)
		{
			field.style.backgroundColor		= this.colors[this.current_color];
			this.current_color++;
			var self		= this;
			window.setTimeout(function(){self.BlinkNow();},50);
		}else
		{
			try {
				if(this.callback)
				{
					eval(this.callback+"(this.field)");
				}
			}catch(e){}
		}
	};
	

	//setting reference
	this.BlinkNow._oScope = this;
};

function Wait(item,seconds,callback)
{
	this.item 			= item;
	this.callback		= callback;
	this.seconds		= seconds;
	
	var self			= this;
	this.timer			= window.setTimeout(function(){self.Execute();},seconds);
	
	this.Execute = function Execute()
	{			
		if(this != arguments.callee._oScope)
		{
			return arguments.callee.apply(arguments.callee._oScope, arguments);
		};		
	
		eval(this.callback+"(this.item)");
	};
	
	this.Stop = function Stop()
	{
		clearTimeout(this.timer);
	};

	//setting reference
	this.Execute._oScope = this;
};

function Selections()
{
	this.CheckAll		= function Check(caller)
	{
		var aantal		=0;
		var items		= caller.form.elements;
				
		for(var i=0; i<items.length; i++)
		{	
			if(items[i].type=="checkbox" && items[i].getAttribute('rowselection')==1)
			{	
				items[i].checked		= caller.checked;				
			}
		}
						
		this.Callback(caller);
	}
	
	this.CheckItem			= function Check(caller)
	{
		this.Callback(caller);
	}
	
	this.Callback		= function Callback(caller)
	{
		var items		= caller.form.elements;
		var todo		= new Array();
		var aantal		= 0;
		for(var i=0; i<items.length; i++)
		{
			if(items[i].type=="checkbox" && items[i].getAttribute('rowselection')==1)
			{
				if(items[i].checked)
				{
					aantal++;
				}
			}else if(items[i].type=="hidden" && items[i].name=='onSelection')
			{
				todo.push(items[i].value);				
			}
		}
		
		caller.form.setAttribute("checked_items",aantal);		
		
		for(var j=0; j<todo.length; j++)
		{
			try{
				var aantal		= caller.form.getAttribute("checked_items");
				eval(todo[j]+"(aantal)");
			}catch(e){}
		}
	}
};


var Selection		= new Selections();


function resizeHeaders()
{
	var containers		= getElementsByClassName(document.body,"tablelist_container");
	for(var i=0; i<containers.length; i++)
	{
		var tables		= getElementsByClassName(containers[i],"tablelist");
		var kolommen	= tables[1].getElementsByTagName("td");
		var headings	= tables[0].getElementsByTagName("th");
		var j			= 0;
		for(j=0; j<headings.length-1; j++)
		{		
			try{
				headings[j].style.width		= parseInt(kolommen[j].offsetWidth)+2+"px";
			}catch(e){}
			try{
				var verschil = parseInt(headings[j].offsetWidth) - parseInt(kolommen[j].offsetWidth);															
				headings[j].style.width		= parseInt(headings[j].style.width)-verschil+"px";							
			}catch(e){}	
		}	
	}
	
	try{
		resizeHeadersDone(kolommen);
	}catch(e){}
}

window.addEvent('load',function(){resizeHeaders();});
window.addEvent('resize',function(){resizeHeaders();});
