/*
###############################################################################
# Author  : Andreas Schmidt                                                   #
# Company : Planit-Products GmbH & Co. KG                                     #
# E-Mail  : a.schmidt@planit-products.de                                      #
###############################################################################
*/

/**
 * alert.js - javascript alert replacement v1.0
 *
 * (c) 2009 Naden Badalgogtapeh - http://www.naden.de/blog/javascript-alert
 *
 */
window.alert=function(){var E=document.getElementById("alert");if(E){document.body.removeChild(E)}E=document.createElement("DIV");E.id=E.className="alert";document.body.appendChild(E);if(arguments.length==1){arguments=["",arguments[0]]}E.innerHTML=(arguments[0]==""?"":'<div class="title">'+arguments[0]+"</div>")+'<div class="body">'+arguments[1]+'</div><div class="button"><a href="" onclick="document.body.removeChild(document.getElementById(\'alert\'));return( false );">ok</a></div>';var D=A(),C=(Math.max(B(arguments[0]),B(arguments[1]))*6);E.style.width=C+"px";E.style.left=parseInt((D[0]+D[2]-C)/2)+"px";E.style.top=parseInt((D[1]+D[3]-(E.offsetHeight||E.pixelHeight))/2)+"px";E.style.display="block";function B(I){var J=I.split("<br />");if(J.length<=1){J=I.split("<br>")}if(J.length<=1){return(I.replace(/<(?:.|\s)*?>/g,"").length)}var F=0;for(var H=0;H<J.length;H++){var G=J[H].replace(/<(?:.|\s)*?>/g,"");if(G.length>F){F=G.length}}return(F)}function A(){var G=0,H=0,F=0,I=0;if(typeof (window.innerWidth)=="number"){G=window.innerWidth;H=window.innerHeight}else{if(document.documentElement&&(document.documentElement.clientWidth||document.documentElement.clientHeight)){G=document.documentElement.clientWidth;H=document.documentElement.clientHeight}else{if(document.body&&(document.body.clientWidth||document.body.clientHeight)){G=document.body.clientWidth;H=document.body.clientHeight}}}if(typeof (window.pageYOffset)=="number"){I=window.pageYOffset;F=window.pageXOffset}else{if(document.body&&(document.body.scrollLeft||document.body.scrollTop)){I=document.body.scrollTop;F=document.body.scrollLeft}else{if(document.documentElement&&(document.documentElement.scrollLeft||document.documentElement.scrollTop)){I=document.documentElement.scrollTop;F=document.documentElement.scrollLeft}}}return([F,I,G,H])}};


