/**
 * Define variables
 */
var _js='/adm/js';
var _css='/adm/css';
var _img='/adm/i';

/**
 * Define browser
 */
isIE=(document.all)?true:false;

/**
 * Отладочная функция, выводит структуру заданного объекта
 * @param object obj
 */
function dump(obj){
	var d = "";
	for (x in obj){
		d += x+"="+obj[x]+"<br>";
	}
	if ( arguments[1] ){
		alert(d);
	} else {
		document.write(d);
	}
}


/**
 * Get element
 */
function $( id ){
	return document.getElementById(id);
}

/**
 * Отображением HTML элемента.
 * При повторном вызове показывает/скрывает элемент
 * @param string objId идентификатор HTML элемента
 * @param boolean mode режим none->block / block->none
 * @param boolean visible показать(true)/скрыть(false)
 */
function toggle(objId, mode, visible){
	if ( !objId ) return;
	var o = $(objId);
	if ( !o ) return 0;
	if ( visible=='none' ){ o.style.display='none'; return;}
	if ( visible=='block' ){ o.style.display='block'; return;}
	if ( arguments[1] ){
		mode1 = 'none';
		mode2 = 'block';
	} else {
		mode1 = 'block';
		mode2 = 'none';
	}
	if ( o.style.display==mode1 ){
		o.style.display = mode2;
	} else {
		o.style.display = mode1;
	}
}

/**
 * Require files
 */
function include(path){
	if(path.indexOf('.js')!=-1) document.write('<script'+' src="'+path+'" type="text/javascript"></script'+'>');
	else if(path.indexOf('.css')!=-1) document.write('<link rel="stylesheet"'+' href="'+path+'" type="text/css" />');
}

/**
 * Determine absolute coordinates of element
 */

function getPosition(obj, parent) {
        var x = 0;
        var y = 0;
        var obj = obj || false;
        while (obj) {
                x += obj.offsetLeft;
                y += obj.offsetTop;
                obj = obj.offsetParent;
                if (obj==parent) break;
        }
        return [x, y];
}

/**
 * Determine absolute cursor coordinates
 */
function getCursorPos(e){
	var p = new Array();
	if (isIE) {
    	p[0] = e.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
    	p[1] = e.clientY + document.documentElement.scrollTop + document.body.scrollTop;
  	} else {
    	p[0] = e.clientX + window.scrollX;
    	p[1] = e.clientY + window.scrollY;
  	}
  	return p;
}

/**
 * Set current Date and Time
 */
function setdate(o){
	var d = new Date();

	s = d.getFullYear() + "-";
	s += (d.getMonth() + 1) + "-";
	s += d.getDate() + " ";
	s += d.getHours() + ":";
	s += d.getMinutes() + ":";
	s += d.getSeconds();
	if (o) o.value = s;
	else return s;
}

function getdate(pattern){
	var d = new Date();
	var ret="";
	for(var i=0; i<pattern.length; i++){
		switch ( pattern.substr(i,1).toLowerCase() ) {
			case "y": ret+=d.getFullYear();	break;
			case "m": ret+=(d.getMonth()>8)?(d.getMonth()+1): '0'+(d.getMonth()+1);	break;
			case "d": ret+=(d.getDate()>9)?d.getDate(): '0'+d.getDate(); break;
			case "h": ret+=(d.getHours()>9)?d.getHours(): '0'+d.getHours(); break;
			case "i": ret+=(d.getMinutes()>8)?d.getMinutes(): '0'+d.getMinutes();	break;
			case "s": ret+=(d.getSeconds()>8)?d.getSeconds(): '0'+d.getSeconds();	break;
			default: ret+=pattern.substr(i,1); break;
		}
	}
	return ret;
}

/**
 * Handle special fields
 * 1. for enable this function the ID attribute by 'special' field must starts with 'ex:'
 * 2. initial value taken from attribute 'value'
 * 3. when data inputed sets attribute 'ready=true', if field is empty or equals initial value 'ready=false'
 * example: <input type='text' name='login' id='ex:login' value='login'>
 */

