/**
* <script>
*
* EasyGUI Core Functions
*
* @author 		Gaetan Lauff	<glauff@plansoft.de>
* @copyright	Plan Software GmbH, 2001 - 2004
* @package 		Base
*
* This is not free software.
*/

var intervalHandlers 		= new Array();
var openedModalDialogs		= new Array();
var modal 					= false;
var elapsed 				= false;
var waitElement 			= null;
var treeWaitElement 		= null;
var winRegistry 			= null;
var closeWindow				= false;
var debug 					= false;

function EKAT_RESIZE(w,h) {;}

function GUIInit() {
	eval(initFunctions);
	
	var allCombos = document.body.getElementsByTagName('SELECT');
	
	for (var i=0; i < allCombos.length; i++) {
		if (!allCombos[i].fixedColumnCombo && allCombos[i].realvisibility != 'hidden') {
			allCombos[i].style.visibility = 'visible';
		}

		if (allCombos[i].fixedColumnCombo) {
			id = allCombos[i].id + '_';
		
			for (var j=0; j < document.isycat.length; j++) {
				if (document.isycat[j].type == 'select-one') {
					if (document.isycat[j].name == id) {
						document.isycat[j].selectedIndex = allCombos[i].selectedIndex;
					}
				}
			}
		}
	}
	
	winRegistry = new windowRegistry();
	
	if (self != top) {
		top.enableDialog();
		
		if (top.document.getElementById('GUI_DISABLE') != null) {
			if (top.waitElement != null) {
				top.waitElement.style.cursor = 'default';
			}
		}
		
		if (top.treeWaitElement != null) {
			top.treeWaitElement.style.cursor = 'default';
		}
	} else {
		try {   
			if (self.opener) {
				if (document.body.modal != null) {
					modal = true;
				}
			
				if (!modal) {
					self.opener.enableDialog();
				} else {
					self.opener.winRegistry.startModalObserver(self.name);
				}
			} else
				enableDialog();
		} catch( e ) {
			/**
			 * This is just used to detect if the opener
			 * is from same origin.
			 * to avoid JavaScript Errors
			 */
			//alert("Cross site opening !");
		}
	}
	
	if (parent.document.getElementById('GUI_DISABLE') != null) {
		parent.document.getElementById('GUI_DISABLE').style.visibility = 'hidden';
	}
	
	createNewHiddenFormField('DLG_ID', document.body.id);
	createNewHiddenFormField('TEMPLATEID', document.body.id);
	createNewHiddenFormField(document.body.id, '');
	
	addEvent(document, "keydown", toggleEnterKey, true);
	addEvent(document, 'click', closeAllCombos, false);
	addEvent(document, "selectstart", noSelect, true);
		
	var dlgWidth = parseInt(document.body.style.width);
	var dlgHeight = parseInt(document.body.style.height);
	setWindowSize(dlgWidth, dlgHeight);
}

function getWindowName() {
	return self.name;
}

function getOpener() {
	if (self.opener == null) return false;	
	return self.opener;
}

function getTopWindow() {
	if (self.opener == null) return self;
	
	var win = self.opener;
	
	while (win.opener != null) {
		win = win.opener;
	}
	
	return win;
}

function guiWindow(id, obj) {
	this.id = id;
	this.obj = obj;
	this.intervalHandler = null;
}

function windowRegistry() {
	this.registry = new Array();
	
	this.registerWindow = function(win) {
		this.registry.push(win);
	}
	
	this.getGuiWindow = function(id) {
		for (var i=0; i < this.registry.length; i++) {
			if (this.registry[i] != null) {
				if (this.registry[i].id == id) {
					return this.registry[i];
				}
			}
		}
		
		return false;
	}
	
	this.startModalObserver = function(id) {
		var observable = this.getGuiWindow(id);
		if (!observable) return;
		
		observable.intervalHandler = setInterval("observeModalWindow('" + id + "')", 100);
	}
	
	this.removeWindow = function(id) {
		for (var i=0; i < this.registry.length; i++) {
			if (this.registry[i] != null && this.registry[i].id == id) {
				this.registry[i] = null;
			}
		}
	}
}

observeModalWindow = function(id) {
	var observable = winRegistry.getGuiWindow(id);

	if (observable.obj.closed == true) {
		clearInterval(observable.intervalHandler);
		winRegistry.removeWindow(id);
		enableDialog();
	}
}
	
function setInnerHTML(id, text) {
	parent.document.getElementById(id).innerHTML = text;
}