/**
* checkInput()
* Falls nicht alle Pflichtfelder ausgefühlt werden 
* wird ein bestimmter button disabled. Folgende Feldertypen können
* gecheckt werden: text, select, radio, checkbox, password, textarea, hidden.
*
* EXAMPLE
* var args = new Array('select', 'usergroup_id', 'text', 'username');
* window.setInterval("check('New', 'input', args)", 100);
*
* Bei den textfeldern (text, textarea, password, hidden) kann man die Eingabe 
* auch auf eine Mindestlänge (z.B. bei Passwort-Feldern) oder ob das eine gültige Email-Adresse ist
* überprüfen lassen. Dafür muß man dem Feldnamen 
* getrennt durch einen Doppelpunkt die Mindestlänge als Zahl anhängen bzw. 
* email als wort ('text', 'user_email:email')
*
* EXAMPLE
* var args = new Array('text', 'username', 'text', 'password:8');
* window.setInterval("check('Edit', 'update', args)", 100);
*
* @param string 	Formular name
* @param string 	Button name [:length as number] OR [:email]
* @param array 		Fields which must be fill in (typ and name)
*/
function checkInput(formName, buttonName, args) 
{
	if (document.forms[formName].elements[buttonName]) {
	
		var merker = new Array();
		var btnDisabled = true;
	
		for (var i = 0; i < args.length; i = i+2) {
	
			var index = i + 1;
			
			// select fields
			if (args[i] == 'select' && document.forms[formName].elements[args[index]]) {
				for (var j=0; j<document.forms[formName].elements[args[index]].length; j++) {
					if (document.forms[formName].elements[args[index]].options[j].selected == true 
						&& document.forms[formName].elements[args[index]].options[j].value != '') {
						merker[i] = 1;
						break;
					} else {
						merker[i] = 0;
					}
				}
			} 
	
			// text, textarea, password, hidden fields
			if (args[i] == 'text' || args[i] == 'pasword' || args[i] == 'textarea' || args[i] == 'hidden') {
				var tmp = args[index].split(":");
				if (document.forms[formName].elements[tmp[0]]) {
					newValue = trimString(document.forms[formName].elements[tmp[0]].value);
					if (typeof tmp[1] == "string" && tmp[1] == "email") {
						res = checkEmail(newValue);
						if (res == true) {
							merker[i] = 1;
						} else {
							merker[i] = 0;
						}
					} else if (typeof tmp[1] == "undefined" && newValue != '') {
						merker[i] = 1;
					} else if (newValue.length >= tmp[1]) {
						merker[i] = 1;
					} else {
						merker[i] = 0;
					}
				}
			}
	
			// checkboxes, radiobuttons
			if ((args[i] == 'checkbox' || args[i] == 'radio') && document.forms[formName].elements[args[index]]) {
				if (document.forms[formName].elements[args[index]].length) {
					for (var j=0; j<document.forms[formName].elements[args[index]].length; j++) {
						if (document.forms[formName].elements[args[index]][j].checked == true) {
							merker[i] = 1;
							break;
						} else {
							merker[i] = 0;
						}
					}
				} else {
					if (document.forms[formName].elements[args[index]].checked == true) {
						merker[i] = 1;
						break;
					} else {
						merker[i] = 0;
					}			
				}
			}
		
		}
		
		// check summary
		for (var x = 0; x < merker.length; x++) {
			if (merker[x] == 0) {
				btnDisabled = true;
				fontColor = '#666';
				break;
			} else {
				btnDisabled = false;
				fontColor = '';
			}
		}
			
		document.forms[formName].elements[buttonName].disabled = btnDisabled;
		document.forms[formName].elements[buttonName].style.color = fontColor;

	}
}


/**
 * Check and validate email address
 *
 * @param string 	Email
 * @return bool
 */
function checkEmail(str) 
{
  	var a = false;
  	var res = false;

	if (typeof(RegExp) == 'function') {
    	var b = new RegExp('abc');
    	if(b.test('abc') == true) {
			a = true;
		}
    }

  	if (a == true) {
    	reg = new RegExp('^([a-zA-Z0-9\\-\\.\\_]+)'+
                     '(\\@)([a-zA-Z0-9\\-\\.]+)'+
                     '(\\.)([a-zA-Z]{2,4})$');
    	res = (reg.test(str));
    } else {
    	res = (str.search('@') >= 1 &&
           str.lastIndexOf('.') > str.search('@') &&
           str.lastIndexOf('.') >= str.length-5)
    }
  	return res;
}


/**
 * Check and validate a number
 *
 * @param string 	Number
 * @return bool
 */
function checkNumber(str)
{
    if (!isNaN(parseFloat(str))) {
        return true;
    }
    return false;
}


/**
* Set all checkboxes of one field of true
*
* @param string 	Form name
* @param string 	Field name
* @return void
*/
function checkboxSelectReset(obj, fieldName) 
{
	formName = obj.form.name;
	if (obj.checked == true) {
		checkboxSelect(formName, fieldName);
	} else {
		checkboxReset(formName, fieldName);
	}
}


/**
* Reset checkbox
*
* @param string 	Form name
* @param string 	Field name
* @return void
*/
function checkboxReset(formName, fieldName) 
{
	if (document.forms[formName].elements[fieldName]) {
		if (document.forms[formName].elements[fieldName].length) {
			for (var j=0; j<document.forms[formName].elements[fieldName].length; j++) {
				document.forms[formName].elements[fieldName][j].checked = false;
			}
		} else {
			document.forms[formName].elements[fieldName].checked = false;
		}
	}
	return;
}
	

