/* KASPARS */
/**
 * Check whether a is an array
 */
function isArray(a)
{
    return isObject(a) && a.constructor == Array;
}

/**
 * Whether a is an object
 */
function isObject(a)
{
    return (a && typeof a == 'object') || isFunction(a);
}

/**
 * Whether a is a function
 */
function isFunction(a)
{
    return typeof a == 'function';
}

/**
 * Whether a string is an integer
 */
function isInteger(s)
{
	var i;
	for (i = 0; i < s.length; i++)
	{   
		// Check that current character is number.
		var c = s.charAt(i);
		if (((c < "0") || (c > "9")))
			return false;
	}
	
	// All characters are numbers.
	return true;
}

function isString(s)
{
	return typeof s == 'string';
}

/**
 * Document object model DOM accessor
 */
function getObject(id)
{
	if (document.layers)
		return document.layers[id];
	else if (document.all)
		return document.all[id];
	else (document.getElementById(id))
		return document.getElementById(id);
}

/**
 * Check whether an array has a value
 */
function inArray(values_arr, ch_value)
{
	for (var i = 0; i < values_arr.length; i++)
	{
		if (values_arr[i] == ch_value)
			return true;
	}
	
	return false;
}

/**
 * 
 */
function stripChars(str, strip)
{
	var retval = "";
	for (var i = 0; i < str.length; i++)
	{   
		var c = str.charAt(i);
		if (strip.indexOf(c) == -1) retval += c;
	}
	return retval;
}

/**
 * Focus accessors
 */
function setFocus(id)
{
	var object = getObject(id);
	if (object)
		object.focus();
}

/**
 * Style accessors
 */
function getStyle(id)
{
	var object = getObject(id);
	return object.className;
}

function setStyle(obj, style)
{
	if (!isObject(obj))
		obj = getObject(obj);
	obj.className = style;
}

function changeStyle(obj, style1, style2)
{
	if (!isObject(obj))
		obj = getObject(obj);
	if (obj.className == style1)
		obj.className = style2;
	else 
		obj.className = style1;
}

/**
 * Form accessors
 */
function getForm(name)
{
	return document.forms[name];
}

function getFormElement(form, element)
{
	var form = getForm(form);
	
	if (form)
	{
		return form[element];
	}
	
	return null;
}

function submitForm(name)
{
	var form = getForm(name);

	if (form)
	{
		if (!form.onsubmit || form.onsubmit())
			form.submit();
	}
		
	return false;
}

function submitVariableForm(name, variable, value)
{
	var element = getFormElement(name, variable);
	element.value = value;

	return submitForm(name);
}

/**
 * Submit a form when a key is pressed
 * @param event
 * @param string Form name
 * @param array  Keys, by which to submit
 */
function submitKeysForm(e, name, keys)
{
	// keys by whom to submit
	if (!keys)
		keys = [13, null];
	if (!isArray(keys))
		keys = [keys, null];
	
	// pressed key
	var key;
	if (window.event) {
		key = event.keyCode;
	}
	else {
		key = e.which;
	}

	// onPressed action
	if (inArray(keys, key))
	{
		return submitForm(name);
	}
	
	return null;
}

/**
 * Value accessors
 */
function setValue(id, value)
{
	var object = getObject(id);
	if (object) {
		object.value = value;
		
		return true;
	}
	
	return false;
}

function getValue(id)
{
	var value = null;
	var object = getObject(id);
	
	if (object) {
		value = object.value;
		
		return value;
	}
	
	return false;
}

/**
 */
function getHTML(obj)
{
	if (!isObject(obj))
		obj = getObject(obj);
	return obj.innerHTML;
}

/**
 */
function setHTML(obj, html)
{
	if (!isObject(obj))
		obj = getObject(obj);
	obj.innerHTML = html;
}

/**
 * Cookie accessors
 */
function setCookie(name, value, expires, path, domain)
{
	if (!expires) {
		expires = new Date ();
		expires.setTime(expires.getTime() + 60*60*24*30); 
	}
	
	if (!path) {
		path = "/";
	}
	
	if (!domain) {
		domain = location.host;
	}
	
	var cookieString = name + " = " + value + "; expires=" + expires.toGMTString() + "; path=" + path + ";";// domain=" + domain;
	document.cookie = cookieString;
	
	return true;
}

/**
 * Get a cookie value
 */
function getCookie()
{
}

/**
 * Name, pathname input automatization
 */
function copyFilename(filename, id, replace_)
{
	if (!getValue(id) || replace_)
	{
		var backSlash = filename.split('\\');
		var forwSlash = filename.split('/');
		var slash = (backSlash.length > forwSlash.length) ? '\\' : '/';
		
		name = filename.substring((filename.lastIndexOf(slash) + 1), filename.lastIndexOf('.'));
		setValue(id, name);
	}
}

/**
 * Other common functions
 */
function getDisplay(obj)
{
	if (!isObject(obj))
		obj = getObject(obj);

	if (obj.style.display == 'none')
		return false
	else
		return true;
}

function setDisplay(obj, display)
{
	if (!isObject(obj))
		obj = getObject(id);
	if (!display)
		obj.style.display = 'none';
	else
		obj.style.display = '';
}

function triggerDisplay(obj)
{
	if (!getDisplay(obj))
		setDisplay(obj, true);
	else
		setDisplay(obj, false);
}

function getVisibility(obj)
{
	if (!isObject(obj))
		obj = getObject(obj);
	
	if (obj.style.visibility == 'hidden')
		return false;
	else
		return true;
}

