var DEBUG = false;
function gebi(id){ return document.getElementById(id); }
function gebt(obj, tag){ return obj.getElementsByTagName(tag); }
function dce(data){	
	//this.set = function(el, data, property){ if(data.hasOwnProperty(property)) eval('el.'+property+'=data.'+property); }
	var props = ['className', 'id', 'href', 'src', 'title',	'alt', 'type', 'innerHTML', 'value', 'text', 'label', 'selected'];
	var el = document.createElement(data.tag);	
	for(var i=0; i<props.length; i++){
		//this.set(el, data, props[i]);
		if(data.hasOwnProperty(props[i])){
			//el.attributes[props[i]].value=eval('data.'+props[i]);
			eval('el.'+props[i]+'=data.'+props[i]);
		}
	}
	if(data.hasOwnProperty('parent')) data.parent.appendChild(el);
	return el; 
}
function wlog(msg){
	dce({tag:'div',className:'sep',parent:document.body});	
	dce({tag:'div',innerHTML:msg,parent:document.body});	
}
Core={
	MAX_ELEMENT_COUNT:1000,
	toLog:function(module, e){				
		if (DEBUG) {
			var str = module+'. Error = '+ e;
			wlog(str);
			//alert(str);
			window.status=str;
			throw(e);
		}
	},
	addEvent:function(elm, evType, fn, useCapture){
		if (elm.attachEvent) {
			var r = elm.attachEvent('on' + evType, fn);
			return r;
		} else if (elm.addEventListener){
			elm.addEventListener(evType, fn, false);
			return true;
		} else {
			elm['on' + evType] = fn;
		}		
	},
	removeEvent:function(elm, evType, fn){
		if (elm.addEventListener){
			elm.removeEventListener(evType, fn, false);			
		} else if (elm.attachEvent) {
			elm.detachEvent('on'+evType, fn);			
		}
	},	
	getTarget:function(e){
		var target = window.event ? window.event.srcElement : e ? e.target : null;
		if (!target){return false;}
		while(target.nodeType!=1 && target.nodeName.toLowerCase()!='body'){
			target=target.parentNode;
		}
		return target;
	},
	getJSONFromServer:function(url, callback, formPost){
		var xmlHttp;
		if (typeof XMLHttpRequest!='undefined'){								// Firefox, Opera 8.0+, Safari
	    xmlHttp = new XMLHttpRequest();
		} else {																								// Internet Explorer
			try {
				xmlHttp=new ActiveXObject('Msxml2.XMLHTTP');
			} catch (e) {
				try	{
					xmlHttp=new ActiveXObject('Microsoft.XMLHTTP');
				} catch (e) {
					alert('Your browser does not support AJAX!');
					return false;
				}
			}
		}	 
		xmlHttp.onreadystatechange = function(){
			if(xmlHttp.readyState==4){
				try{
					if(callback!=null){
						callback(eval('('+xmlHttp.responseText+')'));
					}
				} catch (e) { Core.toLog('Core.onreadystatechange', e); }
			}
		}	
		try{
			//alert(url);
			xmlHttp.open('POST', url, true);
			xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
			xmlHttp.setRequestHeader('Content-length', formPost.length);
			xmlHttp.setRequestHeader('Connection', 'close');
			xmlHttp.send(formPost);
		}
		catch(e) { Core.toLog('Core.getJSONFromServer', e); }	
	},
	appendLoadDiv:function(id){	
		var parent = gebi(id);
		parent.innerHTML = '';
		var div = dce({tag:'div',className:'load'});	
		var img = dce({tag:'img',id:'imgLoading',src:'i/loading.gif',parent:div});
		parent.style.height = 'auto';
	},
	removeLoad:function(id){
		var div = gebi(id);
		div.innerHTML = '';
		div.style.height = '';
	},
	getIdAfter:function(sep, id){
		var pos = id.lastIndexOf(sep);
		if (pos>-1){
			return id.substr(pos+1);
		} else {
			return '';
		}
	},
	setDisplay:function(id, style){
		var item = gebi(id);
  	if (item!=null) {
    	item.style.display=style;
	  }
	},
	isShowing:function(id){
		var bRes = false;
		var item = gebi(id);
	  if (item!=null){ bRes = !(item.style.display=='none' || item.style.display==''); }
		return bRes;
	},
	/*=====================================================================================*/
	getPos:function(obj){
		var left = 0;	var top = 0; var h = 0;
    var tmp = obj;
    while(tmp){
    	left += tmp.offsetLeft;
      top += tmp.offsetTop;
      tmp=tmp.offsetParent;
    }
		
    tmp = obj;		
    while(tmp){
    	if (typeof tmp.scrollTop!='undefined') top -= tmp.scrollTop;
	    tmp=tmp.parentNode;
    }		
		h = obj.clientHeight==0 ? obj.offsetHeight : obj.clientHeight;
		if(window.pageYOffset!=undefined){
			h += window.pageYOffset;
		} else {
			h += document.documentElement.scrollTop;
		}		
		return { left : left, top : top, width : obj.width, height : h, bottom : (top+h), border:obj.style.borderWidth};
	},
	getDocSize:function(){
		var height = document.documentElement.clientHeight; // FF, Safari, IE
		if(height < document.body.scrollHeight) // Opera
			height = document.body.scrollHeight;
		return { height : height };
	},
	getRandomColor:function(){
		var result = '';
		var r = Math.random();
		r = Math.ceil(r*255);
		if(r<15) result += '0';
		result += r.toString(16);
		var g = Math.random();
		g = Math.ceil(g*255);
		if(g<15) result += '0';
		result += g.toString(16);
		var b = Math.random();
		b = Math.ceil(b*15);
		if(b<15) result += '0';
		result += b.toString(16);
		return result.toUpperCase();
	},
	submitViaEnter:function(evt){
		evt = (evt) ? evt : event;
		var target = (evt.target) ? evt.target : evt.srcElement;
		var form = target.form;
		var charCode = (evt.charCode) ? evt.charCode : ((evt.which) ? evt.which : evt.keyCode);
		if (charCode==13){
			if (validateForm(form)){
				form.submit();
				return false;
			}
		}
		return true;
	}
}
Function.prototype.extend = function(superClass) {
	var Inheritance = function(){};
	Inheritance.prototype = superClass.prototype;
	this.prototype = new Inheritance();
	this.prototype.constructor = this;
	this.superClass = superClass;
}
function formatDate(date){
	var res = '';
	if (date.getHours()<10) res += '0'
	res += date.getHours();
	res += ':'
	if (date.getMinutes()<10) res += '0'
	res += date.getMinutes();
	var d = new Date();
	//если текущий день
	if (d.getDate()==date.getDate() && d.getMonth()==date.getMonth() && d.getFullYear()==date.getFullYear()){		
	} else {//любой другой
		res += ' ';		
		if (date.getDate()<10) res += '0';
		res += date.getDate();
		res += '.';
		if ((date.getMonth()+1)<10) res += '0';
		res += date.getMonth()+1;
		//если текущий месяц
		if (d.getMonth()==date.getMonth() && d.getFullYear()==date.getFullYear()){
		} else {
			res += '.';
			res += date.getFullYear().toString().substr(2,4);
		}
	}
	return res;	
}
function formatMin(min){
	var res = '';
	var d = h = m = rest = 0;
	//определить кол-во дней
	d = Math.floor(min/(60*24));
	rest = min - d*60*24;
	//определить кол-во часов
	h = Math.floor(rest/60);
	//определить кол-во минут
	m = Math.floor(rest - h*60);
	if(d>0){
		res = d+' ';
	}
	if(h>0){
		res += h+':';
	} else {
		res += '0:';
	}
	if(m<10 && res!=''){
		res += '0';	
	}
	res += m;
	return res;	
}
