var formIdCnt = 0;
var AJAX_Keys=new Array();

function _execute(url,fnc,params,callback)
{
	var rta={"fnc":fnc};

	/* Read variables */
	for(i=0; i < params.length; i++)
	{
		if(params[i].source && getObject(params[i].source) && getObject(params[i].source).type && getObject(params[i].source).type=="file")
			return _iframe_execute(fnc,params,callback);

		variable = params[i].value ? params[i].value : getObjValue(params[i].source);

		try
		{
			eval("rta."+params[i].name+"=variable;"); //escape(variable)
		}
		catch(e) {}
	}

	var success  = function(t)
	{
		try
		{
			//alert( t.responseText );
			elem = eval("("+t.responseText+")");
			if(callback)
				setTimeout(callback+"()",1000);
			process(elem);
		}
		catch(e)
		{
			alert(e + " " + t.responseText);
		}
	};
	var failure=function(t) {alert("Error in ajax request");};
	var myAjax = new Ajax.Request(url,{method:'post',onSuccess:success,onFailure:failure,parameters:"phpajax="+rta.toJSONString()});
	//return true;
}

function _iframe_execute(fnc,params,callback)
{
	/* Getting information about the div container. */
	maincontainer = getObject('ajax_div');
	/* creating a container */
	container = document.createElement("div");
	container.id = "container" + (++formIdCnt);

	destiny = document.createElement("iframe");
	destiny.name = "iframe" + formIdCnt;
	destiny.id = destiny.name;

	/* creating a form */
	form = document.createElement("form");
	form.id = "form" + formIdCnt;
	form.method = "POST";
	form.enctype="multipart/form-data" ;
	form.target = destiny.name;
	form.appendChild( destiny );

	/* adding information into the form */
	div = document.createElement("input");
	div.name = "div";
	div.value = container.id;
	form.appendChild( div );

	callback_form = document.createElement("input");
	callback_form.name = "callback";
	callback_form.value = callback;
	form.appendChild( callback_form );

	magic = document.createElement("input");
	magic.name = "iframe";
	magic.value = "iframe";
	form.appendChild( magic );

	var cntFiles = 0;
	var accInputs={"fnc":fnc};

	for(i=0;i<params.length;i++)
	{
		tmp = getObject( params[i].source );

		/* adding the information */
		eval( "accInputs." + params[i].name + " = params[i].value ? params[i].value : getObjValue(params[i].value) ");
		if (tmp && tmp.type == "file")
		{
			tmp1 = tmp.cloneNode(false);
			tmp1.name = "ajax_" + tmp1.name;
			tmp1.id = tmp1.name;
			form.appendChild(tmp1);
		}
	}

	vars = document.createElement("input");
	vars.name = "phpajax";
	vars.id = vars.name;
	vars.value = accInputs.toJSONString();
	form.appendChild(vars);

	/* adding into the div-container */
	container.appendChild(form);

	/* adding into the div-maincontainer */
	maincontainer.appendChild(container);

	/* submit a form */
	setTimeout("getObject('"+form.id+"').submit();",1000);
}

function process(rta)
{
	if(rta.aprint)
		process_aprint(rta.aprint);

	if(rta.ahideshow)
	{
		for(i=0;i<rta.ahideshow.length;i++)
			eval(rta.ahideshow[i]);
	}

	if(rta.alert)
	{
		for(i=0;i<rta.alert.length; i++)
			alert(rta.alert[i]);
	}

	if(rta.js)
	{
		for(i=0;i<rta.js.length; i++)
			eval(rta.js[i]);
	}
}

function process_aprint(e)
{
	for(i=0;i<e.length;i++)
		aprint(e[i++],e[i++],e[i]);
}

function ahide(elem)
{
	showhide(elem,'none');
}

function ashow(elem)
{
window.location.href='#topbox';
	showhide(elem,'block');
}

