var debug = true;
var helper_timer = null;
var helper_click = false;
var LockData = false;
ajax_object_counter = 0;

function checkForm(El)
{
	var tElement = El.getElementsByTagName("INPUT");
	for (var i=0; i<tElement.length; i++)
	{
		if ((tElement[i].getAttribute('required') != null) && (tElement[i].getAttribute('required') != '') && (tElement[i].value == ''))
		{
			alert(tElement[i].getAttribute('required'));
			tElement[i].focus();
			return false;
		}
		if ((tElement[i].getAttribute('required') != null) && (tElement[i].getAttribute('required') != '') && (tElement[i].type == 'checkbox') && !tElement[i].checked)
		{
			alert(tElement[i].getAttribute('required'));
			tElement[i].focus();
			return false;
		}
		if ((tElement[i].getAttribute('equal') != null) && (tElement[i].getAttribute('equal') != ''))
		{
			var tt = document.getElementById(tElement[i].getAttribute('equal'));
			if ((tt != null) && (tt.value != tElement[i].value))
			{
				alert(tElement[i].getAttribute('equaltext'));
				tt.focus();
				return false;
			}
		}
		if ((tElement[i].getAttribute('minlength') != null) && (tElement[i].getAttribute('minlength') != '') && (tElement[i].value.length < tElement[i].getAttribute('minlength')))
		{
			alert(tElement[i].getAttribute('mintext'));
			tElement[i].focus();
			return false;
		}
		if ((tElement[i].getAttribute('is_email') != null) && (tElement[i].getAttribute('is_email') != ''))
		{
			var re = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-.]?[0-9a-zA-Z])*\.[a-wyz][a-z](g|l|m|pa|t|u|v)?$/;
			if (!tElement[i].value.match(re)) {
				alert(tElement[i].getAttribute('is_email'));
				tElement[i].focus();
				return false;
			}
		}
		if ((tElement[i].getAttribute('is_float') != null) && (tElement[i].getAttribute('is_float') != '') && (tElement[i].value != ''))
		{
			if (parseFloat(tElement[i].value) != tElement[i].value)
			{
				alert(tElement[i].getAttribute('is_float'));
				tElement[i].focus();
				return false;
			}
		}
/*   if ((tElement[i].getAttribute('maxvalue') != null) && (tElement[i].getAttribute('maxvalue') != '') && (tElement[i].value+1 > tElement[i].getAttribute('maxvalue')+1))
		{
			alert(tElement[i].getAttribute('maxvaluetext'));
			tElement[i].focus();
			return false;
		}*/
	}

	tElement = El.getElementsByTagName("SELECT");
	for (var i=0; i<tElement.length; i++)
	{
		if ((tElement[i].getAttribute('required') != null) && (tElement[i].getAttribute('required') != '') && (tElement[i].value == ''))
		{
			alert(tElement[i].getAttribute('required'));
			tElement[i].focus();
			return false;
		}
	}
	return true;
}

function sendAction()
// arguments[0] - Action
// arguments[1] - if == true  - send action to dynamicIFrme, else send and reload page
{
	if (arguments[0])
	{
		var mainForm = document.getElementById("mainform");
		mainForm.action.value = arguments[0];
		if (arguments[1])
			mainForm.target = 'dynamicIFrame';
		else
			mainForm.target = '_self';
		if (arguments[2])
		{
			var tt = document.getElementById('actionvalue');
			tt.value = arguments[2];
		}
		mainForm.submit();
	}
}

function sendXAction()
{
	//arguments[0] - action
	//other arguments - parameters, ex. sendXAction('update', 'id', 5);
	//         sendXAction('update', 'id', 5, 'pid', 10);
	el = document.getElementById('xForm');
	if (el)
	{
		document.body.removeChild(el);
	}

	var xForm = document.createElement('FORM');
	var elemAction = document.createElement('INPUT');

	xForm.id = 'xForm';

	elemAction.setAttribute('type', 'hidden');
	elemAction.setAttribute('name', 'action');
	elemAction.setAttribute('value', arguments[0]);
	xForm.appendChild(elemAction);

	var Form = document.getElementById("mainform");
	var elemModule = document.createElement('INPUT');
	elemModule.setAttribute('name', 'module');
	elemModule.setAttribute('type', 'hidden');
	elemModule.setAttribute('value', Form.module.value);
	xForm.appendChild(elemModule);


	for (var i=1; i<arguments.length; i+=2)
	{
		var elem = document.createElement('INPUT');
		elem.setAttribute('name', arguments[i]);
		elem.setAttribute('type', 'hidden');
		try{elem.setAttribute('value', arguments[i+1]); }catch(e){};
		xForm.appendChild(elem);
	}
	xForm.setAttribute('method', 'post');
	xForm.target = 'dynamicIFrame';

	document.body.appendChild(xForm);

	xForm.submit();
}

