var _browser = {
	init : function() {
		var t = this, d = document, w = window, na = navigator, ua = na.userAgent;

		// Browser checks
		t.isOpera = w.opera && opera.buildNumber;
		t.isWebKit = /WebKit/.test(ua);
		t.isIE = !t.isWebKit && !t.isOpera && (/MSIE/gi).test(ua) && (/Explorer/gi).test(na.appName);
		t.isIE6 = t.isIE && /MSIE [56]/.test(ua);
		t.isGecko = !t.isWebKit && /Gecko/.test(ua);
		t.isMac = ua.indexOf('Mac') != -1;
		t.isAir = /adobeair/i.test(ua);
	}
}
_browser.init();

function show_dv(dv_name) {
	var dv_obj=document.getElementById(dv_name);
	if (!dv_obj) {return false;}
	dv_obj.style.display="block";
}
function hide_dv(dv_name) {
	var dv_obj=document.getElementById(dv_name);
	if (!dv_obj) {return false;}
	dv_obj.style.display="none";
}
function shift_dv(dv_name) {
	var dv_obj=document.getElementById(dv_name);
	if (!dv_obj) {return false;}
	if (dv_obj.style.display=="none") {show_dv(dv_name);} else {hide_dv(dv_name);}
}
function show_hint(label,width) {
	document.write('&nbsp;<img src=/assets/icons/help.png width=16 height=16 border=0 align=absmiddle border=0 onmouseover="ddrivetip(\''+label+'\', '+width+');" onmouseout="hideddrivetip();">');
}
function element_pos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		}
	}
	return [curleft,curtop];
}
function element_size(obj) {
	if (!obj) {return [0,0];}
	var w = obj.clientWidth ? obj.clientWidth : obj.offsetWidth;
	var h = obj.clientHeight ? obj.clientHeight : obj.offsetHeight;
	return [w,h];
}

var drag_object = {el: null, el_sec: null, elX: -1, elY: -1, el_secX: -1, el_secY: -1, mouseX: -1, mouseY: -1, zIndex: 1000};