function setWindowSize(width, height) {
	return;
	if (self == top) {
		self.name = document.body.id + document.isycat.IDC_SESSIONKEY.value;
		
		self.resizeTo(width, height);
		correctWidth = width + (width - document.getElementById("GUI_DISABLE").offsetWidth);
		correctHeight = height + (height - document.getElementById("GUI_DISABLE").offsetHeight);
	
		self.resizeTo((width + 10), correctHeight);
		
		if (document.isycat.appmode.value != 'ek_cdrom') {
			self.moveTo(((screen.width/2) - (correctWidth/2)), ((screen.height/2) - (correctHeight/2)));
		}
	
	    // EKAT_RESIZE Commando für CD-Version
	    var w=4+width;
	    var h=4+height;
	    var hrefCMD="javascript:void(EKAT_RESIZE("+w+","+h+"))";
    	
	    window.location.href=hrefCMD;
	}
}


function createNewHiddenFormField(id, value) {
	var newFormField = document.createElement('input');
	
	newFormField.setAttribute('id', id);
	newFormField.setAttribute('name', id);
	newFormField.setAttribute('type', 'hidden');
	newFormField.setAttribute('value', value);	
	document.isycat.appendChild(newFormField);
}

function throwMessage(message) {
	alert(message);
	return false;
}

function getStyleDefinitions( element ) {
	var styles = new Array();
	var styleDefinition;
	var stylePattern = /\[([^\]]*)\]/g

	if ((styleDefinitions = element.getAttribute('styledefinitions')) == null)
		return styles;
		
	while ((styleDefinition = stylePattern.exec(styleDefinitions)) != null) {
		var style		= styleDefinition[1].split(':');
		var styleName 	= parseInt(style[0]);
			
		if (isNaN(styleName))
			styleName = style[0];
			
		styles[styleName] = style[1];
	}
	
	return styles;
}

hasChildNodesByNodeType = function ( node, nodeType ) {
	if (nodeType == null)
		var nodeType = 1;
	
	for (var i=0; i < node.childNodes.length; i++) 
		if (node.childNodes[i].nodeType == nodeType) 
			return true;
		
	return false;
}

function hasChildNodesByNodeName( node, nodeName ) {
	for (var i=0; i < node.childNodes.length; i++)
		if (node.childNodes[i].nodeName == nodeName)
			return true;
			
	return false;
}

function getChildNodesByType( node, nodeType ) {
	if (nodeType == null)
		var nodeType = 1;
		
	var cNodes = new Array();
	
	for (var i=0; i < node.childNodes.length; i++)
		if (node.childNodes[i].nodeType == nodeType)
			cNodes[cNodes.length] = node.childNodes[i];
	
	return cNodes;
}

function getChildNodesByNodeName( node, nodeName ) {
	var cNodes = new Array();
	
	for (var i=0; i < node.childNodes.length; i++)
		if (node.childNodes[i].nodeName == nodeName)
			cNodes[cNodes.length] = node.childNodes[i];
			
	return cNodes;
}

function getElementByTagName(node, tagName) {
	
	while (node != null && node.nodeType != 9) {
		//alert(node.tagName  + '==' + tagName);
    	if (node.tagName != null && node.tagName == tagName)
    		return node;
      	
    	node = node.parentNode;
	}
	
	return node;
}

function getElementByClassName(node, tagName, className) {
	while (node != null && node.nodeType != 9) {
    	if (node.tagName != null && node.tagName == tagName && hasClassName(node, className))
    		return node;
      			
    	node = node.parentNode;
  	
	}
	
  	return node;
}

function getElementByAttribute(node, attribute, value) {
	while (node != null && node.nodeType != 9) {
		if (node.getAttribute( attribute ) != null && node.getAttribute( attribute ) == value)
			return node;
			
		node = node.parentNode;
	}
	
	return node;
}
    	
function elementHasParentWithAttribute( node , attribute) {
	while (node != null && node.nodeType != 9) {
		if (node.getAttribute( attribute ) != null)
			return true;
			
		node = node.parentNode;
	}
	
	return false;
}

function hasClassName(el, name) {
  	var list = el.className.split(" ");
  	
  	for (var i = 0; i < list.length; i++) 
  		if (list[i] == name)
    		return true;
  	
  	return false;
}

function removeClassName(el, name) {
	var i, curList, newList;

  	if (el.className == null)
    	return;
    
  	newList = new Array();
  	curList = el.className.split(" ");
  	
  	for (i = 0; i < curList.length; i++)
    	if (curList[i] != name)
      		newList.push(curList[i]);
  	
    el.className = newList.join(" ");
}