function sendJAction()
{
	//arguments[0] - action
	//arguments[1] - module, if empty - current module
	//other arguments - parameters, ex. sendJAction('update', 'user', 'id', 5);
	//         sendJAction('update', '', 'id', 5, 'pid', 10);
	el = document.getElementById('xForm');
	if (el)
	{
		document.body.removeChild(el);
	}

	var xForm = document.createElement('FORM');
	var elemAction = document.createElement('INPUT');

	xForm.id = 'xForm';

	elemAction.setAttribute('type', 'hidden');
	elemAction.setAttribute('name', 'action');
	elemAction.setAttribute('value', arguments[0]);
	xForm.appendChild(elemAction);

	var Form = document.getElementById("mainform");
	var elemModule = document.createElement('INPUT');
	elemModule.setAttribute('name', 'module');
	elemModule.setAttribute('type', 'hidden');
	if (arguments[1])
		elemModule.setAttribute('value', arguments[1]);
	else
		elemModule.setAttribute('value', Form.module.value);
	xForm.appendChild(elemModule);


	for (var i=2; i<arguments.length; i+=2)
	{
		var elem = document.createElement('INPUT');
		elem.setAttribute('name', arguments[i]);
		elem.setAttribute('type', 'hidden');
		try{elem.setAttribute('value', arguments[i+1]); }catch(e){};
		xForm.appendChild(elem);
	}
	xForm.setAttribute('method', 'post');
	xForm.target = '_self';

	document.body.appendChild(xForm);

	xForm.submit();
}

//------------------------------------------------------- AJAX -------------------------------------------------------




function AJAXcreateRequestObject()
{
	var request_;
	var browser = navigator.appName;
	if (browser == "Microsoft Internet Explorer")
		request_ = new ActiveXObject("Microsoft.XMLHTTP");
	else
		request_ = new XMLHttpRequest();
	return request_;
}

function AJAXGetData()
//		arguments[0] - url
{

	var AJAXhttp = AJAXcreateRequestObject();

	AJAXhttp.open('GET', arguments[0]);
//	AJAXhttp.onprogress
	AJAXhttp.onreadystatechange = 
		function AJAXhandle_call()
		{
			if(AJAXhttp.readyState == 4)
			{
				AJAXprocessVars(AJAXhttp.responseXML);
				AJAXprocessArrays(AJAXhttp.responseXML.firstChild);
				AJAXprocessExec(AJAXhttp.responseXML);
				ajax_object_counter--;
				if (ajax_object_counter == 0)
				{
					hide_ajax_message();
				}
			}
		}

	AJAXhttp.send(null);
	show_ajax_message();
	ajax_object_counter++;
}

function AJAXPostData()
//		arguments[0] - url
//		arguments[1] - data
{
	var AJAXhttp = AJAXcreateRequestObject();
	if(!AJAXhttp) return false;
	AJAXhttp.onreadystatechange = 
		function AJAXhandle_call()
		{
			if (AJAXhttp.readyState == 4)
			{
				if (AJAXhttp.responseXML)
				{
					try { AJAXprocessVars(AJAXhttp.responseXML); } catch (e) {}
					try { AJAXprocessArrays(AJAXhttp.responseXML.firstChild); } catch (e) {}
					try { AJAXprocessExec(AJAXhttp.responseXML); } catch (e) {}
					try 
					{ 
						ajax_object_counter--; 
						if (ajax_object_counter == 0)
						{
							hide_ajax_message();
						}
					} catch (e) {}
				}
			}
		}

	AJAXhttp.open('POST', arguments[0], true);

	AJAXhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	AJAXhttp.send(AJAXurlEncodeData(arguments[1]));
	return;
	show_ajax_message();
	ajax_object_counter++;
	return true;
}

function AJAXprocessExec(x)
{
	var tt = x.getElementsByTagName('Exec');

	for (var i=0; i<tt.length; i++)
	{
		var zz = tt[i].childNodes[0].nodeValue;
		if (zz)
		{
			eval(zz);
		}
	}
}

function AJAXprocessVars(x)
{
	if (x)
	{
		var tt = x.getElementsByTagName('VarName');
		if (tt)
		{
			for (var i=0; i<tt.length; i++)
			{
				for (var j=0; j<tt.item(i).attributes.length; j++)
				{
					if (tt.item(i).attributes[j].name == 'name')
					{
						var qq = tt.item(i).getElementsByTagName('data');

						if (qq.item(0).attributes[0].name == 'type' && qq.item(0).attributes[0].value == 'int')
							eval(tt.item(i).attributes[j].value + '=' + (qq.item(0).childNodes.length?qq.item(0).childNodes[0].nodeValue:''));
						else if (qq.item(0).attributes[0].name == 'type' && qq.item(0).attributes[0].value == 'string')
							eval(tt.item(i).attributes[j].value + '=\'' + (qq.item(0).childNodes.length?qq.item(0).childNodes[0].nodeValue:'') + '\'');
					}
				}
			}
		}
	}
}

