var bCanRPC=false;

function my_isFunction(a)
{
	return typeof a == 'function';
}

function my_isObject(a)
{
	return (a && typeof a == 'object') || my_isFunction(a);
}

function my_isArray(a)
{
	return my_isObject(a) && a.constructor == Array;
}

/********************/

function Server(url,method)
{
  if(typeof(method)=='undefined')
	method='POST';

	var xmlHttp = null
	var serverURL = url

	if(xmlHttp==null)
	{

		if(document.all)
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		else
			xmlHttp = new XMLHttpRequest();
	}

	//to be used only with small parameters (when GET method is used)
	this.callFunction =  function (strFunctionName,strParams)
				{
					var i;
					if(method=='GET')
					var comma = serverURL + "?rpc[fct]="+strFunctionName;
					else
					var comma = "rpc[fct]="+strFunctionName;

					for(i=1;i<arguments.length;i++)
					{
						if(!my_isArray(arguments[i]))
						{
							comma +="&rpc[param" +(i-1)+ "]="+arguments[i];
						}
						else
						{
							var j;

							for(j=0;j<arguments[i].length;j++)
							{
								//alert (arguments[i][j]);
								comma +="&rpc[param" +(i-1)+ "][]="+arguments[i][j];
							}
							if(j==0)
								comma +="&rpc[param" +(i-1)+ "]=";

						}
					}

					comma +="&rpc[paramlength]="+(arguments.length-1);

					if(method=='GET')
				  {
					xmlHttp.open("GET", comma, false);
					xmlHttp.send(null);
					}
					else
					{
					xmlHttp.open("POST", serverURL , false);
					xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded;');
					xmlHttp.send(comma);
					}
					return xmlHttp.responseText;
				}

	this.close =  function ()
			{
				xmlHttp = null;
			}

}

// functions to search Contacts

var rpc_server_url = "";

/*****************************************************

This tests whether the rpc can be used on user's browser

******************************************************/

function testrpc()
{
	if(document.all)
	{
		var x = new ActiveXObject("Microsoft.XMLHTTP");
		bCanRPC=true;
		x=null;
	}
	else
	{
		bCanRPC=true;
	}
}

function populateSelGroup(codeSelCat)
{
	var server = new Server("setup/libs/rpc.html");
	var arrCat = new Array();

	if (codeSelCat != '')
	{

		response = server.callFunction('rpc_getGroupsByCategorie', codeSelCat, "arrCat");
		//alert(response);
		eval(response);
	}

	server.close();
	server = null;

	return arrCat;
}

function populateSelCategories(codeType, lang)
{
	var server = new Server("setup/libs/rpc.html");
	var arrType = new Array();

	if (codeType != '')
	{

		response = server.callFunction('getCategByType', codeType, lang, "arrType");
		//alert(response);
		eval(response);
	}

	server.close();
	server = null;

	return arrType;
}

function getGroups(flagInSelect, varRet, sqlSelect, fieldGroup, flagIsUsrManag)
{
	var server = new Server("setup/libs/rpc.html");
	var strGroups = "";

	//alert(sqlSelect);

	if ((sqlSelect != '') && (fieldGroup != ""))
	{
		response = server.callFunction('rpc_getGroups', flagInSelect, varRet, sqlSelect, fieldGroup, flagIsUsrManag);
		//alert(response);
		eval(response);
	}

	server.close();
	server = null;

	if (flagInSelect == false)
		return strGroups;
	else
		return 0;
}

/*
	Function: getCodeGroupByName
	Get code_group of group whith name "nameGroup"
	Parameters:
      		nameGroup - name of group to return code_group.
      	Returns:
      		The code_group value of group with name "nameGroup"
*/
function getCodeGroupByName(nameGroup)
{
	var server = new Server("setup/libs/rpc.html");
	var response;
	var codeGroup = "";

	//alert (nameGroup);
	if (nameGroup != '')
	{
		response = server.callFunction('rpc_getCodeGroupByName', nameGroup, "codeGroup");
		//alert(response);
		eval(response);
	}

	server.close();
	server = null;

	return codeGroup;
}

function getCategorieByNameGroup(nameGroup)
{
	var codeGroup = "";			// group's code whith name "nameGroup"

	codeGroup = getCodeGroupByName(nameGroup);

	return getCategorieByGroup(codeGroup);
}

