var userAgent = navigator.userAgent.toLowerCase();

DOMReady = (function(ie){
 var d = document;
 return ie ? function(c){
   var n = d.firstChild,
    f = function(){
     try{
      c(n.doScroll('left'))
     }catch(e){
      setTimeout(f, 10)
     }
    }; f()
  } : 
  /webkit|safari|khtml/i.test(navigator.userAgent) ? function(c){
   var f = function(){
     /loaded|complete/.test(d.readyState) ? c() : setTimeout(f, 10)
    }; f()
  } : 
  function(c){
   d.addEventListener("DOMContentLoaded", c, false);
  }
})(/*@cc_on 1@*/);

// Figure out what browser is being used
var browser = {
	version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
	safari: /webkit/.test( userAgent ),
	opera: /opera/.test( userAgent ),
	msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
	mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
};
function DOM(id){
	if (typeof(id)=='string'){
		return document.getElementById(id);
	}
	else {
		return id;
	}
}

function DOM_Show(id, display){	
	display=(display)?display:'block';
	if (div=DOM(id)){
		div.style.display=display;	
	}
}

function DOM_Hide(id){
	DOM_Show(id, 'none');
}

function DOM_Label(id){
	if (div= DOM(id)){
		if (div.style.display=='block'){
			div.style.display='none';
		}
		else {
			div.style.display='block';
		}
	}
}

function InputFocus(id){
	if (input=DOM(id)){
		input.focus();
	}
}

function InputSet(id, value){
	if (input=document.getElementById(id)){
		input.value=value;
	}
}

function InputUnset(id){
	InputSet(id, '');
}

function InnerText(id){
	
	if (div=document.getElementById(id)){
	
		return div.innerHTML.replace(/<(.*?)>/g, '');
	}
	else {
		return '';
	}
}

function X2(id){
	div=document.getElementById(id);
	height=2*parseInt(div.height);
	div.height=height+'px';	
}

function XHalf(id, max){
	div=document.getElementById(id);
	height=parseInt(div.height/2);
	if (!max||height>max){
	div.height=height+'px';	
	}
}

function Form_SetCheckboxes(Name, Form, do_check){	
	elts=Form.elements[Name];
	if (!elts) return false;
	elts_cnt=(typeof(elts.length) != 'undefined')
                  ? elts.length
                  : 0;
    if (elts_cnt) {
        for (var i = 0; i < elts_cnt; i++) {
            elts[i].checked = do_check;
        } // end for
    } else {
        elts.checked        = do_check;
    } // end if... else
    return true;
}


function AttachEvent(element, name, observer, useCapture) {
	element=DOM(element);
	if (name=='scroll'){
		//it's fucken scroll event:
		if ( element.addEventListener )
			element.addEventListener( (browser.mozilla ? 'DOMMouseScroll' : 'mousewheel'), observer, false);
		else
			element.onmousewheel = observer;
	}
	else {
	    if (element.addEventListener) {
	      element.addEventListener(name, observer, useCapture);
	    } else if (element.attachEvent) {
	      element.attachEvent('on' + name, observer);
	    }
	}
}

function DetachEvent(element, name, observer, useCapture) {
    useCapture = useCapture || false;
	var name;
    if (name == 'keypress' &&
        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
        || element.detachEvent))
      name = 'keydown';

    if (element.removeEventListener) {
      element.removeEventListener(name, observer, useCapture);
    } else if (element.detachEvent) {
      try {
        element.detachEvent('on' + name, observer);
      } catch (e) {}
    }
}

function OpAlert(text){
	alert(text);
}

function OpConfirm(text){
	return confirm(text);
}

function getFirstChild(node){
	for (i=0;i<node.childNodes.length;i++){
		if(node.childNodes[i].tagName) return node.childNodes[i];
	}
}


function setInputValue(sender, name, form){
	if (!form) form=0;	
	if (input=document.forms[form][name]){
		input.value=(sender.textContent)?sender.textContent:sender.nodeValue;
	}
	return false;
}

function Display(sender, event, div){
	//top=sender.offsetTop+sender.offsetHeight
	//left=sender.offsetLeft;
	//div.style.top=top;
	//alert(div.style.top);
	div.style.display='block';
}

