/**
* Standard Functions for IsyCat System V 2.0
*
* @author Gaetan Lauff
* @copyright Plan Software GmbH 2001 - 2003
*/

var startidx 		= 0;
var initFunctions 	= '';

var ns6				= document.getElementById&&!document.all;
var ie5				= document.all;

if (ns6)
{
	startidx = 1;
}

function ISyCatInit()
{
	eval(initFunctions);
}


function EKAT_RESIZE(w,h) {;}

function setWindowSize(width, height)
{
	/*
	if(self!=top || (parseInt(document.body.clientWidth)>=parseInt(width)
		&& parseInt(document.body.clientHeight)>=parseInt(height)) )
	{
		return false;
	}
	

	self.resizeTo(width, height);
	//if (parent.document.getElementById('IsyDisable_CONTAINER') != null) {
	if (document.getElementById('IsyDisable_CONTAINER') != null) {
		correctWidth = width + (width - document.getElementById("IsyDisable_CONTAINER").offsetWidth);
		correctHeight = height + (height - document.getElementById("IsyDisable_CONTAINER").offsetHeight);
	}
	else {
		correctWidth = width;
		correctHeight = height;
	}
	self.resizeTo((width + 22), correctHeight);
	

	// 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;
	*/
	
	var hrefCMD="javascript:void(EKAT_RESIZE(808,606))";
	window.location.href=hrefCMD;
	return true;
}

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 getElement(e)
{
	if (typeof(e) != "string")
	{
    	return getElementFrom(e);
	}
	else
	{
		return document.getElementById(e);
	}
}

function getElementFrom(evt)
{
	if (ns6)
	{
		var element = evt.target;
	}
	else
	{
		return evt.srcElement;
	}
	
	if (element.id)
	{
		return document.getElementById(element.id);
	}
		
	while (!element.id)
	{
		element = element.parentNode;
	}
	
	return document.getElementById(element.id);
}

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)
	{
    	obj.removeEventListener(evType, fn, useCapture);
    	return true;
  	}
  	
  	if (obj.detachEvent)
  	{
    	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 ((mouseoverimage	= element.getAttribute('mouseoverimage')) == null)
    {
    	return;
    }
    
    var imagesrc 		= element.src;
    element.src 		= mouseoverimage;
    
    element.setAttribute('mouseoverimage', 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)
{
	if(!(isFormOk = checkRequiredFormFields()))
	{
		return;
	}
	
	document.isycat.EKSUBMITEVENT.value = id;
	document.getElementById('IsyDisable_CONTAINER').style.visibility = 'visible';
	var waitElement = document.getElementById('IsyDisable_CONTAINER');
	
	makeWaitcursor(waitElement);
	setTimeout("document.isycat.submit()", timeout);
}  
	
function ekSubmit(element)
{
	//if(!parent.document.isycat || !parent.document.isycat.EKSUBMITEVENT)
	//	return;
	
	if (typeof(element) == "string") {
		//parent.document.isycat.EKSUBMITEVENT.value = element;
		document.isycat.EKSUBMITEVENT.value = element;
	}
	else
	{
		element.style.cursor = 'wait';
		if (element.id == null)
		{
			if ((element = getElementFrom(element)) == null) {
				return;
			}
		}
		//parent.document.isycat.EKSUBMITEVENT.value = element.getAttribute('id');
		document.isycat.EKSUBMITEVENT.value = element.getAttribute('id');
	}
    
 	//waitElement = parent.document.getElementById('IsyDisable_CONTAINER');
 	waitElement = document.getElementById('IsyDisable_CONTAINER');
	waitElement.style.visibility = 'visible';
	waitElement.style.cursor = 'wait';
	setTimeout("EKSubmitValuesUtf8()",20);
}



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)
{
	return encodeURIComponent(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;*/
}


function createHiddenFormField(id, fieldname, value) {
	var formField = document.createElement('input');
	formField.type = 'hidden';
	formField.id = id;
	formField.name = fieldname;
	formField.value = value;
	return formField;
}


var subForm;

function EKSubmitValuesUtf8()
{
	var nElements=document.isycat.length;
	var obj,id;
	
	var specialSubmitValues="";
	
	for(var i=0;i<nElements;i++)
	{
		obj=document.isycat[i];
		
		if(!obj.type)
		{
			continue;
		}
		
		if(!obj.id)
		{
			if(!obj.name)
			{
				continue;
			}
			else
			{
				id=obj.name;
			}
		}
		else
		{
			id=obj.id
		}
		
		if(obj.type=="text" || obj.type=="hidden" || obj.type=="textarea" || obj.type=="password")
		{
			specialSubmitValues+=ekEncode(id)+"="+ekEncode(obj.value)+"&";
		}
		else if(obj.type=="checkbox")
		{
			if (obj.checked)
			{
				specialSubmitValues+=ekEncode(id)+"="+ekEncode("true")+"&";
			}
			else
			{
				specialSubmitValues+=ekEncode(id)+"="+ekEncode("false")+"&";
			}
		}
		else if(obj.type == "radio")
		{
			if (obj.checked)
			{
				specialSubmitValues+=ekEncode(obj.name)+"="+ekEncode(obj.value)+"&";
			}
		}
		else if(obj.type=="select-one")
		{
			if(obj.selectedIndex>=0)
				specialSubmitValues+=ekEncode(id)+"="+ekEncode(obj[obj.selectedIndex].value)+"&";
			else
				specialSubmitValues+=ekEncode(id)+"=&";
		}
		else if(obj.type=="button")
		{
			; // nix
		}
		else
		{
			// alert(obj.type);
		}
		
	}

	subForm = document.createElement('form');
	subForm.name 	= 'isycat_submit';
	subForm.method 	= 'post';
	subForm.action 	= document.isycat.action;
	subForm.target	= document.isycat.target;
	
	
	subForm.appendChild(createHiddenFormField("port","port",isycat.port.value));
	subForm.appendChild(createHiddenFormField("__eksubmit_values__","__eksubmit_values__",
				specialSubmitValues));
	
	document.body.appendChild(subForm);
	//setTimeout("EKSubmitValuesSubmit()",100);
	EKSubmitValuesSubmit();
}


function EKSubmitValuesSubmit()	
{
	subForm.submit();
	EKSubmitLocked=false;
	subForm.removeNode();
	
	if(document.isycat.target != "_self")
	{
		document.isycat.target="_self";
		//waitElement = parent.document.getElementById('IsyDisable_CONTAINER');
		waitElement = document.getElementById('IsyDisable_CONTAINER');
		waitElement.style.visibility = 'hidden';
		waitElement.style.cursor = 'default';
	}
}
	
	
function componentShow(id)
{
	document.getElementById(id).style.visibility = 'visible';
}

function componentHide(id)
{
	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)
{
    document.isycat[id].checked = true;
}

function componentUncheck(id)
{
    document.isycat[id].checked = false;
}

function setElementReadonly(id)
{
	element = document.getElementById(id);
	addEvent(element, "focus", blurElement, false);
}

function setElementEditable(id)
{
	element = document.getElementById(id);
	removeEvent(element, "focus", blurElement, false);
}

function blurElement(evt)
{
	element = getElementFrom(evt);
	element.blur();
	return true;
}

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(className, attribute)
{
	return;	// TODO: wieder raus
	
	if (ns6)
   	{
		for (j=0; j<document.styleSheets[1].cssRules.length; j++)
		{
			if("."+className == document.styleSheets[1].cssRules[j].selectorText)
	        {
	        	return eval("document.styleSheets[1].cssRules[j].style."+attribute);
	        }
	    }	
	}
	else
	{	
		for (j=0; j<document.styleSheets[1].rules.length; j++)
		{
	    	if("."+className == document.styleSheets[1].rules[j].selectorText)
	        {
	        	return eval("document.styleSheets[1].rules[j].style."+attribute);
	        }
	    }
	}
	
	return false;
}

/*
** Context Menu
*/

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)
{
	element = getElementFrom(evt);

	contextMenuId = element.getAttribute('contextmenuid');
	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';
			}
		}
	}
}