function getCategorieByGroup(codeGroupSelected)
{
	var server = new Server("setup/libs/rpc.html");
	var nameCategorie = "";
	var response;

	if (codeGroupSelected != '')
	{
		response = server.callFunction('rpc_getCategorieByGroup', codeGroupSelected);
		//alert(response);
		eval(response);
	}

	server.close();
	server = null;

	return nameCategorie;
}

function getBodyTable(codeSelCategorie, idContainer, newGroupManag)
{
	var server = new Server("setup/libs/rpc.html");
	//alert(codeSelCategorie);

	response = server.callFunction('rpc_printBodyTable', codeSelCategorie, newGroupManag);
	//alert(response);

	server.close();
	server = null;

	//alert(document.getElementById(idContainer).innerHTML);

	return String('<table cellpadding=\"0\" cellspacing=\"1\" border=\"0\" width=\"100%\">'+response+'</table>');
	//document.getElementById(idContainer).innerText = String(response);
	//alert(document.getElementById(idContainer).innerHTML);
}

function getUsersGroup(nameGroup)
{
	var server = new Server("setup/libs/rpc.html");
	var response = "";
	var arrUsers = new Array();

	response = server.callFunction('rpc_getUsersByGroup', nameGroup, 'arrUsers');
	//alert(response);
	eval(response);

	server.close();
	server = null;

	//alert(arrUsers);
	return arrUsers;
}

function getPermissionModel(type, idObj)
{
	var server = new Server("setup/libs/rpc.html");
	var response = "";
	var rule = "";
	var model = "";

	if ((type != '') && (idObj != ''))
	{
		response = server.callFunction('rpc_getPermissionModel', type, idObj, "rule", "model");
		//alert(response);
		eval(response);
	}

	server.close();
	server = null;

	var res = new Array(rule, model);

	return res;
}

function insertProfile(nameProfile, rule, arrUsersAble, arrUsersDisable, msgModifyProfile)
{
	var server = new Server("setup/libs/rpc.html");
	var response = "";
	var idPerm = "";
	var rispConfirm = true;

	response = server.callFunction('rpc_insProfile', nameProfile, rule, 'true');
	//alert(response);
	eval(response);

	if (idPerm < 0)
	{
		rispConfirm = confirm(msgModifyProfile);
		//alert(rispConfirm);
		if (rispConfirm)
		{
			response = server.callFunction('rpc_insProfile', nameProfile, rule, 'false');
			//alert(response);
			eval(response);
		}
	}

	if (rispConfirm)
	{
		for (var i = 0; i < arrUsersAble.length; i++)
		{
			server.callFunction('rpc_insUserRule', idPerm, arrUsersAble[i], 'able');
		}

		for (var i = 0; i < arrUsersDisable.length; i++)
		{
			server.callFunction('rpc_insUserRule', idPerm, arrUsersDisable[i], 'disable');
		}
	}


	server.close();
	server = null;

	return idPerm;
}

function getModelsCreated()
{
	var server = new Server("setup/libs/rpc.html");
	var response = "";
	var arrModels = new Array();

	response = server.callFunction("rpc_getModels", "arrModels");
	//alert(response);
	eval(response);

	server.close();
	server = null;

	return arrModels;
}

function getRuleById(idPerm)
{
	var server = new Server("setup/libs/rpc.html");
	var response = "";
	var rule = "";

	//alert(idPerm);
	if (idPerm != '')
	{
		response = server.callFunction("rpc_getRuleById", idPerm, "rule");
		//alert(response);
		eval(response);
	}

	server.close();
	server = null;

	return rule;
}

function getUserByIdPerm(idPerm)
{
	var arrUsersAble = new Array();
	var arrUsersDisable = new Array();
	var arrUsers = new Array();
	var server = new Server("setup/libs/rpc.html");
	var response = "";

	//alert(idPerm);

	if (idPerm != '')
	{
		response = server.callFunction("rpc_getUsersByIdPerm", idPerm, "arrUsersAble", "arrUsersDisable");
		//alert(response);
		eval(response);
	}

	server.close();
	server = null;

	arrUsers.push(arrUsersAble);
	arrUsers.push(arrUsersDisable);

	return arrUsers;
}

