onDomReady = function (fn, ctx){
    	var ready, timer;
    	var onStateChange = function(e){
    		if(e && e.type == "DOMContentLoaded"){
    			fireDOMReady();
    		}else if(e && e.type == "load"){
    			fireDOMReady();
    		}else if(document.readyState){
    			if((/loaded|complete/).test(document.readyState)){
    				fireDOMReady();
    			}else if(!!document.documentElement.doScroll){
    				try{
    					ready || document.documentElement.doScroll('left');
    				}catch(e){
    					return;
    				}
    				fireDOMReady();
    			}
    		}
    	};
    	
    	var fireDOMReady = function(){
    		if(!ready){
    			ready = true;
    			fn.call(ctx || window);
    			if(document.removeEventListener)
    				document.removeEventListener("DOMContentLoaded", onStateChange, false);
    			document.onreadystatechange = null;
    			window.onload = null;
    			clearInterval(timer);
    			timer = null;
    		}
    	};
    	
    	if(document.addEventListener)
    		document.addEventListener("DOMContentLoaded", onStateChange, false);

    	document.onreadystatechange = onStateChange;
    	timer = setInterval(onStateChange, 5);
    	window.onload = onStateChange;
}

function ge(elem){ if (typeof elem == 'string') return document.getElementById(elem); else return elem; }

function createLangBox(){
    if (cityValues){
        _cityValues_combo = new ComboBox('changeLanguage', cityValues, 'http://ikaeasy.ru/index.php?language=');
    }
}

function getElementPosition(elem)
{
    elem = ge(elem);    
    var w = elem.offsetWidth;
    var h = elem.offsetHeight;
    var l = 0;
    var t = 0;

    while (elem)
    {
        l += elem.offsetLeft;
        t += elem.offsetTop;
        elem = elem.offsetParent;
    }

    return {"left":l, "top":t, "width": w, "height":h};
}

function setStyle(elem, _style){
    elem = ge(elem);
    
    if (typeof _style == 'object'){
        for(i in _style){
            if ((!(/z-?index|font-?weight|opacity|zoom|line-?height/i).test(i)) && (typeof _style[i] == 'number')) {
                _style[i] = _style[i] + 'px';
            }

            elem.style[i] = _style[i];
        }
    }
}

function addEvent( obj, type, fn )
{
    if (obj.addEventListener)
        obj.addEventListener( type, fn, false );
    else if (obj.attachEvent)
    {
        obj["e"+type+fn] = fn;
        obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
        obj.attachEvent( "on"+type, obj[type+fn] );
    }
}

function removeEvent( obj, type, fn )
{
    if (obj.removeEventListener)
        obj.removeEventListener( type, fn, false );
    else if (obj.detachEvent)
    {
        obj.detachEvent( "on"+type, obj[type+fn] );
        obj[type+fn] = null;
        obj["e"+type+fn] = null;
    }
}

function removeClass(obj, name) {
  obj=ge(obj);
  if (obj && hasClass(obj, name)) obj.className = obj.className.replace((new RegExp('(\\s|^)' + name + '(\\s|$)')), ' ');
}

function hasClass(obj, name) {
  obj=ge(obj);
  return obj && (new RegExp('(\\s|^)' + name + '(\\s|$)')).test(obj.className);
}

function addClass(obj, name) {
  obj=ge(obj);
  if (obj && !hasClass(obj, name)) obj.className = (obj.className ? obj.className + ' ' : '') + name;
}