function getPageOffsetLeft(el) {
	var x;

  	x = el.offsetLeft;
  	
  	if (el.offsetParent != null)
    	x += getPageOffsetLeft(el.offsetParent);

  	return x;
}

function getPageOffsetTop(el) {
	var y;

  	y = el.offsetTop;
  	
  	if (el.offsetParent != null)
    	y += getPageOffsetTop(el.offsetParent);

  	return y;
}

function getElementId(element) {
	if (typeof(e) != "string") {
    		return element.id;
	} else {
		return element;
	}
}

function getElement(evt) {
	var el;
	
	if (typeof(evt) == 'string') {
		el = document.getElementById(evt);
		
		if (el == 'undefined' || el == null) {
			if (debug) {
				alert('EasyGUI Debug Alert !\ngetElement("'+evt+'") failed. ID does not exist in document tree !');
			}
			
			return false;
		} else {
			return document.getElementById(evt);
		}
	}

	if (window.event)
	  	el = window.event.srcElement;
	else
	  	el = (event.target.tagName ? event.target : event.target.parentNode);
	
	return el;
}

getElementAttributeValue = function(domElement, attribute, defaultValue) {
	var attributeValue = domElement.getAttribute(attribute);		
	
	if (!attributeValue) {
		if (!isEmpty(defaultValue))
			return defaultValue;
			
		return false; 
	}
	
	return attributeValue;
};

function getTargetElement(evt) {
	if (typeof(evt) == 'string') {
		return;
	}
	
	if (window.event)
    	el = window.event.toElement;
  	else 
  		if (event.relatedTarget != null)
    		el = (event.relatedTarget.tagName ? event.relatedTarget : event.relatedTarget.parentNode);
    
	return el;
}    		
    
function getParentAttribute(element, attribute) {
	while (!element.getAttribute(attribute)) {
		if (element.parentNode.nodeType == 9) {
			return false;
		}
		
		element = element.parentNode
	}
	
	return element.getAttribute(attribute);
}

function setFormValue(field, value) {
	document.isycat[field].value = value;
}

function navigate(evt) {
	var element 	= getElement(evt);
	var href 		= getParentAttribute(element, 'url');
	var id 			= getParentAttribute(element, 'id');
	var target 		= getParentAttribute(element, 'target');
	var submitField	= getParentAttribute(element, 'submitfield');
	
	if (!target) {
		target = '_self';
	}
	
	if (submitField) {
		setFormValue(submitField, id);
	}
	
	if (href == '') return false;
	
	href = href.urldecode();
	
	if (href.indexOf('javascript:') != -1) {
		if (href.indexOf('ekSubmit(') != -1 && href.indexOf('this') != -1) {
			ekSubmit( element, target );
		} else {
			code = href.substring(11, href.length) + ";";
			code = code.ltrim();
			eval(code);
		}
	} else {
		window.open(href, target);
	}

	return false;
}
	
function cancelEventBubble() {
	if (browser.isIE)
    	window.event.cancelBubble = true;
  	else
    	event.stopPropagation();
}

function getElementFromElementByTagName(element, tagName) {	
	if (element.nodeName == tagName) {	
		return document.getElementById(element.id);
	}
		
	while (element.nodeName != tagName) {
		element = element.parentNode;
	}
	
	return document.getElementById(element.id);
}

function addEventHandler( obj, evtType, fn, useCapture) {
	if ( typeof obj.addEventListener != "undefined" )
		obj.addEventListener( evtType, fn, useCapture );

	// IE 
	else if ( typeof window.attachEvent != "undefined" )
		window.attachEvent( "on"+evtType, fn );

	else {
		if ( eval("window.on" + evtType) != null ) {
			var oldhandler = eval("window.on" + evtType);
			eval ("window.on" + evtType + "= function ( e ) { oldhandler( e ); " + fn + "();};");
		}
		else 
			eval ("window.on" + evtType + "= "  + fn + ";");
	}
}

function addEvent(obj, evType, fn, useCapture) {
	if (obj.addEventListener) {
    	obj.addEventListener(evType, fn, useCapture);
    	return true;
  	}
  	
  	if (obj.attachEvent) {
    	var r = obj.attachEvent("on"+evType, fn);
    	return r;
  	}
}

function removeEvent(obj, evType, fn, useCapture) {
	if (obj.removeEventListener != null) {
    	obj.removeEventListener(evType, fn, useCapture);
    	return true;
  	}
  	
  	if (obj.detachEvent != null) {
    	var r = obj.detachEvent("on"+evType, fn);
    	return r;
  	}
}

