/**
 * In The Name of Allah, The Most Gracious, The Most Merciful
 * This file includes functions for form processing 
 *
 * @version 6.2.x.x
 * @copyright (c) 2008/1387, vwideas.com
 */
var FileEquivalentsForAnObject = new Array();
//------------------------------------------
function FormLoading(v)
{
	if(!v)
	{ 
		SetScreen();
	}
	Scripts = xGetElementsByTagName("script");
	IsForm = false;
	for (var i = 0; i < Scripts.length; i++)
	{
		if (Scripts[i].src.indexOf('js/form.js') != -1)
		{
			IsForm = true;
		}
	}

	if (IsForm)
	{
		if (typeof SetSelectedData != 'undefined')
		{
			SetSelectedData();
		}
		Table = xGetElementById("tblTable");
		if (Table && Table.dir)
		{
			if (Table.dir == "rtl")
			{
				SetDirection("rtl");
				if (document.title == "")
				{
					document.title = "سيستم مديريت محتواي پروانه";
				}
			}
			else if (Table.dir == "ltr")
			{
				SetDirection("ltr");
				if (document.title == "")
				{
					document.title = "Butterfly CMS";
				}
			}
		}
		if (Save = xGetElementById("btnSave"))
		{
			if (Save.onclick == null)
			{
				Save.onclick = FormSubmit;
			}
		}
	}

	if (((typeof FormLoading_) !== 'undefined' ) && FormLoading_)
	{
		FormLoading_();
	}
	else
	{
	}
}
//------------------------------------------
function FormSubmit(FormID)
{
	Form = GetInfo();
	if (typeof Form == 'string' && Form == 'unsavedtableexist')
	{
		alert(W_WARNING_SAVE_ROW);
		return false;
	}
	if (!Form)
	{
		if (FormID)
		{
			Form = FormID;
		}
		else
		{
			Form = document.forms[0];
		}
	}

	if (FormValidate(Form.id))
	{
		Form.submit();
	}
}
function AddToListFromList(ListID1, ListID2)
{
	ListID1 = xGetElementById(ListID1);
	ListID2 = xGetElementById(ListID2);

	for (var i = 0; i < ListID1.length; i++)
	{
		if (ListID1[i].selected)
		{
			View = ListID1[i].text;
			Value = ListID1[i].value;
			//------------------------------------------
			if (!IsInList(Value, ListID2))
			{
				n = ListID2.options.length;
				ListID2.options[n] = new Option(View, Value);
				ListID2.options[n].title = View;
			}
			else
			{
				alert(View + ' ' + W_WARNING_SELECTED);
			}
			//------------------------------------------
		}
	}
}
//------------------------------------------
function addToList(View, Value, ListID)
{
	ListID = xGetElementById(ListID);

	if (!IsInList(Value, ListID)) {
		n = ListID.options.length;
		ListID.options[n] = new Option(View, Value);
		ListID.options[n].title = View;
	} else {
		alert(View + ' ' + W_WARNING_SELECTED);
	}
}
//------------------------------------------
function ReturnToList(ListID2, ListID1)
{
	ListID1 = xGetElementById(ListID1);
	ListID2 = xGetElementById(ListID2);

	for (var i = 0; i < ListID2.length; i++) {
		if (ListID2[i].selected) {
			for (var j = 0; j < ListID1.length; j++) {
				if (ListID1[j].value == ListID2[i].value) {
					xColor(ListID1[j], '#000000');
				}
			}
		}
	}
	//----------------------
	DeleteFromList(ListID2);
}
//------------------------------------------
function DeleteFromList(ListID)
{
	ListID = xGetElementById(ListID);

	for (var i = 0; i < ListID.length; )
	{
		if (ListID[i].selected) {
			ListID.removeChild(ListID[i]);
		} else {
			i++;	
		}
	}
}
//------------------------------------------
function RemoveFromList(ListID)
{
	ListID = xGetElementById(ListID);

	for (var i = 0; i < ListID.length; i++) {
		if (ListID[i].selected) {
			xColor(ListID[i], '#BBBBBB');
			ListID[i].selected = false;
		}
	}
}
//------------------------------------------
function deactiveAnElementFromList(Value, ListID)
{
	ListID = xGetElementById(ListID);
	var Index = 0;
	if (Index = IsInList(Value, ListID)) {
//		for (var i = 0; i < ListID.length; i++) {
//			if (ListID[i].selected) {
				xColor(ListID[Index - 1], '#BBBBBB');
				ListID[Index - 1].selected = false;
//			}
//		}
	}
	else
	{
	}
}
//------------------------------------------
function SelectAllList(ListID)
{
	ListID = xGetElementById(ListID);

	for (var i = 0; i < ListID.length; i++)
	{
		ListID[i].selected = true;
	}
}
//------------------------------------------
function DeselectAllList(ListID)
{
	ListID = xGetElementById(ListID);

	for (var i = 0; i < ListID.length; i++)
	{
		ListID[i].selected = false;
	}
}
//------------------------------------------
function MoveToList(ListID1, ListID2)
{
	ListID1 = xGetElementById(ListID1);
	ListID2 = xGetElementById(ListID2);

	AddToListFromList(ListID1, ListID2);
	DeleteFromList(ListID1);
}
//------------------------------------------
function CopyToList(ListID1, ListID2)
{
	ListID1 = xGetElementById(ListID1);
	ListID2 = xGetElementById(ListID2);

	AddToListFromList(ListID1, ListID2);
	RemoveFromList(ListID1);
}
//------------------------------------------
function IsInList(Value, ListID)
{
	ListID = xGetElementById(ListID);

	for(var i = 0; i < ListID.length; i++)
	{
		if (Value == ListID[i].value)
		{
			return i + 1;
		}
	}
	return false;
}
//------------------------------------------
function IsInTable(Value, TableID)
{
	TableID = xGetElementById(TableID);

	for (var i = 0; i < TableID.rows.length; i++)
	{
		if (Value == TableID.rows[i].id)
		{
			return true;
		}
	}
	return false;
}
//------------------------------------------
function EmptyTable(TableID, TableType)
{
	TableID = xGetElementById(TableID);
	switch(trim(TableType).toLowerCase())
	{
		case 'dynamic':
			for (var i = TableID.rows.length - 1; i > 0; i--)
			{
				TableID.deleteRow(i);
			}
			return true;
			break;
		case 'static':
			alert('This function is Not Available!');
			return true;
			break;
	}
	return false;
}
//------------------------------------------
function AddToTable(ListID, TableID)
{
	ListID = xGetElementById(ListID);
	TableID = xGetElementById(TableID);

	for (var i = 0; i < ListID.length; i++)
	{
		if (ListID[i].selected)
		{
			Value = ListID[i].value;
			View = ListID[i].text;
			//------------------------------------------
			if (!IsInTable(Value, TableID))
			{
				TR = TableID.insertRow(-1);
				TR.className = "TableListClass";
				TR.height = "20";
				TR.id = Value;

				var TD = xCreateElement('td');
				TD.className = "TableListClass";
					/**/
					var Element = xCreateElement("input");
					Element.type = "checkbox";
					/**
					var Element = xCreateElement("img");
					Element.src = "../admin/images/icon-delete.gif";
					Element.title = W_DELETE;
					Element.onclick = DeleteTableRow;
					Element.style.cursor = "hand";
					/**/
				xAppendChild(TD, Element);
				xAppendChild(TR, TD);

				var TD = xCreateElement('td');
				TD.className = "TableListClass";
				xInnerHtml(TD, TableID.rows.length - 1);
				
				if (TableID.rows[0].cells.length == 4)
				{
					var TD = xCreateElement('td');
					TD.className = "TableListClass";
					ComboID = "cmb" + ListID.id.substr(3);
					xInnerHtml(TD, getParent(ComboID.id, Value));
					xAppendChild(TR, TD);
				}
				xAppendChild(TR, TD);
			
				var TD = xCreateElement('td');
				TD.className = "TableListClass";
				xInnerHtml(TD, View);
				xAppendChild(TR, TD);
			}
			else
			{
				alert(View + W_WARNING_SELECTED);
			}
			//------------------------------------------
			//ListID[i].selected = false;
		}
	}
	//-----------------------
	RemoveFromList(ListID);
}
//------------------------------------------
function DeleteFromTable(TableID)
{
	TableID = xGetElementById(TableID);

	for (var i = 0; i < TableID.rows.length; )
	{
		if (xFirstChild(TableID.rows[i].cells[0]).checked)
		{
			TableID.deleteRow(i);
		}
		else
		{
			i++;	
		}
	}
}
//------------------------------------------
function SelectAllTable(TableID)
{
	TableID = xGetElementById(TableID);

	for (var i = 0; i < TableID.rows.length; i++)
	{
		xFirstChild(TableID.rows[i].cells[0]).checked = true;
	}
}
//------------------------------------------
function DeselectAllTable(TableID)
{
	TableID = xGetElementById(TableID);

	for (var i = 0; i < TableID.rows.length; i++)
	{
		xFirstChild(TableID.rows[i].cells[0]).checked = false;
	}
	return true;
}
//------------------------------------------
function Select_Deselect(TableID, Evt)
{
	var Event = new xEvent(Evt);
	var Element = Event.target;

	TableID = xGetElementById(TableID);

	if (Element.checked)
	{
		SelectAllTable(TableID);
	}
	else
	{
		DeselectAllTable(TableID);
	}
	return true;
}
//------------------------------------------
function DataSetting(ComboID, ListID)
{
	ComboID = xGetElementById(ComboID);
	ListID = xGetElementById(ListID);

	for (var i = 0; i < ListID.length; )
	{
		ListID.removeChild(ListID[i]);
	}
	//------------------------------------------
	DataArray = "DataArray_" + ComboID.id;
	DataArray = eval(DataArray);
	var n = 0;
	for (var i = 0; i < DataArray.length; i++)
	{
		if (DataArray[i].Parent == ComboID.value)
		{
			View = DataArray[i].View;
			Value = DataArray[i].Value;
			//------------------------------------------
			ListID.options[n] = new Option(View, Value);
			ListID.options[n].title = View;
			n++;
			//------------------------------------------
		}
	}
	return true;
}
//------------------------------------------
function DataSetting_DL_MS_MP(ComboID, ListID)
{
//	alert(1);
	ComboID = xGetElementById(ComboID);
	ListID = xGetElementById(ListID);

	DataArray = eval("DataArray_" + ComboID.id);
	DataSetting(ComboID, ListID);

//	ListID2 = xGetElementById(ListID2);
//	alert(DataArray.length);
//	for (var i = 0; i < DataArray.length; i++) {
//		deactiveAnElementFromList(DataArray[i].Value, ListID);
//	}

	return true;
}
//------------------------------------------
function DataSetting3(ComboID, ListID1, ListID2)
{
	ComboID = xGetElementById(ComboID);
	ListID1 = xGetElementById(ListID1);
	ListID2 = xGetElementById(ListID2);

	DataSetting(ComboID, ListID1);
	// Delete All From List :
	SelectAllList(ListID2);
	DeleteFromList(ListID2);
	return true;
}
//------------------------------------------
function IsSavedTable(Table)
{
	if (typeof Table == 'string' && Table.substr(0,3) != 'tbl')
		Table = 'tbl' + Table;

	Table = xGetElementById(Table);

	for (var i = 0; i < Table.rows.length; i++)
	{
		//if (TableID.rows[i].id != "SAVED")
		//alert(Table.rows[i].id);
		if (Table.rows[i].mode == "NEW" || Table.rows[i].mode == "EDIT")
		{
			return false;
		}
	}
	return true;
}
//------------------------------------------
function AddTableRow(TableID)
{
	TableID = xGetElementById(TableID);
	TableObject = GetTableSpec(TableID);

	var Error = false;
	if (IsSavedTable(TableID))
	{
		//------------------------------------------
		Fields = "Fields_" + TableID.id;
		Fields = eval(Fields);

		TR = TableID.insertRow(-1);
//		TR.id = "NEW";
		TR.mode = "NEW";
		TR.className = "TableClass";


		if (!TableObject.NoRowCheckable)
		{
			TD = xCreateElement("td");
			TD.className = "TableClass";
			var Element = xCreateElement("img");
				Element.src = "../admin/images/icon-delete.gif";
				Element.title = W_DELETE;
				Element.onclick = DeleteTableRow;
				//xAddEventListener(Element,"click",DeleteTableRow)
				Element.style.cursor = "pointer";
			xAppendChild(TD, Element);
			xAppendChild(TR, TD);
		}

		if (!TableObject.NonArrangementic)
		{
			TD = xCreateElement("td");
			TD.className = "TableClass";
				var Element = xCreateElement("img");
				Element.src = "../admin/images/up.gif";
				Element.title = W_UP;
				Element.direction = -1;
				Element.onclick = MoveTableRow;
				Element.style.cursor = "pointer";
				Element.id = "1";
			xAppendChild(TD, Element);
			Element.insertAdjacentHTML("afterEnd","<br />");
			//Element.insertAdjacentText("afterEnd", "\n");
				var Element = xCreateElement("img");
				Element.src = "../admin/images/dn.gif";
				Element.title = W_DOWN;
				Element.direction = +1;
				Element.onclick = MoveTableRow;
				Element.style.cursor = "pointer";
			xAppendChild(TD, Element);
			xAppendChild(TR, TD);
		}

		if (!TableObject.NoRowEditable)
		{
			TD = xCreateElement("td");
			TD.className = "TableClass";
				var Element = xCreateElement("input");
				Element.type = "button";
				Element.value = W_SAVE;
				Element.className = "ButtonClass";
				Element.onclick = SaveTableRow;
				//xRemoveEventListener(Element,"click",EditTableRow);
				//xAddEventListener(Element,"click",SaveTableRow)
			xAppendChild(TD, Element);
			xAppendChild(TR, TD);
		}
		//------------------------------------------
		for (var i = 0; i < Fields.length; i++)
		{
			var Data = Fields[i].Data.concat();
			if (Data)
			{
				if (Fields[i].Type == 'USE_ONCE')
				{
					for(tr = 0; tr<TableID.rows.length;tr++)
					{
						TRow = TableID.rows[tr];
						
						if (TRow.rowIndex == TR.rowIndex)
						{
							continue;
						}
						if (!TRow.NoDataContainer || TRow.NoDataContainer == 'true')
						{
							for(ii in Data)
							{
								if (TRow.cells[i + TableObject.StartContentDataAt].id == Data[ii].Value)
								{
									delete Data[ii];
								}
							}
						}
					}
				}
				if (typeof Data == 'object')
				{
					Data_ = new Array();
					for(ii = 0; ii < Data.length; ii++)
					{
						if (Data[ii])
						{
							Data_[Data_.length] = Data[ii];
						}
					}
					Data = Data_;
				}
			}
			TD = xCreateElement("td");
			TD.className = "TableClass";
			if (Fields[i].Type == 'NonEditableContent')
			{
				NonEditableContent = true;
			}
			else
			{
				NonEditableContent = false;
			}
			if (Data)
			{
				var Element = xCreateElement("select");
				Element.className = "TableClass";
				for (var j = 0; j < Data.length; j++)
				{
					View = Data[j].View;
					Value = Data[j].Value;
					Element.options[j] = new Option(View, Value);
					Element.options[j].title = View;
					Element.readOnly = NonEditableContent;
				}
				//if (j == 1 && View == "")
				//if (Element.length == 1 && Element[0].text == "")
				if (Data.length == 1 && Data[0].View == "")
				{
					TD.style.width = "0%";
					Element.className = "";
					//Element.style.width = "0px";
					xWidth(Element, 0);
					xVisibility(Element, false);
				}
				else if (Data.length == 0)
				{
					Error = true;
				}
			}
			else if (Fields[i].Type == 'DATE')
			{
				TD.dir = 'ltr';
				var Element = xCreateElement("input");
				Element.type = "text";
				Element.onfocus = DoOnDateEnter
				Element.dir = 'ltr';
				Element.className = "TableClass";
				Element.readOnly = NonEditableContent;
			}
			else
			{
				var Element = xCreateElement("input");
				Element.type = "text";
				Element.className = "TableClass";
				Element.readOnly = NonEditableContent;
			}
			xAppendChild(TD, Element);
			xAppendChild(TR, TD);
		}
		//------------------------------------------
		if (Error)
		{
			TableID.deleteRow(TR.rowIndex);
			alert("اطلاعات كافي براي نمايش سطر جديد وجود ندارد !");
		}
	}
	else
	{
		alert(W_WARNING_SAVE_ROW);
	}
}

