var ajax_requests=0;
var baseurl;
var submitname, submitvalue;

function ajax_set_innerhtml(ajax_id, ajax_html)
{
	var element_id = document.getElementById(ajax_id);

	if (element_id && (ajax_html.length > 0) ) element_id.innerHTML=ajax_html;
}

function ajax_add_innerhtml(ajax_id, ajax_html)
{
	var element_id = document.getElementById(ajax_id);

	if (element_id && (ajax_html.length > 0) ) element_id.innerHTML+=ajax_html;
}

function ajax_insert_innerhtml(ajax_id, ajax_html)
{
	var element_id = document.getElementById(ajax_id);

	if (element_id && (ajax_html.length > 0) ) element_id.innerHTML=ajax_html+element_id.innerHTML;
}

function ajax_parse_response(responseText)
{
	var parse_function, parse_id, parse_buffer;
	var return_lines, act_line, i, parse_line;

	return_lines = responseText.split("\n");
	if (return_lines.length < 1) return(false);

	for (i=0; i<return_lines.length; i++)
	{
		act_line = return_lines[i];
		
		if (act_line.search(/^(^\s+)?:[a-z]+:.+/) != -1)
		{
			switch (parse_function)
			{
				case 'sethtml':
				{
					ajax_set_innerhtml(parse_id, parse_buffer);
					break;
				}

				case 'addhtml':
				{
					ajax_add_innerhtml(parse_id, parse_buffer);
					break;
				}

				case 'inserthtml':
				{
					ajax_insert_innerhtml(parse_id, parse_buffer);
					break;
				}
			}
					
			parse_line=act_line.split(':');
			parse_line.shift();
			parse_function = parse_line.shift();
			parse_buffer=parse_line.join(':');
			switch (parse_function)
			{
				case 'alert':
				{
					alert(parse_buffer);
					break;
				}

				case 'sethtml':
				case 'addhtml':
				case 'inserthtml':
				{
					parse_id = parse_buffer;
					parse_buffer = '';
					break;
				}

				case 'clearhtml':
				{
					parse_id = document.getElementById(parse_buffer);
					if (parse_id) parse_id.innerHTML='';
					break;
				}
				
				case 'setvalue':
				{
					parse_buffer=parse_line.shift();
					if (document.getElementById(parse_buffer))
					{
						document.getElementById(parse_buffer).value=parse_line.join(':');
					}
					break;
				}

				case 'resetselect':
				{
					if (document.getElementById(parse_buffer))
					{
						parse_id = document.getElementById(parse_buffer);
						while (parse_id.length > 0) parse_id.options[parse_id.length -1]=null;
					}
					break;
				}

				case 'addselect':
				{
					parse_buffer=parse_line.shift();
					if (document.getElementById(parse_buffer))
					{
						parse_id=document.getElementById(parse_buffer);
						parse_buffer=parse_line.shift();
						parse_buffer = new Option(parse_line.join(':'), parse_buffer, false, false);
						parse_id.options[parse_id.length]=parse_buffer;
					}
					break;
				}

				case 'redirect':
				{
					window.location.href=parse_buffer;
					break;
				}

				case 'settitle':
				{
					document.title=parse_buffer;
					break;
				}

				case 'eval':
				{
					eval(parse_buffer);
					break;
				}
			}
		}
		else
		{
			switch (parse_function)
			{
				case 'sethtml':
				case 'addhtml':
				case 'inserthtml':
				{
					parse_buffer+=act_line;
					break;
				}
			}
		}
	}

	switch (parse_function)
	{
		case 'sethtml':
		{
			ajax_set_innerhtml(parse_id, parse_buffer);
			break;
		}

		case 'addhtml':
		{
			ajax_add_innerhtml(parse_id, parse_buffer);
			break;
		}
		
		case 'inserthtml':
		{
			ajax_insert_innerhtml(parse_id, parse_buffer);
			break;
		}
	}
}

function initAjax()
{
	$('a[ajax=true]').attr('href', function(){this.href = baseurl+':'+this.href.substr(baseurl.length, this.href.length - baseurl.length)}).click(processAjax).removeAttr('ajax');
	$('form[ajax=true]').attr('action', function(){ this.action = baseurl+':'+this.action.substr(baseurl.length, this.action.length - baseurl.length)}).ajaxForm({target: null, type: 'post', success: processAjaxRequest, beforeSubmit: showIndicator}).removeAttr('ajax');
//	$('div[tab=true]').tabs({remote: true, cachetime: $(this).attr('cachetime')}).removeAttr('tab');
}

function processAjax()
{
	// Prevent Tab conflict
	if (this.href.search(/\#tab.+/) != -1) return(true);

	processAjaxRaw(this.href);

	this.blur();
	return(false);
}

function processAjaxRaw(url)
{
	var aURL=url.split('&', 2);

	showIndicator();
	$.ajax({
		type: 'GET',
		url: aURL[0],
		data: aURL[1],
		cache: true,
		success: processAjaxRequest
	});
	return(false);
}

function showIndicator()
{
	ajax_requests++;
	if (ajax_requests == 1) $('.ajaxactivity').fadeIn('fast');	
	return(true);
}

function hideIndicator()
{
	ajax_requests--;
	if (ajax_requests == 0) $('.ajaxactivity').fadeOut('normal');
	return(true);
}

function processAjaxRequest(response)
{
	hideIndicator();
	ajax_parse_response(response);
	initAjax();
}

function processAjaxRequestSilent(response)
{
	ajax_parse_response(response);
	initAjax();
}

function ajaxFormElementEvent(e, u, fields, indicator)
{
	var v = new Array;
	var f=$(e.form).formToArray();

	if (fields != '*')
	{
		var y=fields.split(',');
		for (var x in f)
		{
			for (s=0; s<y.length; s++)
			{
				if (y[s] == f[x].name)
				{
					v.push({name: f[x].name, value: f[x].value});
				}
			}
		}
	}
	else
	{
		for (var x in f)
		{
			v.push({name: f[x].name, value: f[x].value});
		}
	}

	if (!u || u.length == 0) u=e.form.action;
	v.push({name: '_ajax_element', value: e.name});
	if (indicator)
	{
		$.ajax({ type: 'POST', url: u, data: $.param(v), cache: true, success: processAjaxRequest});
		showIndicator();
	}
	else
	{
		$.ajax({ type: 'POST', url: u, data: $.param(v), cache: true, success: processAjaxRequestSilent});
	}
}

$(document).ready(initAjax);
