
var bDropDownVisible = false;
document.onmouseup = releasemouse;
document.onmousedown = pressmouse;
document.onclick = clickmouse;
document.onmousemove = mouseMoving;
document.onkeyup = releaseKey;
window.onresize = windowsResize;
var windowMoving = false;
var windowResizing = false;
var objectMoving = false;
var objectBeginMove = false;
var loadHandlers = new Array();
var mouseHandlers = new Array();
var mouseHandlerEdit = false;
var MOUSE_DOWN		=	   1;
var MOUSE_CLICK		=	   2;
var MOUSE_UP		=	   4;
var MOUSE_MOVE		=	   8;
var undef = "undefined";
var loadHaveLoaded = false;
var classes = new Array();


JSv=parseInt(navigator.appVersion);
JSw=navigator.appName;
var browser = "";
function geWebblasare(){
	if (navigator.userAgent.indexOf("Opera") != -1){
		return "opera";
	}
	if (JSw=="Netscape"){
		return "netscape";
	}else if (JSw=="Microsoft Internet Explorer"){
		return "iexplorer";
	}else{
		return annan;
	}
}
browser = geWebblasare();
function object(id){
	if(browser == "iexplorer"){
		return document.all[id];
	}else if(browser == "netscape"){
		return document.getElementById(id);
	}else if(browser == "opera"){
		return document.getElementById(id);
	}
}


function windowsResize(e){
    if(typeof(windows) == undef) return;
	for(w in windows){
		if(windows[w].windowState == WND_STATE_MAXIMIZED){
			windowSetMaximized(w);
		}
	}
}

function encode_utf8( s ){
  return unescape( encodeURIComponent( s ) );
}

function decode_utf8( s ){
  return decodeURIComponent( escape( s ) );
}

ce = function(string){
	return document.createElement(string);
}
ca = function(text, href){
	var a = document.createElement("a");
	a.href = href;
	a.appendChild(document.createTextNode(text));
	return a;
}

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

String.prototype.strrchr = function(needle) {
    // http://kevin.vanzonneveld.net
    // +   original by: Brett Zamir
    // *     example 1: strrchr("Line 1\nLine 2\nLine 3", 10).substr(1)
    // *     returns 1: 'Line 3'
    var pos = 0;
    
    if (typeof needle !== 'string') {
        needle = String.fromCharCode(parseInt(needle, 10));
    }
    needle = needle[0];
    pos = this.lastIndexOf(needle);
    if (pos === -1) {
        return false;
    }
 
    return this.substr(pos);
}


Array.prototype.keyInArray = function (key){
    var k;
    for(k in this){
        if(k == key){
            return true;
        }
    }
    return false;
};

Array.prototype.clear = function(){
	this.length = 0;
};

function chr(ascii){
	return String.fromCharCode(ascii);
}

Element.prototype.appendChild_SC = function(newObj){
	handleClasses(newObj);
	this.appendChild(newObj);
}

window.onload = documentLoaded;

function cssFindRule(selector){
	for(var i = 0; i < document.styleSheets.length;i++){
		var styleSheet = document.styleSheets[i];
		if(styleSheet != undefined){
			var rules;
			if(browser == "iexplorer"){
				rules = styleSheet.rules;
			}else{
				rules = styleSheet.cssRules;
			}
			for(var j = 0; j < rules.length; j++){
				var rule = rules[j];
				if(rule.selectorText != null && rule.selectorText != undefined){
					if(rule.selectorText.replace(/\\5p/g, "_") == selector){
						return rule;
					}
				}
			}
		}
	}
	return null;
}

function handleClasses(element){
    for(var a = 0; a < element.childNodes.length; a++){
    //for (a in element.childNodes){
        //dl(deo, a+":> "+wnd.childNodes[a].nodeName);
        //alert(wnd.childNodes[a].nodeName);
        if(typeof (element.childNodes[a]) == undef)continue;
        var nodeName = null;
        if(typeof (element.childNodes[a].nodeName) != undef){
            nodeName = element.childNodes[a].nodeName;
            if(typeof (element.childNodes[a].getAttribute) != undef){
                var tNodeName = element.childNodes[a].getAttribute('exnode');
                if(tNodeName != null)nodeName = tNodeName.toUpperCase();
            }
        }
        if(nodeName == null)continue;
        nodeName = nodeName.toUpperCase();
		if(classes.keyInArray(nodeName)){
            new classes[nodeName](element.childNodes[a]);
        }else if(element.childNodes[a].childNodes.length > 0){
            handleClasses(element.childNodes[a]);
        }
    }
}

