//Javascript Document
var inloadHttp= false;
var inloadedfilename= "";
var loadedFlag= new Array();
var loadedAddOns= new Array();
var iRequestedInload= "";
var operationActivated= 0;
var requestedFunction= false;
var translatorUrl= "/bitrix/templates/.default/service/gfi/service/";
var url_to_inload= "/bitrix/templates/.default/service/gfi/service/";

var inloadMouseX= 0;
var inloadMouseY= 0;

function inload_request(filename, inId, e, func, replaceTranslator) {

	requestedFunction= func;
	
	if (operationActivated) {		alert("Сначала закончите текущую операцию!");		return;	}
	
	evt= e || window.event;
	
	var clientYOffset = document.documentElement.scrollTop || document.body.scrollTop;
	var clientXOffset = document.documentElement.scrollLeft || document.body.scrollLeft;
	
	if (evt) {
		inloadMouseX= parseFloat(clientXOffset)+parseFloat(evt.clientX);
		inloadMouseY= parseFloat(clientYOffset)+parseFloat(evt.clientY);
	}
	
	inloadedId= inId;
	iRequestedInload= inId;
	inloadedfilename= filename;
	
	if (  typeof(loadedFlag[filename]) != "undefined" && loadedFlag[filename] ) {
		initAddOns(filename);
		return;
	}
	
	var serviceCalling= ( typeof( replaceTranslator) == "undefined" || replaceTranslator == "" ) ? translatorUrl : replaceTranslator;
	
	//alert( replaceTranslator+" | "+serviceCalling );
	
	inloadHttp= new ajaxRequester(unpackInloadForm);
	if (  !inloadHttp.ajaxInit( serviceCalling )  ) return;
	
	inloadHttp.ajaxHttp.onreadystatechange= function () {
		inloadHttp.unpackRequest();
	};
	
	inloadHttp.sendParams("type=inload&action=load&filename="+filename);
}

function unpackInloadForm(obj) {
		//alert("fsdfsdfsdf"+obj.getted);
		var responseParts= obj.responseParts;
		
		responseParts.shift();
		
		var htmlPart= responseParts[0];
		
		//alert("now row: \n\n\n\n\n"+responseParts[0]);
		
		loadedFlag[inloadedfilename]= true;
		loadedAddOns[inloadedfilename]= {
			"html" : htmlPart
		};
		
		initAddOns(inloadedfilename);
}

function initAddOns(fN) {

	//alert(  requestedFunction  );
	var addInload= document.getElementById("inload_container");
	if (!addInload) return;
		
	addInload.innerHTML= loadedAddOns[ fN ]["html"];
	
	
	//Регистрируем в форме, кто именно ее инициировал
	//alert(fN+"_heInitMe");
	var obj= document.getElementById(fN+"_heInitMe");
	//alert(obj);
	if (!obj) {
		alert("Форма загружена неверно, либо ее структура повреждена!");
		return;
	}
	obj.value= iRequestedInload;
	//iRequestedInload= "";
	
	if (requestedFunction == "") {
		//Нужно еще подгрузить css-файл
		var styleObj= document.createElement('link');
		styleObj.type= 'text/css';
		styleObj.rel= 'stylesheet';
		styleObj.href= "/bitrix/templates/main2/service/gfi/inload/"+fN+".css?x="+Math.random();
		documentObj.appendChild(styleObj);
	
		//Нужно еще подгрузить js-код
		var scriptObj= document.createElement('script');
		scriptObj.type= 'text/javascript';
		scriptObj.src= "/bitrix/templates/main2/service/gfi/inload/"+fN+".js?x="+Math.random();
		documentObj.appendChild(scriptObj);
	} else {
		requestedFunction.call();
	}

	operationActivated++;
}


function hex_escape (str) {
			
        str = escape(str);
		  
		  str = str.replace(/%u2116/g, '%B9');
		  str = str.replace(/%u0456/g, '%B3');
		  str = str.replace(/%u0406/g, '%B2');
		  str = str.replace(/%u0454/g, '%BA');
		  str = str.replace(/%u0404/g, '%AA');
		  str = str.replace(/%u0457/g, '%BF');
		  str = str.replace(/%u0407/g, '%AF');
		  
		  
        str = str.replace(/%u041/g, '%C');
        str = str.replace(/%u042/g, '%D');
        str = str.replace(/%u043/g, '%E');
        str = str.replace(/%u044/g, '%F');
        str = str.replace(/%u0401/g, '%A8');
        str = str.replace(/%u0451/g, '%B8');
        str = str.replace(/\+/g, '%2B');
        return str;

}

function getBounds(element) {
  var left = element.offsetLeft;
  var top = element.offsetTop;
  for (var parent = element.offsetParent; parent; parent = parent.offsetParent)   {
    left += parent.offsetLeft - parent.scrollLeft;
    top += parent.offsetTop - parent.scrollTop
  }
  return {left: left, top: top, width: element.offsetWidth, height: element.offsetHeight};
}


