/*
function formToQuery(form) 
{
	if(form.current_state == null) return $.param(form);//$(form).serialize();
	else 
	{
		var cstate = form.current_state.value;
		form.current_state.name = null;
		form.current_state.value = null;
		var sform = $.param(form); //$(form).serialize();
		form.current_state.name = 'current_state';
		form.current_state.value = cstate;
		return sform;
	}
}
*/

function formToQuery(form)
{
	var query = '';
	var element;
	var skip;

	for(n=0;n<form.elements.length;n++)
	{
		skip = false;
		element = form.elements[n];
		if((element.type == 'checkbox' || element.type == 'radio') && !element.checked) skip = true;
		if(element.name) if(element.name != 'current_state') if(!skip && element.name.length) 
		{
			if(element.type != 'select-multiple') query += element.name + '=' + escape(element.value).replace(/\+/g,'%2b') + '&';
			else for(i=0;i<element.length;i++) if(element[i].selected) query += element.name + '=' + escape(element[i].value).replace(/\+/g,'%2b') + '&';
		}
	}

	return query.substr(0,query.length-1);
}

function currentState(form)
{	
	if(form.current_state.value == '') form.current_state.value = formToQuery(form);
	else if(form.current_state.value != formToQuery(form)) form.update.disabled = false; 
	else form.update.disabled = true;
}

function set(name,val) 
{
	var tmp = document.createElement('input'); 
	tmp.type = 'hidden'; 
	tmp.name = name; 
	tmp.value = val; 
	return tmp;
};

function cmdExec(cmd,form,func,text,val)
{
	/* ----- Promp or Confirm ----- */
	if(val!=null && text!=null)
	{
		var pval = prompt(text,"");
		if(pval!=null && pval!='') val = val+'='+escape(pval).replace(/\+/g,'%2b');
		else return false;
	}
	else if(text!=null) if(!confirm(text)) return false;

	if(val==null) val = '';

	/* ----- Check for files ----- */
	if(form != null) for(n=0;n<form.elements.length;n++)
	{
		element = form.elements[n];
		if(element.type == 'file' && (element.value != null && element.value != ''))
		{
			var cmdArray = cmd.split('&');
			form.appendChild(set('cmd',cmdArray[0]));
			
			for(i=1;i<cmdArray.length;i++)
			{
				var tmp = cmdArray[i].split('=');
				form.appendChild(set(tmp[0],tmp[1]));
			}

			form.submit();
			return true;
		}
	}

	/* ----- HttpRequest ----- */
	var url = 'cmd.php';
	var opt = 'cmd=' + cmd;
	if(form!=null) 	opt = opt +'&'+ formToQuery(form);
	if(val !=null)	opt = opt +'&'+ val;
	
	$.ajax
	({
		url: 		url,
		data: 		opt,
		type: 		'POST',
		//beforeSend: function() { $('#wrapper').css('cursor','wait'); }, 
		//complete: 	function() { $('#wrapper').css('cursor','default'); },
		error:		function() { alert("Error:\nRequest timed out, please try again"); },
		success: 	function(data) {if(data!=null&&data.length) alert(data); else if(func!=null) eval(func); }
	});
}


function secLoad(src,sub,section,opt)//,history)
{
	var csection = section; // current section
	var lsection = section; // loading section
//	if(typeof(history) == 'undefined') history = true;

	if(section.indexOf('/')!=-1)
	{
		csection = section.substr(section.indexOf('/')+1);
		lsection = section.substr(0,section.indexOf('/'));
	}

	var url = 'index.php?src='+src+'&sub='+sub+'&sec='+lsection;
	
	$.ajax
	({
		url: 		url,
		data: 		opt,
		cache:		false,
		beforeSend: function()
		{
			//$('#wrapper').css('cursor','wait');
			//if(history) $.history({'src':src,'sub':sub,'section':section,'opt':opt});
			
			//$('#'+csection+' .body').replaceWith("<p id = 'loading'><span>[Loading]</span></p>");
			if($.fx.off != true) $('#'+csection+' .body').hide('blind',{ direction: "vertical" }, 500);
			else $('#'+csection+' .body').replaceWith("<p id = 'loading'><span>[Loading]</span></p>"); 
		},
		//error:		function() { alert("Error:\nRequest timed out, please try again"); },
		//complete: 	function() { $('#wrapper').css('cursor','default'); },
		success: 	function(data) 
		{
			$('#'+csection).replaceWith(data);
			if(data.indexOf('<script')!=-1)	eval(data.substring(data.indexOf("<script type = 'text/javascript'>")+33,data.indexOf("</script>")));
			if($.fx.off != true)
			{
				$('#'+lsection+' .body').css('display','none');
				$('#'+lsection+' .body').show('blind',{ direction: "vertical" }, 500);
			}
		}
	});
}

var c = 0;
function onStateChange(query,state,func)
{
	var n = 0;
	if(query.indexOf('&c=')!=-1) 
	{
		n = query.substr(query.indexOf("&c=")+3);
		query = query.substr(0,query.indexOf("&c="));
	}
	var url = 'query.php';
	var opt = 'query=' + query + '&c=' + n;
	
	if(c!=n) return false;	
	c++;
	
	$.ajax
	({
		url: 		url,
		data: 		opt,
		type: 		'POST',
		//error:		function() { alert("Error:\nRequest timed out, please try again"); },
		success: 	function(data) 
		{
			if(data==state) setTimeout("onStateChange(\""+query+"&c="+c+"\",\""+state+"\",\""+func+"\")", 5000);
			else 
			{
				eval(func);
				c=0;
			}
		}
	});
}