function registerClass(tagName, classHandler){
    tagName = tagName.toUpperCase();
    if(!classes.keyInArray(tagName)){
        classes[tagName] = classHandler;
    }
}

function addLoadHandler(func){	
	if(!loadHaveLoaded){
		for(var i = 0; i < loadHandlers.length; i++){
			if(loadHandlers[i] == func){
				return;
			}
		}
		loadHandlers.push(func);
	}else{
		func();
	}
}
function runLoadFunctions(){
	for(var i = 0; i < loadHandlers.length; i++){
		loadHandlers[i]();
	}
}

function documentLoaded(e){
	loadHaveLoaded = true;
	runLoadFunctions();
}

function isset(v){
	if(typeof(v) == undef){
		return false;
	}	return true;
}
function isEnumSet(val, m_enum){
	var i = Math.floor(Math.log(val) / Math.log(2)) + 1;
	var l = new Array();
	if(m_enum > val) return false;
	while(val > 0){
		if(val - (x = Math.pow(2, i)) > 0){ l[x] = true; val-= x; }
		else{ l[x] = false; }
		i--;
		if(i == -1) break;
	}
	if(l[m_enum] == true) return true;
	return;
}
function mouse_enumList(val, m_enum){
	var i = Math.floor(Math.log(val)/Math.log(2)); //Math.pow(2, x)
	var l = new Array();
	while(val > 0){
		if(val - (x = Math.pow(2, i)) >= 0){ l[x] = true; val-= x; }
		else{ l[x] = false; }
		//alert(x+" . "+val);
		i--;
		if(i == -1) break;
	}
	return l;
}
function pressmouse(e){
    if(!mouseHandlerEdit){
        //for(a in mouseHandlers){
		for(var i = 0; i < mouseHandlers.length; i++){
            if(mouseHandlers[i][1] == true){
                eval(mouseHandlers[i][0])(e);
                //mouseHandlers[a][0](e);
            }
        }
    }
}
function clickmouse(e){
    if(!mouseHandlerEdit){
		for(var i = 0; i < mouseHandlers.length; i++){
            if(mouseHandlers[i][2] == true){
                eval(mouseHandlers[i][0])(e);
                //mouseHandlers[a][0](e);
            }
        }
    }
}
function releasemouse(e){
    //alert("tjoho2");
	if(bDropDownVisible == true){
		if (document.layers) {
			l_mx = e.pageX;
			l_my = e.pageY;
		} else if (document.all) {
			l_mx = window.event.clientX+document.body.scrollLeft;
			l_my = window.event.clientY+document.body.scrollTop;
		} else if (document.getElementById) {
			l_mx = e.pageX;
			l_my = e.pageY;
		}
		DoDropDown(l_mx, l_my);
	}
	if(!mouseHandlerEdit){
		for(var i = 0; i < mouseHandlers.length; i++){
			if(mouseHandlers[i][3] == true){
				eval(mouseHandlers[i][0])(e);
				//mouseHandlers[a][0](e);
			}
		}
	}
	if(windowMoving != 'undefined' && windowMoving == true){
		dragStop();
		windowMoving = false;
	}
	if(windowResizing != 'undefined' && windowResizing == true){
		resizeWindowStop();
		windowResizing = false;
	}
	if(objectMoving != 'undefined' && (objectMoving == true || objectBeginMove == true)){
		dragiconStop();
		objectMoving = false;
		objectBeginMove = false;
	}
}
function releaseKey(e){
	if(e.keyCode == undefined) return;
    if(e.keyCode == e.DOM_VK_TAB){
        if(bDropDownVisible){
            hideDropDown();
        }
    }
}
function releaseKey(e){
	/*o = object('debugfield');
	o.value = "";
	for(a in e){
		if(e[a] == "[object HTMLInputElement]" || e[a] == "[object HTMLDocument]"){
			o.value+="***  "+a + "->" + e[a].id + "\n";
		}else{
			o.value+="***  "+a + "->" + e[a] + "\n";
		}
	}*/
	if(e.keyCode == e.DOM_VK_TAB){
		if(bDropDownVisible){
			hideDropDown();
		}
	}
}
function registerMouseHandler(uF, mode){
	if(typeof(mode) == 'undefined') mode = MOUSE_CLICK;
	mouseHandlerEdit = true;
	var bF = false;
	//alert("Pass1");
	for(var i = 0; i < mouseHandlers.length; i++){
		if(mouseHandlers[i][0] == uF){
			bF = i;
			break;
		}
	}
	//alert("Pass2");
	if(bF != false){
		mouseHandlers.splice(bF);
	}
	var l = mouse_enumList(mode);
	//alert(l);
	//alert("mouse_enumList: "+l.toString());
	if(typeof(l[MOUSE_DOWN]) == 'undefined') l[MOUSE_DOWN] = false;
	if(typeof(l[MOUSE_CLICK]) == 'undefined') l[MOUSE_CLICK] = false;
	if(typeof(l[MOUSE_UP]) == 'undefined') l[MOUSE_UP] = false;
	if(typeof(l[MOUSE_MOVE]) == 'undefined') l[MOUSE_MOVE] = false;
	mouseHandlers.push(new Array(uF, l[MOUSE_DOWN], l[MOUSE_CLICK], l[MOUSE_UP], l[MOUSE_MOVE]));
	//alert("Registring: "+uF+" as -> "+mouseHandlers[mouseHandlers.length - 1]);
	//alert("Pass3");
	mouseHandlerEdit = false;
	return false;
}
function mouseMoving(e){
	if (document.layers) {
		l_pmx = e.pageX;
		l_pmy = e.pageY;
	} else if (document.all) {
		l_pmx = window.event.clientX+document.body.scrollLeft;
		l_pmy = window.event.clientY+document.body.scrollTop;
	} else if (document.getElementById) {
		l_pmx = e.pageX;
		l_pmy = e.pageY;
	}
	if(windowMoving != 'undefined' && windowMoving == true){
		//o = object(windowMoving_obj);
		selector.style.left = rpx(selector.style.left) + l_pmx - windowMoving_sx;
		selector.style.top = rpx(selector.style.top) + l_pmy - windowMoving_sy;
		windowMoving_sx = l_pmx;
		windowMoving_sy = l_pmy;
	}
	if(windowResizing != 'undefined' && windowResizing == true){
		//o = object(windowMoving_obj);
		selector.style.width = rpx(selector.style.width) + l_pmx - windowResizing_sx;
		selector.style.height = rpx(selector.style.height) + l_pmy - windowResizing_sy;
		windowResizing_sx = l_pmx;
		windowResizing_sy = l_pmy;
	}
	if(objectMoving != 'undefined' && objectMoving == true){
		//o = object(windowMoving_obj);
		dragIcon.style.left = rpx(dragIcon.style.left) + l_pmx - objectMoving_sx;
		dragIcon.style.top = rpx(dragIcon.style.top) + l_pmy - objectMoving_sy;
		objectMoving_sx = l_pmx;
		objectMoving_sy = l_pmy;
	}
	if(objectMoving != 'undefined' && objectMoving == false && objectBeginMove == true){
		objectMoving = true;
		objectBeginMove = false;
		dragIcon.style.visibility = "visible";
		//objectMoving_sx = dragIcon.style.left;
		//objectMoving_sy = dragIcon.style.top;
	}
	if(!mouseHandlerEdit){
		for(var i = 0; i < mouseHandlers.length; i++){
			if(mouseHandlers[i][4] == true){
				eval(mouseHandlers[i][0])(e);
			}
		}
	}
}
function rpx(str){
	if(str == "") return 0;
	return parseFloat(str.substring(0,str.length-2));
}
function changeClass(object, newclass){
	object.className = newclass;
}