function DoOnDateChange(Evt)
{

	var Event = new xEvent(Evt);
	var CE = Event.target;
	var currentText = CE.value;
	var newText = '';
	var DateDefaultValue = '****/**/**';
	//if (trim(C.value) == '')
	//{
	//	CE.value = DateDefaultValue;
	//}
	var code = Event.keyCode;
	currentText = currentText.clear();
//	var DateForm = /^([0-9*]{4}\/[0-9*]{2}\/[0-9*]{2})|([0-9*]{4}\/[\x60-\x69*]{2}\/[\x60-\x69*]{2})$/ ;
	var DateForm = /^[1-9*]{1}[0-9*]{3}\/(([0]{1}[1-9*]{1})|([1*]{1}[0-2*]{1}))\/(([0-2*]{1}[0-9*]{1})|([3]{1}[0-1*]{1}))$/ ;
	if (DateForm.test(currentText))
	{
		if (code == 8)
		{
			// Backspace
			AsterikPosition = -1;
			if (AsterikPosition = currentText.indexOf('*'))
			{
				if (AsterikPosition== -1)
				{
					AsterikPosition = currentText.length;
				}
				AsterikPosition--;
				if (AsterikPosition == 4 || AsterikPosition == 7)
				{
					AsterikPosition--;
				}
				newText = currentText.replaceCharAt(AsterikPosition , '*')
			}

		}
		else if (code == 9)
		{
			return true;
		}
		else
		{
			if (code < 106 && code > 95)
			{
				code -= 96;
			}
			else if (code < 58 && code > 47)
			{
				code -= 48;
			}
			else
			{
				return false;
			}
			if (!(code > 9 || code < 0))
			{
				// For Checking The Validation of Characters is Not Out Numeric Range!
				newText = currentText.replace(/\*/ , String.fromCharCode(code + 48))
			}
			else
			{
				
			}
		}
		if (!DateForm.test(newText))
		{
			newText = currentText;
		}
		CE.value = newText;
		Event.returnValue = false;
		return false;
	}
	else
	{
		if (confirm(W_DATE_FORMAT_IS_INCORRECT + ', ' + W_DO_YOU_WANT_CORRECT_THAT))
		{
			CE.value = DateDefaultValue;
		}
		
		Event.returnValue = false;
	}
	return false;
}