function getMaxIdPerm()
{
	var server = new Server("setup/libs/rpc.html");
	var response = "";
	var maxIdPerm = 0;

	response = server.callFunction("rpc_getMaxIdPerm", "maxIdPerm");
	//alert(response);
	eval(response);

	server.close();
	server = null;

	return maxIdPerm;
}

function getIdPerm(type, idObj)
{
	var server = new Server("setup/libs/rpc.html");
	var response = "";
	var idPerm = "";

	if ((type != '') && (idObj != ''))
	{
		response = server.callFunction("getIdPerm", type, idObj, "idPerm");
		//alert(response);
		eval(response);
	}

	server.close();
	server = null;

	return idPerm;
}

function getProfileById(idPerm)
{
	var server = new Server("setup/libs/rpc.html");
	var response = "";
	var profile = "";

	if (idPerm != '')
	{
		response = server.callFunction("getModelById", idPerm, "profile");
		//alert(response);
		eval(response);
	}

	server.close();
	server = null;

	return profile;
}

function getObjByIdPerm(profToDel, type)
{
	var server = new Server("setup/libs/rpc.html");
	var response = "";
	var arrObj = new Array();

	if (profToDel != '')
	{
		response = server.callFunction("rpc_getObjByIdPerm", profToDel, type, "arrObj");
		//alert(response);
		eval(response);
	}

	server.close();
	server = null;

	return arrObj;
}

function removeProfile(profToDel)
{
	var server = new Server("setup/libs/rpc.html");

	response = server.callFunction("rpc_removeProf", profToDel);
	//alert(response);

	server.close();
	server = null;

}

function removeProfileNotCustomNotUsed(type)
{
	var server = new Server("setup/libs/rpc.html");

	response = server.callFunction("rpc_removeProfNotCustNotUsed", type);
	//alert(response);

	server.close();
	server = null;
}

function evaluateRule(rule, listUserAllow, listUserDeny)
{
	var arrUserAllow = new Array();

	var server = new Server("setup/libs/rpc.html");
	response = server.callFunction("rpc_evaluateRule", rule, listUserAllow, listUserDeny, "arrUserAllow");
	//alert(response);
	//document.write(response);
	eval(response);

	server.close();
	server = null;

	return arrUserAllow;
}

function getUsrLoginById(idUser)
{
	var server = new Server("setup/libs/rpc.html");
	var loginUsr = '';

	if (idUser != '')
	{
		response = server.callFunction("rpc_getUsrLoginById", idUser, 'loginUsr');
		//alert(response);
		eval(response);
	}

	server.close();
	server = null;

	return loginUsr;

}

function setTableCategTypeUpl(sel, idDivContainer, msg_ud_no_categories, msg_up_categ_name, msg_up_type_categ_name, msg_up_categ_edit, msg_up_categ_delete, msg_up_sure_delete_categ)
{
	var server = new Server("setup/libs/rpc.html");
	var type = sel.options[sel.selectedIndex].value;
	var strContentDiv = "";

	if (type != '')
	{
		response = server.callFunction("rpc_setTableCategTypeUpl", type, "strContentDiv", msg_ud_no_categories, msg_up_categ_name, msg_up_type_categ_name, msg_up_categ_edit, msg_up_categ_delete, msg_up_sure_delete_categ);
		//alert(response);
		eval(response);
	}

	server.close();
	server = null;

	document.getElementById(idDivContainer).innerHTML = strContentDiv;
}

function getCodeTypeByCategUpldnl(codeCateg)
{
	var server = new Server("setup/libs/rpc.html");
	var codeType = '';

	if (codeCateg != '')
	{
		response = server.callFunction("rpc_getTypeByCategUpldnl", codeCateg, "codeType");
		//alert(response);
		eval(response);
	}

	server.close();
	server = null;

	return codeType;
}

function getListCategByType(codeType, msg_up_all_categories, divListCateg, listCategSelected, chekAllDefault, idListCateg, width, heigth)
{
	var server = new Server("setup/libs/rpc.html");
	var list = '';

	//alert(listCategSelected);

	if (codeType != '')
	{
		response = server.callFunction("rpc_getCategsSearchBox", codeType, "list", msg_up_all_categories, listCategSelected, chekAllDefault, idListCateg, width, heigth);
		//alert(response);
		eval(response);
	}

	server.close();
	server = null;

	document.getElementById(divListCateg).innerHTML = list;
}