/*
** Combobox Handling
*/

function initCombobox(id)
{
	var combobox = document.getElementById(id);
	var k = 0;
	var optionList;
	var itemList;
	var isDisabled = false;
	var selectedIndex = 0;
	
	if (!combobox || (itemList = combobox.getAttribute('items')) == null)
	{
		return;
	}
	
	if ((selected = combobox.getAttribute('selected')) == null)
	{
		var selected = '';
	}
	
	if (disabled = combobox.getAttribute('disabled'))
	{
		isDisabled = true;
		combobox.disabled = false;	
	}
	
	itemList = itemList.split("|");
	
	combobox.options.length = itemList.length;
	
	for (var i=0; i < itemList.length; i++)
	{
		optionList = itemList[i].split("=");
		
		if (optionList[0] != null)
		{
			combobox.options[k].value = optionList[0];
		}
		else
		{
			combobox.options[k].value = '';
		}
		
		if (optionList[1] == null || optionList[1] == 'undefined')
		{
			combobox.options[k].text = "";
			
		}
		else
		{
			combobox.options[k].text = optionList[1];
		}
		
		k++;
		
		if (optionList[0] == selected)
		{
			selectedIndex = i;
		}
	}
	
	combobox.selectedIndex = selectedIndex;
	
	if (isDisabled)
	{
		combobox.disabled = true;
	}
}

/*
** Radiobutton Handling
*/

function initRadiobuttonGroup(id)
{
	var radioGroup = document.getElementById(id);
	var allRadiobuttons = radioGroup.getAttribute('components');
	
	allRadiobuttons = allRadiobuttons.split(";");
	
	if ((checkedRadiobutton = radioGroup.getAttribute('selected')) == null)
	{
		checkedRadiobutton = allRadiobuttons[0];
	}

	for (var i=0; i < allRadiobuttons.length; i++)
	{
		var radio = document.getElementById(allRadiobuttons[i]);

		radio.setAttribute('name', radioGroup.id);
		
		if (allRadiobuttons[i] == checkedRadiobutton)
		{
			componentCheck(allRadiobuttons[i]);
		}
	}
}

function inArray(what, arr)
{
	for (var i=0; i < arr.length; i++)
	{
		if (arr[i] == what)
		{
			return true;
		}
	}
	return false;
}

// Graphical Functions

function beginCoordinates(element)
{
	addEvent(element, "mousemove", showCoordinates, false);
}

function showCoordinates(evt)
{
	var element = getElementFrom(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 = '';
}


/*
** Textarea Handling
*/

function initTextarea(id)
{
	var textarea = document.getElementById(id);
	if(message=textarea.getAttribute('text'))
	{
		// message = message.replace(/\\t/g,'\t');
		if(message.indexOf("\\r\\n")!=-1)
			message = message.replace(/\\r\\n/g,'\n');
		else
			message = message.replace(/\r\n/g,'\n');
			
		textarea.value = message;
	}
}