function DoOnDateEnter(Evt)
{
	var Event = new xEvent(Evt);
	var CE = Event.target;
	
	xRemoveEventListener(CE, 'keydown', DoOnDateChange);
	xAddEventListener(CE, 'keydown', DoOnDateChange);

	xRemoveEventListener(CE, 'blur', DoOnDateExit); 
	xAddEventListener(CE, 'blur', DoOnDateExit); 
	
	var DateDefaultValue = '****/**/**';

	var code = Event.keyCode;
	CE.value = CE.value.clear();
//	var DateForm = /^([0-9*]{4}\/[0-9*]{2}\/[0-9*]{2})|([0-9*]{4}\/[\x60-\x69*]{2}\/[\x60-\x69*]{2})$/ ;
	var DateForm = /^[1-9]{1}[0-9]{3}\/(([0]{1}[1-9]{1})|([1]{1}[0-2]{1}))\/(([0-2]{1}[0-9]{1})|([3]{1}[0-1]{1}))$/ ;
	if (!DateForm.test(CE.value))
	{
		CE.value = DateDefaultValue;
	}

	return true;
}

function DoOnDateExit(Evt)
{
	var Event = new xEvent(Evt);
	var CE = Event.target;
	//if (trim(C.value) == '')
	//{
	//	CE.value = DateDefaultValue;
	//}
	var code = Event.keyCode;
	CE.value = CE.value.clear();

//	var DateForm = /^([0-9*]{4}\/[0-9*]{2}\/[0-9*]{2})|([0-9*]{4}\/[\x60-\x69*]{2}\/[\x60-\x69*]{2})$/ ;
	var DateForm = /^[1-9]{1}[0-9]{3}\/(([0]{1}[1-9]{1})|([1]{1}[0-2]{1}))\/(([0-2]{1}[0-9]{1})|([3]{1}[0-1]{1}))$/ ;
	if (!DateForm.test(CE.value))
	{
		CE.value = '';
	}

	return true;
}

