function ErrorTracer()
{
	var ctrl = false;
	var sh = false;
	var enter = false; 
	this.addr = "";
	this.ajax = true;
	this.debug = false;
	this.onError = null;
	var that = this;
	
	// --------------------- public functions ------------------------
	this.Init = function(params)
	{
		window.document.onkeydown = function(e)
		{
			if(!e) e = window.event;
			if(e.keyCode == 17) ctrl = true;
			else if(e.keyCode == 13) enter = true;
			else if(e.keyCode == 16) sh = true;
		}
		window.document.onkeyup = function(e)
		{
			if(!e) e = window.event;
			if (e.keyCode == 16 && !enter) sh = false;
			if (sh && e.keyCode == 13)
			{ 
				if(/*@cc_on 1 | @*/ 0) txt = document.selection.createRange().text;
				else txt = window.getSelection().toString();
				if(txt == '') return;
				if(that.onError) that.onError(txt);

			}
			if(e.keyCode == 13)
			{ 
				if (ctrl) ctrl = false;
				if (sh) sh = false;
				enter = false;
			}
		}
		that.addr = params.addr == undefined ? "" : params.addr;
		that.ajax = params.ajax == undefined ? true : params.ajax;
		that.debug = params.debug == undefined ? false : params.debug;
	};
	//---------------------------------------
	this.sendError = function(txt,desc)
	{
		var httpRequester = that.ajax ? getHTTPRequestObject() : false;
		if(httpRequester)
		{
//alert(that.addr + "?str=" + encodeURIComponent(txt) + "&url=" + document.location + "&desc=" + encodeURIComponent(desc));
			httpRequester.open("GET", "/send_err.php?str=" + encodeURIComponent(txt) + "&url=" + document.location + "&desc=" + encodeURIComponent(desc),true);
			httpRequester.send(null);
		}
		else
		{
			var body = document.getElementsByTagName('body');
			if(body)
			{
				var div_container = document.createElement("DIV");
				div_container.innerHTML = "<iframe style='" + (that.debug == true ? "width:100px;height:100px;" : "width:0px;height:0px;") + "' src='" + "/send_err.php?str=" + encodeURIComponent(txt) + "&url=" + document.location + "&desc=" + encodeURIComponent(desc) + "'></iframe>";
				body[0].appendChild(div_container);
			}
		}
	};
	// ------------------ private functions ------------------------
	function getHTTPRequestObject() 
	{
  		var xmlHttpRequest;
  		/*@cc_on
  		@if (@_jscript_version >= 5)
  		try 
  		{
    		xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
  		}catch (exception1) 
  		{
    		try 
    		{
      			xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    		}catch (exception2) 
    		{
      			xmlHttpRequest = false;
    		}
  		}
  		@else
    		xmlhttpRequest = false;
  		@end @*/
  		if (!xmlHttpRequest && typeof XMLHttpRequest != 'undefined') 
  		{
    		try 
    		{
      			xmlHttpRequest = new XMLHttpRequest();
    		}catch (exception) 
    		{
      			xmlHttpRequest = false;
    		}
  		}
  		return xmlHttpRequest;
	};
	//-----------------------------------------
}
var obj = new ErrorTracer();
obj.Init({addr : "http://www.alpindustria.ru", debug : false,ajax : true});
obj.onError = function(txt) {
	var frame = document.getElementById("dlgFrame");
	if(frame) {
		var w = parseInt(getClientWidth());
		var h = parseInt(getClientHeight());
		var scrollH = parseInt(getBodyScrollTop());
		var scrollW = parseInt(getBodyScrollLeft());
		frame.style.left = '' + ((w - 400) / 2 + scrollW) + 'px';
		frame.style.top = '' + (scrollH + 200) + 'px';

		//alert(frame.style.top);

		frame.style.display = 'block';
		var button = document.getElementById("dlgButton");
		button.onclick = function() {
			frame.style.display = "none";
			var input = document.getElementById("dlgInput");
			var desc = input ? input.value : "";
			obj.sendError(txt,desc);
			//alert("Спасибо, мы учтем ваше замечание");    
		}
	}
}
function getClientWidth() {
	return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientWidth:document.body.clientWidth;
}
function getClientHeight() {
	return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight;
}
function getBodyScrollTop() {
	return self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop);
}
function getBodyScrollLeft() {
	return self.pageXOffset || (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft);
}
function closeFrame() {
	var frame = document.getElementById("dlgFrame");
	frame.style.display = "none";
}