function setVisibility(obj, visible)
{
	if (!isObject(obj))
		obj = getObject(obj);
	
	if (!visible)
		obj.style.visibility = 'hidden';
	else
		obj.style.visibility = 'visible';
}

function triggerVisibility(id)
{
	if (!getVisibility(id))
		setVisibility(id, true);
	else
		setVisibility(id, false);
}

/**
 * ListTable highlightRows
 */
function initHighlight()
{
	var tbls = document.getElementsByTagName('TABLE');
	for(var i = 0; i < tbls.length; i++)
	{
		if (tbls.item(i).className.indexOf('listTable') != -1 && tbls.item(i).className.indexOf('highlightRows') != -1)
		{
			try {
				var rows = tbls.item(i).getElementsByTagName("TR");
				for (var j = 0; j < rows.length; j++) {
					if (rows.item(j).className.indexOf('header') == -1) {
						rows.item(j).onmouseover = function () { highlightRow(this); }
						rows.item(j).onmouseout = function () { unhighlightRow(this); }
					}
				}
			} catch(e) {}
		}
	}
}

function highlightRow (row)
{
	var cells = row.getElementsByTagName('TD');
	for (var i = 0; i < cells.length; i++) {
		cells.item(i).className = 'td_hover';
	}
}

function unhighlightRow (row)
{
	var cells = row.getElementsByTagName('TD');
	for(var i = 0; i < cells.length; i++) {
		cells.item(i).className = '';
	}
}

/**
 * XStandard
 */
function WYSIWYG()
{
	var editor = null;
	var number = 1;
	var value = '';
	var regex = /<!-- Generated by XStandard version [0-9.]{1,10} on \d\d\d\d-\d\d-\d\d\w\d\d:\d\d:\d\d -->/;
	
	while (editor = getObject('XSeditor_' + number))
	{
		editor.EscapeUnicode = false;
		value = editor.value;
		value = value.replace(regex, '');

		setValue('XSeditor_value_' + number, value);
		
		number++;
	}
	
	return true;
}

/* GATIS */

/**
 * Menu specific
 */
function show_menu(menu)
{
	menu.className = 'header_button_show';
	for (i = 0; i < menu.childNodes.length; i++) {
		var div = menu.childNodes[i];
		if (div.nodeName == 'DIV'){
			div.className = 'header_menu_show';
		}
	}
	menu.style.zIndex=200;
}

function hide_menu(menu)
{
	menu.className = 'header_button_hide';
	for (i = 0; i < menu.childNodes.length; i++) {
		var div = menu.childNodes[i];
		if (div.nodeName == 'DIV'){
			div.className = 'header_menu_hide';
		}
	}
}

/**
 * Tools
 */
function show_icon_tools(pn)
{
	//search for tooltip
	for (i = 0; i < pn.childNodes.length; i++) {
		var tooltip_test = pn.childNodes[i];
		if (tooltip_test.className == 'icon_tools'){
			setVisibility(tooltip_test, 1);
		}
	}
}

function hide_icon_tools(pn)
{
	//search for tooltip
	for (i = 0; i < pn.childNodes.length; i++) {
		var tooltip_test = pn.childNodes[i];
		if (tooltip_test.className == 'icon_tools'){
			setVisibility(tooltip_test, 0);
		}
	}
}

/**
 * Tabs
 */
function tabClick(tab)
{
	var parent = tab.parentNode;
	for (var i=0; i<parent.childNodes.length; i++)
	{
		var child = parent.childNodes[i];
		if (child.nodeName == 'DIV' && child.id)
		{
			if (child.id == tab.id) {
				setStyle(child, "tab_header");
				setStyle(child.id + "_contents", "tab");
			}
			else {
				setStyle(child, "tab_header_hidden");
				setStyle(child.id + "_contents", "tab_hidden");
			}
		}
	}
	
}

/**
 * Tree specific
 */
function nodeClick(obj)
{
	//alert(obj.parentNode.className);
	if (obj.parentNode.className=="lastnode"){
		obj.parentNode.className="lastnode_hidden";
	}
	else if (obj.parentNode.className=="lastnode_hidden"){
		obj.parentNode.className="lastnode";
	}
	else if (obj.parentNode.className=="node"){
		obj.parentNode.className="node_hidden";
	}
	else if (obj.parentNode.className=="node_hidden"){
		obj.parentNode.className="node";
	}
	else if (obj.parentNode.className=="rootnode"){
		obj.parentNode.className="rootnode_hidden";
	}
	else if (obj.parentNode.className=="rootnode_hidden"){
		obj.parentNode.className="rootnode";
	}
}

/**
 * !!! New - panels
 */
function left_panel_open(panel)
{
	//make sure panel is open
	setStyle('left_panel_td', 'left_panel_open');
	
	//close all tabs and set tab headers to hidden
	var panels = getObject('left_panels');
	for (i = 0; i < panels.childNodes.length; i++) {
		var div = panels.childNodes[i];
		if (div.nodeName == 'DIV'){
			div.className = 'panel_hidden';
		}
	}
	var headers = getObject('left_panel_headers');
	for (i = 0; i < headers.childNodes.length; i++) {
		var div = headers.childNodes[i];
		if (div.nodeName == 'DIV'){
			div.className = 'panel_header_hidden';
		}
	}
	//open klicked active tab
	var active_panel = getObject(panel);
	active_panel.className = 'panel';
	var active_header = getObject(panel + '_header');
	active_header.className = 'panel_header';
}

window.onload = initHighlight;