function makeHandcursor(element) {
    if (ns6) {
    	element.style.cursor = 'pointer';
    } else {
    	element.style.cursor = 'hand';
    }
}

function makeWaitcursor(element) {
   	element.style.cursor = 'wait';
}

function makeDefaultcursor(element) {
	element.style.cursor = 'default';
}

function flipImage(element) {
    if (!element.id) {
		var element = getElement(element);
    }
	
    if ((mouseoverimage	= element.getAttribute('mouseoverimage')) == null) {
    	return;
    }
    
    var imagesrc 		= element.src;
    element.src 		= mouseoverimage;
    element.setAttribute('mouseoverimage', imagesrc);
}

function flipButtonImage(element) {
	if (!element.id) {
		var element = getElement(element);
	}
	
	if ((buttonoverimage = element.getAttribute('buttonoverimage')) == null) {
		return;
	}
	
	var imagesrc = element.style.backgroundImage;
	element.style.backgroundImage = buttonoverimage;
	element.setAttribute('buttonoverimage', imagesrc);
}

function switchClassName(element, className) {
	element.className = className;
}

function selectImage(element) {
    var selectedimage = element.getAttribute('selectedimage');    
    element.setAttribute('src', selectedimage);
}

function startDownload(element) {
    self.location.href = element.getAttribute('docref');
}

function openDynamicFileInNewWindow(src) {
	window.open(src, 'DynamicFileWindow');
}

function showContentInNewWindow(element) {
	var newWindowUrl 		= "about:blank";
	var newWindowName 		= "newWindow";
	var newWindowHeight 	= 600;
	var newWindowWidth 		= 800;
	var newWindowToolbar 	= "yes";
	var newWindowMenuBar 	= "no";
	
	if (element.getAttribute('docref')) {
		newWindowUrl 		= element.getAttribute('docref');
	}
   	
   	if(element.getAttribute('newwindowname')) {
   		newWindowName 		= element.getAttribute('newwindowname');
   	}
    
    if (element.getAttribute('newwindowwidth')) {
    	newWindowWidth 		= element.getAttribute('newwindowwidth');
    }
         
    if (element.getAttribute('newwindowheight')) {
    	newWindowHeight 	= element.getAttribute('newwindowheight');
    }
         
    if (element.getAttribute('newwindowtoolbar')) {
    	newWindowToolbar 	= element.getAttribute('newwindowtoolbar');
    }
    
    if (element.getAttribute('newwindowmenubar')) {
    	newWindowMenuBar 	= element.getAttribute('newwindowmenubar');
    }

    var newWindowAttributes = "menubar="+newWindowMenuBar+" toolbar="+newWindowToolbar+",width="+newWindowWidth+",height="+newWindowHeight;
    window.open(newWindowUrl, newWindowName, newWindowAttributes);
}

function download(element) {
	if(!(isFormOk = checkRequiredFormFields())) {
    	return;
    }
     
    document.isycat.EKSUBMITEVENT.value = element.getAttribute('id');
    document.isycat.submit();
}

function checkRequiredFormFields() {
	for(i=0; i < document.isycat.elements.length; i++) {
		var formelement = document.isycat.elements[i];
		
		if (formelement.getAttribute('required') != null) {   
			if (formelement.value == '') {
				if ((message = formelement.getAttribute('validationerrormsg')) == null) {
					message = "Bitte alle benötigten Felder ausfüllen !";
				}
				
            	alert (message);
                formelement.focus();
                return false;
            }
		}
	}
    
	return true;
}

function ekSubmitWithTimeout(timeout, id) {
	setTimeout("ekSubmit('"+id+"')", '_self', timeout);
}
	
function intervalHandler(id, handler) {
	this.id = id;
	this.handler = handler;
}

function openModalDialog(element) {
	isywin = window.open("about:blank",element.id + "_win" ,"width=800 height=600 toolbar=no");
}

function ekSubmitInNewWindow(element, width, height) {
	if (width == null) width = 800;
	if (height == null) height = 600;
	
	if (typeof(element) == "string") {
    	var winId = element;
    } else {
    	var winId = element.id;
    }
    
	var isywin = self.open("about:blank", winId + "_win" ,"width=" + width + " height=" + height + " toolbar=no");
	winRegistry.registerWindow(new guiWindow(winId + "_win", isywin));
	
	ekSubmit(element, winId + "_win");
	
}