function AJAXprocessArrays()
{
	var x = arguments[0];

	for (var i=0; i<x.childNodes.length; i++)
	{
		var tt = x.childNodes[i];
		if (tt.tagName == 'VarArrayName')
		{
			var nodeName = tt.getAttribute('name');

			if (arguments[1])
			{
//				alert(arguments[1] + ' = new Array');
				eval(arguments[1] + ' = new Array');
			}
			else
			{
//				alert(nodeName + ' = new Array');
				eval(nodeName + ' = new Array');
			}

			for (var j=0; j<tt.childNodes.length; j++)
			{
				if (tt.childNodes[j].tagName == 'data')
				{
					var aType = tt.childNodes[j].getAttribute('type')
					var akey = tt.childNodes[j].getAttribute('key')

					if (aType == 'array')
					{
						AJAXprocessArrays(tt.childNodes[j], (arguments[1]?arguments[1]:nodeName) + '[' + (akey?'\'' + akey + '\'':k) + ']');
					}
					else
					{
//						alert(akey);
//						alert((arguments[1]?arguments[1]:nodeName) + "['" + (akey?akey.replace("'", "\\'"):k) + "']" +  '=' + (aType=='string'?'\'':'') + tt.childNodes[j].childNodes[0].nodeValue + (aType=='string'?'\'':'') + ';');
//						eval((arguments[1]?arguments[1]:nodeName) + "['" + (akey?akey.replace("'", "\\'"):k) + "']" +  '=' + (aType=='string'?'\'':'') + tt.childNodes[j].childNodes[0].nodeValue + (aType=='string'?'\'':'') + ';');
						var zzzzzzzzzzzz = tt.childNodes[j].childNodes[0].nodeValue;
						eval((arguments[1]?arguments[1]:nodeName) + "['" + (akey?akey.replace(/\'/g, "\\'"):k) + "']" +  '= zzzzzzzzzzzz'  + ';');
					}
				}
			}
		}
	}
}

function AJAXurlEncodeData(data)
{
	var query = [];
	if (data instanceof Object)
	{
		for (var k in data)
		{
			if (data[k] instanceof Object)
			{
				for (var j in data[k])
				{
					if (data[k][j] instanceof Object)
					{
						for (var i in data[k][j])
						query.push(encodeURIComponent(k) +"["+j+"]["+i+"]=" + encodeURIComponent(data[k][j][i]));
					}
					else
					query.push(encodeURIComponent(k) +"["+j+"]=" + encodeURIComponent(data[k][j]));
				}
			}
			else
				query.push(encodeURIComponent(k) + "=" + encodeURIComponent(data[k]));
		}

		return query.join('&');
	}
	else
	{
		return encodeURIComponent(data);
	}
}

//------------------------------------------------------- /AJAX ------------------------------------------------------
//------------------------------------------------------- Controls ---------------------------------------------------

function processAJAXControls()
{
	var El;
	
	El = document.body.getElementsByTagName("SELECT");
	for (var i = 0; i < El.length; i++)
		xCheckControl(El[i]);

	El = document.body.getElementsByTagName("INPUT");
	for (var i = 0; i < El.length; i++)
		xCheckControl(El[i]);

	El = document.body.getElementsByTagName("SPAN");
	for (var i = 0; i < El.length; i++)
		xCheckControl(El[i]);

	El = document.body.getElementsByTagName("DIV");
	for (var i = 0; i < El.length; i++)
	{
		if (El[i].id == '')
		{
			El[i].id = 'grid_'+Math.round(Math.random()*10000000);
		}
		xCheckControl(El[i]);
	}
}

function xCheckControl(El)
{
	if (El.getAttribute("data_from") != "")
	{
		El.fill = xfControlFill;
		El.refresh = xfControlFill;
		El.update = xfControlUpdate;
		El.updateCounter = xControlUpdateCounter;

		if (El.getAttribute("searchgroup"))
		{
			El.old_onchange = El.onchange;
			El.onchange = xControlUpdateCounter;
		}

//		if (El.getAttribute("ajax_type") == "grid")
//		{
//			
//		}

		if (El.getAttribute("ajax_type") == "helper")
		{
			El.get_list = xfControlGetList;
			El.onkeyup = function ()
			{
				if (El.getAttribute('old_value') != El.value)
				{
					if (helper_timer)
						clearTimeout(helper_timer);
					helper_timer = setTimeout("document.getElementById('" + this.id + "').get_list()", 500);
				}
			}
			El.onclick = function ()
			{
				if ((El.dataArray) && (!El.getAttribute('nocache')))
				{
					xCreateHelper(El.id, El.dataArray);
				}
				else
				{
					if (El.getAttribute('nocache'))
					{
						if (helper_timer)
							clearTimeout(helper_timer);
						document.getElementById(this.id).get_list();
					}
				}
				helper_click = true;
			}
		}

		if (El.getAttribute("autofill") == "true")
			El.fill();
	}
}

function xfControlGetList()
{
	data = xControlGetArraySearchGroup(this.getAttribute('searchgroup'));
	data[(this.name?this.name:this.id)] = this.value;
	data['id'] = this.id;

//	AJAXPostData('/_log.php', data);
	AJAXPostData(this.getAttribute('data_from'), data);
}

function xControlGetArraySearchGroup()
{
	var data = [];

	if (arguments[0])
	{
		var tInputs = document.getElementsByTagName('INPUT');
		for (var i=0; i<tInputs.length; i++)
		{
			if (tInputs[i].getAttribute('searchgroup') == arguments[0])
			{
				data[(tInputs[i].name?tInputs[i].name:tInputs[i].id)] = tInputs[i].value;
			}
		}
		var tSelects = document.getElementsByTagName('SELECT');
		for (var i=0; i<tSelects.length; i++)
		{
			if (tSelects[i].getAttribute('searchgroup') == arguments[0])
			{
				data[(tSelects[i].name?tSelects[i].name:tSelects[i].id)] = tSelects[i].value;
			}
		}
	}

	return data;
}

function xControlUpdateCounter()
{
	if (this.getAttribute('searchgroup'))
	{
		var tc = document.getElementById('searchGroupCount' + this.getAttribute('searchgroup'));
		if (tc)
		{
			xCloseGrids();
			data = xControlGetArraySearchGroup(this.getAttribute('searchgroup'));
			data['id'] = tc.id;

			AJAXPostData(tc.getAttribute('data_from'), data);
		}
		try { this.old_onchange(); } catch (e) {}
	}
}

function xCloseGrids()
{
	var tTables = document.getElementsByTagName('TABLE');
	for (var i=0; i<tTables.length; i++)
	{
		if ((tTables[i].getAttribute('thisGrid') == '1') || (tTables[i].getAttribute('thisPaging') == '1'))
		{
			tTables[i].parentNode.removeChild(tTables[i]);
			i = 0;
		}
	}
}

function show_helper()
//		arguments[0] - selectID
//		arguments[1] - fillFrom
{
	var tt = document.getElementById(arguments[0]);
	var fTable, ftBody, row, cell, el;
	var t = '';

	if (tt && (tt.tagName == 'INPUT'))
	{
		xCreateHelper(arguments[0], arguments[1]);
	}
	else if (debug)
	{
		alert('Error: Route xFillSelect - selectID not found in document.');
	}
}

function xCreateHelper()
//		arguments[0] - Create for element
//		arguments[1] - Get Data from
{
	var size_add = 2;
	var startTabIndex = 100;
	var tt = document.getElementById(arguments[0]);
	var cell_couner = 0;

	tt.setAttribute('old_value', tt.value);
	tt.dataArray = arguments[1];
	tt.focus();
	tt.updateCounter();

	var zz_check = document.getElementById('helper_main_tab');
	if (zz_check)
		zz_check.parentNode.removeChild(zz_check);

	if (arguments[1].length > 0)
	{
		tt.setAttribute('old_tabIndex', tt.tabIndex);
		tt.tabIndex = startTabIndex;

		tt.onkeydown = function (e)
		{
			if (!e)
				e = event;

			if (e.keyCode == 40)			// Cursor down
			{
				var zz = document.getElementById('helper_main_tab');
				if (zz)
				{
					zz.childNodes[0].childNodes[0].firstChild.focus();
				}
			}

			if (e.keyCode == 38)			// Cursor down
			{
				var zz = document.getElementById('helper_main_tab');
				if (zz)
				{
//					alert(zz.childNodes[0].childNodes[zz.childNodes[0].childNodes.length - 1].childNodes[0].innerHTML);
					zz.childNodes[0].childNodes[zz.childNodes[0].childNodes.length - 1].childNodes[0].focus();
				}
			}
		}

		fTable = document.createElement("TABLE");
		fTable.id = 'helper_main_tab';
		fTable.border = '0';
		fTable.className = 'helper_tab'
		fTable.cellSpacing = 0;
		fTable.cellPadding = 0;
		fTable.style.position = 'absolute';
		fTable.style.top = get_top(tt) + tt.clientHeight + size_add;
		fTable.style.left = get_left(tt);

//		fTable.style.left = tt.offsetParent.offsetLeft + tt.offsetLeft;
		fTable.width = tt.clientWidth + size_add;

		ftBody = document.createElement("TBODY");

		for (i in arguments[1])
		{
			cell_couner++;
			row = document.createElement("TR");
			cell = document.createElement("TD");
			cell.appendChild(document.createTextNode(arguments[1][i]['name']));
			cell.className = 'helper_cell_out';
			cell.tabIndex = startTabIndex + cell_couner;
			cell.onmouseover = function ()
				{
					this.className = 'helper_cell_over';
				}
			cell.onmouseout = function ()
				{
					this.className = 'helper_cell_out';
				}
			cell.onfocus = function (e)
				{
					this.className = 'helper_cell_over';
				}
			cell.onblur = function (e)
				{
					this.className = 'helper_cell_out';
				}
			cell.onkeydown = function (e)
				{
					if (!e)
						e = event;

					if (e.keyCode == 40)			// Cursor down
					{
						this.className = 'helper_cell_out';
						if (this.parentNode.parentNode.childNodes.length == this.tabIndex - startTabIndex)
							tt.focus();
//							this.parentNode.parentNode.childNodes[0].firstChild.focus();
						else
							this.parentNode.parentNode.childNodes[this.tabIndex - startTabIndex].firstChild.focus();
						return false;
					}
					else if (e.keyCode == 38)		// Cursor up
					{
						this.className = 'helper_cell_out';
						if (this.tabIndex - startTabIndex == 1)
							tt.focus();
//							this.parentNode.parentNode.childNodes[this.parentNode.parentNode.childNodes.length - 1].firstChild.focus();
						else
							this.parentNode.parentNode.childNodes[this.tabIndex - startTabIndex - 2].firstChild.focus();
						return false;
					}
					else if (e.keyCode == 9)		// TAB
					{
						if (e.shiftKey)
						{
							this.className = 'helper_cell_out';
							if (this.tabIndex - startTabIndex == 1)
								this.parentNode.parentNode.childNodes[this.parentNode.parentNode.childNodes.length - 1].firstChild.focus();
							else
								this.parentNode.parentNode.childNodes[this.tabIndex - startTabIndex - 2].firstChild.focus();
						}
						else
						{
							this.className = 'helper_cell_out';
							if (this.parentNode.parentNode.childNodes.length == this.tabIndex - startTabIndex)
								this.parentNode.parentNode.childNodes[0].firstChild.focus();
							else
								this.parentNode.parentNode.childNodes[this.tabIndex - startTabIndex].firstChild.focus();
						}
						return false;
					}
					else if (e.keyCode == 13)		// ENTER
					{
						tt.value = this.innerHTML;
						var zz = document.getElementById('helper_main_tab');
						tt.parentNode.removeChild(zz);
						tt.focus();
						tt.setAttribute('tabIndex', tt.getAttribute('old_tabIndex'));
						tt.dataArray = null;
						tt.updateCounter();
						return false;
					}
					else
					{
						tt.focus();
//						tt.onkeypress(e);
					}
				}
			cell.onclick = function (e)
				{
					tt.value = this.innerHTML;
					var zz = document.getElementById('helper_main_tab');
					tt.parentNode.removeChild(zz);
					tt.focus();
					tt.setAttribute('tabIndex', tt.getAttribute('old_tabIndex'));
					tt.dataArray = null;
					tt.updateCounter();
					return false;
				}

			row.appendChild(cell);
			ftBody.appendChild(row);
		}
		fTable.appendChild(ftBody);
		tt.parentNode.appendChild(fTable);
	}
//	alert(cell_couner);
}

function xfControlUpdate()
{
	if (this.getAttribute('data_to'))
	{
		var data = new Array();
		data[(this.name?this.name:this.id)] = this.value;
//		AJAXPostData('/_log.php', data);
		AJAXPostData(this.getAttribute('data_to'), data);
	}
}

function xfControlFill()
{
	if (this.tagName == 'SELECT')
	{
		this.options.length = 0;
		var newOpt = new Option('Loading...', '-1', 1, 1);
		this.options[0] = newOpt
		this.disabled = true;
	}
	else if (this.tagName == 'INPUT')
	{
		this.value = 'Loading...';
		this.disabled = true;
	}
	else if (this.tagName == 'SPAN')
	{
		this.innerHTML = 'Loading...';
	}
	else if (this.tagName == 'DIV')
	{
		this.style.width = '100%';
//		this.style.height = '50px';
		this.align = 'left';

//		this.innerHTML = 'Loading...';
//		this.style.textAlign='center';
	}

//	AJAXGetData(this.getAttribute('data_from'));
	if (this.getAttribute('searchgroup'))
		tt = xControlGetArraySearchGroup(this.getAttribute('searchgroup'));
	else
		var tt = [];

	tt['id'] = this.id;
	AJAXPostData(this.getAttribute('data_from'), tt);
}

function xFillSelect()
//		arguments[0] - selectID
//		arguments[1] - fillFrom
//		arguments[2] - Selected ID
{
	var tt = document.getElementById(arguments[0]);
	var sel;

	if (tt)
	{
		tt.options.length = 0;
		for (key in arguments[1])
		{
			var newOpt = new Option(arguments[1][key], key,1,1);
			tt.options[tt.options.length] = newOpt
			if ((arguments[2] == key) || (tt.getAttribute('selectedId') == key))
			{
				sel = tt.options.length - 1;
			}
		}

		if (!LockData)
			tt.disabled = false;
		tt.setAttribute('oldStatus', false);

		if (sel)
			tt.selectedIndex = sel;
		else
			tt.selectedIndex = 0;

		var qq = tt.getAttribute('onfilled');
		if (qq)
			eval(qq);
	}
	else if (debug)
	{
		alert('Error: Route xFillSelect - selectID not found in document.');
	}
}

function xFillInput()
//		arguments[0] - selectID
//		arguments[1] - fillFrom
{
	var tt = document.getElementById(arguments[0]);

	if (tt)
	{
		tt.value = arguments[1];
		tt.disabled = null;
	}
	else if (debug)
	{
		alert('Error: Route xFillInput - selectID not found in document.');
	}
}

//							GRID


function xFillGrid()
//		arguments[0] - gridID
//		arguments[1] - fillFrom
//		arguments[2] - paging
{
	var fTable, ftBody, row, cell, inp, lnk, btn, div, img, filters, no_filter;
	var tt = document.getElementById(arguments[0]);

	tt.innerHTML = '';
	tt.style.height='';
	
/* create buttons */
	div = document.createElement('DIV');
	div.width = '100%';
	div.style.height='30px';
	fTable = document.createElement("TABLE");
	fTable.id = 'grid_buttons_tbl_'+arguments[0];
	fTable.border = 0;
	fTable.align = 'left';
	fTable.cellSpacing = 5;
	fTable.cellPadding = 0;
	ftBody = document.createElement("TBODY");
	fTable.appendChild(ftBody);
	row = document.createElement("TR");
	ftBody.appendChild(row);
	/*save button*/
	cell = document.createElement("TD");
	row.appendChild(cell);
	btn = document.createElement('INPUT');
	btn.className = 'rowButton';
	btn.type = 'BUTTON';
	btn.setAttribute('grid_id', arguments[0]);
	btn.value = 'Save';
	btn.onclick = grid_save;
	cell.appendChild(btn);
	/*cancel button*/
	cell = document.createElement("TD");
	row.appendChild(cell);
	btn = document.createElement('INPUT');
	btn.className = 'rowButton';
	btn.type = 'BUTTON';
	btn.setAttribute('grid_id', arguments[0]);
	btn.value = 'Cancel';
	btn.onclick = grid_cancel;
	cell.appendChild(btn);
	/*filter button*/
	cell = document.createElement("TD");
	row.appendChild(cell);
	btn = document.createElement('INPUT');
	btn.className = 'rowButton';
	btn.type = 'BUTTON';
	btn.setAttribute('grid_id', arguments[0]);
	btn.value = 'Filter';
	btn.onclick = grid_filter;
	cell.appendChild(btn);

	div.appendChild(fTable);
	tt.appendChild(div);

	
	
/* create grid paging */		
	if (arguments[2]['num_pages'] > 0)
	{
		fTable = document.createElement("TABLE");
		fTable.id = 'grid_paging_tbl_'+arguments[0];
		fTable.border = 0;
		fTable.align = 'left';
		fTable.className = 'grid_paging';
		fTable.cellSpacing = 0;
		fTable.cellPadding = 5;

		ftBody = document.createElement("TBODY");

		fTable.appendChild(ftBody);

		row = document.createElement("TR");
		ftBody.appendChild(row);

		if (arguments[2]['pages'][0]['number'] != 1)
		{
			cell = document.createElement("TD");
			row.appendChild(cell);
			lnk = document.createElement("A");
			lnk.setAttribute('grid_id', arguments[0]);
			lnk.setAttribute('page_number',1);
			lnk.onclick = grid_change_paging;
			lnk.innerHTML = '1';
			cell.appendChild(lnk);


			cell = document.createElement("TD");
			row.appendChild(cell);
			cell.innerHTML = '...';
		}
		
		for (p in arguments[2]['pages'])
		{
			cell = document.createElement("TD");
			row.appendChild(cell);
			
			if (arguments[2]['pages'][p]['current'] == 1)
			{
				cell.innerHTML = arguments[2]['pages'][p]['number'];
			}
			else
			{
				lnk = document.createElement("A");
				lnk.setAttribute('grid_id', arguments[0]);
				lnk.setAttribute('page_number',arguments[2]['pages'][p]['number']);
				lnk.onclick = grid_change_paging;
				lnk.innerHTML = arguments[2]['pages'][p]['number'];
				cell.appendChild(lnk);
			}
		}

		if (arguments[2]['pages'][p]['number'] != arguments[2]['num_pages'])
		{
			cell = document.createElement("TD");
			row.appendChild(cell);
			cell.innerHTML = '...';

			cell = document.createElement("TD");
			row.appendChild(cell);
			lnk = document.createElement("A");
			lnk.setAttribute('grid_id', arguments[0]);
			lnk.setAttribute('page_number',arguments[2]['num_pages']);
			lnk.onclick = grid_change_paging;
			lnk.innerHTML = arguments[2]['num_pages'];
			cell.appendChild(lnk);
		}

		tt.appendChild(fTable);
		var br = document.createElement('BR');
		tt.appendChild(br);
		var br = document.createElement('BR');
		tt.appendChild(br);

	}

	
/* create grid */	

	if (tt)
	{
		fTable = document.createElement("TABLE");
		fTable.width='100%';
		fTable.style.backgroundColor = 'white';
		fTable.id = 'grid_main_tbl_'+arguments[0];
		fTable.border = 0;
		fTable.align = 'left';
		fTable.className = 'grid_tbl';
		fTable.cellSpacing = 0;
		fTable.cellPadding = 0;
		fTable.style.padding = 0;

		ftBody = document.createElement("TBODY");

		fTable.appendChild(ftBody);
/* create grid header */	
		for (i in arguments[1])
		{
			row = document.createElement("TR");
			for (ii in arguments[1][i])
			{
				cell = document.createElement("TH");
				cell.style.fontSize = '10px';
				lnk = document.createElement("A");
				lnk.setAttribute('grid_id', arguments[0]);
				lnk.setAttribute('order_by',ii);
				if (ii == 'id')
				{
					cell.style.width = '50px';
				}
				if (tt.getAttribute('order_by') == ii)
				{
					var ord = tt.getAttribute('order');
					lnk.setAttribute('order', ord);
					if (ord == 'asc')
						ii = ii + '&nbsp;<img src="/admin/images/arrow_down.gif">';
					else
						ii = ii + '&nbsp;<img src="/admin/images/arrow_up.gif">';
					
					
				}
				lnk.onclick = grid_change_sorting;
				lnk.innerHTML = ii;
				cell.appendChild(lnk);
				cell.style.textAlign = "center";
				row.appendChild(cell);
			}
			ftBody.appendChild(row);
			break;
		}
/* create grid filter */
		for (i in arguments[1])
		{
			row = document.createElement("TR");
			row.id = 'grid_filter_' + arguments[0];
			row.style.display = 'none';
			no_filter = 'false';
			
			try{
				eval('filters=grid_filter_'+arguments[0]+';');
			}
			catch(e){no_filter = 'true';};
			for (ii in arguments[1][i])
			{
				

				var fTable1 = document.createElement("TABLE");
				fTable1.border = 0;
				fTable1.width='100%';
				fTable1.cellSpacing = 0;
				fTable1.cellPadding = 0;
				var ftBody1 = document.createElement("TBODY");
				fTable1.appendChild(ftBody1);
				var row1 = document.createElement("TR");
				ftBody1.appendChild(row1);
				var cell1 = document.createElement("TD");
				if (ii == 'id')
					cell1.style.width="36px";
				else
					cell1.style.width = '100%';

				cell = document.createElement("TD");

				inp = document.createElement("INPUT");
				
				if (no_filter == 'false')
					if (filters[ii] != '')
						inp.value = filters[ii];
			
				inp.id = 'grid_filter_input_' + ii + '_' + arguments[0];
				inp.className = 'grid_input_filter';
				inp.setAttribute('field_name', ii);
				inp.style.width = '100%';
				cell1.appendChild(inp);
				row1.appendChild(cell1);
				var cell1 = document.createElement("TD");
				cell1.style.backgroundColor = '#666666';
//				cell1.style.width="18px";
				img = document.createElement('IMG');
				img.src='/admin/images/applyfilter.gif';
				img.style.border='1px solid black';
				img.style.cursor = 'pointer';
				img.setAttribute('grid_id', arguments[0]);
				img.onclick = grid_apply_filter;
				cell1.appendChild(img);
				row1.appendChild(cell1);
				cell.appendChild(fTable1);
				row.appendChild(cell);
			}
			ftBody.appendChild(row);
			break;
		}	

/* create grid content */	
		for (i in arguments[1])
		{
			row = document.createElement("TR");
			for (ii in arguments[1][i])
			{
				cell = document.createElement("TD");
				inp = document.createElement("INPUT");
				inp.style.width = '100%';
				inp.value = arguments[1][i][ii];
				inp.setAttribute('original_value', arguments[1][i][ii]);
				inp.className = 'grid_input';
				inp.onkeyup = grid_input_check_for_changes;
				inp.setAttribute('field_name', ii);
				if (ii == 'id')
				{
					inp.readOnly = true;
					inp.style.width = '55px';
				}
				cell.appendChild(inp);
				row.appendChild(cell);
			}
			ftBody.appendChild(row);
		}
		tt.appendChild(fTable);
	}
	else if (debug)
	{
		alert('Error: Route xFillGrid - selectID not found in document.');
	}
}

function grid_change_paging()
{
//	alert('1');
	var grid_id, grid, data_from, page, params, order_by, filters;
	grid_id = this.getAttribute('grid_id');
	grid = document.getElementById(grid_id);

	data_from = grid.getAttribute('data_from');
	page = this.getAttribute('page_number');
	grid.setAttribute('page_number',  page);
	order_by = grid.getAttribute('order_by');
	order = grid.getAttribute('order');
	
	params =  new Array();
	params['id'] = grid_id;
	
	if (page)
		params['p'] = page;
	if (order_by)
		params['order_by'] = order_by;
	if (order)
		params['order'] = order;

	try{
		eval('filters=grid_filter_'+grid_id+';');
		params['filters'] = filters;
	}catch(e){};
	
	AJAXPostData(data_from, params);
}

function grid_change_sorting()
{
	var grid_id, grid, data_from, order_by, params, order, page, filters;
	grid_id = this.getAttribute('grid_id');
	grid = document.getElementById(grid_id);
	data_from = grid.getAttribute('data_from');
	order_by = this.getAttribute('order_by');
	grid.setAttribute('order_by',order_by);
	page = grid.getAttribute('page_number');
	
	if (!this.getAttribute('order'))
	{
		this.setAttribute('order', 'asc');
		order = 'asc';
	}
	else
	{
		order = this.getAttribute('order');
		if (order == 'asc')
			order = 'desc';
		else 
			order = 'asc';
	}
	grid.setAttribute('order',order);
	params =  new Array();
	params['p'] = page;
	params['id'] = grid_id;
	params['order_by'] = order_by;
	params['order'] = order;
	try{
	eval('filters=grid_filter_'+grid_id+';');
	params['filters'] = filters;
	}catch(e){};
	AJAXPostData(data_from, params);
}

function grid_input_check_for_changes()
{
	if (this.value != this.getAttribute('original_value'))
	{
		this.className = 'grid_input_changed';
	}
	else
	{
		this.className = 'grid_input';
	}
}

function grid_save()
{
//	a[id][fieldname] = value;

	var grid_table, grid_id, tds, params, data_to, params_data, grid, filters;
	grid_id = this.getAttribute('grid_id');
	grid = document.getElementById(grid_id);
	grid_table = document.getElementById('grid_main_tbl_'+grid_id);
	tds = grid_table.getElementsByTagName('INPUT');
	params_data = new Array();
	for (var i=0; i<tds.length; i++)
	{
		if (tds[i].value != tds[i].getAttribute('original_value'))
		{
			if (!params_data[tds[i].parentNode.parentNode.firstChild.firstChild.value])
			{
				params_data[tds[i].parentNode.parentNode.firstChild.firstChild.value] = new Array();
			};
			params_data[tds[i].parentNode.parentNode.firstChild.firstChild.value][tds[i].getAttribute('field_name')] = tds[i].value;
		}
	}
	data_to = grid.getAttribute('data_to');
	page = grid.getAttribute('page_number');
	order_by = grid.getAttribute('order_by');
	order = grid.getAttribute('order');

	
	params =  new Array();
	
	params['id'] = grid_id;
	
	if (page)
		params['p'] = page;
	if (order_by)
		params['order_by'] = order_by;
	if (order)
		params['order'] = order;
	try{
	eval('filters=grid_filter_'+grid_id+';');
	params['filters'] = filters;
	}catch(e){};
	params['update_data'] = params_data;
//	alert(params['update_data'][2]['master']);

	AJAXPostData(data_to, params);
	
}

function grid_cancel()
{
	var grid_table, grid_id, tds;
	grid_id = this.getAttribute('grid_id');
	grid_table = document.getElementById('grid_main_tbl_'+grid_id);
	tds = grid_table.getElementsByTagName('INPUT');
	for (var i=0; i<tds.length; i++)
	{
		tds[i].value = tds[i].getAttribute('original_value');
		tds[i].className = 'grid_input';
	}

}

function grid_filter()
{
	var grid_id, filter_row;
	grid_id = this.getAttribute('grid_id');
	filter_row = document.getElementById('grid_filter_'+grid_id);
	if (filter_row.style.display == 'none')
		filter_row.style.display = '';
	else
		filter_row.style.display = 'none';
}

function grid_apply_filter()
{
	var inp, grid_id, field_name, grid, filters, params_data, data_from;
	grid_id = this.getAttribute('grid_id');
	grid = document.getElementById(grid_id);
	data_from = grid.getAttribute('data_from');
	grid_table = document.getElementById('grid_main_tbl_'+grid_id);
	filters = grid_table.getElementsByTagName('INPUT');
	
	params_data = new Array();
	
	for (var i=0; i<filters.length; i++)
		if (filters[i].className == 'grid_input_filter')
	{
			params_data[filters[i].getAttribute('field_name')] = filters[i].value;
	}

//	alert(params_data['master']);
	
	alert('grid_filter_' + grid_id + '=params_data;');
	eval('grid_filter_' + grid_id + '=params_data;');
	
	
	data_to = grid.getAttribute('data_to');
	page = grid.getAttribute('page_number');
	order_by = grid.getAttribute('order_by');
	order = grid.getAttribute('order');
	eval('filters1=grid_filter_'+grid_id+';');

	params =  new Array();
	
	params['id'] = grid_id;
	
	if (page)
		params['p'] = page;
	if (order_by)
		params['order_by'] = order_by;
	if (order)
		params['order'] = order;
	params['filters'] = filters;
//	alert(params['filters']['master']);

	AJAXPostData(data_from, params);
}

//							/GRID


function LockControls()
{
	var c;

	LockData = arguments[0];

	if (arguments[1])
		LockElement = arguments[1];
	else
		LockElement = document.body;

	if (LockData)
		LockElement.className = "lockContent";
	else
		LockElement.className = "";

	c = LockElement.getElementsByTagName('INPUT');
	for (var i=0; i<c.length; i++)
	{
		if (LockData)
		{
			c[i].setAttribute('oldStatus', c[i].getAttribute('disabled'));
			c[i].setAttribute('disabled', true);
		}
		else
		{
			c[i].disabled = c[i].getAttribute('oldStatus');
		}
	}

	c = LockElement.getElementsByTagName('SELECT');
	for (var i=0; i<c.length; i++)
	{
		if (LockData)
		{
			c[i].setAttribute('oldStatus', c[i].getAttribute('disabled'));
			c[i].setAttribute('disabled', true);
		}
		else
		{
			c[i].disabled = c[i].getAttribute('oldStatus');
		}
	}

	c = LockElement.getElementsByTagName('TEXTAREA');
	for (var i=0; i<c.length; i++)
	{
		if (LockData)
		{
			c[i].setAttribute('oldStatus', c[i].getAttribute('disabled'));
			c[i].setAttribute('disabled', true);
		}
		else
		{
			c[i].disabled = c[i].getAttribute('oldStatus');
		}
	}
}

function hide_ajax_message()
{
	var el = document.getElementById('show_message_div');
	el.style.display = 'none';
}

function show_ajax_message()
{
	var el, text;

	if (arguments[0])
		text = arguments[0];
	else
		text = 'DATA PROCESSING...';

	if (document.getElementById('show_message_div'))
	{
		el = document.getElementById('show_message_div');
	}
	else
	{
		el = document.createElement('DIV');
		el.id = 'show_message_div';
//!!!!!!!!!!!!!!!
		document.body.appendChild(el);
//!!!!!!!!!!!!!!!
	}


	el.innerHTML = text;
	el.style.top = document.body.scrollTop;

	el.style.display = '';
}

function get_top(el)
{
	var top = 0;
	try {top += el.offsetTop;} catch (e) {}
	if (el.tagName != 'BODY')
		top += get_top(el.offsetParent);
	return top;
}

function get_left(el)
{
	var left = 0;
	try {left += el.offsetLeft;} catch (e) {}
	if (el.tagName != 'BODY')
		left += get_left(el.offsetParent);
	return left;
}


///////////////							STARTS

function change_stars()
{
	if (!LockData)
	{
		n = arguments[0];
		if (!n)
		{
			var tt = document.getElementById((arguments[1]?arguments[1]:'Stars'));
			n = tt.value;
		}

		if (arguments[0] == -1)
			n=0

		var i=1;
		for (i=5; i>n; i--)
			document.getElementById('show_start_'+i).src = '/admin/images/stars/star.gif';

		for (i=1; i<=n; i++)
			document.getElementById('show_start_'+i).src = '/admin/images/stars/star_.gif';
	}
}

function fix_star(n)
{
	if (!LockData)
	{
		var tt = document.getElementById((arguments[1]?arguments[1]:'Stars'));
		if (n > 0)
		{
			tt.value = n;
			if (tt.getAttribute('searchgroup'))
			{
				tt.updateCounter();
			}
		}
		else
		{
			tt.value = '';
			if (tt.getAttribute('searchgroup'))
			{
				tt.updateCounter();
			}
		}
	}
}
///////////////							/STARTS

function open_pic(name)
{
	window.open('/openimage.php?img=' + name + '&loaded=0', 'pre_image', 'toolbar=0,menubar=0,personalbar=0,scrollbars=0,status=0,location=0,resizable=0,width=200,height=100');
}