/** Inactive color change here */
var inactiveColor = 'silver';

function initSpecialFields(){
	var list = document.getElementsByTagName('input');
	for (var i=0; i<list.length; i++){
		if ( list[i].id.indexOf('ex:')!=-1 || list[i].getAttribute('alt')=="ex:"){
			list[i].initValue = list[i].value;
			list[i].style.color = inactiveColor;
			list[i].onfocus = function(e){
				if(this.value==this.initValue){this.value=''; this.style.color=''; this.ready=false;}
			};
			list[i].onblur = function(e){
				if (!this.value || this.value==this.initValue){this.value=this.initValue; this.style.color=inactiveColor; this.ready=false;}
			};
			if ( list[i].onkeyup ){
				var bak = list[i].onkeyup;
			 	list[i].onkeyup_bak = bak;
			}
			list[i].onkeyup = function(e){
				(this.value && this.value!=this.initValue)? this.ready=true: this.ready=false;
				if ( this.onchange ) this.onchange();
				if ( this.onkeyup_bak )this.onkeyup_bak(e);
			};
		}
	}
}
//initSpecialFields();

/**
 * Open new window
 */
function openWnd(path, winWidth, winHeight){
	winHeight=(winHeight)? winHeight: 500;
	winWidth=(winWidth)? winWidth: 500;
	var winLeft = Math.round((screen.width - winWidth) / 2);
	var winTop = Math.round((screen.height - winHeight) / 2);
  	var popupWin = window.open(path, "_blank", 
    	"width=" + winWidth + ",height=" + winHeight + ",status=yes,toolbar=no,menubar=no,scrollbars=yes,left="+ winLeft +",top="+ winTop +"");
	popupWin.focus();
	return false;
}

/**
 * Проверка правильности заполнения формы
 * Парсинг основан на значении атрибута `alt`, параметры разделяются символом `;`
 * Синтаксис: `Название поля;<параметр>;<параметр>;...`
 * Параметры:	`notNull` - поле является обязательным; 
 *				`email` - должно содержать правильную запись эл. почты
 * прим.: alt="Эл.почта;notNull;email"
 *
 * @param	HTMLFormObject		ссылка на форму для парсинга
 * @param	HTMLObject or ID	не обязательный, сслыка на HTML элемент для отображения сообщения
 *
 * @return boolean
 */
function parseForm(frm){

	var mes = [];
	
	var list = frm.getElementsByTagName('input');
	var txt = frm.getElementsByTagName('textarea');
	
	for (var i=0; i<txt.length; i++) list[list.length] = txt[i];
	
	for (var i=0; i<list.length; i++){
		
		if ( !list[i].alt ) continue;
		
		var params = list[i].alt.split(';');
		list[i].alias = params[0];
		
		for(j in params){
			
			switch ( params[j].toLowerCase() ){
				case 'notnull':
					if ( !list[i].value ){
						mes[mes.length] = 'заполните поле `'+list[i].alias+'`';
					}
					break;
				case 'email':
					re=/[\w-_]+@(\w+\.)+\w{2,4}$/;
					x = list[i].value.match(re);
					if ( list[i].value && !x ){
						mes[mes.length] = '`'+list[i].alias+'` не являеся правильным адресом зл. почты';
					}
					break;
				case 'len':
					if (!params[parseInt(j)+1]) break;
					var len=params[parseInt(j)+1];
					if (list[i].value.length<len) mes[mes.length] = 'длина поля `'+list[i].alias+'` не меньше '+len;
					break;
				/*default:
					list[i].alias = params[i];*/
				break;
			}
		}
	}
	
	if ( mes.length ){
		if ( arguments[1] ){
			obj=arguments[1];
			if ( typeof(obj)!='object' ){ obj=document.getElementById(obj); }
			if ( obj ){ obj.innerHTML = mes.join(',<br>'); }
		}else{
			alert(mes.join(', \r\n'));
		}
		return false;
	}
	
	return true;
}