function ekSubmitInNewNonModalWindow(element, width, height) {
	if (width == null) width = 800;
	if (height == null) height = 600;
	
	if (typeof(element) == "string") {
    	var winId = element;
    } else {
    	var winId = element.id;
    }
    
	var isywin = self.open("about:blank",winId + "_win" , "width=" + width + " height=" + height + " toolbar=no scrollbars=yes");
	
	ekSubmit(element, winId + "_win");
	activateDialog();
}

function ekSubmitInNamedWindow(windowName, element) {
	ekSubmit(element, windowName);
	self.close();
}

function ekSubmitInIframe(element) {
	ekSubmit(element, 'isyiframe');
}

function enableDialog() {
	componentHide('GUI_DISABLE');
}

function disableDialog() {
	componentShow('GUI_DISABLE');
}

function createHiddenFormField(id, fieldname, value) {
	var formField = document.createElement('input');
	formField.type = 'hidden';
	formField.id = id;
	formField.name = fieldname;
	formField.value = value;
	return formField;
}

/**
 * Controls all Submission
 */
function ekSubmitAfterTimeout(ekSubmitEvent,target,timeout) {
	setTimeout("ekSubmit('" + ekSubmitEvent + "', '" + target + "', 0)", timeout);
}

function ekSubmitAndClose(element) {
	closeWindow = true;
	ekSubmit(element);
}

function hexnib(d) {
   if(d<10) return d; else return String.fromCharCode(65+d-10);
}

function hexbyte(d) {
        // return "%"+hexnib((d&240)>>4)+""+hexnib(d&15);
	return hexnib((d&240)>>4)+""+hexnib(d&15);
}

function ekEncode(inStr)
{
    var result="";
    var hex="";
     for(var i=0;i<inStr.length; i++) {
             var cc=inStr.charCodeAt(i);
             if (cc<128) {
                 result+=hexbyte(cc);
             } else if((cc>127) && (cc<2048)) {
                result+=  hexbyte((cc>>6)|192)
                        + hexbyte((cc&63)|128);
             } else {
                result+=  hexbyte((cc>>12)|224)
                        + hexbyte(((cc>>6)&63)|128)
                        + hexbyte((cc&63)|128);
             }
     }
    return result;
}

var subForm;

function EKSubmitValuesSubmit()	
{
	subForm.submit();
	EKSubmitLocked=false;
	subForm.removeNode();
	document.isycat.target="_self";
}

function ekSubmit(element, target, timeout) {
	disableDialog();
	
	if (target == null) {
		target = '_self';
	}
	
	if (timeout == null) {
		timeout = 0;
	} else {
		timeout = parseInt(timeout);
	}
	
	if (element == null) {
		alert ('EasyGUI Error: ekSubmitEvent not set !');
		return;
	} else if (typeof(element) == 'string') {
		setTimeout("submitForm('" + element + "', '" + target + "', " + timeout + ", true)", 10);
	} else {
		var validate = true;
		
		if (element.getAttribute('id') != null && element.getAttribute('id') != '') {
			var id = element.id;
		} else {
			alert ('EasyGUI Error: DOM Element has no ID !');
			return;
		}
		
		if (element.getAttribute('novalidate') != null && element.getAttribute('novalidate') != '') {
			validate = false;
		}
		
		if (element.getAttribute('target') != null && element.getAttribute('target') != '') {
			target = element.getAttribute('target');
		}
		
		setTimeout("submitForm('" + id + "', '" + target + "', " + timeout + ", " + validate +")", 10);
	}
}