/**
* Set all checkboxes of one field of true
*
* @param string 	Form name
* @param string 	Field name
* @return void
*/
function checkboxSelect(formName, fieldName) 
{
	if (document.forms[formName].elements[fieldName]) {
		if (document.forms[formName].elements[fieldName].length) {
			for (var j=0; j<document.forms[formName].elements[fieldName].length; j++) {
				document.forms[formName].elements[fieldName][j].checked = true;
			}
		} else {
			document.forms[formName].elements[fieldName].checked = true;
		}
	}
	return;
}


/**
* Set select field
*
* @param string 	Form name
* @param string 	Field name
* @param string		Field value to select
* @return void
*/
function setSelectField(formName, fieldName, fieldValue) {
	for (i=0; i<document.forms[formName].elements[fieldName].length; i++) {
		if (document.forms[formName].elements[fieldName].options[i].value == fieldValue) {
	 		document.forms[formName].elements[fieldName].options[i].selected = true;
		}
	}
}


/**
* Set radio field
*
* @param string 	Form name
* @param string 	Field name
* @param string		Field value to select
* @return void
*/
function setRadioField(formName, fieldName, fieldValue) {
	for (i=0; i<document.forms[formName].elements[fieldName].length; i++) {
		if (document.forms[formName].elements[fieldName][i].value == fieldValue) {
	 		document.forms[formName].elements[fieldName][i].checked = true;
		}
	}
}


/**
* Set text field
*
* @param string 	Form name
* @param string 	Field name
* @param string		Field value to select
* @return void
*/
function setTextField(formName, fieldName, fieldValue) {
     if (document.forms[formName].elements[fieldName] && fieldValue) {
        document.forms[formName].elements[fieldName].value = fieldValue;
 	}
}


/**
* Set checkbox field
*
* @param string 	Form name
* @param string 	Field name
* @param string		Field value to select
* @return void
*/
function setCheckboxField(formName, fieldName, fieldValue) {
	var tmp = fieldValue.split(";");
	if (document.forms[formName].elements[fieldName].length) {
		for (i=0; i<document.forms[formName].elements[fieldName].length; i++) {
			if (tmp.length) {
				for (var j=0; j < tmp.length; j++) {
					if (document.forms[formName].elements[fieldName][i].value == tmp[j]) {
						document.forms[formName].elements[fieldName][i].checked = true;
					}
				}
			} else {
				if (document.forms[formName].elements[fieldName].value == tmp) {
					document.forms[formName].elements[fieldName].checked = true;
				}
			}
		}
	} else {
		if (tmp.length) {
			for (var j=0; j < tmp.length; j++) {
				if (document.forms[formName].elements[fieldName].value == tmp[j]) {
					document.forms[formName].elements[fieldName].checked = true;
				}
			}
		} else {
			if (document.forms[formName].elements[fieldName].value == tmp) {
				document.forms[formName].elements[fieldName].checked = true;
			}
		}
	}
}


/**
* Get selected radio field value
*
* @param string 	Form name
* @param string 	Field name
* @return void
*/
function getRadioFieldValue(formName, fieldName) {
	for (i=0; i<document.forms[formName].elements[fieldName].length; i++) {
		if (document.forms[formName].elements[fieldName][i].checked == true) {
	 		return document.forms[formName].elements[fieldName][i].value;
		}
	}
}

/**
* Delete spaces from a text string
*
* @param string 	Text string
* @return string 	Text string without spaces
*/
function trimString (str) 
{
	str = this != window ? this : str;
	return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}


/**
* Password generator
*
* @param integer 	Length of the password
* @return string 	Password
*/
function passGenerator(length) 
{
	var len = _checkDefault(length, 8);
	var keylist="ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";

	var password = '';
	for (var i = 0; i < len; i++) {
		password += keylist.charAt(Math.floor(Math.random() * keylist.length));
	}
	return password;
}


