window.Get_DOM_Node = window.__$ = document.all ? function(n){return document.all[n]} : (document.getElementById ? (function(n){return document.getElementById(n)}) : null);
function login(){
	this.ajx 					= '';	// ajax
	this.memberurl 				= '';	// url dlya ajax
	this.url					= null;	// урл
	this.params					= '';	// параметри
	this.isIE 					= document.attachEvent != null;
	this.isG 					= !document.attachEvent && document.addEventListener;
	this.id 					= '';
	this.action 				= '';
	this.topPos					= '';
	this.leftPos 				= '';
	this.zIndex 				= '';
	this.callback 				= '';
	this.stopAutoClose 			= '';
	this.fshendl 				= '';
	this.isauthornon			= false;
	this.endpage = function(){
		isloginuser();					// nav.js
        if(usermypageid && mypage_login){
            mypage_login();
        }
	}
	this.appendlogin = function(event,hendler,url,params){
		this.fshendl = hendler;
		this.params = params;
		this.url = url;
		if(!uid || uid < 1){
			this.showFloatForm(event);
		}else if(this.fshendl){
			this.fshendl(params);
			this.getmember();
			if(!uid || uid < 1) this.showFloatForm(event);
			this.fshendl = null;
		}else if(this.url){
			window.location.href = this.url;
			this.url = null;
			return;
		}
	}
	this.showFloatForm = function(event){
		var floatForm = Get_DOM_Node('mainFloatForm'); if (!floatForm) return true;
		var X = this.f_scrollLeft() + Math.round(this.f_clientWidth()/2);
		var Y = this.f_scrollTop() + Math.round(this.f_clientHeight()/2);
		this.Fire_PopupDocLayer('mainFloatForm', event, 'click', X, Y, 2000, this.closeFloatForm, (stopALoginFormutoClose = true));
		var alphaBg = Get_DOM_Node('mainFloatFormAlphaBg');
		alphaBg.style.width = document.body.scrollWidth + 'px';
		alphaBg.style.height = document.body.scrollHeight + 'px';
		this.Change_LayerVisibility('mainFloatFormAlphaBg', true, false);
		this.Attach_EventListener(document, 'keyup', this.clFFE);
		return false;
	}
	this.getmember = function(url, hendler){
		if(url) this.memberurl = url;
		var newurl = '/exec/ajax/premiss.php?x=1'+this.memberurl.replace("/exec/ajax/premiss.php?x=1","");
		var vdate = new Date();
		newurl += '&killcache='+vdate.getTime()+'x'+Math.round((Math.random()* 1000000));
		// webwin add. Old variant did not work in chrome and safary
		
		if (navigator.userAgent.toLowerCase().indexOf('safari/') != -1){
			jQuery.ajax({
				async:false,
				url:newurl,
				cache:false,
				dataType:'script'
			});
		} else {
			var span = null;
			var span = document.createElement('SPAN');
			getById('jsdiv').appendChild(span);
			span.style.display = 'none';
			span.innerHTML = 'text <s'+'cript></' + 'script>';
			var s = span.getElementsByTagName("script")[0];
			s.language = "JavaScript";
			if (s.setAttribute) s.setAttribute('src', newurl); else s.src = newurl;
		}
		this.endpage();
		
        if(hendler) hendler();
        
	}
	this.ajax = function(url,data,hendler){
        if(!hendler) hendler = null;
        this.isauthornon = 1;
		if(window.ActiveXObject)this.ajx= new ActiveXObject("Microsoft.XMLHTTP");
		else					this.ajx = new XMLHttpRequest();
		this.ajx.open('POST',url,false);
		this.ajx.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		this.ajx.send(data);
		this.submth(this.ajx,hendler);
		this.isauthornon = false;
	}
	this.submt = function(obj){
		var err = '';
		if(!obj.elements['login'].value) 	err += 'Не введен логин\r\n';
		if(!obj.elements['passwd'].value)	err += 'Не введен пароль\r\n';
		if(!err){
    		this.ajax('/exec/ajax/login.php','login=' + obj.elements['login'].value + '&passwd=' + obj.elements['passwd'].value,function(){
                opnlogin.endpage();
            });
		}else alert(err);
	}
	this.logoff = function(){
		uid = 0;
		this.ajax('/exec/ajax/login.php','logoff=1',function(){
            opnlogin.endpage();
        });
	}
	this.submth = function(h, hendler){
        if(!hendler) hendler = null;
		if(h.status == 200) {
			res = h.responseXML.getElementsByTagName("status")[0].firstChild.nodeValue;
			err = h.responseXML.getElementsByTagName("error")[0].firstChild.nodeValue;
            uid = h.responseXML.getElementsByTagName("userid")[0].firstChild.nodeValue
			if(res != '0'){
				alert(err);
				return;
			}else{
                this.closeFloatForm();
				if(this.fshendl && this.fshendl != null){
                    this.getmember(null,hendler);
					this.fshendl(this.params);
					this.fshendl = null;
				}else{
                    if(hendler){
                        hendler();
                    }
                }
				if(this.url){
					window.location.href = this.url;
					this.url = null;
					return;
				}
			}
		}
	}
	this.spop = function(id, event, action, docLeftPosition, docTopPosition, zIndex, extraCloseEventCallback, stopAutoClose) {
		this.id = id;
		this.alphaBgPopupLayer = 'alphaBg_'+Math.round(Math.random()*1000000);
		this.event = (event) ? event : window.event;
		this.action = action;
		this.topPos = (docTopPosition) ? parseInt(docTopPosition) : 0;
		this.leftPos = (docLeftPosition) ? parseInt(docLeftPosition) : 0;
		this.zIndex = parseInt(zIndex);
		this.callback = extraCloseEventCallback;
		this.stopAutoClose = (stopAutoClose) ? true : false;
	}
	this.crbgl = function() {
		var ELEMENT_NODE = 1;
		var styleAlphaBg = new Array('position:absolute','background-color: #FFF','filter:alpha(opacity=0)', 'moz-opacity:0', 'opacity:0','display:none', 'visibility:hidden');
		if (Get_DOM_Node(this.id).nodeType == ELEMENT_NODE) {
			var parentNode = Get_DOM_Node(this.id).parentNode;
			if(parentNode != null) {
				var alphaLayer = document.createElement('DIV');
				alphaLayer.id = this.alphaBgPopupLayer;
				alphaLayer.style.cssText = styleAlphaBg.join(';');
				parentNode.appendChild(alphaLayer);
			}
		}
	}
	this.clpup = function () {
		var layer = Get_DOM_Node(this.id); if (!layer) return false;
		opnlogin.Cancel_EventPropagation(null, this.event);
		var element = (this.event.target) ? this.event.target : this.event.srcElement;
		if (element.blur) {element.blur();}
		layer.style.top = this.topPos+'px';
		layer.style.left = this.leftPos+'px';
		layer.style.zIndex = this.zIndex;
		opnlogin.Change_LayerVisibility(this.id);
		var alphaLayer = Get_DOM_Node(this.alphaBgPopupLayer);
		if (alphaLayer) {
			alphaLayer.style.left = parseInt(this.leftPos)+'px';
			alphaLayer.style.top = parseInt(this.topPos)+'px';
			alphaLayer.style.width = parseInt(layer.offsetWidth)+'px';
			alphaLayer.style.height = parseInt(layer.offsetHeight)+'px';
			alphaLayer.style.zIndex = parseInt(layer.style.zIndex)-1;
			opnlogin.Change_LayerVisibility(this.alphaBgPopupLayer);
		}
		if (this.stopAutoClose == false) this.Attach_EventListener(document, this.action, this.clalpup, false);
		this.Attach_EventListener(layer, this.action, this.Cancel_clalpup, false);
	}
	this.clalpup = function(event) {
		opnlogin.Change_LayerVisibility(this.id, false, true);
		if (Get_DOM_Node(this.alphaBgPopupLayer)) opnlogin.Change_LayerVisibility(this.alphaBgPopupLayer, false, true);
		this.Detach_EventListener(document, this.action, this.clalpup, false);
		this.Detach_EventListener(Get_DOM_Node(this.id), this.action, this.Cancel_clalpup, false);
		if (typeof(this.callback) == 'function') {this.callback(event);}
	}
	this.Cancel_clalpup = function(event) {
		event = (event) ? event : window.event;
		var element = (event.target) ? event.target : event.srcElement;
		if (element != Get_DOM_Node(this.id)) opnlogin.Cancel_EventPropagation(document, event, (cancelDefault=false));
	}
	this.f_clientWidth = function() {
		return this.f_filterResults (window.innerWidth ? window.innerWidth : 0,document.documentElement ? document.documentElement.clientWidth : 0,document.body ? document.body.clientWidth : 0);
	}
	this.f_clientHeight = function() {
		return this.f_filterResults (window.innerHeight ? window.innerHeight : 0,document.documentElement ? document.documentElement.clientHeight : 0,document.body ? document.body.clientHeight : 0);
	}
	this.f_scrollLeft = function() {
		return this.f_filterResults (window.pageXOffset ? window.pageXOffset : 0,document.documentElement ? document.documentElement.scrollLeft : 0,document.body ? document.body.scrollLeft : 0);
	}
	this.f_scrollTop = function() {
		return this.f_filterResults (window.pageYOffset ? window.pageYOffset : 0,document.documentElement ? document.documentElement.scrollTop : 0,document.body ? document.body.scrollTop : 0);
	}
	this.f_filterResults = function(n_win, n_docel, n_body) {
		var n_result = n_win ? n_win : 0;
		if (n_docel && (!n_result || (n_result > n_docel))) n_result = n_docel;
		return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
	}
	this.Get_MouseCoords = function(evt) {
		var evt = evt||window.event;
		var x = evt.x || evt.clientX;
		var y = evt.y || evt.clientY;
		return [x, y];
	}
	this.FADCs = function(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];
	}
	this.FADC_X = function(obj) {
		var coords = this.FADCs(obj);
		return coords[0];
	}
	this.FADC_Y = function(obj) {
		var coords = this.FADCs(obj);
		return coords[1];
	}
	this.Change_LayerVisibility = function(id, forceOpen, forceClose) {
		var layer = Get_DOM_Node(id); if (!layer) return false;
		if ((this.Check_LayerVisibility(layer) === 'hidden' && !forceClose) || forceOpen) layer.style.display = 'block';
		else if ((this.Check_LayerVisibility(layer) === 'visible' && !forceOpen) || forceClose)	layer.style.display = 'none';
		return false;
	}
	this.Check_LayerVisibility = function(layer) {
		if (typeof(layer) == 'string'){layer = Get_DOM_Node(layer);}
		else if(typeof(layer) != 'object') {return 'undef';}
		if (layer.style.display == '') layer.style.display = this.Get_ElementCurrentStyle(layer, 'display');
		if (layer.style.display == 'none')	return 'hidden';
		else if (layer.style.display == 'block')return 'visible';
		return 'undef';
	}
	this.Get_ElementCurrentStyle = function(element, CssStyleProperty) {
		if (!element) return false;
		if (element.currentStyle) return element.currentStyle[this.CssToJavascriptStyle(CssStyleProperty)];
		else if (window.getComputedStyle){
			var compStyle = window.getComputedStyle(element, '');
			return compStyle.getPropertyValue(CssStyleProperty);
		}else	return '';
	}
	this.CssToJavascriptStyle = function(CssProperty) {
		var stringArray = CssProperty.toLowerCase().split('-');
		if (stringArray.length == 1) return stringArray[0];
		var ret = (CssProperty.indexOf("-") == 0) ? stringArray[0].charAt(0).toUpperCase() + stringArray[0].substring(1) : stringArray[0];
		for (var i = 1; i < stringArray.length; i++) {
			var s = stringArray[i];
			ret += s.charAt(0).toUpperCase() + s.substring(1);
		}
		return ret;
	};
	this.Attach_EventListener = function(element, action, callback, capture) {
		capture = (capture) ? true : false;
		element = (element) ? element : document;
		if (this.isIE && element.attachEvent)	element.attachEvent("on"+action, callback);
		else if (this.isG && element.addEventListener)	element.addEventListener(action, callback, capture);
	}
	this.Detach_EventListener = function(element, action, callback, capture) {
		capture = (capture) ? true : false;
		element = (element) ? element : document;
		if (this.isIE && element.detachEvent)	element.detachEvent("on"+action, callback);
		else if (this.isG && element.removeEventListener) element.removeEventListener(action, callback, capture);
	}
	this.Cancel_EventPropagation = function(element, event, cancelDefault, cancelPropogation) {
		cancelPropogation = (cancelPropogation === false) ? false : true;
		cancelDefault = (cancelDefault === false) ? false : true;
		if (this.isIE) {
			if (element) {
				if (element.returnValue) if (cancelDefault) element.returnValue = false;
				if (element.cancelBubble)  if (cancelPropogation) element.cancelBubble = true;
			}
			if (cancelDefault) window.event.returnValue = false;
			if (cancelPropogation) window.event.cancelBubble = true;
		}
		else if (this.isG && event) {
			if (element) {
				if (element.preventDefault) 	if (cancelDefault) element.preventDefault();
				if (element.stopPropagation) if (cancelPropogation) element.stopPropagation();
			}
			if (cancelDefault) event.preventDefault();
			if (cancelPropogation) event.stopPropagation();
		}
	}
	this.closeFloatForm = function() {
		this.Change_LayerVisibility('mainFloatForm', false, true);
		this.Change_LayerVisibility('mainFloatFormAlphaBg', false, true);
		return false;
	}
	this.clFFE = function(event) {
		if (event.keyCode==27)	opnlogin.closeFloatForm();
		return false;
	}
	this.Fire_PopupDocLayer = function(id, event, action, docLeftPos, docTopPos, zIndex, extraCloseEventCallback, stopAutoClose) {
		zIndex = (zIndex) ? parseInt(zIndex) : parseInt(this.Get_ElementCurrentStyle(Get_DOM_Node(id), 'z-index'));
		event = (event) ? event : window.event;
		var element = (event.target) ? event.target : event.srcElement;
		var defaultLeftDeviation = 0;
		var defaultTopDeviation = 15;
		var elementCoords_X = (docLeftPos) ? parseInt(docLeftPos) : (this.FADC_X(element) + defaultLeftDeviation);
		var elementCoords_Y = (docTopPos) ? parseInt(docTopPos) : (this.FADC_Y(element) + defaultTopDeviation);
		this.spop(id, event, action, elementCoords_X, elementCoords_Y, zIndex, extraCloseEventCallback, stopAutoClose);
		this.crbgl();
		this.clpup();
		return false;
	}
}