function submitForm(ekSubmitEvent, target, timeout, validate) {
	//alert(validate);
	if (timeout > 0) {
		ekSubmitAfterTimeout(ekSubmitEvent, target, timeout);
		return;
	}
	document.forms[0].EKSUBMITEVENT.value = ekSubmitEvent;
	
	var specialSubmitValues="";

	subForm = document.createElement('form');
	
	subForm.name 	= 'easygui_submit';
	subForm.method 	= 'post';
	subForm.action 	= document.forms[0].action;
	subForm.target 	= target;
	
	for (var i=0; i < document.forms[0].length; i++) {
		var formField = document.forms[0].elements[i];
		
		if (validate && formField.required != null) {
			if (isEmpty(formField.value)) {
				if ((message = formField.getAttribute('validationerrormsg')) == null) {
					message = "EasyGUI Message!\r\nBitte alle benötigten Felder ausfüllen !";
				}
				
            	alert(message);
            	enableDialog();
            	
            	if (tabid = isInTab(formField)) {
            		switchPanel( tabid + '_HEADER');
            	} else {
            		alert( 'Field is not in Tab');
            	}
                
            	formField.focus();
                return false;
            }
		}
			
		if (formField.type != 'button' && formField.type != 'fieldset') {
			if(formField.type == "radio") {
				if (formField.checked) {
					specialSubmitValues+=ekEncode(formField.name)+"="+ekEncode(formField.value)+"&";
				}
			}

			if (formField.type == "checkbox") {
				if (formField.checked) {
					var val = formField.value;
					
					if (val == 'on' || val != '0') {
						val = 'true';
					}
					specialSubmitValues+=ekEncode(formField.id)+"="+ekEncode("true")+"&";
				} else {
					specialSubmitValues+=ekEncode(formField.id)+"="+ekEncode("false")+"&";
				}
			}
			
			if (formField.type == "select-one") {
				if(formField.selectedIndex>=0)
					specialSubmitValues+=ekEncode(formField.id)+"="+ekEncode(formField.options[formField.selectedIndex].value)+"&";
				else
					specialSubmitValues+=ekEncode(formField.id)+"=&";
			}
			
			if (formField.type == "select-multiple") {
				var optCount = 0;
				/**
				 * Get all the entries in the multicolcombo without selecting them explicitly
				 */
				if (formField.multicol) {
					for (var j=0; j < formField.length; j++) {
						specialSubmitValues+=ekEncode(formField.id + '[' + optCount++ +']') +'='+ekEncode(formField.options[j].value);
					}
				} else { // This is a normal multiple combo so submit only those who are selected
					var strFormVal="";
					
					for (var j=0; j < formField.length; j++) {
						if (formField.options[j].selected) {
							strFormVal += formField.options[j].value + "|";
						}
					}

					if (strFormVal != "") {
						strFormVal = strFormVal.substring(0,strFormVal.length-1);
					}
					
					specialSubmitValues+=ekEncode(formField.id)+"="+ekEncode(strFormVal)+"&";
				}
			}
			
			if (formField.type == "text" || formField.type == 'textarea' || formField.type == 'hidden' || formField.type == 'password') {
				specialSubmitValues+=ekEncode(formField.id)+"="+ekEncode(formField.value)+"&";
			}
		}
	}
	
	subForm.appendChild(createHiddenFormField("port","port",document.forms[0].port.value));
	subForm.appendChild(createHiddenFormField("APPNAME","APPNAME",document.forms[0].APPNAME.value));
	subForm.appendChild(createHiddenFormField("DIALOG_ID","DIALOG_ID",document.forms[0].DLG_ID.value));
	subForm.appendChild(createHiddenFormField("EKEVENT_ID","EKEVENT_ID",document.forms[0].EKSUBMITEVENT.value));
	subForm.appendChild(createHiddenFormField("SESSION_ID_LOG","SESSION_ID_LOG",document.forms[0].sessionid.value));

	subForm.appendChild(createHiddenFormField("__eksubmit_values_utf8__","__eksubmit_values_utf8__",
				specialSubmitValues));
	
	document.body.appendChild(subForm);
	
	subForm.submit();
	if (closeWindow) self.close();
	document.body.removeChild(subForm);
}

function componentShow(id) {
	parent.document.getElementById(id).style.visibility = 'visible';
}

function componentHide(id) {
	parent.document.getElementById(id).style.visibility = 'hidden';
}

function componentEnable(id) {
    document.isycat[id].disabled = false;
}

function componentDisable(id) {
    document.isycat[id].disabled = true;
}

function componentCheck(id) {
	for (var i=0; i < parent.document.isycat.length; i++) {
		if (parent.document.isycat[i].name == id) {
			if (parent.document.isycat[i].type == 'checkbox') {
				parent.document.isycat[i].checked = true;
			}
		}
	}
}

function componentUncheck(id) {
	for (var i=0; i < parent.document.isycat.length; i++) {
		if (parent.document.isycat[i].name == id) {
			if (parent.document.isycat[i].type == 'checkbox') {
				parent.document.isycat[i].checked = false;
			}
		}
	}
}

function setElementReadonly(id) {
	element = document.getElementById(id);
	element.readOnly = true;
}

function setElementEditable(id) {
	element = document.getElementById(id);
	element.readOnly = false;
}

function blurElement(evt) {
	element = getElement(evt);
	element.blur();
	return true;
}

function setFocusOnElement(id) {
	parent.document.isycat[id].focus();
}

