﻿/**
* go to top if in frame loaded :D
*/
var gotop = (top == self);
if (!gotop) top.location.href = self.location.href; 

/**
* hover effect
*
* @param object cell
* @param string classname
*/
function mHoverCell(obj, classname) {
	obj.className = classname;
	obj.setAttribute("class", classname);
}

/**
* proofs the length of textarea fields
*
* @param object textarea
* @param number length
*/
function proofTxtLength(obj, length) {
	if (obj.value.length > length) {
		obj.value = obj.value.substr(0, length);
	}
	
	if (obj.value.length == length) {
		obj.style.backgroundColor = "#ffffcc";
	} else {
		obj.style.backgroundColor = "";
	}
}

/**
* shows the rest of charachters in textarea fields
*
* @param object textarea
* @param object target
* @param number length
*/
function showTxtRest(obj, target, length) {
	proofTxtLength(obj, length);
	target.innerHTML = length - obj.value.length;
}

/**
* numcheck of inputfield
*
* @param object input
*/
function numcheck(obj) {
	var num = obj.value;
	var new_num = "";
	for (var x = 0; x < num.length; x++)
		new_num += (num[x].match(/[0-9]/) ? num[x] : "");
	
	obj.value = new_num;
}

/**
* pricecheck of inputfield
*
* @param object input
*/
function pricecheck(obj) {
	var num = obj.value;
	// replace , with .
	num = num.replace(",", ".");
	// replace signs not in range
	num = num.replace(/[^0-9.]*/, "");
	// proof float part
	var pos;
	pos = num.indexOf(".");
	if (pos != -1) {
		var append = num.substr(pos, num.length-pos);
		// remove any signs not numeric in append an trim length
		append = append.replace(/[^0-9]*/, "");
		
		if (append.length > 2)
			append = append.substr(0,2);
		
		// rebuild num
		num = num.substr(0,pos)+"."+append;
	}
	obj.value = num;
}

/**
* max input fields checker
*
* @param object input
* @param number n
*/
function maxCheckValues(obj, n) {
	var name = obj.getAttribute("name");
	
	var count = 0;
	for (var x = 0; x < document.getElementsByName(name).length; x++) {
		if (document.getElementsByName(name)[x].checked)
			count++
	}
	
	if (count > n) {
		alert("maximal "+n+"!");
		obj.checked = false;
	}
}

/**
* checks radio buttons against input field
*
* @param object input
* @param string radio
*/
function radioCheck(input, radio) {
	// radio string to object
	var radios = document.getElementsByName(radio);
	//alert(radios.length);
	if (input.value > 0) {
		for (var x = 0; x < radios.length; x++) {
			radios[x].checked = false;
		}
	}
}

/**
* checks input field against radio buttons
*
* @param object radio
* @param string input
*/
function inputCheck(radio, input) {
	// input string to object
	var input = document.getElementsByName(input)[0];
	
	if (radio.checked) {
		input.value = "";
	}
}

/**
* opens FAQ window
*
* @param string url
*/
function openFaq(url) {
	
	var win = window.open(url, "FAQ", "top=0, left=0, width=600, height=400, scrollbars=yes");
	win.focus();
	return false;
}

/**
* goto Url
*
* @param string url
*/
function gotoUrl(url) {
	top.location.href = url;
}

/**
* switch Background
*
* @param OBJECT obj
* @param BOOLEAN ieonly
* @param string color
*/
function switchBG(obj, ieonly, color) {
	if (ieonly && !document.all)
		return;
	
	obj.style.backgroundColor = color;
}

/**
* set input value blank
*
* @param OBJECT obj
* @param string default value
*/
function setInputValue(obj, dvalue) {
	
	if (obj.value == dvalue)
		obj.value = "";
	else
		obj.select();
	
	return true;
}

/**
* open/close holder by id
*
* @param string id
*/
function opencloseHolder(id) {
	var obj = document.getElementById(id);
	
	if (!obj)
		return false;
	
	if (obj.style.display == "")
		obj.style.display = "none";
	else
		obj.style.display = "";
	
	return false;
}

/**
* check all checkboxes in holder
*
* @param string id holder
*/
function checkAllSimple(id) {
	var obj = document.getElementById(id);
	
	if (!obj)
		return false;
	
	var elements = obj.getElementsByTagName("input");
	
	for (var x = 0; x < elements.length; x++) {
		if (elements[x].type == 'checkbox' && !elements[x].disabled)
			elements[x].checked = true;
	}
}