//------------------------------------------
function SaveTableRow(Evt, Row)  //cross - browser
{
	if (typeof Evt == 'undefined' && Evt == null && typeof Row == 'object')
	{
		TR = Row;
	}
	else
	{
		var Event = new xEvent(Evt);
		var Element = Event.target;

		TD = xParentNode(Element, 1);
		TR = xParentNode(TD, 1);
	}

	TBody = xParentNode(TR, 1);

	if(TBody.tagName.toLowerCase() == "table")
	{
		Table = TBody;
	}
	else
	{
		Table = xParentNode(TBody, 1);
	}
	TableObject = GetTableSpec(Table);
	
	var c = TableObject.StartContentDataAt;

	Fields = "Fields_" + Table.id;
	Fields = eval(Fields);

	IsEmpty = false;
	Warning = "";
	NotValid = "";
	NotValidWithAlert = "";
	NotValidForForce = "";
	NotValidForForceWithAlert = "";
	//------------------------------------------
	for (var i = 0; i < TR.cells.length; i++)
	{
		Cell = TR.cells[i];
		if (!Cell.NotEditable || trim(Cell.NotEditable.toLowerCase()) != 'noteditable')
		{
			var CellFirstChild = xFirstChild(Cell);
			if (CellFirstChild)
			{
				if (CellFirstChild.tagName == "SELECT")
				{
					si = CellFirstChild.selectedIndex;
					if (si != -1)
					{
						Cell.id = CellFirstChild.options[si].value;
						xInnerHtml(Cell, CellFirstChild.options[si].text);
					}
				}
				else if (CellFirstChild.tagName == "INPUT")
				{
					if (CellFirstChild.type == "text")
					{
						var CellInnerHtml = xInnerHtml(Cell);
						xInnerHtml(Cell, CellInnerHtml = trim(CellFirstChild.value));
//						if (CellInnerHtml == "")
//						{
//							
//						}
//						else
//						alert(Fields[i - c].Type);
//						alert(CellInnerHtml);
						if ((ValidationStatus = Validate(CellInnerHtml, Fields[i - c].Type, Fields[i - c].Force)) > 0)
						{
							//IsEmpty = false;
						}
						else
						{
							//IsEmpty = false;
							//NotValid += Table.rows[0].cells[i].innerHTML + " و ";
							if (ValidationStatus == 0)
							{
								if (Fields[i - c].ForceAlert && Fields[i - c].ForceAlert != '')
								{
									NotValidForForceWithAlert += Fields[i - c].ForceAlert + '\n';
								}
								else
								{
									NotValidForForce += (i - c + 1) + " و ";
								}
							}
							else if (ValidationStatus == -1)
							{
								if (Fields[i - c].ValidationAlert && Fields[i - c].ValidationAlert != '')
								{
									NotValidWithAlert += Fields[i - c].ValidationAlert + '\n';
								}
								else
								{
									NotValid += (i - c + 1) + " و ";
								}
							}
						}
					}
					else if (CellFirstChild.type == "button")
					{
						CellFirstChild.value = W_EDIT;
						CellFirstChild.onclick = EditTableRow;
						//xRemoveEventListener(CellFirstChild,"click",SaveTableRow);
						//xAddEventListener(CellFirstChild,"click",EditTableRow);
					}
					else if (CellFirstChild.type != "checkbox" && i == 0)
					{
						Cell.removeChild(CellFirstChild);
						var Element = xCreateElement("input");
						Element.type = "checkbox";
						xAppendChild(Cell, Element);
					}
				}
				/*
				else if (Cell.firstChild.tagName == "IMG" && i == 0)// && TR.id != "NEW")
				{
					Cell.removeChild(Cell.firstChild);
					var Element = document.createElement("input");
					Element.type = "checkbox";
					Cell.appendChild(Element);
				}
				*/
			}
		}
	}
	//------------------------------------------
	if (TR.mode == "NEW" || TR.mode == "EDIT")
	{
		TR.mode = "SAVED";
	}
	TR.className = "TableClass";
	//------------------------------------------
	if (IsEmpty)
	{
		alert(W_WARNING_NO_DATA);
		var TRF = xFirstChild(TR.cells[0]);
		TRF.checked = true;
		DeleteFromTable(Table);
	}
	if (NotValidForForce != "" || NotValidForForceWithAlert != "")
	{
		Warning = NotValidForForceWithAlert;
		if (!(NotValidForForce = NotValidForForce.substr(0, NotValidForForce.length - 3)))
		{
			Warning = Warning.substr(0, Warning.length - 1);
		}
		else
		{
			Warning += W_WARNING_NOT_VALID_FOR_FORCE_1 + ' ' + NotValidForForce + ' ' + W_WARNING_NOT_VALID_FOR_FORCE_2;
		}
	}
	if (NotValid != "" || NotValidWithAlert != "")
	{
		Warning = NotValidWithAlert;
		if (!(NotValid = NotValid.substr(0, NotValid.length - 3)))
		{
			Warning = Warning.substr(0, Warning.length - 1);
		}
		else
		{
			Warning += W_WARNING_NOT_VALID_1 + ' ' + NotValid + ' ' + W_WARNING_NOT_VALID_2;
		}
	}
	if (Warning)
	{
		alert(Warning);
		EditTableRow(null, TR)
	}
	//------------------------------------------
}
//------------------------------------------
function EditTableRow(Evt, Row)  //cross - browser
{
	if (typeof Evt != 'undefined' && Evt == null && typeof Row == 'object')
	{
		TR = Row;
	}
	else
	{
		var Event = new xEvent(Evt);
		var Element = Event.target;
		TD = xParentNode(Element, 1);
		TR = xParentNode(TD, 1);
	}

	TBody = xParentNode(TR, 1);

	if(TBody.tagName.toLowerCase() == "table")
	{
		Table = TBody;
	}
	else
	{
		Table = xParentNode(TBody, 1);
	}
	TableObject = GetTableSpec(Table);

	var c = TableObject.StartContentDataAt;

	Fields = "Fields_" + Table.id;
	Fields = eval(Fields);

	if (IsSavedTable(Table))
	{
		for (var i = 0; i < TR.cells.length; i++)
		{
			if ((i - c) > -1 && Fields[i - c].Type == 'NonEditableContent')
			{
				NonEditableContent = true;
			}
			else
			{
				NonEditableContent = false;
			}
			Cell = TR.cells[i];
			if (Cell.id)
			{
				var Data = Fields[i - c].Data.concat();
				if (Fields[i - c].Type == 'USE_ONCE')
				{
					for(tr = 0; tr<Table.rows.length;tr++)
					{
						TRow = Table.rows[tr];
						if (TRow.rowIndex == TR.rowIndex)
						{
							continue;
						}
						if (!TRow.NoDataContainer || TRow.NoDataContainer == 'true')
						{
							for(ii in Data)
							{
								if (TRow.cells[i].id == Data[ii].Value)
								{
									delete Data[ii];
								}
							}
						}
					}
				}
				if (typeof Data == 'object')
				{
					Data_ = new Array();
					for(ii = 0; ii < Data.length; ii++)
					{
						if (Data[ii])
						{
							Data_[Data_.length] = Data[ii];
						}
					}
					Data = Data_;
				}
			}
			//alert(i + " ::::>> " + Cell.firstChild)
			//alert(i + " ::::>> " + xFirstChild(Cell))
			if ((!Cell.NotEditable || trim(Cell.NotEditable.toLowerCase()) != 'noteditable') && (!Cell.NonEditable || trim(Cell.NonEditable.toLowerCase()) != 'noneditable'))
			{
				var Element = '';
				if (!xFirstChild(Cell))
				{
					if (!Cell.id)
					{
						if (Fields[i - c].Type == 'DATE')
						{
							Cell.dir = 'ltr';
							Element = xCreateElement("input");
							Element.type = "text";
							Element.onfocus = DoOnDateEnter;
							Element.className = "TableClass";
							Element.dir = "ltr";
							Element.readOnly = NonEditableContent;

							var InnerHTML = xInnerHtml(Cell);
							Element.value = InnerHTML;

							xInnerHtml(Cell, "");
							xAppendChild(Cell, Element);
						}
						else
						{
							Element = xCreateElement("input");
							Element.type = "text";
							Element.className = "TableClass";
							Element.readOnly = NonEditableContent;
							var InnerHTML = xInnerHtml(Cell);
							Element.value = InnerHTML;
							xInnerHtml(Cell, "");
							xAppendChild(Cell, Element);
						}
					}
					else if (Cell.id && xInnerHtml(Cell) != "")
					{
						Element = xCreateElement("select");
						Element.className = "TableClass";
						for (j = 0; j < Data.length; j++)	// !!! ???
						{
							View = Data[j].View;
							Value = Data[j].Value;
							Element.options[j] = new Option(View, Value);
							Element.options[j].title = View;
							Element.readOnly = NonEditableContent;
						}
						Element.readOnly = NonEditableContent;
						Element.value = Cell.id;
						xInnerHtml(Cell, "");
						xAppendChild(Cell, Element);
					}
				}
				else if (!xFirstChild(Cell).tagName)
				{
					if (Cell.id)
					{
						Element = xCreateElement("select");
						Element.className = "TableClass";
						for (j = 0; j < Data.length; j++)	// !!! ???
						{
							View = Data[j].View;
							Value = Data[j].Value;
							Element.options[j] = new Option(View, Value);
							Element.options[j].title = View;
							Element.readOnly = NonEditableContent
						}
						Element.readOnly = NonEditableContent
						Element.value = Cell.id;
						xInnerHtml(Cell, "");
						xAppendChild(Cell, Element);
					}
					else if (Fields[i - c].Type == 'DATE')
					{
						Cell.dir = 'ltr';
						Element = xCreateElement("input");
						Element.type = "text";
						Element.onfocus = DoOnDateEnter;
						Element.className = "TableClass";
						Element.dir = "ltr";
						Element.readOnly = NonEditableContent;

						var InnerHTML = xInnerHtml(Cell);
						Element.value = InnerHTML;

						xInnerHtml(Cell, "");
						xAppendChild(Cell, Element);
					}
					else
					{
						Element = xCreateElement("input");
						Element.type = "text";
						Element.className = "TableClass";
						var InnerHTML = xInnerHtml(Cell);
						Element.value = InnerHTML;
						Element.readOnly = NonEditableContent;
						xInnerHtml(Cell, "");
						xAppendChild(Cell, Element);
					}
				}
				else if (xFirstChild(Cell).type == "button")
				{
					var FirstChild = xFirstChild(Cell);
					FirstChild.value = W_SAVE;
					FirstChild.onclick = SaveTableRow;
					//xRemoveEventListener(FirstChild,"click",EditTableRow);
					//xAddEventListener(FirstChild,"click",SaveTableRow)
				}
				if (Element && Fields[i - c].Listeners && Fields[i - c].Listeners.length)
				{
					for (j = 0; j < Fields[i - c].Listeners.length; j++)	// !!! ???
					{
						xAddEventListener(Element, Fields[i - c].Listeners[j].Event, Fields[i - c].Listeners[j].Listener);
					}
				}
			}
		}
		//------------------------------------------
		if (!TR.mode)
			TR.mode = 'EDIT';
		if (TR.mode == "SAVED")
		{
			TR.mode = "EDIT";
		}

		TR.className = "TableClass";
		//------------------------------------------
	}
	else
	{
		alert(W_WARNING_SAVE_ROW);
	}
}
//------------------------------------------
function AddSaveTableRow(Evt)
{
	var Event = new xEvent(Evt);
	var Element = Event.target;
	TD = xParentNode(Element, 1);
	TRow = xParentNode(TD, 1);

	TBody = xParentNode(TRow, 1);

	if(TBody.tagName.toLowerCase() == "table")
	{
		Table = TBody;
	}
	else
	{
		Table = xParentNode(TBody, 1);
	}

	TableObject = GetTableSpec(Table);

	Fields = "Fields_" + Table.id;
	Fields = eval(Fields);

	if (IsSavedTable(Table))
	{
		//------------------------------------------
		TR = Table.insertRow(-1);
		TR.className = "TableClass";
		TR.mode = "SAVED";

		if (!TableObject.NoRowCheckable)
		{	
			TD = xCreateElement('td');
			TD.className = "TableClass";
				var Element = xCreateElement("input");
				Element.type = "checkbox";
			xAppendChild(TD, Element);
			xAppendChild(TR, TD);
		}

		if (!TableObject.NonArrangementic)
		{
			TD = xCreateElement("td");
			TD.className = "TableClass";
				var Element = xCreateElement("img");
				Element.src = "../admin/images/up.gif";
				Element.title = W_UP;
				Element.direction = -1;
				Element.onclick = MoveTableRow;
				Element.style.cursor = "pointer";
				Element.id = "1";
			xAppendChild(TD, Element);
			Element.insertAdjacentHTML("afterEnd","<br />");
			//Element.insertAdjacentText("afterEnd", "\n");
				var Element = xCreateElement("img");
				Element.src = "../admin/images/dn.gif";
				Element.title = W_DOWN;
				Element.direction = +1;
				Element.onclick = MoveTableRow;
				Element.style.cursor = "pointer";
			xAppendChild(TD, Element);
			xAppendChild(TR, TD);
		}

		if (!TableObject.NoRowEditable)
		{
			TD = xCreateElement('td');
			TD.className = "TableClass";
				var Element = xCreateElement("input");
				Element.type = "button";
				Element.value = W_EDIT;
				Element.className = "ButtonClass";
				Element.onclick = EditTableRow;
			xAppendChild(TD, Element);
			xAppendChild(TR, TD);
		}
		
		//TD.innerHTML = TableID.rows.length - 1;

		IsEmpty = false;
		Warning = "";
		NotValid = "";
		NotValidWithAlert = "";
		NotValidForForce = "";
		NotValidForForceWithAlert = "";
		var CountedFields = 0;
		//------------------------------------------
		for (var i = 0; i < TRow.cells.length;i++)
		{
			CountedFields++;
			if (xFirstChild(TRow.cells[i]).tagName)
			{
				if (xFirstChild(TRow.cells[i]).tagName == "SELECT")
				{
					TD = xCreateElement('td');
					TD.className = "TableClass";
					si = xFirstChild(TRow.cells[i]).selectedIndex;
					TD.id = xFirstChild(TRow.cells[i]).options[si].value;
					xInnerHtml(TD, xFirstChild(TRow.cells[i]).options[si].text);
					xAppendChild(TR, TD);
				}
				else if (xFirstChild(TRow.cells[i]).tagName == "INPUT")
				{
					if (xFirstChild(TRow.cells[i]).type == "text")
					{
						TD = xCreateElement('td');
						TD.className = "TableClass";
						xInnerHtml(TD, trim(xFirstChild(TRow.cells[i]).value));
						xFirstChild(TRow.cells[i]).value = "";
						if ((tmp_ = xInnerHtml(TD)) == "")
						{
						}
						else if ((ValidationStatus = Validate(tmp_ ,Fields[CountedFields].Type, Fields[CountedFields].Force)) > 0)	// !!! ???
						{
							//IsEmpty = false;
						}
						else
						{
							//IsEmpty = false;
							//NotValid += Table.rows[1].cells[i].innerHTML + " و ";
							if (ValidationStatus == 0)
							{
								if (Fields[CountedFields].ForceAlert && Fields[CountedFields].ForceAlert != '')
								{
									NotValidForForceWithAlert += Fields[CountedFields].ForceAlert + '\n';
								}
								else
								{
									NotValidForForce += i + " و ";
								}
							}
							else if (ValidationStatus == -1)
							{
								if (Fields[CountedFields].ValidationAlert && Fields[CountedFields].ValidationAlert != '')
								{
									NotValidWithAlert += Fields[CountedFields].ValidationAlert + '\n';
								}
								else
								{
									NotValid += i + " و ";
								}
							}
							
						}
						xAppendChild(TR, TD);
					}
					else if (xFirstChild(TRow.cells[i].type) == 'button')
					{
//						if (xFirstChild(TRow.cells[i].type) == 'button')
//						{
							CountedFields--;
//						}
					}
				}
				else
				{
					TD = xCreateElement('td');
					if (TRow.cells[i].id)
					{
						TD.id = TRows.cells[i].id;
					}
					TD.className = "TableClass";

					xInnerHtml(TD, xInnerHtml(TRow.cells[i]));
					xAppendChild(TR, TD);
				}
			}
		}
		//------------------------------------------
		if (IsEmpty)
		{
			alert(W_WARNING_NO_DATA);
			xFirstChild(TR.cells[0]).checked = true;
			DeleteFromTable(Table);
		}

		if (NotValidForForce != "" || NotValidForForceWithAlert != "")
		{
			Warning = NotValidForForceWithAlert;
			if (!(NotValidForForce = NotValidForForce.substr(0, NotValidForForce.length - 3)))
			{
				Warning = Warning.substr(0, Warning.length - 1);
			}
			else
			{
				Warning += W_WARNING_NOT_VALID_FOR_FORCE_1 + ' ' + NotValidForForce + ' ' + W_WARNING_NOT_VALID_FOR_FORCE_2;
			}
		}
		if (NotValid != "" || NotValidWithAlert != "")
		{
			Warning = NotValidWithAlert;
			if (!(NotValid = NotValid.substr(0, NotValid.length - 3)))
			{
				Warning = Warning.substr(0, Warning.length - 1);
			}
			else
			{
				Warning += W_WARNING_NOT_VALID_1 + ' ' + NotValid + ' ' + W_WARNING_NOT_VALID_2;
			}
		}
		if (Warning)
		{
			alert(Warning);
			EditTableRow(null, TR)
		}
		//------------------------------------------
	}
	else
	{
		alert(W_WARNING_SAVE_ROW);
	}
}
//------------------------------------------
function DeleteTableRow(Evt)
{
	var Event = new xEvent(Evt);
	var Element = Event.target;

	TD = xParentNode(Element,1);
	TR = xParentNode(TD,1);
	TBody = xParentNode(TR,1);

	if(TBody.tagName.toLowerCase() == "table")
	{
		Table = TBody;
	}
	else
	{
		Table = xParentNode(TBody, 1);
	}

	Table.deleteRow(TR.rowIndex);
}
//------------------------------------------
function SetSelectedDataArray(Name, ShouldBeSpecifiedArray)
{
	if ((typeof ShouldBeSpecifiedArray) == 'undefined')
	{
		ShouldBeSpecifiedArray = false;
	}

	try
	{
		var SDA = eval("SelectedDataArray_" + Name);
	}
	catch(Error)
	{
		if (!ShouldBeSpecifiedArray)
		{
			try
			{
				var SDA = SelectedDataArray_OSRelation;
			}
			catch(Error)
			{
				alert("Error : " + Error.description);
			}
		}
		else
		{
			alert("Error : " + Error.description);
		}
	}
	return SDA;
	//-----------------------------------------------------------
	/**
	if (typeof(eval("SelectedDataArray_" + Name)) != "undefined")
	{
		var SDA = eval("SelectedDataArray_" + Name);
	}
	else if (typeof(SelectedDataArray_OSRelation) != "undefined")
	{
		var SDA = SelectedDataArray_OSRelation;
	}
	else
	{
		alert("Error");
		return false;
	}
	return SDA;
	/**/
	//-----------------------------------------------------------
}
//------------------------------------------
function SetSelectedData_Radio_Check(Name)
{
	//SelectedDataArray = eval("SelectedDataArray_" + Name);
	SelectedDataArray = SetSelectedDataArray(Name);
	var i = 0;
	while (Element = xGetElementById(Name + i))
	{
		i++;
		for (var j = 0; j < SelectedDataArray.length; j++)
		{
			if (Element.value == SelectedDataArray[j])
			{
				Element.checked = true;
				break;
			}
		}
	}
}
//------------------------------------------
function SetSelectedData_List(Name)
{
	//SelectedDataArray = eval("SelectedDataArray_" + Name);
	SelectedDataArray = SetSelectedDataArray(Name);
	Element = xGetElementById(Name);
	for (var i = 0; i < Element.length; i++)
	{
		for (var j = 0; j < SelectedDataArray.length; j++)
		{
			if (Element[i].value == SelectedDataArray[j])
			{
				Element[i].selected = true;
				break;
			}
		}
	}
}
//------------------------------------------
function SetSelectedData_TwoList(ListID1,ListID2)
{
	SetSelectedData_List(ListID1);
	ListID1 = xGetElementById(ListID1);
	ListID2 = xGetElementById(ListID2);
	//MoveToList(ListID1,ListID2);
	CopyToList(ListID1, ListID2);
}
//------------------------------------------
function SetSelectedData_TableList(Name)
{
	SetSelectedData_List(Name);
	Table = "tbl" + Name.substr(3);
	List = xGetElementById(Name);
	Table = xGetElementById(Table);
	AddToTable(List, Table);
}
//------------------------------------------
function SetSelectedData_DL(ComboID, ListID)
{
	ComboID = xGetElementById(ComboID);
	ListID = xGetElementById(ListID);

	DataArray = eval("DataArray_" + ComboID.id);
	//SelectedDataArray = eval("SelectedDataArray_" + ListID);
	SelectedDataArray = SetSelectedDataArray(ListID.id);
	SelectedDataParent = "";
	for (var i = 0; i < DataArray.length; i++)
	{
		for (var j = 0; j < SelectedDataArray.length; j++)
		{
			if (DataArray[i].Value == SelectedDataArray[j])
			{
				SelectedDataParent = DataArray[i].Parent;
			}
		}
	}
	//----------------------------------------------
	for (i = 0; i < ComboID.length; i++)
	{
		if (ComboID[i].value == SelectedDataParent)
		{
			ComboID[i].selected = true;
			break;
		}
	}
	//----------------------------------------------
	DataSetting(ComboID, ListID);
	SetSelectedData_List(ListID.id);
}
//------------------------------------------
function SetSelectedData_DL_MS_SP_2List(ComboID, ListID1, ListID2)
{
	ComboID = xGetElementById(ComboID);
	ListID1 = xGetElementById(ListID1);
	ListID2 = xGetElementById(ListID2);

	SetSelectedData_DL(ComboID.id, ListID1.id);
	//MoveToList(ListID1,ListID2);
	CopyToList(ListID1, ListID2);
}
//------------------------------------------
function SetSelectedData_DL_MS_MP_2List(ComboID, ListID1, ListID2)
{
	ComboID = xGetElementById(ComboID);
	ListID1 = xGetElementById(ListID1);
	ListID2 = xGetElementById(ListID2);

	SetSelectedData_DL(ComboID.id, ListID1.id);
	//AddToListFromList(ListID1, ListID2);

	DataArray = eval("DataArray_" + ComboID.id);
	//SelectedDataArray = eval("SelectedDataArray_" + ListID);
	SelectedDataArray = SetSelectedDataArray(ListID1.id);

	for (var i = 0; i < DataArray.length; i++) {
		value = DataArray[i].Value;
		view = DataArray[i].View;
		parentValue = DataArray[i].Parent;
		parentView = getView(ComboID.id, parentValue);
		for (var j = 0; j < SelectedDataArray.length; j++) {
			if (value == SelectedDataArray[j]) {
//				addToList(view + '(' + parentView + ')', value, ListID2);
				addToList(parentView + ' - ' + view, value, ListID2);
//				deactiveAnElementFromList(value, ListID1);
			}
		}
	}
}
//------------------------------------------
function SetSelectedData_DL_MS_TableList(ComboID, ListID, TableID)
{
	ComboID = xGetElementById(ComboID);
	ListID = xGetElementById(ListID);
	TableID = xGetElementById(TableID);

	DataArray = eval("DataArray_" + ComboID.id);
	//SelectedDataArray = eval("SelectedDataArray_" + ListID);
	SelectedDataArray = SetSelectedDataArray(ListID.id);
	for (var i = 0; i < DataArray.length; i++)
	{
		Value = DataArray[i].Value;
		View = DataArray[i].View;
		Parent = DataArray[i].Parent;
		for (var j = 0; j < SelectedDataArray.length; j++)
		{
			if (Value == SelectedDataArray[j])
			{
				TR = TableID.insertRow(-1);
				TR.className = "TableListClass";
				TR.id = Value;

				TD = xCreateElement('td');
				TD.className = "TableListClass";
					var Element = xCreateElement("input");
					Element.type = "checkbox";
				xAppendChild(TD, Element);
				xAppendChild(TR, TD);

				TD = xCreateElement('td');
				TD.className = "TableListClass";
				xInnerHtml(TD, TableID.rows.length - 1);
				xAppendChild(TR, TD);

				xAppendChild(TR, TD);
				TD = xCreateElement('td');
				TD.className = "TableListClass";
				xInnerHtml(TD, getView(ComboID.id, Parent));
				xAppendChild(TR, TD);

				TD = xCreateElement('td');
				TD.className = "TableListClass";
				xInnerHtml(TD, View);
				xAppendChild(TR, TD);
			}
		}
	}
}
//------------------------------------------
function SetSelectedData_ML_MS_Tree_List(TreeID, ListID)
{
	List = xGetElementById(ListID);
	Tree = xGetElementById(TreeID);
	if(SelectedDataArray = SetSelectedDataArray(TreeID, true))
	{
		
	}

//	SetSelectedData_ML(TreeID,ListID);
//	ListID1 = document.getElementById(ListID1);
//	ListID2 = document.getElementById(ListID2);
//	AddToListFromList(ListID1,ListID2);
//	DeselectAllList(ListID1);
//	CopyFromTreeToList(TreeID,ListID);
}
//------------------------------------------
function CopyFromTreeToList(TreeID, ListID)
{
	Tree = xGetElementById(TreeID);
	
	if (ListID = xGetElementById(ListID))
	{
		try
		{
			var _tree = eval('tree_' + TreeID);
			var _n;
			if (ItemUID = _tree.getSelectedItemId())
			{
				ItemText = _tree.getItemText(ItemUID);
				//------------------------------------------
				if (!IsInList(ItemUID, ListID))
				{
					_n = ListID.options.length;
					ListID.options[_n] = new Option(ItemText, ItemUID);
					ListID.options[_n].title = ItemText;
				}
				else
				{
					alert(ItemText + ' ' + W_WARNING_SELECTED);
				}
				return true;
			}
			else
			{
				return true;
			}
		}
		catch (Err)
		{
//			alert('An error accurred when is going to copy an item from tree to list');
			return false;
		}
	}
	else
	{
		return false;
	}
}
//------------------------------------------
function ReturnFromListToTree(ListID, TreeID)
{
	List = xGetElementById(ListID);
//	TreeID = xGetElementById(TreeID);
	DeleteFromList(List);
}
//------------------------------------------
function getView(ArrayID, Value)
{
	DataArray = eval("DataArray_" + ArrayID);
	for (var i = 0; i < DataArray.length; i++)
	{
		if (DataArray[i].Value == Value)
		{
			return DataArray[i].View;
		}
	}
}
//------------------------------------------
function getParent(ArrayID, Child)
{
	DataArray = eval("DataArray_" + ArrayID);
	for (var i = 0; i < DataArray.length; i++)
	{
		if (DataArray[i].Value == Child)
		{
			Parent = DataArray[i].Parent;
			break;
		}
	}
	return getView(ArrayID, Parent);
}
//------------------------------------------
function SetHiddenValue(Name, hiddenValue)
{
	hiddenID = "hid" + Name;
	hiddenElement = xGetElementById(hiddenID);
	hiddenElement.value = hiddenValue;
	//alert(hiddenID + " : " + hiddenValue);
}
//------------------------------------------
function GetCheckInfo(Name)
{
	hiddenValue = "";
	var i = 0;
	var k = 0;
	while (Element = xGetElementById("chk" + Name + i))
	{
		i++;
		if(Element.checked)
		{
			if(k > 0)
			{
				hiddenValue += "*";
			}

			hiddenValue += Element.value;
			k++;
		}
	}
	SetHiddenValue(Name, hiddenValue);
}
//------------------------------------------
function GetListInfo(Name)
{
	ListID = "lst" + Name + "_1";
	ListID = xGetElementById(ListID);
	DeselectAllList(ListID);
	//---------------------------------------
	ListID = "lst" + Name + "_2";
	ListID = xGetElementById(ListID);
	SelectAllList(ListID);
/*
	hiddenValue = "";
	n = 0;
	for (var i = 0; i < ListID.length; i++)
	{
		if (n > 0)
			hiddenValue += "*";
		hiddenValue += ListID[i].value;
		n++;
	}
	SetHiddenValue(Name,hiddenValue);
*/
}
//------------------------------------------
function GetListInfo2(ListID)
{
	List = xGetElementById(ListID);
	SelectAllList(List);
/*
	hiddenValue = "";
	n = 0;
	for (var i = 0; i < ListID.length; i++)
	{
		if (n > 0)
			hiddenValue += "*";
		hiddenValue += ListID[i].value;
		n++;
	}
	SetHiddenValue(Name,hiddenValue);
*/
}
//------------------------------------------
function GetTableListInfo(Name)
{
	ListID = "lst" + Name;
	ListID = xGetElementById(ListID);
	DeselectAllList(ListID);
	//---------------------------------------
	TableID = "tbl" + Name;
	TableID = xGetElementById(TableID);
	hiddenValue = "";
	var n = 0;
	for (var i = 1; i < TableID.rows.length; i++)
	{
		if (n > 0)
		{
			hiddenValue += "*";
		}
		Row = TableID.rows[i];
		//Cell = Row.cells[2];
		hiddenValue += Row.id;
		n++;
	}
	SetHiddenValue(Name, hiddenValue);
}
//------------------------------------------
function GetTableInfo(Name)
{
	TableID = "tbl" + Name;
	TableID = xGetElementById(TableID);
	TableType = false;
	hiddenValueNew = "";
	hiddenValueOld = "";
	for (var i = 0; i < TableID.rows.length; i++)
	{
		Row = TableID.rows[i];
		if (Row.NoDataContainer && Row.NoDataContainer == 'true')
		{
			continue;
		}
		if (Row.mode == "SAVED" && (!Row.id || Row.id == ""))
		{
			for (var j = 0; j < Row.cells.length; j++)
			{
				Cell = Row.cells[j];
				if (!xFirstChild(Cell))
				{
					if (Cell.id)
					{
						hiddenValueNew += Cell.id;
					}
					else
					{
						var CellInnerHTML = xInnerHtml(Cell);
						hiddenValueNew += CellInnerHTML;
					}
					hiddenValueNew += "*";
				}
				else if (!xFirstChild(Cell).tagName)
				{
					if (Cell.id)
					{
						hiddenValueNew += Cell.id;
					}
					else
					{
						var CellInnerHTML = xInnerHtml(Cell);
						hiddenValueNew += CellInnerHTML;
					}
					hiddenValueNew += "*";
				}
			}
			hiddenValueNew = hiddenValueNew.substr(0, hiddenValueNew.length - 1);
			hiddenValueNew += "||";
		}
		else if ((Row.mode && Row.mode == "SAVED" && Row.id != "") || (!Row.mode && Row.id != "NEW" && Row.id != "EDIT" && Row.id != ""))
		{
			hiddenValueOld += Row.id + "*";
			for (var j = 0; j < Row.cells.length; j++)
			{
				Cell = Row.cells[j];
				if (!xFirstChild(Cell))
				{
					if (Cell.id)
					{
						hiddenValueOld += Cell.id;
					}
					else
					{
						var CellInnerHTML = xInnerHtml(Cell);
						hiddenValueOld += CellInnerHTML;
					}
					hiddenValueOld += "*";
				}
				else if (!xFirstChild(Cell).tagName)
				{
					if (Cell.id)
					{
						hiddenValueOld += Cell.id;
					}
					else
					{
						var CellInnerHTML = xInnerHtml(Cell);
						hiddenValueOld += CellInnerHTML;
					}
					hiddenValueOld += "*";
				}
			}
			hiddenValueOld = hiddenValueOld.substr(0, hiddenValueOld.length-1);
			hiddenValueOld += "||";
		}
		else
		{
			switch(TableType || ((TableType = GetTableType(TableID)) ? TableType : TableType)) {
				case 'DYNAMIC':
				case 'SIMPLECROSS':
					UnrecognizableStatus = i > 0 ? true : false;
				break;
				case 'STATIC':
					UnrecognizableStatus = i > 1 ? true : false;
				break;
				case false:
					UnrecognizableStatus = i > 0 ? true : false;
				break;
			}
			if (UnrecognizableStatus)
				alert('unrecongnized state! on row' + i);
		}
	}
	hiddenValueNew = hiddenValueNew.substr(0, hiddenValueNew.length-2);
	hiddenValueOld = hiddenValueOld.substr(0, hiddenValueOld.length-2);
	hiddenValue = hiddenValueNew + "###" + hiddenValueOld;
	SetHiddenValue(Name, hiddenValue);
}
//------------------------------------------
function DeleteFromTable_(TableID)
{
	TableID = xGetElementById(TableID);

	hiddenValue = "";
	var n = 0;
	for (var i = 0; i < TableID.rows.length; i++)
	{
		Row = TableID.rows[i];
		//Cell = Row.cells[0];
		if (xFirstChild(Row.cells[0]))
		{
			if (xFirstChild(Row.cells[0]).checked)
			{
				if (n > 0)
				{
					hiddenValue += "*";
				}
				hiddenValue += Row.id;
				n++;
			}
		}
	}
	if (n > 0)
	{
		Name = TableID.id;
		Name = Name.substr(3);
		SetHiddenValue(Name, hiddenValue);
		if (confirm(W_WARNING_CONFIRM))
		{
			document.forms[0].action = "save.php?Mode=DELETE";
			document.forms[0].submit();
		}
	}
	else
	{
		alert(W_WARNING_NO_SELECTED);
	}
}
//------------------------------------------
function Arrange(Evt/*event*/, TableID)
{
	TableID = xGetElementById(TableID);

	hiddenValue = "";
	var n = 0;
	for (var i = 0; i < TableID.rows.length; i++) {
		Row = TableID.rows[i];
		//Cell = Row.cells[0];
		if (xFirstChild(Row.cells[0]))
		{
			if (n > 0)
			{
				hiddenValue += "*";
			}
			hiddenValue += Row.id;
			n++;
		}
	}
	if (n > 0)
	{
		Name = TableID.id;
		Name = Name.substr(3);
		SetHiddenValue(Name, hiddenValue);
		if (confirm(W_WARNING_CONFIRM))
		{
			document.forms[0].action = "save.php?Mode=ARRANGE";
			document.forms[0].submit();
		}
	}
	else
	{
		alert(W_WARNING_NO_SELECTED);
	}
}
//------------------------------------------
function GetListSelectedItemsWithASeperator(Evt, TableID, Seperator, All)
{
	TableID = xGetElementById(TableID);

	hiddenValue = "";
	var n = 0;
	for (var i = 0; i < TableID.rows.length; i++)
	{
		Row = TableID.rows[i];
		//Cell = Row.cells[0];
		if (xFirstChild(Row.cells[0]))
		{
			if (xFirstChild(Row.cells[0]).checked || (typeof All != 'undefined' && All))
			{
				if (n > 0)
				{
					hiddenValue += Seperator;
				}
				hiddenValue += Row.id;
				n++;
			}
		}
	}
	return hiddenValue;
}
//------------------------------------------
function Set(TableID, Subject)
{
	TableID = xGetElementById(TableID);

	hiddenValue = "";
	var n = 0;
	for (var i = 0; i < TableID.rows.length; i++)
	{
		Row = TableID.rows[i];
		//Cell = Row.cells[0];
		if (xFirstChild(Row.cells[0]))
		{
			if (xFirstChild(Row.cells[0]).checked || Subject == 0)
			{
				if (n > 0)
				{
					hiddenValue += "*";
				}
				hiddenValue += Row.id;
				n++;
			}
		}
	}
	if (n > 0)
	{
		Name = TableID.id;
		Name = Name.substr(3);
		SetHiddenValue(Name, hiddenValue);
		if (confirm(W_WARNING_CONFIRM))
		{
			document.forms[0].action = "save.php?Mode=SET&Subject=" + Subject;
			document.forms[0].submit();
		}
	}
	else
	{
		alert(W_WARNING_NO_SELECTED);
	}
}
//------------------------------------------
function SetForStaticTables(TableID, Subject)
{
	TableID = xGetElementById(TableID);

	hiddenValue = "";
	var n = 0;
	for (var i = 2; i < TableID.rows.length; i++) {
		Row = TableID.rows[i];
		//Cell = Row.cells[0];
		if (xFirstChild(Row.cells[0])) {
			if (xFirstChild(Row.cells[0]).checked || Subject == 0) {
				if (n > 0) {
					hiddenValue += "*";
				}
				hiddenValue += Row.id;
				n++;
			}
		}
	}
	if (n > 0) {
		Name = TableID.id;
		Name = Name.substr(3);
		SetHiddenValue(Name, hiddenValue);
		if (confirm(W_WARNING_CONFIRM)) {
			document.forms[0].action = "save.php?Mode=SET&Subject=" + Subject;
			document.forms[0].submit();
		}
	} else {
		alert(W_WARNING_NO_SELECTED);
	}
}
//------------------------------------------
function SetDirection(dir)
{
	//document.body.dir = dir;
	if (FormElementsArray)
	{
		for (var i = 0; i < FormElementsArray.length; i++)
		{
			ID = FormElementsArray[i].ID;
			Type = FormElementsArray[i].Type;
			if (Type)
			{
				if (Element = xGetElementById(ID))
				{
					if (Type == "Fa_STRING" || Type == "STRING" || Type == "NAME")
					{
						Element.dir = dir;
					}
					else if (Type != "TABLE" && Type != "TABLE_LIST" && Type != "RADIO" && Type != "CHECKBOX" && Type != "LIST")
					{
						Element.dir = "ltr";
					}
				}
			}
		}
	}
}
//------------------------------------------
function FormValidate(FormID)
{
	FormID = xGetElementById(FormID);
	if (FormID)
	{
		try
		{
			var FEA = eval("FormElementsArray_" + FormID.id);
		}
		catch (Error)
		{
			var FEA = eval("FormElementsArray");
		}
		FormElementsArray = FEA;
	}
	//----------------------
	var PasswordValue = "";
	//----------------------
	for (var i = 0; i < FormElementsArray.length; i++)
	{
		if (FormElementsArray[i])
		{
			Name = FormElementsArray[i].Name;
			ID = FormElementsArray[i].ID;
			Type = FormElementsArray[i].Type;
			Force = FormElementsArray[i].Force;
			if (typeof FormElementsArray[i].ForceAlert != 'undefined')
			{
				ForceAlert = FormElementsArray[i].ForceAlert;
			}
			else
			{
				ForceAlert = '';
			}
			if (typeof FormElementsArray[i].ValidationAlert != 'undefined')
			{
				ValidationAlert = FormElementsArray[i].ValidationAlert;
			}
			else
			{
				ValidationAlert = '';
			}
			if (Type)
			{
				if (Element = xGetElementById(ID))
				{
					Value = Element.value;
				}
				else
				{
					Value = false;
				}

				WarningEmpty = W_WARNING_ENTER_1 + ' ' + Name + ' ' + W_WARNING_ENTER_2;
				Warning = W_WARNING_NOT_VALID_1 + ' ' + Name + ' ' + W_WARNING_NOT_VALID_2;

				if (Type == "TABLE")
				{
					NotEmpty = false;
					if (!(TableType = GetTableType(Element)) && Force)
					{
						alert(false);
						return false;
					}

					switch(TableType) {
						case 'DYNAMIC':
						case 'SIMPLECROSS':
							Empty = Element.rows.length > 1 ? false : true;
						break;
						case 'STATIC':
							Empty = Element.rows.length > 2 ? false : true;
						break;
					}

					if (Force && Empty)
					{
						alert(WarningEmpty);
						Element.focus();
						return false;
					}

//					k = 0;
//					for (j = 0; j < Element.rows.length; j++)
//					{
//						if (Element.rows[j].id == "NEW" || Element.rows[j].id == "EDIT")
//						{
//							alert(W_WARNING_SAVE_ROW);
//							Element.focus();
//							return false;
//						}
//						else if (Element.rows[j].id == "SAVED")
//						{
//							k++;
//						}
//					}
//					if (Force && k == 0)
//					{
//						alert(WarningEmpty);
//						Element.focus();
//						return false;
//					}
				}
				else if (Type == "TABLE_LIST")
				{
					if (Force)
					{
						if (Element.rows.length < 2)
						{
							alert(WarningEmpty);
							Element.focus();
							return false;
						}
					}
				}
				else if (Type == "RADIO" || Type == "CHECKBOX")
				{
					if (Force)
					{
						k = 0;
						j = 0;
						while (Element = xGetElementById(ID + j))
						{
							j++;
							if(Element.checked)
							{
								k++;
							}
						}
						if (k == 0)
						{
							alert(WarningEmpty);
							if (Element)
							{
								Element.focus();
							}
							return false;
						}
					}
				}
				else if (Type == "PASSWORD")
				{
					Confirm = xGetElementById(ID + "Confirm");
					if (Value === Confirm.value)
					{
						if (Force)
						{
							if (Validate(Value, Type, true) < 1)
							{
								alert(Warnings);
								Element.focus();
								return false;
							}
							else
							{
								PasswordValue = MD5(Value);
								PasswordElement = Element;
								//Element.value = Value;
								//Confirm.value = Value;
							}
						}
						else
						{
							if(Value === '')
							{
							}
							else
							{
								if (Validate(Value, Type, true) < 1)
								{
									alert(Warning);
									Element.focus();
									return false;
								}
								else
								{
									PasswordValue = MD5(Value);
									PasswordElement = Element;
									//Element.value = Value;
									//Confirm.value = Value;
								}
							}
						}
					}
					else
					{
						Element.value = "";
						Confirm.value = "";
						alert(W_WARNING_PASSWORD_CONFIRM);
						Element.focus();
						return false;
					}
				}
				else if (trim(Value))
				{
					if(Validate(Value, Type, true) < 1)
					{
						alert(Warning);
						Element.focus();
						return false;
					}
				}
				else if (Force)
				{
					alert(WarningEmpty);
					Element.focus();
					return false;
				}
			}
		}
	}
	//----------------------
	if (PasswordValue != "")
	{
		PasswordElement.value = PasswordValue;
		Confirm.value = PasswordValue;
	}
	//----------------------
	return true;
}
//------------------------------------------
function Add(Name)
{
	//window.location = "index.php?Page="+Name+"&Mode=NEW";
	document.forms[0].action = "index.php?Page=" + Name + "&Mode=NEW";
	document.forms[0].submit();
}
//------------------------------------------
function Edit(Name, Evt)
{
	var Evt = new xEvent(Evt);
	var Element = Evt.target;
	TD = xParentNode(Element, 1);
	TR = xParentNode(TD, 1);
	document.forms[0].action = "index.php?Page=" + Name + "&Mode=EDIT&UID=" + TR.id;
	document.forms[0].submit();
}
//------------------------------------------
function Edit_InOtherLanguage(Name, Evt)
{
	var Evt = new xEvent(Evt);
	var Element = Evt.target;
	TD = xParentNode(Element, 1);
	TR = xParentNode(TD, 1);

	if (Element.id == "")
	{
		document.forms[0].action = "index.php?Page=" + Name + "&Mode=NEW&ID=" + TR.categoryid + "&Language=" + TD.id;
	}
	else
	{
		document.forms[0].action = "index.php?Page=" + Name + "&Mode=EDIT&UID=" + Element.id + "&Language=" + TD.id;
	}
	document.forms[0].submit();
}
//------------------------------------------
function MoveTableRow(Direction, Evt)
{
	if(typeof Evt == 'undefined')
	{
		if (typeof Direction != 'number')
		{
			if (typeof Direction != 'undefined')
			{
				Evt = Direction;
				Direction = null;
			}
			else
			{
				Evt = null;
			}
		}
		else
		{
			Evt = null;
		}
	}

	if (Evt == null)
	{
		var Event = new xEvent();
	}
	else
	{
		var Event = new xEvent(Evt);
	}

	var Element = Event.target;

	if (typeof Direction == 'undefined' || Direction == null)
	{
		Direction = Element.direction;
	}

	TD = xParentNode(Element, 1);
	TR = xParentNode(TD, 1);
	TBody = xParentNode(TR, 1);

	if(TBody.tagName.toLowerCase() == "table")
	{
		Table = TBody;
	}
	else
	{
		Table = xParentNode(TBody, 1);
	}

	if ((NewTR = Table.rows[TR.rowIndex + Direction]) && (TR.rowIndex + Direction) > 0)
	{
		swapNodes(TR, NewTR);
		//TR.swapNode(NewTR);
	}
}
//------------------------------------------
function FormInfo()
{
	string = "  :  ( tagName ) ( type ) ( name ) ( id ) ( className ) \n";
	for (i = 0; i < document.forms[0].elements.length; i++)
	{
		string += i + " : ";
		string += " ( " + document.forms[0].elements[i].tagName + " ) ";
		string += " ( " + document.forms[0].elements[i].type + " ) ";
		string += " ( " + document.forms[0].elements[i].name + " ) ";
		string += " ( " + document.forms[0].elements[i].id + " ) ";
		string += " ( " + document.forms[0].elements[i].className + " ) ";
		string += "\n";
	}
	//alert(string);
	w = window.open();
	w.document.write("<pre>" + string + "</pre>");
}
//------------------------------------------
function FormInfoTable()
{
	W = window.open();
	Table = W.document.createElement("table");
	Table.align = "center";
	Table.border = "1";
	Table.borderColor = "#990000";
	TR = Table.insertRow(-1);
	TD = TR.insertCell();
	xInnerHtml(TD, "&nbsp;");
	TD = TR.insertCell();
	xInnerHtml(TD, "tagName");
	TD = TR.insertCell();
	xInnerHtml(TD, "type");
	TD = TR.insertCell();
	xInnerHtml(TD, "name");
	TD = TR.insertCell();
	xInnerHtml(TD, "id");
	TD = TR.insertCell();
	xInnerHtml(TD, "className");
	for (i = 0; i < document.forms[0].elements.length; i++)
	{
		TR = Table.insertRow(-1);
		TD = TR.insertCell();
		xInnerHtml(TD, i);
		TD = TR.insertCell();
		xInnerHtml(TD, document.forms[0].elements[i].tagName);
		TD = TR.insertCell();
		xInnerHtml(TD, document.forms[0].elements[i].type);
		TD = TR.insertCell();
		xInnerHtml(TD, document.forms[0].elements[i].name);
		TD = TR.insertCell();
		xInnerHtml(TD, document.forms[0].elements[i].id);
		TD = TR.insertCell();
		xInnerHtml(TD, document.forms[0].elements[i].className);
	}
	W.document.body.appendChild(Table);
}
//------------------------------------------
function ShowHide(Element)
{
//	if (Element.currentStyle.visibility == "hidden")
	if (xVisibility(Element) == "hidden")
	{
		xVisibility(Element, true);
	}
//	else if (Element.currentStyle.visibility == "visible")
	else if (xVisibility(Element) == "visible")
	{
		xVisibility(Element, false);
	}
}