function showhide(elem,status)
{
	obj = getObject(elem);
	if(!obj) return;

	try
	{
		obj.style.display=status;
	}
	catch(e)
	{
		try
		{
			obj.display=status;
		}
		catch(f) {}
	}
}

function aprint(obj_name,txt,override)
{
	obj = getObject(obj_name);
	if(!obj) return;

	if (obj.value !=undefined)
	{
		if (override) obj.value = txt;
		else obj.value += txt;
	}
	else if (obj.innerHTML != undefined)
	{
		if (override) obj.innerHTML = txt;
		else obj.innerHTML += txt;
	}
}

function getObject(e)
{
	var obj=null;

	if(document.getElementById)
		obj = document.getElementById(e);
	else if (document.all)
		obj = document.all[e];
	else if (document.layers)
		obj = document.layers[e];
	return obj;
}

function getObjValue(e)
{
	obj=getObject(e);
	if(obj && obj.value)
		return obj.value;
	return "";
}

function setObjValue(e,val)
{
	obj=getObject(e);
	if(!obj) return;
	obj.value=val;
}

function aload_items(e,items)
{
	obj=getObject(e);
	obj.length = 0;

	for(i=0;i<items.length;i++)
	{
		var newOption = document.createElement("OPTION");
		if(!newOption) continue;

		newOption.value = items[i][0];
		newOption.text = items[i][1];
		obj.options.add ? obj.options.add(newOption) : obj.add(newOption,null);
	}
}

function ascroll(name)
{
	document.location='#'+name;
}

function _keyaction(letters,theaction)
{
	if(_keyaction_validate(letters))
	{
		AJAX_Keys[letters] = theaction;
		document.onkeydown = _keyaction_deamon;
		return true;
	}
	return false;
}

function _keyaction_deamon(xEvent)
{
	var pressed;

	f=_keyaction_speacial_keys(xEvent,false);
	switch(f)
	{
		case "shift":
		case "alt":
		case "ctrl":
			pressed= f + "-" + _keyaction_speacial_keys(xEvent,true);
			break;
		default:
			pressed=f;
			break;
	}

	if(AJAX_Keys[pressed.toLowerCase()])
		AJAX_Keys[pressed.toLowerCase()]();
}

function chr(e)
{
	return String.fromCharCode(e);
}

function _keyaction_speacial_keys(e,avoidSpecialKeys)
{
	if(avoidSpecialKeys)
		return chr(e.keyCode);

	var evt = navigator.appName=="Netscape" ? e:event;
	var ret = 0;
	var shiftPressed=false;
	var altPressed=false;
	var ctrlPressed=false;

	if(navigator.appName=="Netscape" && parseInt(navigator.appVersion)==4)
	{
		var mString =(e.modifiers+32).toString(2).substring(3,6);
		shiftPressed=(mString.charAt(0)=="1");
		ctrlPressed =(mString.charAt(1)=="1");
		altPressed  =(mString.charAt(2)=="1");
	}
	else
	{
		shiftPressed= evt.shiftKey;
		altPressed  = evt.altKey;
		ctrlPressed = evt.ctrlKey;
	}

	if ( shiftPressed ) return "shift" ;
	if ( altPressed   ) return "alt" ;
	if ( ctrlPressed  ) return "ctrl" ;
	return chr(e.keyCode);
}

function _keyaction_validate(letters)
{
	if(letters.length < 1) return false;

	letters=letters.toLowerCase();
	parts = letters.split("-");
	switch(parts.length)
	{
		case 1:
			if(parts[0].length==1 && parts[0] >= 'a' && parts[0] <= 'z')
				return true;
			return false;
			break;
		case 2:
			switch(parts[0])
			{
				case "ctrl":
				case "shift":
				case "alt":
					break;
				default:
					return false;
			}
			if(parts[1].length==1 && parts[1] >= 'a' && parts[1] <= 'z')
				return true;
			return false;
			break;
		default:
			return false;
	}
	return false;
}