function str_pad( input, pad_length, pad_string, pad_type ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // + namespaced by: Michael White (http://getsprink.com)
    // *     example 1: str_pad('Kevin van Zonneveld', 30, '-=', 'STR_PAD_LEFT');
    // *     returns 1: '-=-=-=-=-=-Kevin van Zonneveld'
    // *     example 2: str_pad('Kevin van Zonneveld', 30, '-', 'STR_PAD_BOTH');
    // *     returns 2: '------Kevin van Zonneveld-----'
 
    var half = '', pad_to_go;
 
    var str_pad_repeater = function(s, len){
            var collect = '', i;
 
            while(collect.length < len) collect += s;
            collect = collect.substr(0,len);
 
            return collect;
        };
 
    if (pad_type != 'STR_PAD_LEFT' && pad_type != 'STR_PAD_RIGHT' && pad_type != 'STR_PAD_BOTH') { pad_type = 'STR_PAD_RIGHT'; }
    if ((pad_to_go = pad_length - input.length) > 0) {
        if (pad_type == 'STR_PAD_LEFT') { input = str_pad_repeater(pad_string, pad_to_go) + input; }
        else if (pad_type == 'STR_PAD_RIGHT') { input = input + str_pad_repeater(pad_string, pad_to_go); }
        else if (pad_type == 'STR_PAD_BOTH') {
            half = str_pad_repeater(pad_string, Math.ceil(pad_to_go/2));
            input = half + input + half;
            input = input.substr(0, pad_length);
        }
    }
 
    return input;
}