function AjaxRequest(sender, target, action){
	if (typeof(target)=='string'){
		trgt= document.getElementById(id)
	}
	else {
		trgt= target;
	}
	if (!trgt) return true;
	href= sender.getAttribute('alt')
	if (!href){
		return true;
	}
	
	req = new JsHttpRequest();
	req.onreadystatechange = function() {
		if (req.readyState == 4) {
			if (req.responseJS) {
				if (req.responseJS.Error){
					//ïÛÉÂËÁ:
					sender.innerHTML=req.responseJS.Message;
					detachClass(sender, 'loading');
					attachClass(sender, 'error');
					sender.setProperty('alt', '');
				}
				else {
					if (action=='delete'){
						trgt.parentNode.removeChild(trgt);
					}
					else {
						trgt.innerHTML=req.responseJS.Message;
					}
				}
				
			}			
		}
	}
	req.caching = false;
	req.loader='script';
	// Prepare request object.
	req.open('GET', href, true);	
	POST=[];
	attachClass(sender, 'loading');
	req.send(POST);
	return false;	
}

function AjaxRequest_Callback(href, POST, callback,Argv){
	var req = new JsHttpRequest();
	req.onreadystatechange = function() {
		if (req.readyState == 4) {			
			callback(req.responseJS);
		}
	}
	req.caching = true;
	req.loader='script';
	// Prepare request object.
	req.open('GET', href, true);	
	req.send(POST);
}

function attachClass(TargetElement, className){
	target=DOM(TargetElement);
	if (!target) return false;
	
	var re= new RegExp('\\b'+className+'\\b');
	if (!re.test(target.className)){
		target.className+=' '+className;
	}
}

function detachClass(TargetElement, className){
	target=DOM(TargetElement);
	if (!target) return false;
	
	var re= new RegExp('\\b'+className+'\\b');	
	target.className=target.className.replace(re, '');
}

function DOM_Stop(event){
	if (!event) event=window.event;
	if (!event) return false;
	
	if (!event.preventDefault) {
	event.cancelBubble = true;
	event.returnValue = false;
	}
	else {
	event.preventDefault();
	}	
	return false;
}

function DOM_Tags(TagName, parentNode, asHash, r){
	if (!parentNode) parentNode=document;
	var ret=[];
	TagName=TagName.toUpper();
	if (r) ret=parentNode.getElementsByTagName(TagName);
	else {

		for (i=0; i<parentNode.childNodes.length; i++){
			
		}
	}
	if (asHash){
		h= new Array();
		for (i=0; i<ret.length; i++){
			h[ret[i][asHash]]=ret[i];
		}
		return h;
	}
	else {
		return ret;
	}
}

var DOM_Listeners= new Array();
function DOM_Listen(event, listener){
	if (!DOM_Listeners[event]) DOM_Listeners[event]= new Array();
	DOM_Listeners[event][DOM_Listeners[event].length]=listener;
}

function DOM_Event(event, sender){
	ret=true;
	var i;
	if (DOM_Listeners[event]){		
		for (i=0; i<DOM_Listeners[event].length; i++){			
			if (DOM_Listeners[event][i].DispatchEvent){
				ret&=DOM_Listeners[event][i].DispatchEvent(event, sender);			
			}
		}		
	}
	return ret;
}

var IframeLoaderListeners= new Array();
function OnIframeLoaded(listener, id){
	if (IframeLoaderListeners[listener]){
		IframeLoaderListeners[listener].OnIframeLoaded(id);
	}
}

function DOM_Create(type, id, inner, className, Properties){
	ret=document.createElement(type);
	ret.id=id;
	ret.className=className;
	
	if (inner){
		if (typeof(inner)=='string'||typeof(inner)=='number'){
			ret.innerHTML=inner;
		}
		else {
			for (i in inner){
				ret.appendChild(inner[i]);
			}
		}
	}
	if (Properties){
		for (k in Properties){
			ret[k]=Properties[k];
		}
	}
	
	return ret;
}

var logDiv;

function Log(str){
	if (!logDiv){
		logDiv=DOM_Create('div','log');
		document.body.appendChild(logDiv);
	}
	logDiv.innerHTML+='<br />'+str;
}

function DOM_OnScroll(element, handler){
	AttachEvent(element, 'scroll',handler,false);	
}

var DOM_Bubbles=[];
function DOM_Bubble(element){
	if (DOM_Bubbles[element.id]) return DOM_Bubbles[element.id];
	
	if (DOM_Bubbles[element.id]=DOM(element.id+'_bubble')){
		return DOM_Bubbles[element.id];
	}
	else {
		DOM_Bubbles[element.id]=DOM_Create('div', element.id+'_bubble','&nbsp;');
		element.parentNode.parentNode.appendChild(DOM_Bubbles[element.id]);
		return DOM_Bubbles[element.id];
	}
}
var KeyCodes=(document.all)?{10:'enter'}:{13:'enter'};
function OnCtrlKey(event, handlers){
	if (!event.ctrlKey){
		return;
	}
	handler=handlers[event.keyCode];
	if (!handler) handler=handlers[KeyCodes[event.keyCode]];
	
}