var Rx = {
	sExecuteActionUrl: '/rx/public/ajax/show/',
	sReturnActionUrl: '/rx/public/ajax/exec/',
	sExecuteSourceUrl: '/rx/public/ajax/source/',

	addEvent: function (obj, type, fn)
	{
		if (obj.addEventListener){
			obj.addEventListener( type, fn, false );
		} else if(obj.attachEvent) {
			obj.attachEvent( "on"+type, fn );
		} else {
			obj["on"+type] = fn;
		}
	},

	removeEvent: function (obj, type, fn)
	{
		if (obj.removeEventListener) {
			obj.removeEventListener( type, fn, false );
		} else if (obj.detachEvent){
			obj.detachEvent( "on"+type, obj[type+fn] );
		} else {
			obj["on"+type] = null;
		}
	},

	ajax: function (oParams)
	{
		JsHttpRequest.query(
			oParams['Url'],
			oParams['Params'],
			oParams['OnReady'],
			true
		);

		return true;
	},

	getValuesList: function (sModule, sModel, aCriteria, sTargetId, sNotSelectedText, sFieldName)
	{
		var aRequest = new Object();
		if (aCriteria) {
			aRequest['Criteria'] = aCriteria;
		}

		if (sModule == 'Structure' && sModel == 'Pages') {
			aRequest['Order'] = new Array();
			aRequest['Order']['TreePath'] = 'ASC';
		}

		if (!sNotSelectedText) {
			sNotSelectedText = '- Не выбрано -';
		}

		if (!sFieldName) {
			sFieldName = 'Name';
		}

		aRequest['Limit']   = 10000;
		aRequest['Offset']  = 0;
		aRequest['_Module'] = sModule;
		aRequest['_Model']  = sModel;
		aRequest['_Action'] = 'List';

		Rx.ajax({
			Url: Rx.sReturnActionUrl,
			Params: aRequest,
			OnReady: function (result, errors)
			{
				var sel = $$(sTargetId + 'Field');
				while (sel.options.length) {
					sel.options[0] = null;
				}

				sel[0] = new Option(sNotSelectedText, 0);
				for (a in result['array']['Rows']) {
					sel[sel.options.length] = new Option(result['array']['Rows'][a][sFieldName]['Value'], result['array']['Rows'][a]['Id']['Value']);
				}
			}

		});


	},

	getLeftOffset: function (oElement)
	{
		var _left = 0;

		do {
			_left += oElement.offsetLeft;
		} while(oElement = oElement.offsetParent);

	  	return _left;
	},

	getTopOffset: function (oElement)
	{
		var _top = 0;

		do {
			_top += oElement.offsetTop;
		} while(oElement = oElement.offsetParent);

	  	return _top;
	},

	getWidth: function (oElement)
	{
		return oElement.offsetWidth;
	},

	getHeight: function (oElement)
	{
		return oElement.offsetHeight;
	},

	findAjaxScripts: function (sString)
	{
		var oTarget = document.createElement('div');

		var js_ScriptFragment = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)';
		var js_ScriptSrcFragment = '<script.+(src[ ]*=[ ]*\'(.*?)\'|src[ ]*=[ ]*"(.*?)").+';

		var matchAll = new RegExp(js_ScriptFragment, 'img');
		var matchOne = new RegExp(js_ScriptFragment, 'im');
		var matchSrc = new RegExp(js_ScriptSrcFragment, 'im');

		var arr = sString.match(matchAll) || [];
		var res = [];

		for (var i = 0; i < arr.length; i++)
		{
			var srcMt = arr[i].match(matchSrc);
			if (srcMt) {
				var script = document.createElement("script");
				script.language = "JavaScript";
				script.type = "text/javascript";
				script.src =  (srcMt.length > 3 ? srcMt[3] : srcMt[2]);
				oTarget.appendChild(script);
			}

			var mtCode = arr[i].match(matchOne) || ['', ''];
			if (mtCode[1] != '') {
				var script = document.createElement("script");
				script.language = "JavaScript";
				script.type = "text/javascript";
				script.text =  mtCode[1];
				oTarget.appendChild(script);
			}
		}


		sString = sString.replace(js_ScriptFragment, "");
		sString = sString.replace(js_ScriptSrcFragment, "");

		var oText = document.createElement('div');
		oText.innerHTML = sString;
		oTarget.appendChild(oText);

		//oTarget.innerHTML = sString;

		//alert(sString);

		return oTarget;
	},

	reloadCaptcha: function (sId, sUrl)
	{
		var dt = new Date();
		document.getElementById(sId).src = sUrl + '&' + dt.getTime()
	},

	startSearch: function (nSiteId, sValue)
	{
		Rx.ajax({
			Url: Rx.sExecuteActionUrl,
			Params:
			{
				_Module: 'Search',
				_Model: 'Index',
				_Action: 'Setsearch',
				SiteId: nSiteId,
				Query: sValue,
				Group: ''
			},
			OnReady: function ()
			{
				location.href = '/search/UseSearch=1/';
			}
		});

	},

	showSearchString: function (sModule, sModel, sField, oElement)
	{
		if (oElement.value.length >= 2) {
			var aRequest = new Object();
			aRequest['Criteria'] = new Array();
			aRequest['Criteria'][sField] = {
				Value: '%' + oElement.value + '%',
				Type: 'LIKE'
			};


			aRequest['Limit']   = 10;
			aRequest['Offset']  = 0;
			aRequest['_Module'] = sModule;
			aRequest['_Model']  = sModel;
			aRequest['_Action'] = 'List';

			Rx.ajax({
				Url: Rx.sReturnActionUrl,
				Params: aRequest,
				OnReady: function (result, errors)
				{
					var oBox = $$(oElement.id + 'SearchBox');
					/*if (!oBox) {
						var oTestBox = document.createElement('div');
						oTestBox.id = oElement.id + 'SearchBox';
						oTestBox.className = 'string_search_box';
						oTestBox.style.display = 'none';
						$$('DocumentBodyBox').appendChild(oTestBox);
						oBox = $$(oElement.id + 'SearchBox');
					}*/


					//oBox.style.left = Rx.getLeftOffset(oElement) + 'px';
					//oBox.style.top = Rx.getTopOffset(oElement) + 26 + 'px';

					var sHtml = '';
					for (a in result['array']['Rows']) {
						sHtml += '<div class="string_search_row" onclick="$$(\'' + oElement.id + '\').value = \'' + result['array']['Rows'][a]['Login']['Value'] + '\'; Rx.hideSearchString(\'' + oElement.id + '\');" onmouseover="this.className = \'string_search_row_active\';" onmouseout="this.className = \'string_search_row\';">' + result['array']['Rows'][a]['Login']['Value'] + '</div>';
					}

					oBox.innerHTML = sHtml;
					if (sHtml != '') {
						oBox.style.display = 'block';
					} else {
						oBox.style.display = 'none';
					}

					//alert(oBox.left);
					//alert(oBox.top);
				}

			});
		}
	},

	hideSearchString: function (sFieldId)
	{
		if ($(sFieldId + 'SearchBox')) {
			$$(sFieldId + 'SearchBox').style.display = 'none';
		}

		return true;
	}
};