function AJAXToggleArea(divtag, urlparams){
	divtag_obje=document.getElementById(divtag);
	if(divtag_obje.style.display==""){
		Effect.SlideUp (divtag,{ duration: 0.4 })
	}else{
		if(!divtag_obje.innerHTML){
			divtag_obje.innerHTML="Loading ...";
			Effect.Appear(divtag, { duration: 0.1 });
			//new Draggable(divtag);
			new Ajax.Updater(divtag, urlparams, {asynchronous:true, evalScripts:true });
			//divtag_obje.style.display="";
		}else{
			Effect.SlideDown(divtag, { duration: 0.4 });
		}
	}	
}

function AJAXToggleDIVSlide(divtag){
	divtag_obje=document.getElementById(divtag);
	if(divtag_obje.style.display==""){
		Effect.SlideUp (divtag,{ duration: 0.6 })
	}else{
		Effect.SlideDown(divtag, { duration: 0.6 });
	}
}

function AJAXLoadPanel(divtag, urlparams, loadingtext){
	divtag_obje=document.getElementById(divtag);
	if(loadingtext)divtag_obje.innerHTML=loadingtext;
	Effect.Appear(divtag, { duration: 0.1 });
	new Ajax.Updater(divtag, urlparams, {asynchronous:true, evalScripts:true });
}

function AJAXLoadPanelFade(divtag, urlparams, loadingtext){
	divtag_obje=document.getElementById(divtag);
	//if(loadingtext)divtag_obje.innerHTML=loadingtext;
	new Ajax.Updater(divtag, urlparams, {asynchronous:true, evalScripts:true });
	Effect.Appear(divtag, { duration: 2.1 });
	//Effect.BlindDown(divtag);
}


function AJAXToggleDIV(elem, useslidedown){
	divtag_obje=document.getElementById(elem);
	if(divtag_obje.style.display==""){
		Effect.Fade(elem,{duration:0.3});
	}else{
		if(useslidedown){
			Effect.Appear(elem,{duration:0.3});
		}else{
			Effect.Appear(elem, {duration:0.0});
		}
	}	
}

function AJAXResetTimer(formname){
	//ajTimer = window.setInterval(AJAXResetTimer_ev(timeoutobject),1000);
	//alert(formobj_timer+"-"+);
	if(thiselementf)lastvalueobject.value=thiselementf.value; else lastvalueobject.value=thiselement.value;
	if(command_timer=="focus")timeoutobject.value=1; else timeoutobject.value="";
	ajTimer=window.setTimeout("AJAXResetTimer_ev()",1000);
}

function AJAXResetTimer_ev(){
		//alert(elemname_timer.value);
		timeoutobject.value++;
		if(ajTimer)window.clearInterval(ajTimer);
		AJAXFormChange(formobj_timer,elemname_timer,command_timer,3);
}