/**
* Hide or show of div tag area with cookie settings
*
* @param string 	ID of a div tag
* @return void
*/
function switchMenu(obj) 
{
	var el = document.getElementById(obj);
	var im = document.getElementById(obj + 'Img');

	if (el.style.display == "block") {
		el.style.display = "none";
		im.src = "../library/icons/expand.gif";
		
		var today = new Date();
		var offset = 1000 * 60 * 60 * 24 * 365;
	 	var expiresTime = new Date(today.getTime() + offset);
	  	document.cookie = obj + "=" + 1 + "; expires=" + expiresTime.toGMTString() + ";";
   	} else {
		el.style.display = "block";
		im.src = "../library/icons/collapse.gif";
		
		var today = new Date();
		var offset = 1000 * 60 * 60 * 24 * 365;
	 	var expiresTime = new Date(today.getTime() + offset);
	  	document.cookie = obj + "=" + 0 + "; expires=" + expiresTime.toGMTString() + ";";
 	}
    return;
}


/**
* Set X and Y postion
*
* @param string 	ID of a div tag
* @param obj 		Event
* @return void
*/
function setXY(id, obj) 
{
	var el = document.getElementById(id);
	if (el) {
		el.style.top = obj.clientY;
		el.style.left = obj.clientX;
 	}
}


/**
* Hide or show of div tag area
*
* @param string 	ID of a div tag
* @return void
*/
function switchInfo(obj) 
{
	var el = document.getElementById(obj);
	if (el.style.display == "block") {
		el.style.display = "none";
   	} else {
		el.style.display = "block";
 	}
}


/**
* Select or unselect (style)
*
* @param string 	ID of a div tag
* @return void
*/
function switchStyle(obj, currentColor, defaultColor) 
{
	if (currentColor == 'rgb(251, 228, 198)') {
		obj.style.backgroundColor = defaultColor;
   	} else {
		obj.style.backgroundColor = "rgb(251, 228, 198)";
 	}
}


/**
* Confirmation by data records deleting
*
* @param string 	Formular name
* @return void
*/
function deleteConfirmation(obj, jsSubmit, message) 
{
	var frmName = obj.form.name;
	var fieldValue = obj.value;
	var fieldName = obj.name;
	var jsSubmit = _checkDefault(jsSubmit, true);
	var message = _checkDefault(message, "Do you want to delete this data record!?!\nContinue?");
	if (fieldValue == "") {
		document.forms[frmName].reset();
		return false;
	}
	if ((fieldValue.search("delete") != -1) || (fieldName.search("delete") != -1)) {
		var x = window.confirm(message);
		if (jsSubmit == true) {
			if (x == true) {
				_initProgressBar();
				document.forms[frmName].submit();
			} else {
				document.forms[frmName].reset();
			}
		} else {
			if (x == true) {
				_initProgressBar();
				return true;
			} else {
				document.forms[frmName].reset();
				return false;
			}
		}
  	} else {
		_initProgressBar();
    	document.forms[frmName].submit();
	}
}


/**
* Serialize with javascript
*/
function serialize(arr) {
	var input = arr;
	if(typeof input != 'object') return false;
	if(typeof giveback == 'undefined') var giveback = new String();
	giveback = giveback+'a:'+input.length+':{';
	for(var position in input) {
			if(typeof position == 'object') serialize(position);
			else {
					if(typeof position == 'string') giveback = giveback+'s'+':'+position.length+':"'+position+'";';
					if(typeof position == 'number') giveback = giveback+'i:'+position+';';
					if(typeof input[position] == 'string') giveback = giveback+'s'+':'+input[position].length+':"'+input[position]+'";';
					if(typeof input[position] == 'number') giveback = giveback+'i:'+input[position]+';';                           
			}
	}
	giveback = giveback+'}';
	return giveback;
}

/**
* serialize()
* this function serialize a javascript array to pass it to php and php can unserialize it
*
* @param     array
* @return     string
*/
function serialize2(myArray)
{
    var counter = 0;
    var vardef = "";
    for (var key in myArray) {
        counter = counter +1;
        var length = myArray[key].length;
        if (length == "undefined")
        length = 1;
        vardef = vardef + "s:" + key.length + ":\"" + key + "\";" + "s:" + length + ":\"" + myArray[key] + "\";";
    }
    var serialized = "a:" + counter + ":{" + vardef + "}";
    return serialized;
} 
		