function setSelCateg(selType, contSelCateg, msg_up_top_category, code_categ)
{
	var server = new Server("setup/libs/rpc.html");
	var selCateg = null;
	var strCont = "";

	codeType = selType.options[selType.selectedIndex].value;
	response = server.callFunction("rpc_setSelCateg", msg_up_top_category, code_categ, codeType, "strCont");
	//alert(response);
	eval(response);


	contSelCateg.innerHTML = strCont;
	server.close();
	server = null;
}

function getTypeByCategorieUplDnl(codeCatSelected)
{
	var server = new Server("setup/libs/rpc.html");
	var nameType = "";
	var response;

	if (codeCatSelected != '')
	{
		response = server.callFunction('rpc_getTypeByCategUpldnl', codeCatSelected, "nameType");
		//alert(response);
		eval(response);
	}

	server.close();
	server = null;

	return nameType;
}

 function isUndefined(a)
 {
     return typeof a == 'undefined';
 }

function refreshSelectTypeCateg(sel, divSelectTypeCategs, msg_up_all_categories, msg_up_search_childs, strVisibleCategPerm, strVisibleCategsGeneral, strVisibleCategPrec, strVisibleFilesUplDnl)
{
	var server = new Server("setup/libs/rpc.html");

	var strVisibleCateg = "*|*";
	var codeCategSelected = sel.options[sel.selectedIndex].value;
	var content = '';
	var strCodesSelected = "*|*";

	idSel = sel.id;

	arrSelType = divSelectTypeCategs.getElementsByTagName('select');
	var parent = "";
	var precSibling = "";
	var nameTypeCat ="";

	for (var i = 0; i < arrSelType.length; i++)
	{
		//alert(arrSelType[i].id);
		parent = arrSelType[i].parentNode;
		precSibling = parent.previousSibling;
		nameTypeCat = precSibling.innerHTML;
		//alert(nameTypeCat);
		nameTypeCat = nameTypeCat.replace("&nbsp;", "");
		//nameTypeCat = trim(nameTypeCat);
		//alert(nameTypeCat);
		strCodesSelected += nameTypeCat.substr(0, (nameTypeCat.length - 1))+"!%%!"+arrSelType[i].options[arrSelType[i].selectedIndex].value+'*|*';
		//alert(strCodesSelected);
	}

	if (strCodesSelected != '')
	{
		//alert(strVisibleCategPerm);
		//alert(strVisibleFilesUplDnl);
		response = server.callFunction('rpc_refreshSelectTypeCateg', strCodesSelected, "strVisibleCateg", strVisibleCategsGeneral, strVisibleCategPrec, codeCategSelected, strVisibleFilesUplDnl);
		//alert(response);
		eval(response);
	}

	//alert(strVisibleCateg);

	if (strVisibleCateg.length > 0)
	{
		//alert(msg_up_all_categories);
		//alert(msg_up_search_childs);
		content = server.callFunction('rpc_getAllSelectTypeCatUpl', msg_up_all_categories, msg_up_search_childs, strVisibleCateg, strVisibleCategsGeneral, divSelectTypeCategs.id, strCodesSelected, strVisibleCategPerm, strVisibleFilesUplDnl);
		//alert(content);
		//eval(response);
	}

	server.close();
	server = null;

	divSelectTypeCategs.innerHTML = '<table width="100%" border="0" cellspacing="0" cellpadding="0">'+content+'</table>';

	arrSelType = divSelectTypeCategs.getElementsByTagName('select');

	var listIdTypes = document.getElementById('listIdTypes');

          	var str = '';

          	for (var i = 0; i < arrSelType.length; i++)
          	{
          		str += arrSelType[i].id+"*|*";
          	}

          	listIdTypes.value = str;

          	document.getElementById('listVisibleCategs').value = strVisibleCateg;
}

function setSessionVar(name, val)
{
	server.callFunction('rpc_setSessionVar', name, val);
}

var oldonerror = window.onerror||function(){};

window.onerror =    function()
			{
				window.onerror = oldonerror;

				return true;
			}

testrpc();

window.onerror = oldonerror;

/******************************************************/


