//
// Globale JavaScript Funktionen
//

// PopUp Funktionen

function CommonPopup(url, width, height, wndname, scrollbars)
{
	if(scrollbars == 1)
	{
		scrollbars = "yes";
	}
	else
	{
		scrollbars = "no";
	}

	wnd = window.open(url, wndname, 'toolbar=no, resizable=no, menubar=no, location=no, status=no, scrollbars =' + scrollbars + ', width =' + width + ', height =' + height + ', left=100, top=100, alwaysRaised=true');
	wnd.focus();

	if (wnd.opener == null)
	{ 
		wnd.opener = self;
	}
}

function popup_form_preview(form, url)
{
	var win_preview	= 0;
	
	if(win_preview)
	{
		if(win_preview.closed)
		{
			win_preview = window.open("about:blank", "form_preview", "width=400,height=250,toolbar=no,resizable=no,menubar=no,scrollbars=yes");
		}
		else
		{
			win_preview.self.focus();
		}
	}
	else
	{
		win_preview = window.open("about:blank", "form_preview", "width=400,height=250,toolbar=no,resizable=no,menubar=no,scrollbars=yes");
	}

	var old_target = form.target;
	form.target = "form_preview";
	
	var old_action = form.action;
	form.action = url;
	
	form.submit();
	
	form.target = old_target;
	form.action = old_action;
}

function insertsmiley(textbox, code)
{	
	if(is_ie)
	{
		textbox.focus();
		var sel = document.selection;
		var rng = sel.createRange();
		rng.colapse;
		
		if(textbox.createTextRange)
		{
			textbox.caretPos = rng.duplicate();
		}
	}
	
	if(textbox.createTextRange && textbox.caretPos)
	{
		var caretPos = textbox.caretPos;
		caretPos.text = ' ' + code + ' ';
	}
	else if(navigator.appName == "Netscape")
	{
		textbox.focus();

		start = textbox.selectionStart;
		end = textbox.textLength;

		endtext = textbox.value.substring(textbox.selectionEnd, end);
		starttext = textbox.value.substring(0, start);
		
		str = ' ' + code + ' ';

		textbox.value = starttext + str + endtext;

		textbox.selectionStart = start + str.length;
		textbox.selectionEnd = start + str.length;
	}
	else
	{
		textbox.value += ' ' + code + ' ';
	}
	
	textbox.focus();
}

function checklength(textbox)
{
	alert("Dein Text ist " + textbox.value.length + " Zeichen lang");
}

// Startseite festlegen

function setHomepage(url)
{
	if(is_ie && url != "")
	{
        document.body.style.behavior = "url(#default#homepage)";
        document.body.setHomepage(url);
	}
}


// Zu Favoriten hinzuf?gen

function addToFavorites(url, title)
{
	if(is_ie)
	{
		window.external.AddFavorite(url, title);
	}
	else if(window.sidebar)
	{
		//alert("Bitte Strg + D dr?cken, um "+title+" ("+url+") zu den Favoriten hinzuzuf?gen!");
		window.sidebar.addPanel(title, url, "");
	}
}


// Quelltext anzeigen

function showSource()
{

	window.location = "view-source:"+window.location;
}



// Text-Auswahl aus einer Textbox auslesen

function getSelectedText(textbox)
{
	var selected = '';

	if(navigator.appName == "Netscape" && textbox.textLength >= 0 && textbox.selectionStart != textbox.selectionEnd )
	{
		selected = textbox.value.substring(textbox.selectionStart, textbox.selectionEnd);	
	}
	else if(clientVer >= 4 && is_ie && is_win )
	{
		if(textbox.isTextEdit)
		{ 
			textbox.focus();

			var sel = document.selection;
			var rng = sel.createRange();

			rng.colapse;

			if((sel.type == "Text" || sel.type == "None") && rng != null)
			{
				if(rng.text.length > 0)
				{
					selected = rng.text;
				}
			}
		}	
	}

	return selected;
}


// Cursor Position wiederherstellen

function storeCaret(textEl)
{
	if(textEl.createTextRange)
	{
		textEl.caretPos = document.selection.createRange().duplicate();
	}
}


// Array Funktionen

// Array-Elemente zaehlen
function array_length(arr)
{
	for(i = 0; i < arr.length; i++)
	{
		if((arr[i] == "undefined") || (arr[i] == "") || (arr[i] == null))
		{
			return i;
		}
	}

	return arr.length;
}

// Array-Element hinzufuegen
function array_push(arr, value)
{
	arr[array_length(arr)] = value;
}

// Letztes Array-Element entfernen
function array_pop(arr)
{
	size = array_length(arr);

	retval = arr[size - 1];
	delete arr[size - 1];

	return retval;
}

function fetch_object(idname)
{
	if (document.getElementById)
	{
		return document.getElementById(idname);
	}
	else if (document.all)
	{
		return document.all[idname];
	}
	else if (document.layers)
	{
		return document.layers[idname];
	}
	else
	{
		return null;
	}
}


function element_getAbsOffsetLeft(id)
{

	var element = document.getElementById(id);
	var offsetLeft = 0;

	while(element)
	{
		offsetLeft += element.offsetLeft;
		element = element.offsetParent;
	}

	return offsetLeft;
}

function element_getAbsOffsetTop(id)
{
	var element = document.getElementById(id);
	var offsetTop = 0;

	while(element)
	{
		offsetTop += element.offsetTop;
		element = element.offsetParent;
	}

	return offsetTop;
}