/**
* Base 64 encode function
*
* @param string 	Text
* @return string	Encoded text
*/
function base64_encode(decStr)
{
	var base64s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
	var bits;
	var dual;
	var i = 0;
	var encOut = '';
	
	while (decStr.length >= i + 3) {
		bits = (decStr.charCodeAt(i++) & 0xff) <<16 |
			(decStr.charCodeAt(i++) & 0xff) <<8  |
			decStr.charCodeAt(i++) & 0xff;
		encOut += base64s.charAt((bits & 0x00fc0000) >>18) +
			base64s.charAt((bits & 0x0003f000) >>12) +
			base64s.charAt((bits & 0x00000fc0) >> 6) +
			base64s.charAt((bits & 0x0000003f));
	}
	if (decStr.length -i > 0 && decStr.length -i < 3) {
		dual = Boolean(decStr.length -i -1);
		bits = ((decStr.charCodeAt(i++) & 0xff) <<16) |
			 (dual ? (decStr.charCodeAt(i) & 0xff) <<8 : 0);
		encOut += base64s.charAt((bits & 0x00fc0000) >>18) +
			base64s.charAt((bits & 0x0003f000) >>12) +
			(dual ? base64s.charAt((bits & 0x00000fc0) >>6) : '=') +
			'=';
	}
	return(encOut);
}


/**
* Base 64 decode function
*
* @param string 	Base 64 encoded text
* @return string	Decoded text
*/
function base64_decode(encStr)
{
	var base64s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
	var bits;
	var decOut = '';
	var i = 0;
	
	for (; i < encStr.length; i += 4) {
		bits = (base64s.indexOf(encStr.charAt(i))    & 0xff) <<18 |
			 (base64s.indexOf(encStr.charAt(i +1)) & 0xff) <<12 |
			 (base64s.indexOf(encStr.charAt(i +2)) & 0xff) << 6 |
			  base64s.indexOf(encStr.charAt(i +3)) & 0xff;
		decOut += String.fromCharCode((bits & 0xff0000) >>16, (bits & 0xff00) >>8, bits & 0xff);
	}
	if (encStr.charCodeAt(i -2) == 61) {
		return(decOut.substring(0, decOut.length -2));
	} else if (encStr.charCodeAt(i -1) == 61) {
		return(decOut.substring(0, decOut.length -1));
	} else { 
		return(decOut);
	}
}


/**
* Base 64 decode function
*
* @access private
* @param string 	Base 64 encoded text
* @return string	Decoded text
*/
function _checkDefault(parameter, defaultValue)
{
	if (typeof parameter == "undefined") {
		return defaultValue;
	}
	return parameter;
}


// set system message style
function setSysMessage() 
{
	if (document.getElementById('sysMessage')) {
		if (document.getElementById('sysMessage').innerHTML == '') {
			document.getElementById('sysMessage').style.display = 'none';
		} else {
//			document.getElementById('sysMessage').style.display = 'block';
            _sysMessage(getInnerHTML(document.getElementById('sysMessage')));
		}
	}
}

function _sysMessage(content)
{
	document.body
	if (document.getElementById("sysMessage")) {
		document.getElementById("sysMessage").innerHTML = "<div><p>" + content + "</p></div>"; 
	}
	setTimeout("_sysMessageHide()", 2000); 
}

function _sysMessageHide()
{
	if (document.getElementById("sysMessage")) {
		document.getElementById("sysMessage").innerHTML = ""; 
	}
}


/**
* Set focus
*
* @param string 	Form name
* @param string 	Field name
* @return void
*/
function setFocus(formName, fieldName) 
{
	if (document.forms[formName].elements[fieldName]) {
		document.forms[formName].elements[fieldName].focus();
	}
}