function AJAXFormChange(formobj, elemname, command, event){
	//
	formobj_timer=formobj; elemname_timer=elemname; command_timer=command; event_timer=event;
	//
	var partnerobject=document.getElementById(elemname+"_selection");
	var formname=formobj.id;
	//alert(formname);
	eval("var refreshobject=document."+formname+"."+formname+"_refreshhandler;"); 
	eval("var focusobject=document."+formname+"."+formname+"_focushandler;"); 
	eval("timeoutobject=document."+formname+"."+formname+"_timeout;");
	eval("lastvalueobject=document."+formname+"."+formname+"_lastvalue;"); 
	eval("thiselement=document."+formname+"."+elemname); 
	eval("thiselementf=document."+formname+"."+elemname+"_friendly"); 
	eval("var elementobject=formobj."+elemname);

	//alert(focusobject);
	//if(ajTimer)window.clearTimeout(ajTimer);
	if(event){
		// mooo
		var key = event.which || event.keyCode;	
	}
	switch (key) {
		case Event.KEY_UP:
			SelectionIndex=SelectionIndex-1;
			if(partnerobject){
				if(partnerobject.options[partnerobject.selectedIndex-1].value){
					partnerobject.selectedIndex=partnerobject.selectedIndex-1;
					AJDropDown(partnerobject, elemname, formobj.id);
				}
			}
			break;
		case Event.KEY_DOWN:
			SelectionIndex=SelectionIndex+1;
			if(partnerobject){
				if(partnerobject.options[partnerobject.selectedIndex+1].value){
					partnerobject.selectedIndex=partnerobject.selectedIndex+1;
					AJDropDown(partnerobject, elemname, formobj.id);
				}
			}
			break;
		case Event.KEY_RETURN:
			AJDropDown(partnerobject, elemname, formobj.id,1);
			AJtabnextfield(formobj.id);
			//
			break;
		default:
			//SelectionIndex=0;
			if(refreshobject)refreshobject.value="";
			var tmp=Form.serialize(formobj);
			tmp=tmp+"&aj_element="+elemname;
			tmp=tmp+"&aj_formname="+formname;
			tmp=tmp+"&aj_command="+command;
			tmp=tmp+"&aj_calledfrom="+document.location.href;
			
			tmp=tmp+"&aj_focusobject="+"moo"+focusobject.value;
			var url="/lib/ajax/ajaxforms/form_"+formname+"validate.php?"+tmp;
			if(refreshobject)refreshobject.value=url;
			//clearTimeout(AJTimer);
			//alert(timeoutobject);
			var flag=0;
			
			if(thiselementf){
				if(thiselementf.value!=lastvalueobject.value)flag=1;
			}else{
				if(thiselement.value!=lastvalueobject.value)flag=1;
			}
			if(timeoutobject.value<1)flag=0;
			//if(!lastvalueobject.value)flag=0;
			if(command=="focus"){
				//alert(elemname);
				var extobje=document.getElementById(elemname+"_extend");
				if(extobje){
					var te=extobje.style.display;
				}
				if(te=="none"){ // if focus'es extend is invisible
					//alert($(elemname).innerHTML);
					extobje.innerHTML="";
					flag=1;
				}else{
					flag=0; // means we're focusing on an element
				}
				timeoutobject.value=1;
				ClearExtends(formname, elemname);
			}
			if(flag==1){
					new Ajax.Updater("formjavascript", url, {asynchronous:true, evalScripts:true});
					if(formname)AJAXResetTimer(formname);
			}
			//return true; //yay
			break; // :P?
	}
}

function AJAXFormGateway(originalRequest){
	// This will accept a serialized array
	
}

function AJTest(){
		//aTimer = window.setInterval("showalert('This was delayed by 1 second')",1000);
}

function AJAXFormProcess(fname, gstring){
	var formname=fname; // globalise
	var getstring=gstring;
	var url="/lib/ajax/ajaxforms/form_"+formname+"submit.php?"+getstring;
	//pars="{method:'get', parameters:'"+getstring+"'}";
	container=formname+"_container";
	new Ajax.Updater("formjavascript", url, {asynchronous:true, evalScripts:true});

}

function AJAXDebug(originalRequest){
	//alert(1);
	alert(originalRequest.responseText);
}

// AJAX Respond 
function AJAXRespond(originalRequest){
	//alert("c:"+container+"\\n"+pars);
	//alert(originalRequest.responseText);
	if(!originalRequest.responseText){
		var url="/lib/ajax/ajaxforms/form_"+formname+"end.php?"+getstring;
		var myAjax = new Ajax.Updater(container, url, {asynchronous:true});
	}else{
		//alert("error");
	}
}

function ElementChange(formname, elem, val){
	//alert('mooo:'+formname+"|"+elem+"|"+val);
	var temp="obje=document."+formname+"."+elem+";";
	eval(temp);
	//alert(obje.value);
	obje.value=val;
	//obje.focus();
}

function ElementUnlock(formname, elem){
	var temp="obje=document."+formname+"."+elem+";";
	eval(temp);
	if(obje){
		obje.value="";
		obje.disabled=0;
		obje.focus();
		obje.style.background="white";
	}
}

function ElementClear(formname, elem){
	var temp="obje=document."+formname+"."+elem+";";
	eval(temp);
	if(obje)obje.value="";
}

function ElementLock(formname, elem){
	var temp="obje=document."+formname+"."+elem+";";
	eval(temp);
	if(obje){
		obje.disabled=1;
		obje.style.background="#fefae2";
	}
}