function AddFileForObjectEquivalents(Object, FileExt, EquivalentsLanguages)
{
	FileEquivalentsForAnObject = new Array();
	if(typeof EquivalentsLanguages == 'string')
	{
		EquivalentsLanguages = EquivalentsLanguages.split(";");
	}

	if (EquivalentsLanguages.length > 0)
	{
		var Layer = document.createElement("div");
		Layer.style.position = 'absolute';
		xBackground(Layer, 'CC9933');
		xWidth(Layer, 300);

		Layer.style.borderColor = '#CC6600';
		Layer.style.borderStyle = 'dotted';
		Layer.style.borderWidth = '1px';

		Table = document.createElement("table");
		Table.style.textAlign = "center";
		Table.style.borderWidth = "0px";

		for (i in EquivalentsLanguages)
		{
			EquivalentsLanguages[i] = EquivalentsLanguages[i].split(":");
	
			TR = Table.insertRow(-1);
			TD = xCreateElement('td');
	
			var Element = xCreateElement("input");
				Element.type = "checkbox";
				Element.value = EquivalentsLanguages[i][0];
				Element.title = EquivalentsLanguages[i][1];
			FileEquivalentsForAnObject[FileEquivalentsForAnObject.length] = Element;

			xAppendChild(TD, Element);
			xAppendChild(TR, TD);
	
			TD = xCreateElement('td');
			Text = document.createTextNode(EquivalentsLanguages[i][1]);
			xAppendChild(TD, Text);
			xAppendChild(TR, TD);
		}

		TR = Table.insertRow(-1);
		TD = xCreateElement('td');
		TD.colSpan = 2;

		Element = xCreateElement("input");
			Element.type = "button";
			Element.uid = Object;
			Element.extension = FileExt;
			Element.className = 'buttonClass';
			Element.value = W_REGISTER;
			Element.title = W_REGISTER;
			Element.onclick = AddFileEquivalencyForObject;

		xAppendChild(TD, Element);
		xAppendChild(TR, TD);

		xAppendChild(Layer, Table)
		xAppendChild(document.body, Layer);

		var xpos1 = document.body.scrollLeft + Math.floor(document.body.clientWidth / 2) - Math.floor(25);
		var ypos1 = document.body.scrollTop + Math.floor(document.body.clientHeight / 2) - Math.floor(25);
		//alert("x=" + xpos1 + ", y=" + ypos1);
		//DivLayerElement.moveTo(xpos1, ypos1);
		xMoveTo(Layer, xpos1, ypos1);
	}
	else
	{
		alert('No Equivalents Available!');
	}
}