if(typeof(findPos) == 'undefined'){
	/*function findPos(obj){
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			curleft = obj.offsetLeft;
			curtop = obj.offsetTop;
			while (obj = obj.offsetParent) {
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop;
			} 
		}
		return [curleft,curtop];
	}/**/
	/*function findPos( oElement ) {
		if( typeof( oElement.offsetParent ) != 'undefined' ) {
    		for( var posX = 0, posY = 0; oElement; oElement = oElement.offsetParent ) {
      			posX += oElement.offsetLeft;
      			posY += oElement.offsetTop;
    		}
			return [ posX, posY ];
		} else {
			return [ oElement.x, oElement.y ];
		}
	}/**/
	function findPos(obj){
		var curleft = 0, x;
		var curtop = 0, y;
		if(obj.offsetParent){
			while(1){
				curleft += (x = obj.offsetLeft);
				curtop += (y = obj.offsetTop);
				if(obj.offsetLeft == 0 && obj.offsetTop == 0 && browser == "opera"){
					curleft+= (x = rpx(obj.style.left));
					curtop+= (y = rpx(obj.style.top));
				}
				//document.getElementById('auditDebugDiv').innerHTML+= obj.nodeName + "["+obj.id+"]: " + x + "x" + y + ", " + rpx(obj.style.left) + "</br>";
				if(!obj.offsetParent){
					break;
				}
				obj = obj.offsetParent;
			}
		}else if(obj.x){
				curleft += obj.x;
				curtop += obj.y;
		}
		return [curleft, curtop];
	}
}
if(typeof(getAttribute) == 'undefined'){
	function getAttribute(element, attribute){
		var val = element.getAttribute(attribute);
		if(val == undefined || val == null || val == null) return null;
		return val;
	}
}

if(typeof(findWRelPos) == 'undefined'){
	function findWRelPos(obj, window){
		var curleft = 0, x;
		var curtop = 0, y;
		if(obj.offsetParent){
			while(1){
				//console.log(obj.nodeName + "#"+  obj.id + " :: " + window);
				if(obj.nodeName.toLowerCase() == "div" && obj.id == "window_" + window){
					break;
				}
				curleft += (x = obj.offsetLeft);
				curtop += (y = obj.offsetTop);
				if(obj.offsetLeft == 0 && obj.offsetTop == 0 && browser == "opera"){
					curleft+= (x = rpx(obj.style.left));
					curtop+= (y = rpx(obj.style.top));
				}
				//document.getElementById('auditDebugDiv').innerHTML+= obj.nodeName + "["+obj.id+"]: " + x + "x" + y + ", " + rpx(obj.style.left) + "</br>";
				if(!obj.offsetParent){
					break;
				}
				obj = obj.offsetParent;
			}
		}else if(obj.x){
			curleft += obj.x;
			curtop += obj.y;
		}
		var q = document.getElementById("window_" + window + "_cntp");
		curtop-= q.scrollTop;
		curleft-= q.scrollLeft;
		return [curleft, curtop];
	}
}