/**
* check all checkboxes in holder
*
* @param object mainobject
* @param string id
*/
function checkAll(main, id) {
	var obj = document.getElementById(id);
	
	if (!obj)
		return false;
	
	var elements = obj.getElementsByTagName("input");
	
	// checked true or false?
	var status = false;
	if (main.checked) {
		status = true;
	}
	
	for (var x = 0; x < elements.length; x++) {
		if (elements[x].type == 'checkbox' && !elements[x].disabled)
			elements[x].checked = status;
	}
}

/**
* proofs subelements to uncheck main (group) elemement
*
* @param string holder
* @param string mainelement
*/
function proofUncheck(holder, mainelement) {
	var holder_ = document.getElementById(holder);
	var mainelement_ = document.getElementsByName(mainelement)[0];
	
	if (!holder_)
		return false;
	if (!mainelement_)
		return false;
	
	var elements = holder_.getElementsByTagName("input");
	
	// find checked and unchecked elements
	var found_unchecked = 0;
	var found_checked = 0;
	for (var x = 0; x < elements.length; x++) {
		if (elements[x].type == 'checkbox' && !elements[x].disabled) {
			if (elements[x].checked)
				found_checked++;
			else
				found_unchecked++;
		}
	}
	
	// checked true or false?
	var status = false;
	if (mainelement_.checked && found_unchecked > 0) {
		mainelement_.checked = false;
	} else if (!mainelement_.checked && found_unchecked == 0) {
		mainelement_.checked = true;
	}
}

function autoChecker(id) {
	
	var obj = document.getElementById(id);
	
	if (!obj)
		return false;
	
	var elements = obj.getElementsByTagName("input");
	
	for (var x = 0; x < elements.length; x++) {
		if (elements[x].type == 'checkbox' && !elements[x].disabled)
			elements[x].checked = (elements[x].checked ? false : true);
	}
}

/**
* opens a url in popup window
*
* @param string url
*/
function msgWindow (url) {
	
	var width = 400;
	var height = 400;
	var name= "MsgWin";
	var x = 0;
	var y = 0;
	
	var newWin = window.open(url, name, "width="+width+",height="+height+",left="+x+",top="+y+",scrollbars=yes");
	newWin.focus();
	
	return false;
}

function openImageWindow(url) {
	
	var width = 400;
	var height = 400;
	var name= "MsgWin";
	var x = 0;
	var y = 0;
	
	var newWin = window.open(url, name, "width="+width+",height="+height+",left="+x+",top="+y+",scrollbars=no");
	newWin.focus();
	
	return false;
}

setlinktext = true;
function setLinkText(text, iname) {
	if (!setlinktext)
		return;
	var obj = document.getElementsByName(iname)[0];
	obj.value = replaceSpecialSigns(text);
}

function replaceSpecialSigns(text) {
	text = text.replace(/ä/g, "ae");
	text = text.replace("ö", "oe");
	text = text.replace("ü", "ue");
	text = text.replace("Ä", "Ae");
	text = text.replace("Ö", "Oe");
	text = text.replace("Ü", "Ue");
	text = text.replace("ß", "ss");
	text = text.replace(/[^a-z0-9A-Z]/g, "-");
	return text;
}

/**
* blending for message and error texts
*/
function blending () {
	// config
	var mclass = "message_text_head";
	var eclass = "error_text_head";
	var mcolor1 = "#009900";
	var mcolor2 = "#005100";
	var ecolor1 = "#ff3300";
	var ecolor2 = "#750000";
	var speed = 10;
	
	// find message boxes
	var divs = document.getElementsByTagName("div");
	for (var x = 0; x < divs.length; x++) {
		if (divs[x].className == mclass) {
			// set random id
			divs[x].setAttribute("id", "__blending__m__"+x);
			_runMessageBlending("__blending__m__"+x, mcolor1, mcolor2, speed);
		}
	}
	// find error boxes
	var divs = document.getElementsByTagName("div");
	for (var x = 0; x < divs.length; x++) {
		if (divs[x].className == eclass) {
			// set random id
			divs[x].setAttribute("id", "__blending__e__"+x);
			_runMessageBlending("__blending__e__"+x, ecolor1, ecolor2, speed);
		}
	}
}