/**
* Set Order By value
*
* @param string 	Form name
* @return string	Value
*/
function setOrderBy(formName, val) 
{
	if (document.forms[formName].elements['orderBy'].value != "") {
		var sortMode = document.forms[formName].elements['orderBy'].value.split(':');
		if (sortMode[0] == val) {
			if (sortMode[1] == 'ASC') {
				document.forms[formName].elements['orderBy'].value = val + ":DESC";
			} else {
				document.forms[formName].elements['orderBy'].value = val + ":ASC";
			}
		} else {
			document.forms[formName].elements['orderBy'].value = val + ":ASC";
		}
	} else {
		document.forms[formName].elements['orderBy'].value = val + ":ASC";
	}
}


// beim einfügen von text werden alle attribute 
// ausser <br> und <p> entfernt
// grüße an ms word ;-)
function fnCopy()
{
    var r = document.body.createTextRange();
	r = window.clipboardData.getData("Text");
	r.clearAttributes;
	window.clipboardData.setData("Text", r);
}


/**
* Set cookie
*
* @param string 	Name
* @param string 	Value
* @return void
*/
function setCookie(name, wert) 
{
	var arg_wert = setCookie.arguments;
	var arg_laenge = setCookie.arguments.length;
	var expires = (arg_laenge > 2) ? arg_wert[2] : null;
	var path = (arg_laenge > 3) ? arg_wert[3] : null;
	var domain = (arg_laenge > 4) ? arg_wert[4] : null;
	var secure = (arg_laenge > 5) ? arg_wert[5] : false;
	document.cookie = name + "=" + escape(wert) + 
		((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
		((path == null) ? "" : ("; path=" + path)) +
		((domain == null) ? "" : ("; domain=" + domain)) +
		((secure == true) ? "; secure" : "");
}


/**
* Get cookie
*
* @param string 	Name
* @return string	Value
*/
function getCookie(name) 
{
	name += "=";
	var laenge = name.length;
	var cookie_laenge = document.cookie.length;
	var i = 0;
	while (i < cookie_laenge) {
		var j = i + laenge;
		if (document.cookie.substring(i, j) == name) {
			return _getCookieWert(j);
		}
		i = document.cookie.indexOf(" ", i) + 1;
		if (i == 0) {
			break;
		}
	}
	return null;
}


/*
* Insert the below inside the <head> section of your page:
* Now, for each involved link, add the part in red to its <a> tag, as follows:
*
* <a href="http://wsabstract.com" onclick="newWindow(this.href,'400','400','name','yes','no');">Website Abstraction</a>
* 
* @param string		Page URL
* @param integer	Width of new page
* @param integer	Height of new page
* @param string		Name of new window
* @param string		"yes" or "no"
* @param string		"yes" or "no"
*/
var mywin = null;
function new_center_window(mypage, mywidth, myheight, myname, scroll, resize)
{
	w = _checkDefault(mywidth, screen.width/2);
	h = _checkDefault(myheight, screen.height/2);
	n = _checkDefault(myname, 'PopUp');
	s = _checkDefault(scroll, 'no');
	r = _checkDefault(resize, 'no');
	
	LeftPosition = (screen.width) ? (screen.width-w)/2 : 0;
	TopPosition = (screen.height) ? (screen.height-h)/2 : 0;
	settings = 'height='+h+',width='+w+',top='+TopPosition+',left='+LeftPosition+',scrollbars='+s+',resizable='+r;
	win = window.open(mypage, n, settings);

	mywin.focus();
	return;
}


/*
* Open new modal window (plugins/modal)
* 
* <link rel="stylesheet" href="../plugins/modal/dhtmlwindow.css" type="text/css" />
* <script type="text/javascript" src="../plugins/modal/dhtmlwindow.js"></script>
* <link rel="stylesheet" href="../plugins/modal/modal.css" type="text/css" />
* <script type="text/javascript" src="../plugins/modal/modal.js"></script>
* 
* <a href="javascript:newModalDialog('test.php', 50, 30);">Test</a>
* 
* @param string		Page URL
* @param integer	Width of new page
* @param integer	Height of new page
*/
function newModalDialog(url, w, h, pagename, urlreload)
{
	var w = _checkDefault(w, 640);
	var h = _checkDefault(h, 480);
	var pagename = _checkDefault(pagename, 'Dialog');
	myModalWindow = dhtmlmodal.open('ModalWindow', 'iframe', encodeURI(url), '» '+pagename, 'width='+w+'px,height='+h+'px,center=1,resize=1,scrolling=1');
	
	if (urlreload) {
		myModalWindow.onclose = function() {
			parent.mainFrame.location.href = urlreload;
		}
	}
}


/**
* Get cookie value
*
* @param integer 	Position
* @return string	Value
*/
function _getCookieWert(position) 
{
	var ende = document.cookie.indexOf(";", position);
	if (ende == -1) {
		ende = document.cookie.length;
	}
	return unescape(document.cookie.substring(position, ende));
}


/**
* Get random number
*
* @param integer 	Initial number
* @return integer	Random number
*/
function getRandomNumber(number)
{
   return (Math.round(Math.random() * number) + 1);
}

/**
* Set background color from <td>-tag
*/
function setAttributeValue(tag, attribute, value) {
	for(var i = 0; i < document.getElementsByTagName(tag).length; i++) {
		document.getElementsByTagName(tag)[i].setAttribute(attribute,value,"false"); 
	}
}

// Set the "inside" HTML of an element.
function setInnerHTML(element, toValue)
{
	// IE has this built in...
	if (typeof(element.innerHTML) != 'undefined')
		element.innerHTML = toValue;
	// Otherwise, try createContextualFragment().
	else
	{
		var range = document.createRange();
		range.selectNodeContents(element);
		range.deleteContents();
		element.appendChild(range.createContextualFragment(toValue));
	}
}

// Set the "outer" HTML of an element.
function setOuterHTML(element, toValue)
{
	if (typeof(element.outerHTML) != 'undefined')
		element.outerHTML = toValue;
	else
	{
		var range = document.createRange();
		range.setStartBefore(element);
		element.parentNode.replaceChild(range.createContextualFragment(toValue), element);
	}
}

// Get the inner HTML of an element.
function getInnerHTML(element)
{
	if (typeof(element.innerHTML) != 'undefined')
		return element.innerHTML;
	else
	{
		var returnStr = '';
		for (var i = 0; i < element.childNodes.length; i++)
			returnStr += getOuterHTML(element.childNodes[i]);

		return returnStr;
	}
}

function getOuterHTML(node)
{
	if (typeof(node.outerHTML) != 'undefined')
		return node.outerHTML;

	var str = '';

	switch (node.nodeType)
	{
	// An element.
	case 1:
		str += '<' + node.nodeName;

		for (var i = 0; i < node.attributes.length; i++)
		{
			if (node.attributes[i].nodeValue != null)
				str += ' ' + node.attributes[i].nodeName + '="' + node.attributes[i].nodeValue + '"';
		}

		if (node.childNodes.length == 0 && in_array(node.nodeName.toLowerCase(), ['hr', 'input', 'img', 'link', 'meta', 'br']))
			str += ' />';
		else
			str += '>' + getInnerHTML(node) + '</' + node.nodeName + '>';
		break;

	// 2 is an attribute.

	// Just some text..
	case 3:
		str += node.nodeValue;
		break;

	// A CDATA section.
	case 4:
		str += '<![CDATA' + '[' + node.nodeValue + ']' + ']>';
		break;

	// Entity reference..
	case 5:
		str += '&' + node.nodeName + ';';
		break;

	// 6 is an actual entity, 7 is a PI.

	// Comment.
	case 8:
		str += '<!--' + node.nodeValue + '-->';
		break;
	}

	return str;
}


function evalKey(event) 
{
   if (event && ((event.which == 13) || (event.keyCode == 13))) { 
      return false;
   } else {
      return true;
   }
}


function adjustTextarea(obj)
{
  // zeilenumbrueche harmonisieren
  var text = obj.value.replace(/(\015\012)|(\015)|(\012)/g, '\n');

  // text in array verwandeln
  var text_arr = text.split('\n');

  //zeilen zaehlen
  obj.rows = text_arr.length;
}