function scrollToTableElement(id) {
	//if (ie5) {
		if ((element = document.getElementById(id)) != null) {
			var table = document.getElementById(getTableFrom(element));
			var height = table.childNodes[0].childNodes[0].childNodes[0].offsetHeight;
			var allRows = table.childNodes[0].childNodes[0].getElementsByTagName('TR');
			var criticalRows = Math.floor(((table.offsetHeight - height) / element.offsetHeight));
			
			element.scrollIntoView(true);
			
			for (var i=0; i < allRows.length; i++) {
				if (allRows[i].id == element.id) {
					break;
				}
			}
				
			if (i < (allRows.length - criticalRows)) {
				table.scrollTop -= height;
			}
		} else {
			return;
		}
	//}
}

function getCSSRuleAttribute(selector, attribute, idx) {
	if (!idx) {
		var idx = 1;
	} else {
		if (typeof(idx) == 'string') {
			for (var i=0; i < document.styleSheets.length; i++) {
				if (document.styleSheets[i].title == idx) {
					var idx = i;
				}
			}
		}
	}

	if (ns6) {
		for (var j=0; j < document.styleSheets[idx].cssRules.length; j++) {
			if("." + selector == document.styleSheets[idx].cssRules[j].selectorText) {
	        	return eval("document.styleSheets[idx].cssRules[j].style."+attribute);
	        }
	    }
	} else {
		for (var j=0; j < document.styleSheets[idx].rules.length; j++) {
		   	if("." + selector == document.styleSheets[idx].rules[j].selectorText) {
		       	return eval("document.styleSheets[idx].rules[j].style."+attribute);
		   	}
		}
		/**
		 * If @import rules should work any day comment this in !
		 * For now use only stylesheets without import rules
		for (var j=0; j < document.styleSheets[idx].imports.length; j++) {
			for (var k=0; k < document.styleSheets[idx].imports[j].rules.length; k++) {
				if("." + selector == document.styleSheets[idx].imports[j].rules[k].selectorText) {
		       		return eval("document.styleSheets[idx].imports[j].rules[k].style."+attribute);
		   		}
			}
		}
		*/
	}
	
	return false;
}

function initContextMenu(id) {
	var contextMenu = document.getElementById(id);
	
	if ((sourceElementId = contextMenu.getAttribute('sourceelement')) == null) {
		var sourceElement = document;
	} else {
		var sourceElement = document.getElementById(sourceElementId);
	}

	if (ns6) {
		addEvent(sourceElement, "mouseup", displaycontextmenu, true);
	} else {
		if (ie5) {
			addEvent(sourceElement, "contextmenu", displaycontextmenu, false);
			addEvent(sourceElement, "click", displaycontextmenu, false);
		}
	}
}

function displaycontextmenu(evt) {
	var element = getElement(evt);
	var contextMenuId = element.getAttribute('contextmenuid');
	var contextMenu = document.getElementById(contextMenuId);
	
	if (ns6) {
		if (evt.button == 3) {
			contextMenu.style.left = pageXOffset + evt.clientX;
			contextMenu.style.top  = pageYOffset + evt.clientY;
			contextMenu.style.visibility = 'visible';
			return false;
		}
		
		if (evt.button == 1) {
			contextMenu.style.visibility = 'hidden';
		}
	}
	
	if (ie5) {
		if (evt.type == "contextmenu") {
			contextMenu.style.left = document.body.scrollLeft + evt.clientX;
			contextMenu.style.top  = document.body.scrollTop + evt.clientY;
			contextMenu.style.zIndex = '3000';
			contextMenu.style.visibility = 'visible';
			return false;
		} else {
			if (evt.type == "click") {
				contextMenu.style.visibility = 'hidden';
			}
		}
	}
}

function initTextarea(id) {
	var textarea = document.getElementById(id);
	
	if ((value = textarea.getAttribute('text')) != null) {
		// textarea.value = value.replace(/(<br\s+\/>|<br>)/g, '\r\n');
		value = value.replace(/(<br\s+\/>|<br>)/g, '\r\n');

		// -mw- 03/2006
		value = value.replace('\\r\\n', '\r\n');
		value = value.replace('\\r\\n', '\r\n');
		value = value.replace('\\r\\n', '\r\n');
		value = value.replace('\\r\\n', '\r\n');
		value = value.replace('\\r\\n', '\r\n');
		value = value.replace('\\r\\n', '\r\n');
		value = value.replace('\\r\\n', '\r\n');
		value = value.replace('\\r\\n', '\r\n');
		value = value.replace('\\r\\n', '\r\n');
		value = value.replace('\\r\\n', '\r\n');
		value = value.replace('\\r\\n', '\r\n');
		value = value.replace('\\r\\n', '\r\n');
		value = value.replace('\\r\\n', '\r\n');
		value = value.replace('\\r\\n', '\r\n');
		value = value.replace('\\r\\n', '\r\n');
		value = value.replace('\\r\\n', '\r\n');
		value = value.replace('\\r\\n', '\r\n');
		value = value.replace('\\r\\n', '\r\n');
		value = value.replace('\\r\\n', '\r\n');
		value = value.replace('\\r\\n', '\r\n');
		value = value.replace('\\r\\n', '\r\n');

		textarea.value = value;
	}

	if (textarea.getAttribute('maxlength') != null) {
		addEvent(textarea, 'keydown', checkMaxLength, false);
	}
}