function _runMessageBlending(id, color1, color2, speed) {
	var div = document.getElementById(id);
	if(div.style.backgroundColor=="") {
		div.style.backgroundColor = color1;
		window.setTimeout("_runMessageBlending('"+id+"', '"+color1+"', '"+color2+"', "+speed+")", 3*speed);
	} else {
		// ge hex color
		var bg = div.style.backgroundColor;
		
		// to dec array
		var _color1 = new Array();
		if (document.all)
			_color1 = [xd(bg.substr(1,2)), xd(bg.substr(3,2)), xd(bg.substr(5,2))];
		else {
			bg = bg.replace("rgb(", "");
			bg = bg.replace(")", "");
			_color1 = bg.split(",");
			//_color1 = [xd(bg.substr(1,2)), xd(bg.substr(3,2)), xd(bg.substr(5,2))];
		}
		
		var _color2 = new Array();
		_color2 = [xd(color2.substr(1,2)), xd(color2.substr(3,2)), xd(color2.substr(5,2))];

		// diffenrences
		var red = (_color2[0] > _color1[0] ? _color2[0] - _color1[0] : _color1[0] - _color2[0]);
		var yel = (_color2[1] > _color1[1] ? _color2[1] - _color1[1] : _color1[1] - _color2[1]);
		var blu = (_color2[2] > _color1[2] ? _color2[2] - _color1[2] : _color1[2] - _color2[2]);
		
		// build steps
		var s_red = (red / speed < 3 ? (_color2[0] > _color1[0] ? _color2[0] - _color1[0] : _color1[0] - _color2[0]) : Math.floor(red / speed));
		var s_yel = (yel / speed < 3 ? (_color2[1] > _color1[1] ? _color2[1] - _color1[1] : _color1[1] - _color2[1]) : Math.floor(yel / speed));
		var s_blu = (blu / speed < 3 ? (_color2[2] > _color1[2] ? _color2[2] - _color1[2] : _color1[2] - _color2[2]) : Math.floor(blu / speed));
		// build new color
		_color1[0] = (_color2[0] > _color1[0] ? _color1[0] + s_red : _color1[0] - s_red);
		_color1[1] = (_color2[1] > _color1[1] ? _color1[1] + s_yel : _color1[1] - s_yel);
		_color1[2] = (_color2[2] > _color1[2] ? _color1[2] + s_blu : _color1[2] - s_blu);
		
		// set new color
		bg = "#"+dx(_color1[0])+""+dx(_color1[1])+""+dx(_color1[2]);
		div.style.backgroundColor= bg;
		
		if (bg == color2) {
			div.style.backgroundColor = color1;
			//window.setTimeout("_runMessageBlending('"+id+"', '"+color2+"', '"+color1+"', "+speed+")", 3*speed);
		}
		//else
			window.setTimeout("_runMessageBlending('"+id+"', '"+color1+"', '"+color2+"', "+speed+")", 10*speed);
	}
}

function dx (d) {
  max = Math.pow(16,8);
  
  if (d > max) {
    return false;
    return;
  }
  if (d < 0) {
    return false;
  }
  var z = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
    "A", "B", "C", "D", "E", "F");
  var x = "";
  var i = 1, v = d, r = 0;
  while (v > 15) {
    v = Math.floor(v / 16);
    i++;
  }
  v = d;
  for (j=i; j >= 1; j--) {
    x = x + z[Math.floor(v / Math.pow(16, j-1))];
    v = v - (Math.floor(v / Math.pow(16, j-1)) * Math.pow(16, j-1));
  }
  return zerofill(x, 2);
}

function xd (x) {
  max = 8;
  
  if (x.length > max) {
    return false;
  }
  var e = new Array();
  var z = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
    "A", "B", "C", "D", "E", "F");
  var d = 0, chk = 0;
  x = x.toUpperCase();

  for(i=0; i < x.length; i++) {
    for (j=0; j <= 16; j++) {
      if (x.substring(i, i+1) == z[j]) {
        chk = 1;
        e[i] = j;
      }
    }
    if (chk == 0) {
    return false;
    }
  }
  for (i=0; i < x.length; i++)
    d = d + e[i] * Math.pow(16, x.length-i-1)
  return d;
}

function zerofill (str, length) {
	while (str.length < length)
		str = "0"+str;
	return str;
}