function RefreshThis(qs){
	alert(qs);

}

function TestTimer(timerobj){
	// ensures that this function will not run
	// 
}

function ClearArea(parentname){
	// Clears any supplimentary values in the form, except for the lock values
	objextend=document.getElementById(parentname+'_extend');
	Effect.Fade(parentname+'_extend', {duration:0.2});
}

function AJDropDown(obje, parentname, formname, fade){
	
	// This function will populate an element is the value
	// of the selected row in a dropdown field
	
	// 'obje': needs to be a <select> object
	// 'parentname': is the element
	// 'formname: is the formname
	// 'fade': if included will fade the object after populating
	
	if(!obje)return; // then the object doesn't exist, piss it off.
	var real=obje.options[obje.selectedIndex].value;
	var friendly=obje.options[obje.selectedIndex].text;
	if(fade)Effect.Fade(parentname+'_extend', {duration:0.2});
	ElementChange(formname,parentname,real);
	ElementChange(formname,parentname+'_verified','2');
	ElementChange(formname,parentname+'_friendly',friendly);
}

function AJRefresh(formname, element, pars){
	// This function will recall the ajax form validator
	// with updated parameters.
	// note: Make sure the "pars" in this function is formatted like a $_GET (var=name;var2=name2 ..)
	// *********
	//alert("recieved: fn:"+formname+" element:"+element+" pars:"+pars);
	
	eval("var obje_n=document."+formname+"."+element+"_refreshhandler_new");
	eval("var obje_o=document."+formname+"."+formname+"_refreshhandler");
	obje_n.value=pars;
	url=obje_o.value+"&"+obje_n.value;
	//alert(url);
	new Ajax.Updater("formjavascript", url, {asynchronous:true, evalScripts:true });
}

function AJtabnextfield(formname){
	//var myForm=document.forms[document.forms.length - 1];
	//alert(document.testform.elements.length);
	//eval("var thisfield=document."+formname+"."+formname+"_focushandler;"); 
	eval("var fieldname=document."+formname+"."+formname+"_focushandler.value;"); 
	eval("var form_obje=document."+formname);
	//var comp=fieldname+"\n\n"; var obje=""; var line=""; 
	var next=0;
	//ObjectFocus=0;
	for(a=0;a<form_obje.elements.length;a++){
		var obje=form_obje.elements[a];
		if(obje.type!="hidden" && obje.id && obje.readOnly==false && obje.disabled==false){
			line="";
			var lastobject=obje;
			if(next==1){
				//line="-->";
				next=0;
				obje.focus();
				return;
			}
			if(obje.name==fieldname || obje.name==fieldname+"_friendly")next=1;
			//line=line+obje.name+" ";
			//line=line+obje.readOnly+" ";
			//line=line+"("+obje.type+")";
			//comp=comp+line+"\n";
		}
	}	
		ClearExtends(formname);
		//lastobject.focus();
}

function ClearExtends(formname, immune){
	eval("var form_obje=document."+formname);
	for(a=0;a<form_obje.elements.length;a++){
		var obje=form_obje.elements[a];
		var orig=obje.name;
		var t=obje.name+"_extend";
		if(document.getElementById(t)){
			te=document.getElementById(t).style.display;
			if(te!="none"){
				//alert(te+" : found "+t);
				if(orig!=immune){
					//$(t).innerHTML="";
					Effect.Fade(t,{duration:0.1});
				}
			}
		}
	}
}

function RadioCheck(radioObj, newValue) {
	if(!radioObj)
		return;
	var radioLength = radioObj.length;
	if(radioLength == undefined) {
		radioObj.checked = (radioObj.value == newValue.toString());
		return;
	}
	for(var i = 0; i < radioLength; i++) {
		radioObj[i].checked = false;
		if(radioObj[i].value == newValue.toString()) {
			radioObj[i].checked = true;
		}
	}
}

function RefreshForm(formname){
	var formcontainer=formname+"_container";
	eval("var formobject=document.getElementById("+formname+"_container)");
	var url="/lib/ajax/ajaxforms/form_"+formname+".php";
	new Ajax.Updater(formcontainer, url, {asynchronous:true, evalScripts:true });
	//alert(url);
}
