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) {
    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){
	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 (document.attachEvent) {		
		event.cancelBubble = true;
		event.returnValue = false;		
	}
	else {		
		event.preventDefault();		
	}
	return false;
}

function DOM_Tags(TagName, parentNode, asHash){
	if (!parentNode) parentNode=document;
	ret=parentNode.getElementsByTagName(TagName);
	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){	
	if ( element.addEventListener )
		element.addEventListener('DOMMouseScroll' , handler, false);
	else
		element.onmousewheel = handler;
}

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];
	}
}

function getCookie( name ) {
	var start = document.cookie.indexOf( name + '=' );
	var len = start + name.length + 1;
	if ( ( !start ) && ( name != document.cookie.
substring( 0, name.length ) ) ) {
		return null;
	}
	if ( start == -1 ) return null;
	var end = document.cookie.indexOf( ';', len );
	if ( end == -1 ) end = document.cookie.length;
	return unescape( document.cookie.substring( len, end ) );
}
	
function setCookie( name, value, expires, path, domain, secure ) {
	var today = new Date();
	today.setTime( today.getTime() );
	if ( expires ) {
		expires = expires * 1000 * 60 * 60 * 24;
	}
	var expires_date = new Date( today.getTime() + (expires) );
	document.cookie = name+'='+escape( value ) +
		( ( expires ) ? ';expires='
+expires_date.toGMTString() : '' ) +
//expires.toGMTString()
		( ( path ) ? ';path=' + path : '' ) +
		( ( domain ) ? ';domain=' + domain : '' ) +
		( ( secure ) ? ';secure' : '' );
}
	
function deleteCookie( name, path, domain ) {
	if ( getCookie( name ) ) document.cookie = name + '=' +
			( ( path ) ? ';path=' + path : '') +
			( ( domain ) ? ';domain=' + domain : '' ) +
			';expires=Thu, 01-Jan-1970 00:00:01 GMT';
}