function AddFileEquivalencyForObject(Evt)
{
	var Evt = new xEvent(Evt);
	var Element = Evt.target;

	Languages = '';
	for (i in FileEquivalentsForAnObject)
	{
		//alert(Element.uid + ' : ' + FileEquivalentsForAnObject[i].value + ' : ' + FileEquivalentsForAnObject[i].checked)
		if (FileEquivalentsForAnObject[i].checked)
		{
			if (Languages.length)
			{
				Languages += ';';
			}
			Languages += FileEquivalentsForAnObject[i].value;
		}
	}

	if (Languages.length)
	{
		GoTo('addfileforequivalentsofobject.php?Object=' + Element.uid + '&Remote&Extension=' + Element.extension + '&Languages=' + Languages + '&redirect=' + escape(document.URL));
	}
	else
	{
		alert('No Equivalents Available');
	}
}

function GetTableType(Table)
{
	Table = xGetElementById(Table);
	if (typeof Table.type != 'undefined')
	{
		TableType = Table.type;
	}
	else if (typeof Table.className != 'undefined')
	{
		TableType = Table.className.substr(0, Table.className.length - 5);
	}
	else
	{
		return false;
	}
	return TableType;
}
function GetTableAttributes(Table, Attribute, CaseSensitive)
{
	Table = xGetElementById(Table);
	if (!CaseSensitive)
	{
		CaseSensitive = false;
	}
	if (Table.Attributes)
	{
		Attributes = Table.Attributes.split(',');
	}
	else
	{
		Attributes = new Array();
	}

	if (Attribute)
	{
		var i = 0;
		for(i in Attributes)
		{
			if (!CaseSensitive)
			{
				if (typeof Attributes[i] == 'string' && typeof Attribute == 'string')
				{
					Attributes[i] = Attributes[i].toLowerCase();
					Attribute = Attribute.toLowerCase();
				}
			}
			if (Attributes[i] == Attribute)
			{
				return true;
			}
		}
		return false;
	}
//	else
//	{
//		return Attributes;
//	}
	return false;
}

function GetTableSpec(Table)
{
	var TableObject = new Object;
	TableObject.StartContentDataAt = 0;
	var TableType = GetTableType(Table);

	if (GetTableAttributes(Table, 'NoRowCheckable') || TableType == 'SIMPLECROSS')
	{
		TableObject.NoRowCheckable = true;
	}
	else
	{
		TableObject.NoRowCheckable = false;
		TableObject.StartContentDataAt++;
	}

	if (GetTableAttributes(Table, 'NoRowEditable'))
	{
		TableObject.NoRowEditable = true;
	}
	else
	{
		TableObject.NoRowEditable = false;
		TableObject.StartContentDataAt++;
	}

	if (GetTableAttributes(Table, 'NonArrangementic') || (!TableObject.NoRowEditable + !TableObject.NoRowCheckable + 1 > Table.rows[0].cells[0].colSpan) || TableType == 'SIMPLECROSS')
	{
		TableObject.NonArrangementic = true;
	}
	else
	{
		TableObject.NonArrangementic = false;
		TableObject.StartContentDataAt++;
	}
	return TableObject;
}
//-----------------End----------------------

