
function hideFeedback()
{
	var e = document.getElementById("feedback_div").style.display = "none";
}


function sendRequest(params,callback)
{
	var ajaxUrl = "php/ajax-handler.php";
	var myAjax = new Ajax.Request(
	ajaxUrl,
	{
		method: 'post', 
		parameters: params, 
		onComplete: function(response)
		{
			handleResponse(response,callback);
		}	
	});
}


function handleResponse(response,callback)
{
	try
	{
		eval("var r = " + response.responseText);
	}
	catch (e)
	{
		showError("error evaluating response : Response text:<br/>" + response.responseText);
		var r = new Object();
		r.message = 'Error evaluating response';
		r.status = 'error';
		if (typeof callback == 'function') callback(r);
		return;
	}

	try
	{
		if (r.status == 'error')
		{	
			showError(r.message);
			if (typeof callback == 'function') 
			{
				callback(r);
			}
		}
		else if (r.status == 'ok')
		{
			//alert(dump(r));
			if (typeof callback == 'function') 
			{
				callback(r);
				// check if callback canceled the response.
				if (r.cancel) return; 
			}
			
			if (r.cookies != null && r.cookies.length > 0)
			{
				for(var i=0;i<r.cookies.length;i++)
				{
					var c = r.cookies[i];
					fi_createCookie(c.name, c.value, c.days);
				}
			}			
			
			if (r.refresh == 'true')
			{
				window.location.reload();
			}
			
			if (r.send_request)
			{
				sendRequest(r.send_request, callback);
			}

			
			showFeedback(r,5000);
			applyResponse(r);
			
			if (r.execute)
			{
				var exec = r.execute;
				try
				{
					eval(exec);
				}
				catch(e)
				{
					showError('Error executing ' + exec);
				}
			}
		}
		else
		{
			showError('Unknown response type ' + r.status);
		}
	}
	catch (e)
	{
		showError('error processing response : ' + dump(e));	
	}
}

function applyResponse(data)
{
	var fields = data['fields'];
	if (fields)
	{
		for (var key in fields) 
		{
			try
			{	
				var txt =  stripslashes(fields[key]);
				var e = $(key);
				if(e)
				{
					if(e.tagName.toLowerCase() == 'input')
					{
						e.value=txt;
					}
					else
					{
						e.innerHTML=txt;
					}
				}
				else
				{
					alert('Element not found: ' + key);
				}
			}
			catch(e)
			{
				alert(e);	
			}
		}
	}
	
	var styles = data['styles'];
	for (var key in styles) 
	{
		var style  = styles[key];
	
		for (var prop in style) 
		{
			try
			{
				var e = $(key);
				if(e) 
				{	
					e.style[prop]=style[prop];
				}
				else
				{
					alert('Element not found: ' + key);
				}
			}
			catch(ex)
			{
				alert(ex);
			}
		}
	}
	
	var attribs = data['attribs'];
	for (var key in attribs) 
	{
		var attr  = attribs[key];
	
		for (var prop in attr) 
		{
			try
			{
				var e = $(key);
				if(e) 
				{	
					e[prop] = attr[prop];
				}
				else
				{
					alert('Element not found: ' + key);
				}
			}
			catch(ex)
			{
				alert(ex);
			}
		}
	}
}

function showMessage(msg)
{
	try
	{	
		var x = {};
		x['status'] = 'ok';
		x['message'] = msg;
		showFeedback(x);
	}
	catch (e2)	
	{	
		// if even this failed, use alert.
		alert('error : ' + errorMessage);
	}
}

function showError(errorMessage)
{
	try
	{	
		var x = {};
		x['status'] = 'error';
		x['message'] = errorMessage;
		clearTimeout(messageTimerID);
		showFeedback(x);
	}
	catch (e2)	
	{	
		// if even this failed, use alert.
		alert('error : ' + errorMessage);
	}
}


var messageTimerID;
function showFeedback(response, timeout)
{
	var e = $("feedback_zone");
	if (!e) return; // for dialogs etc
	if (!response.message) return;
	e.innerHTML = response.message;

	e = $("feedback_div");
	if (response.status == 'error')
	{
		e.style.background = '#f86262';
	}
	else
	{
		e.style.background = '#3aa9ff';
	}

	e.style.display = "block";
	
	if (timeout != null)
	{
		clearTimeout(messageTimerID);
		messageTimerID = setTimeout("hideFeedback()", timeout);
	}
}

function trapEnter(e, enterFunction)
{
	if (!e) e = window.event;
	if (e.keyCode == 13)
	{
		e.cancelBubble = true;
		if (e.returnValue) e.returnValue = false;
		if (e.stopPropagation) e.stopPropagation();
		if (enterFunction) eval(enterFunction);
		return false;
	} 
	else 
	{

		return true;
	}     
}

/**
 * cookie scripts from http://www.quirksmode.org/js/cookies.html
 */
function fi_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 fi_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 fi_eraseCookie(name) 
{
	fi_createCookie(name,"",-1);
}

function stripslashes(value)
{
	str = "" + value;
	str = str.replace(/\\"/g,'"' );
	str = str.replace(/\\\'/g,'\'' );
	return str;
}
