/***************************************************************************************
Sitefactor.JS.Library
Copyright 2005 Kirill Boldyrev, http://sitefactor.ru/
***************************************************************************************/
function showImg(img){ // окрывает картинку в поп-апе
	var win = window.open('/image.html?' + img, "imgpopup", "status=no, menubar=no, toolbar=no, resizable=yes, width=200, height=200"); win.focus(); return false;
}
function winPop(uri, name, w, h){ // открывает поп-ап окно: ="return popupWin('/target.html', 'wnd', [600, 500]);"
	var ie = (document.all)? true : false; var nn6 = (!ie && document.getElementById)? true : false;
	var nn4 = (document.layers)? true : false; var posCode = ''; if (nn4 || nn6 || ie) {
		if ( (screen.height < 481) && (h > 400) ) { hgt = 400 }
		posX = Math.round((screen.width - w) / 2); posY = Math.round((screen.height - h) / 2);
		posCode = (nn4 || nn6)? ",screenX="+posX+",screenY="+posY : ",left="+posX+",top="+posY;
	} popupedWin = window.open(uri, name || "pop", "status=no, menubar=no, toolbar=no, resizable=yes, width=" + w + ", height=" + h + posCode); popupedWin.focus(); return false;
}
function validateForm(form){ // проверка формы
// в форе в обязательных полях определять атрибуты tip и errmsg
	var fields = form.getElementsByTagName('input');
	for (var i = 0; i < fields.length; i++) { var el = fields.item(i); if(el.type == 'text') {
		var tip = el.getAttribute('tip'); var errm = el.getAttribute('errmsg');
		switch(tip){
			case "txt": if(!el.value) { errFormField(el, errm); return false; } break; // наличие данных
			case "email": if(!validEmail(el.value)){ errFormField(el, errm); return false; } break; // e-mail
			case "tel": if(!el.value) { errFormField(el, errm); return false; } break; // корректность телефона
			default: // не требует проверки 
		}
	} } return true;
}
function applyClass(el, cName){ el.className += ' ' + cName; }// добавление класса элементу
function removeClass(el, cName){ el.className = el.className.replace( new RegExp(cName,'g'), ''); } // удаление класса 
function errFormField(el, errmsg) { // подсветка поля с ошибкой
	el.style.backgroundColor = "#FFCCCC"; el.focus(); if(errmsg) alert(errmsg);
}
function validEmail(eml){ return /^[^\s]+@([a-z0-9_\-]+\.)+[a-z]{2,4}$/i.test(eml); } // проверка корректности e-mail
function validPassword(pwd){ return /^[a-zA-Z0-9]{4,8}$/i.test(pwd); } // проверка корректности пароля

function JSHttpRequest(){} // JSHttpRequest service object *.
(function(){
	var count = 0; var pending = {};
	JSHttpRequest.dataReady = function(id, obj, alerts){ // callbak ответом сервера
		var th = pending[id]; if(th) th._dataReady(obj, alerts); else alert("JSHttpRequest: unknown object id: " + id);
	}
	JSHttpRequest.prototype = { // standard public interface
		respData:{}, respAlerts:"", readyState:0, status:200, _span:null, _url:"/jshttprequest.html",
		callback:function(data, alerts){ Debug.show(data); }, // обработчик ответа сервера
		abort:function(){ // заглушка на проблему с запросом
			this.readyState = 0; var span = this._span; if(span){ 
				this._span = null; setTimeout(function(){ span.parentNode.removeChild(span); }, 100); 
			} return false;
		},
		onreadystatechange:function(){}, // обработчик по возврату данных - определять в вызове или задать callback
		open:function(method, url, asyncFlag, username, password){ // только для соответствия интерфейсу XMLHttp !
			if(method != 'GET'){ alert('JSHttp request supported only GET method !'); return false; }
			this._url = (url) ? url : this._url; return true;
		},
		send:function(method, data){ // отправка данных, получает сигнатуру метода сервера и объект (!) данных запроса
			var id = count++; pending[id] = this; 
			function prepareQuery(obj){ // собирает объект в query-string
				var q = ""; for (i in obj) q += "&" + i + "=" + obj[i]; return q;
			}
			var href = this._url + '?' + method + prepareQuery(data) + '&OBJID=' + id;
			with(document){
				var span = body.appendChild(createElement("SPAN")); span.style.display = 'none';
				span.innerHTML = 'Text from MSIE min load page bytes bug !!!<script></' + 'script>'; this._span = span;
				setTimeout(function(){
					var s = span.getElementsByTagName("script")[0]; s.language = "JavaScript"; s.src = href;
				}, 10);
			} return true;
		},
		_dataReady:function(obj, alerts){ // callback при возврате ответа сервера
			with(this){
				if(obj || alert){ readyState = 4; responseData = obj; } 
				else { readyState = 0; responseData = {}; responseError = alerts; }
				this.callback(obj, alerts); var span = this._span; // without setTimeout - chash in IE 5.0!
				if(span){ this._span = null; setTimeout(function(){span.parentNode.removeChild(span);}, 100); }
			}
		}
	}
})();
function AJAX(method, obj, callback){ // ajax wrapper from JSHTTPRequest
	var req = new JSHttpRequest(); req.callback = callback || function(){ alert('dummy'); }
	req.send(method, obj); return true;
}

var Debug = new function(){ // методы отладки
	this.show = function(o){ var t = ""; if(o){ for(var i in o){t += i + ": " + o[i] + "\n";} alert(t); } }
}
function dummy(){} // заглушка функции онлоада

var Lib = new function(){
	this.getCookie = function(name, asArray){ // возвращает значение куки по имени
		var dc = document.cookie; var prefix = name + "="; var begin = dc.indexOf("; " + prefix);
		if(begin == -1){ begin = dc.indexOf(prefix); if (begin != 0) return null; } else begin += 2;
        var end = document.cookie.indexOf(";", begin);
		if (end == -1) end = dc.length; var ret = unescape(dc.substring(begin + prefix.length, end));	
		return (asArray) ? eval("[" + ret + "]") : ret;
	}
	this.setCookie = function(name, data, expiries, path, host, secure){ // ставит куку с заданным именем
	// ДАННЫЕ ПРИХОДЯТ В МАССИВЕ, експирес - в днях !
		var expDate = new Date(); expDate.setDate(expDate.getDate() + expiries);
		document.cookie = name + "=" + ((data && data.length) ? data.join(",") : "") + 
		((expiries) ? "; expiries=" + expDate.toGMTString() : "") +
		((path) ? "; path=" + path : "") + 
		((host) ? "; domain=" + host : "") + 
		((secure) ? "; secure" : "");
	}
}