function drag_position(event) {
	if (!event && window.event) {event = window.event;}
	var x = y = 0;
	if (event.clientX) {
		x = event.clientX;
		y = event.clientY;
	} else if (event.pageX) {
		x = event.pageX;
		y = event.pageY;
	}
	return [x,y];
}
function drag_do(event) {
	if (!drag_object.el) {return '';}
	var pos = drag_position(event);
	var delta_x=pos[0] - drag_object.mouseX;
	var delta_y=pos[1] - drag_object.mouseY;
	drag_object.el.style.left = drag_object.elX + delta_x + "px";
	drag_object.el.style.top  = drag_object.elY + delta_y + "px";
	if (drag_object.el.style.left.replace(/px/,'') < 0) {drag_object.el.style.left = '0px';}
	if (drag_object.el.style.top.replace(/px/,'')  < 0) {drag_object.el.style.top  = '0px';}
	if (drag_object.el_sec!=null) {
		drag_object.el_sec.style.left = drag_object.el_secX + delta_x + "px";
		drag_object.el_sec.style.top  = drag_object.el_secY + delta_y + "px";
		if (drag_object.el_sec.style.left.replace(/px/,'') < 0) {drag_object.el_sec.style.left = '0px';}
		if (drag_object.el_sec.style.top.replace(/px/,'')  < 0) {drag_object.el_sec.style.top  = '0px';}
	}
	if (window.event) {
		window.event.cancelBubble = true;
		window.event.returnValue = false;
	} else {
		event.preventDefault();
	}
}
function drag_start(obj_id,event,obj_id_sec) {
	drag_object.el=document.getElementById(obj_id);
	if (!drag_object.el) {return false;}
	if (obj_id_sec!=undefined) {
		drag_object.el_sec=document.getElementById(obj_id_sec);
		var pos = element_pos(drag_object.el_sec);
		drag_object.el_secX = pos[0];
		drag_object.el_secY = pos[1];
	} else {drag_object.el_sec=null;}
	var ePos = drag_position(event);
	drag_object.mouseX = ePos[0];
	drag_object.mouseY = ePos[1];
	var pos = element_pos(drag_object.el);
	drag_object.elX = pos[0];
	drag_object.elY = pos[1];
	drag_object.el.style.zIndex = drag_object.zIndex++;
	if (document.attachEvent) {
		document.attachEvent("onmousemove", drag_do);
		document.attachEvent("onmouseup", drag_stop);
		window.event.cancelBubble = true;
		window.event.returnValue  = false;
	} else {
		document.addEventListener("mousemove", drag_do, true);
		document.addEventListener("mouseup", drag_stop, true);
		event.preventDefault();
	}
}
function drag_stop(stop_code) {
	drag_object.el=null;
	if (document.detachEvent) {
		document.detachEvent("onmousemove", drag_do);
		document.detachEvent("onmouseup", drag_stop);
	} else {
		document.removeEventListener("mousemove", drag_do, true);
		document.removeEventListener("mouseup", drag_stop, true);
	}
	if (stop_code!=undefined) {eval(stop_code);}
}
function show_float_dv(dv_name,code) {
	var dv_obj=document.getElementById(dv_name);
	if (!dv_obj) {return false;}
	dv_obj.style.left=document.body.scrollLeft+(document.body.clientWidth-dv_obj.offsetWidth)/2;
	dv_obj.style.top=document.body.scrollTop+(document.body.clientHeight-dv_obj.offsetHeight)/2;
	dv_obj.style.zIndex = drag_object.zIndex++;
	dv_obj.style.display="block";
	if (code!='') {eval(code);}
}
function open_float_dv(dv_name,content,w,h) {
	var dv_obj=document.getElementById(dv_name);
	if (!dv_obj) {
	    var dv_obj = document.createElement('div');
		dv_obj.id=dv_name;
		dv_obj.className='win_floater';
		document.body.appendChild(dv_obj);
	} else {
		if (dv_obj.style.display=="block") {
			dv_obj.style.zIndex = drag_object.zIndex++;
			return false;
		}
	}
	dv_obj.innerHTML = content;
	dv_obj.style.width=w+'px';
	if (h==undefined) {
		var h = dv_obj.clientHeight ? dv_obj.clientHeight : dv_obj.offsetHeight;
		if (!h) {h=400;}
	}
	dv_obj.style.height=h+'px';
	dv_obj.style.position = 'absolute';
	dv_obj.style.zIndex = drag_object.zIndex++;
	if (self.innerWidth && self.innerHeight) {
		var pos_l=window.pageXOffset+Math.round((self.innerWidth-w)/2);
		var pos_t=window.pageYOffset+Math.round((self.innerHeight-h)/2);
	} else if (document.body) {
		var pos_l=document.body.scrollLeft+Math.round((document.body.clientWidth-w)/2);
		var pos_t=document.body.scrollTop+Math.round((document.body.clientHeight-h)/2);
	}
	if (pos_l<0) {pos_l=0;}
	if (pos_t<0) {pos_t=0;}
	dv_obj.style.left=pos_l+'px';
	dv_obj.style.top=pos_t+'px';
	dv_obj.style.display="block";
	var draggable = getElementsByClassName(dv_obj, '*', 'draggable');
	for (var i in draggable) {
		draggable[i].onmousedown = function(event) {drag_start(dv_name,event);}
		draggable[i].onmousemove = function(event) {drag_do(event);}
		draggable[i].onmouseup = function(event) {drag_stop();}
		draggable[i].ondragend = function(event) {drag_stop();}
	}
}
function hide_float_dv(dv_name) {
	var dv_obj=document.getElementById(dv_name);
	if (!dv_obj) {return false;}
	dv_obj.style.display="none";
}
function dlg_info(pg,id,params,w,h) {
	if (pg==undefined) {pg='';}
	if (id==undefined) {id='';}
	if (params==undefined) {params='';}
	if (w==undefined) {w=550;}
	if (h==undefined) {h=400;}
	if (pg!='') {
		if (params!='') {params='&'+params;}
		if (id!='') {params='&page_id='+id+params;}
		ResponseDialogParams={name:'dv_dialog_info',width:w,height:h};
		AjaxRequest('/windows/info/?pg='+pg+params,ResponseDialog,'Request failed');
	}
}
function dlg_content(content_id,content_type,w) {
	if (w==undefined) {w=550;}
	if (content_id!='' && content_type) {
		ResponseDialogParams={name:'dv_dialog_content',width:w};
		AjaxRequest('/windows/content/?content_id='+content_id+'&content_type='+content_type,ResponseDialog,'Request failed');
	}
}
function check_all(jForm, jNameElement, jClickElement) {
	for(i=0;i<jForm.length;i++) {
		var jTemp = jForm.elements[i];
		if (jTemp.type.toLowerCase() == 'checkbox' && jTemp.name==jNameElement) {
			if(jClickElement.checked) {
				jForm.elements[i].checked = true;
			} else {
				jForm.elements[i].checked = false;
			}
		}
	}
}
function check_m(jForm, jNameElement, mess) {
	for(i=0;i<jForm.length;i++) {
		var jTemp = jForm.elements[i];
		if (jTemp.type.toLowerCase() == 'checkbox' && jTemp.name==jNameElement) {
			if(jTemp.checked) {return true;}
		}
	}
	alert(mess);
	return false;
}
function str_replace(search, replace, subject) {
    return subject.split(search).join(replace);
}
function check_r(jNameElement, mess) {
	for(i=0;i<jNameElement.length;i++) {
		if (jNameElement[i].checked) {return true;}
	}
	alert(mess);
	return false;
}
function check_s(jForm, jNameElement, mess) {
	for(i=0;i<jForm.length;i++) {
		var jTemp = jForm.elements[i];
		if (jTemp.type.toLowerCase() == 'select-multiple' && jTemp.name==jNameElement) {
			for(n=0;n<jTemp.options.length;n++) {
				if(jTemp.options[n].selected) {return true;}
			}
		}
	}
	alert(mess);
	return false;
}
function $A(iterable) {
  if (!iterable) return [];
  var length = iterable.length, results = new Array(length);
  while (length--) results[length] = iterable[length];
  return results;
}
Object.extend = function(destination, source) {
  for (var property in source)
    destination[property] = source[property];
  return destination;
};
Object.extend(Function.prototype, {
  bind: function() {
    if (arguments.length < 2 && arguments[0] === undefined) return this;
    var __method = this, args = $A(arguments), object = args.shift();
    return function() {
      return __method.apply(object, args.concat($A(arguments)));
    }
  }
});
function AjaxRequest(url,responseFunc,errMsg) {
 if (errMsg!=undefined) {var errFunc = function(req) {alert(errMsg+"\n"+req.responseText);};} else {var errFunc = function(req) {};}
  var req = new HttpRpc(url, errFunc, responseFunc);
  req.sendRequest();
  return false;
}
var ResponseDialogParams='';
var ResponseDialog = function(req) {
	open_float_dv(ResponseDialogParams.name,req.responseText,ResponseDialogParams.width,ResponseDialogParams.height);
	evalScripts(req.responseText);
}
var ScriptFragment = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)';
function evalScripts(code) {
	var matchAll = new RegExp(ScriptFragment, 'img');
	var matchOne = new RegExp(ScriptFragment, 'im');
	var matches = code.match(matchAll);
	if (matches) {
		for (var i=0; i<matches.length; i++) {
			var m = matches[i].match(matchOne);
			if (m) eval(m[1]);
		}
	}
}
function getElementsByClassName(oElm, strTagName, strClassName) {
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/-/g, "\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}
	}
	return arrReturnElements;
}
var ERROR_PREFIX = "ERROR:";
function HttpRpc(url, errorFunc, responseFunc, finalizerFunc, method, bSync) {
    if(url.slice(0, 4) == 'http') {
    this.url = url;
    } else {
        if(url.charAt(0) != '/') {
            url = '/' + url;
        }
        this.url = 'http://' + window.location.host + url;
    }
    if (method) {
        this.method = method;
    } else {
        this.method = 'GET';
    }
    if(responseFunc) {
        this.responseFunc = responseFunc;
    } else {
        this.responseFunc = function(req) {};
    }
    if(errorFunc) {
        this.errorFunc = errorFunc;
    } else {
        this.errorFunc = function(req) {};
    }
    if(finalizerFunc) {
        this.finalizerFunc = finalizerFunc;
    } else {
        this.finalizerFunc = function(req) {};
    }
    this.bSync = bSync;
}
HttpRpc.prototype.getTransport = function() {
    var xRequest = null;
    if(window.XMLHttpRequest) {
        xRequest = new XMLHttpRequest();
    } else if ( window.ActiveXObject ) {
        try {           
            xRequest = new ActiveXObject('Msxml2.XMLHTTP');
        } catch(err) {
            xRequest = new ActiveXObject('Microsoft.XMLHTTP');
        }
    }
    return xRequest;
}
HttpRpc.prototype.sendRequest = function(paramsStr) {
    if(!paramsStr) {
        paramsStr = '';
    }
    this.req = this.getTransport();
    this.req.open(this.method, this.url, !this.bSync);
    this.req.setRequestHeader(
        "Content-Type","application/x-www-form-urlencoded; charset=windows-1251");
    var oThis = this;
    this.req.onreadystatechange = function() { oThis.handleAjaxResponse() };
    this.req.send(paramsStr);
}
HttpRpc.prototype.handleAjaxResponse = function() {
    try {
        if(this.req.readyState == 4) {
            if(this.isSuccess(this.req)) {
                this.responseFunc(this.req);
            } else {
                this.errorFunc(this.req);
            }
        }
    }
    finally {
        if (this.req.readyState == 4) {
            this.finalizerFunc(this.req);
        }
    }
    if (this.req.readyState == 4) {
        // clears up memory leak in IE 6
        delete this.req;
        return;
    }
}
HttpRpc.prototype.isSuccess = function(req) {
	try {
    	if (req == null || req.status == undefined) // safari bug, sometimes status is undefined
    	{
       		return true;
    	}
    	return ( (req.status >= 200 && req.status < 300)) && 
        	( (req.responseText == null) || req.responseText.slice(0, ERROR_PREFIX.length) != ERROR_PREFIX);
	} 
	catch (exception) {
		return false;
	}
}