function checkMaxLength(evt) {
	var element 		= getElement(evt);
	var maxLength 		= parseInt(element.getAttribute('maxlength'));
	var elementLength 	= parseInt(element.value.length);
	
	if (elementLength > maxLength) {
		element.value = element.value.substring(0, maxLength);
	}
}

function inArray(what, arr) {
	for (var i=0; i < arr.length; i++) {
		if (arr[i] == what) {
			return true;
		}
	}
	
	return false;
}

function arrayKeyExists(key, arr) {
	if (arr[key] != null) {
		return true;
	}

	return false;
}

function isEmpty( value ) {
	switch(value) {
		case 'undefined':
		case undefined:
		case null:
		case '0':
		case '':
			return true;
			break;
			
	}
	
	return false;
}

function beginCoordinates(element) {
	addEvent(element, "mousemove", showCoordinates, false);
}

function showCoordinates(evt) {
	var element = getElement(evt);
	
	var elxPos = parseInt(element.style.left);
	var elyPos = parseInt(element.style.top);
	
	xPos = evt.clientX - elxPos - 2;
	yPos = evt.clientY - elyPos - 2;
	
	self.status = " X-Pos: " + xPos + " Y-Pos: " + yPos;
}

function endCoordinates(element) {
	removeEvent(element, "mousemove", showCoordinates, false);
	self.status = '';
}

function noSelect(evt) {
	el = getElement(evt);
	
	if (el.type == "text" || el.nodeName == 'TEXTAREA') {
		return true;
	} else {
		return false;
	}
}

function allowSelect( id ) {
	var element = getElement( id );
	
	if (element == null )
		return;
	
	addEvent(element, 'selectstart', function() { cancelEventBubble(); return true; }, false );
}

function handleWindowClose(evt) {
	var iX = window.document.body.offsetWidth - window.event.clientX ;
	var iY = window.event.clientY ;
	
	if (iX <=30 && iY < 0 ) {
		if (self.opener != null) {
			self.opener.enableDialog();
		}
	}
}

function toggleEnterKey(evt) {
	var el = getElement(evt);
	
	if (el.nodeName == 'TEXTAREA') {
		return;
	}
	
    if (window.event.keyCode == 13) {
    	window.event.keyCode = 9;
    }
    
    if (evt.which) {
    	return (e.which = 9);
    }
}

function showAboutWin() {
	var version = document.isycat.IDC_EASYGUI_VERSION.value;
	var build = document.isycat.IDC_EASYGUI_BUILD.value;
	 
	aboutwin = window.open('about.php?version='+version+'&build='+build,'about','width=505 height=327 toolbar=no scrollbars=no');
	aboutwin.moveTo(((screen.width/2) - (505/2)), ((screen.height/2) - (327/2)));
	aboutwin.focus();
}

function getVersion() {
	return document.isycat.IDC_EASYGUI_VERSION.value;
}

function getBuild() {
	return document.isycat.IDC_EASYGUI_BUILD.value;
}

if (!Array.prototype.pop) {
	Array.prototype.pop = function() {
		lastElement = this[this.length-1];
		this.length--;
		return lastElement;
	}
}

if (!Array.prototype.push) {
	Array.prototype.push = function() {
		this[this.length] = arguments[0];
		return this.length;
	}
}

if (!String.prototype.ltrim) {
	String.prototype.ltrim = function() {
		var str = this.valueOf();
		
		while ((str.charAt(0) == " ") || (str.charAt(0) == "\t")) {
  			str = str.substring(1,str.length);
		}
		
		return str;
	}
}

if (!String.prototype.rtrim) {
	String.prototype.rtrim = function() {
		var str = this.valueOf();
		
		while ((str.charAt((str.length - 1)) == " ") || (str.charAt((str.length -1)) == "\t")) {
  			str = str.substring(0, (str.length - 1));
		}
		
		return str;
	}
}


if (!String.prototype.urldecode) {
	String.prototype.urldecode = function() {
		var str = this.valueOf();
		str = str.replace(/%20/g, ' ');
		return str;
	}
}