function getBoundsLeft( element ) {
	var left= 0;
	left += parseFloat( element.offsetLeft ) - parseFloat ( element.scrollLeft );
	element= element.parentNode;
  	while ( typeof (element) != "undefined" &&  element && typeof (element.offsetLeft) != "undefined" && typeof (element.scrollLeft) != "undefined" ) {
		left += parseFloat( element.offsetLeft ) - parseFloat ( element.scrollLeft );
		element= ( element.offsetParent != null ) ? element.offsetParent : false;
  } // end while
  return parseFloat(left);
}


function getBoundsTop( element ) {
	var top= 0;
	
	top += parseFloat( element.offsetTop ) - parseFloat ( element.scrollTop );
	element= element.parentNode;
	
	while ( typeof (element) != "undefined" && element && typeof (element.offsetTop) != "undefined" && typeof (element.scrollTop) != "undefined" ) {
		top += parseFloat( element.offsetTop ) - parseFloat ( element.scrollTop );
		element= ( element.offsetParent != null ) ? element.offsetParent : false;
  	} // end while
  return parseFloat(top);
}

/**********************************************************************
				AJAX OBJ
***********************************************************************/
function createAjaxObject() {
	var newXml= false;
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
	try {
	  newXml = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
	  try {
	    newXml = new ActiveXObject("Microsoft.XMLHTTP");
	  } catch (e2) {
	    newXml = false;
	  }
	}
	@end @*/
	
	if (!newXml && typeof XMLHttpRequest != 'undefined') { 	newXml = new XMLHttpRequest(); }
	return newXml;
}

//*************************************************     CLASSSSSSSSSSSSSSS   ajaxRequester *************
//*************************************************     CLASSSSSSSSSSSSSSS   ajaxRequester *************
//*************************************************     CLASSSSSSSSSSSSSSS   ajaxRequester *************
//*************************************************     CLASSSSSSSSSSSSSSS   ajaxRequester *************
//*************************************************     CLASSSSSSSSSSSSSSS   ajaxRequester *************


function ajaxRequester(func) {
	this.func= func;
	this.ajaxHttp= false;
	this.responseParts= new Array("");
	this.shortContainer= "";
	
	global_ajax_awaiter_obj= document.getElementById( "global_ajax_awaiter" );
}

ajaxRequester.prototype.unpackRequest= function() {
	if (this.ajaxHttp.readyState == 4) {
		
		if ( global_ajax_awaiter_obj ) global_ajax_awaiter_obj.style.display= "none";
		
		var response = this.ajaxHttp.responseText;
		//alert( response );
		if (response == "" || typeof(response) == 'undefined') { return } // Операция произошла с ошибкой 
		
		this.responseParts= response.split("-|||-");
		if (this.responseParts[0].indexOf("ok") == -1) return; //alert("Ошибка: \n\n"+response);
		
		this.responseParts.shift();
		this.func.call(1, this);
	}
}

var global_ajax_awaiter_obj= false;

ajaxRequester.prototype.sendParams= function(params) {
	this.ajaxHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
   	this.ajaxHttp.send(params);
	
	if ( global_ajax_awaiter_obj ) {
		var x= parseFloat(inloadMouseX);
		var y= parseFloat(inloadMouseY);
		
		global_ajax_awaiter_obj.style.left= x+10+"px";
		global_ajax_awaiter_obj.style.top= y+10+"px";
		
		global_ajax_awaiter_obj.style.display= "block";
	}
}
	
ajaxRequester.prototype.ajaxInit= function(url) {
	if (!this.ajaxHttp) {
		this.ajaxHttp= createAjaxObject();
		
		if (!this.ajaxHttp) return false;
	}
	
	this.ajaxHttp.open("POST", url, true);
	return true;
}

//********************************************************

var inloadedId= "";

function inloadedShow_progressive() {
	var obj= document.getElementById(inloadedfilename+"_div"); if (!obj) return;
	
	var widthOffset= parseFloat(documentObj.scrollWidth || documentObj.scrollWidth);
	
	var newDivLeft= inloadMouseX;
	var nowDivWidth= obj.scrollWidth;
	if ( parseFloat(newDivLeft)+parseFloat(nowDivWidth) > parseFloat(widthOffset) ) {
		newDivLeft= parseFloat(widthOffset)-parseFloat(nowDivWidth)-10;
	}
	
	
	obj.style.left= newDivLeft+"px";
	obj.style.top= parseFloat(inloadMouseY)+"px";
	obj.style.visibility= "visible";
}

function inloadedClose_progressive() {
	operationActivated--;

	var obj= document.getElementById(inloadedfilename+"_div"); if (!obj) return;
	
	obj.style.left= "-1000px";
	obj.style.top= "-1000px";
	obj.style.visibility= "hidden";
}