function element_addClassName(id, className)
{
	var element = document.getElementById(id);
	
	if(element && !element_hasClassName(id, className))
	{
		if(element.className != "")
		{
			element.className += " "+className;
		}
		else
		{
			element.className = className;
		}
	}
}

function element_hasClassName(id, className)
{
	var element = document.getElementById(id);
	var retval = false;

	if(element)
	{
		var clsNames = element.className.split(" ");

		for(var i=0; i < clsNames.length; i++)
		{
			if(clsNames[i] == className)
			{
				retval = true;
				break;
			}
		}

	}

	return retval;

}

function element_removeClassName(id, className)
{
	var element = document.getElementById(id);

	if(element)
	{
		var clsNames = element.className.split(" ");

		element.className = "";

		for(var i=0; i < clsNames.length; i++)
		{
			if(clsNames[i] != className)
			{
				if(element.className != "")
				{
					element.className += " "+clsNames[i];
				}
				else
				{
					element.className = clsNames[i];
				}
			}
		}

	}

}


// Zeigt ein Element an oder blendet es aus und speichert die Anzeige in einem Cookie
//
// @param	string	Unique ID for the collapse group
// @return	boolean	false
//
function toggle_collapse(objid)
{
	//obj = document.getElementById('collapseobj_' + objid);
	//img = document.getElementById('collapseimg_' + objid);

	obj = fetch_object('collapseobj_' + objid);
	img = fetch_object('collapseimg_' + objid);
	
	if(!obj)
	{
		// nothing to collapse!
		if (img)
		{
			// hide the clicky image if there is one
			img.style.display = 'none';
		}
		
		return false;
	}

	if(obj.style.display == 'none')
	{
		obj.style.display = '';
		
		save_collapsed(objid, false);
		
		if(img)
		{
			img.src = 'images/default/collapse.gif';
		}
	}
	else
	{
		obj.style.display = 'none';

		save_collapsed(objid, true);
		
		if(img)
		{
			img.src = 'images/default/expand.gif';
		}

	}
	
	return false;
}

// Speichert die Anzeige von Objekten in einem Cookie
//
// @param	string	Unique ID for the collapse group
// @param	boolean	Add a cookie
//
function save_collapsed(objid, addcollapsed)
{
	var collapsed = fetch_cookie('hlp_collapse');
	var tmp = new Array();

	if(collapsed != null)
	{
		collapsed = collapsed.split('\n');

		for (var i in collapsed)
		{
			if (collapsed[i] != objid && collapsed[i] != '')
			{
				tmp[tmp.length] = collapsed[i];
			}
		}
	}

	if(addcollapsed)
	{
		tmp[tmp.length] = objid;
	}

	expires = new Date();
	expires.setTime(expires.getTime() + (1000 * 86400 * 365));
	
	set_cookie('hlp_collapse', tmp.join('\n'), expires);
}

// Liest den Wert eines Cookies aus
//
// @param	string	Cookie name
// @return	string
//
function fetch_cookie(name)
{
	cookie_name = name + '=';
	cookie_length = document.cookie.length;
	cookie_begin = 0;

	while (cookie_begin < cookie_length)
	{
		value_begin = cookie_begin + cookie_name.length;

		if(document.cookie.substring(cookie_begin, value_begin) == cookie_name)
		{
			var value_end = document.cookie.indexOf (';', value_begin);
			
			if(value_end == -1)
			{
				value_end = cookie_length;
			}

			return unescape(document.cookie.substring(value_begin, value_end));
		}

		cookie_begin = document.cookie.indexOf(' ', cookie_begin) + 1;
		
		if(cookie_begin == 0)
		{
			break;
		}
	}
	
	return null;
}

//
// Setzt ein Cookie
//
// @param	string	Cookie name
// @param	string	Cookie value
// @param	date	Cookie expiry date
//
function set_cookie(name, value, expires)
{
	document.cookie = name + '=' + escape(value) + '; path=/' + (typeof expires != 'undefined' ? '; expires=' + expires.toGMTString() : '');
}



// function to format a number with separators. returns formatted number.
// num - the number to be formatted
// decpoint - the decimal point character. if skipped, "." is used
// sep - the separator character. if skipped, "," is used
function number_format(num, decpoint, sep) {
  // check for missing parameters and use defaults if so
  if (arguments.length == 2) {
    sep = ".";
  }
  if (arguments.length == 1) {
    sep = ".";
    decpoint = ",";
  }
  // need a string for operations
  num = num.toString();
  // separate the whole number and the fraction if possible
  a = num.split(decpoint);
  x = a[0]; // decimal
  y = a[1]; // fraction
  z = "";


  if (typeof(x) != "undefined") {
    // reverse the digits. regexp works from left to right.
    for (i=x.length-1;i>=0;i--)
      z += x.charAt(i);
    // add seperators. but undo the trailing one, if there
    z = z.replace(/(\d{3})/g, "$1" + sep);
    if (z.slice(-sep.length) == sep)
      z = z.slice(0, -sep.length);
    x = "";
    // reverse again to get back the number
    for (i=z.length-1;i>=0;i--)
      x += z.charAt(i);
    // add the fraction back in, if it was there
    if (typeof(y) != "undefined" && y.length > 0)
      x += decpoint + y;
  }
  return x;
}