//	create_navigation_catalog
function getElement(f,eleName){
	argv = getElement.arguments;
	args = getElement.arguments.length;
	(args > 2) ? pos = argv[2] : pos = 0;
	
	r = 0;
	for(var i=0;i<f.elements.length;i++){
		if(f.elements[i].name.indexOf(eleName) >= 0){
			if(r == pos){
				return f.elements[i];
			}
			r++;
		}
	}
	return false;
}
//	create_navigation_catalog
function setElementValue(f,eleName,val){
	argv = setElementValue.arguments;
	args = setElementValue.arguments.length;
	(args > 3) ? pos = argv[3] : pos = 0;
	(args > 4) ? isStr = argv[4] : isStr = 0;
	ele = getElement(f,eleName,pos);
	if(!ele || ele == null) return false;
	valOri = val;
	if(!isStr || isStr == "0" || isStr == 0) val = f.elements[val];
	if(!val || val == null || isStr){
		ele.value = valOri;
		return true;
	}
	
	
	if(val.type == "checkbox"){
		if(val.checked) ele.value = val.value;
		else ele.value = 0;
	}else if(val[0].type == "radio"){
		for(var ii=0;ii<val.length;ii++){
			if(val[ii].checked){
				ele.value = val[ii].value;
			}
		}
	}else{
		ele.value = val.value;
	}
}
//	navigation_catalog
function setNodeStatus(node,status){
	nodeA = nodeHF.value.split(",");
	if(node < 0 || node > nodeA.length - 1) return false;
	nodeA[node] = status;
	nodeStr = "";
	for(var i=0;i<nodeA.length;i++){
		if(nodeStr.length < 1) nodeStr = nodeA[i];
		else nodeStr+= ","+nodeA[i];
	}
	nodeHF.value = nodeStr;
	return true;
}
//	create_navigation_catalog
function getElements(f,eleName){
	argv = getElements.arguments;
	args = getElements.arguments.length;
	
	r = 0; a = new Array();
	for(var i=0;i<f.elements.length;i++){
		if(f.elements[i].name.indexOf(eleName) >= 0){
			a[r] = f.elements[i];
			r++;
		}
	}
	return a;
}

function setFormlistValue(list,value){
	if(list.type != "select-one" && list.type != "select-multiple") return false;
	for(var i=0;i<list.options.length;i++){
		if(list.options[i].value == value){
			list.options[i].selected = true;
			return true;
		}
	}
	return false;
}


function getRadioValue(rb){
	if(rb.type == "radio"){
		if(rb.checked) return rb.value;
	}else{
		for(var i=0;i<rb.length;i++){
			if(rb[i].checked) return rb[i].value;
		}
	}
	return false;
}
function checkRadioValue(rb,value){
	if(rb.type == "radio"){
		rb.checked = true;
	}else{
		for(var i=0;i<rb.length;i++){
			if(rb[i].value == value) rb[i].checked = true;
		}
	}
}
function isRadioValueChecked(rb){
	if(rb.type == "radio"){
		if(rb.checked) return true;
	}else{
		for(var i=0;i<rb.length;i++){
			if(rb[i].checked) return true;
		}
	}
	return false;
}

function getFormlistValues(fl){
	if(list.type != "select-one" && list.type != "select-multiple") return false;
	str = "";
	for(var i=0;i<list.options.length;i++){
		if(list.options[i].selected){
			if(str.length < 1) str = list.options[i].value;
			else str+= ","+list.options[i].value;
		}
	}
	return str;
}

function toggleCheckbox(cb){
	if(cb.type != "checkbox") return false;
	if(cb.checked) cb.checked = false;
	else cb.checked = true;
}

function getValueArray(f,eleName){
	argv = getValueArray.arguments;
	args = getValueArray.arguments.length;
	(args > 2) ? onlyTrueValues = argv[2] : onlyTrueValues = false;

	eleArray = getElements(f,eleName);
	var valArray = new Array();
	ii = 0;
	for(var i=0;i<eleArray.length;i++){
		if(onlyTrueValues && (eleArray[i].value == 0 || eleArray[i].value == "0" || eleArray[i].value.length < 1)){
		}else{
			valArray[ii] = eleArray[i].value;
			ii++;
		}
	}
	return valArray;
}

function implode(del,a){
	if(del.length < 1) del = ",";
	if(a.length < 1) return false;
	str = "";
	for(var i=0;i<a.length;i++){
		if(str.length < 1) str = a[i]; else str+= del+""+a[i];
	}
	return str;
}
// source: http://droeppez.de/download/js-tut/js-tut/tutorial/position.html
function getElementPosition(element){
  var elem=element,tagname="",x=0,y=0;
  while ((typeof(elem)=="object")&&(typeof(elem.tagName)!="undefined"))
  {
    y+=elem.offsetTop;     /* Offset des jeweiligen Elements addieren */
    x+=elem.offsetLeft;    /* Offset des jeweiligen Elements addieren */
    tagname=elem.tagName.toUpperCase(); /* tag-Name ermitteln, Grossbuchstaben */
    if (tagname=="BODY") elem=0;
   	if (typeof(elem)=="object"){
      if (typeof(elem.offsetParent)=="object") elem=elem.offsetParent;
		}
  }
  position=new Object();
  position.x=x;
  position.y=y;
  return position;
}

function getBooleanValue(value){
		if(value.length < 1 || value == 0 || value == "0") return false;
		else return true;
}

function strReplace(str,findStr,replaceStr){
  var str = str.split(findStr);
  str = str.join(replaceStr);
  return str;
}

function setBgColor(obj,status,color){
	var argc = this.setBgColor.arguments.length;
	var argv = this.setBgColor.arguments;
	
	var blockColor = (argc > 3) ? argv[3].toUpperCase() : "";
	var doIt = (argc > 4) ? getBooleanValue(argv[4]) : false;
	
	var prop = new Property("backgroundColor","string");
	if(DOM || MS){
		curColor = rgbToHex(eval("obj.style.backgroundColor"));
	}else if(NS){
		curColor = rgbToHex(eval("obj.backgroundColor"));
	}
	//if(status == 1) alert("color="+curColor+"\nname="+obj.id);
	//if(status == 0) alert(curColor+" != "+blockColor);
	if((status == 0 || status == 1) && (curColor != blockColor || doIt)){
		prop.setValue(obj,color);
	}else if(status == 2){
		if(curColor == color) prop.setValue(obj,blockColor);
		else prop.setValue(obj,color);
	}
}

function rgbToHex(value){
    if(value.indexOf("rgb") >= 0){
        var rgbStr = value.slice(value.indexOf('(') + 1,value.indexOf(')'));
        var rgbValues = rgbStr.split(",");
        value = "#";
        var hexChars = "0123456789ABCDEF";
        for (var i = 0; i < 3; i++)
        {
            var v = rgbValues[i].valueOf();
            value += hexChars.charAt(v/16) + hexChars.charAt(v%16);
        }
    }
	return value.toUpperCase();
}

function addFormlistOptions(eleId,from,to){
	var argc = this.addFormlistOptions.arguments.length;
	var argv = this.addFormlistOptions.arguments;
	
	var defValue = (argc > 3) ? argv[3] : null;

	var ele = document.getElementById(eleId);
	var selectedIndex = -1;
	
	if(typeof(from) == "number" && typeof(to) == "number"){
		if(from > to){
			var temp = from;
			from = to; 
			to = temp;
		}
		var ii = 0;
		for(var i=from;i<=to;i++){
			var newEle = document.createElement("option");
			var attr = document.createAttribute("value");
			attr.nodeValue = i;
			newEle.setAttributeNode(attr);
			if(i == defValue){
				var attr = document.createAttribute("selected");
				newEle.setAttributeNode(attr);
				selectedIndex = ii;
			}
			newEle.appendChild(document.createTextNode(i));
			ele.appendChild(newEle);
			ii++;
		}
		if(document.forms[0]){
			var obj = eval("document.forms[0]."+eleId);
			if(obj) obj.selectedIndex = selectedIndex;
		}
	}
	if(typeof(from) == "string" && typeof(to) == "string"){
		from = from.split(",");
		if(to.length < 1) to = from; else to = to.split(",");
	}
	if(typeof(from) == "object" && typeof(to) == "object"){
		if(to.length < from.length){
			for(var i=to.length;i<from.length;i++) to[i] = from[i];
		}
		for(var i=0;i<from.length;i++){
			var newEle = document.createElement("option");
			var attr = document.createAttribute("value");
			attr.nodeValue = from[i];
			newEle.setAttributeNode(attr);
			if(from[i] == defValue){
				var attr = document.createAttribute("selected");
				newEle.setAttributeNode(attr);
				selectedIndex = i;
			}
			newEle.appendChild(document.createTextNode(to[i]));
			ele.appendChild(newEle);
		}
		if(document.forms[0]){
			var obj = eval("document.forms[0]."+eleId);
			if(obj) obj.selectedIndex = selectedIndex;
		}
	}
}

function removeElementFrom(fromEleId,eleId){
	var argc = this.removeElementFrom.arguments.length;
	var argv = this.removeElementFrom.arguments;
	
	var placeHolder = (argc > 2) ? argv[2] : "";

	if(typeof(fromEleId) == "string") var fromEle = document.getElementById(fromEleId);
	else var fromEle = fromEleId;
	if(typeof(eleId) == "string") var ele = document.getElementById(eleId);
	else var ele = eleId;
	var removedEle = fromEle.removeChild(ele);
	
	if(placeHolder.length > 0){
		var dummy = document.createElement(placeHolder);
		var attr = document.createAttribute("id");
		attr.nodeValue = ele.getAttribute("id");
		dummy.setAttributeNode(attr);
		fromEle.appendChild(dummy);
	}
	
	return removedEle;
}

function setClass(eleId,status,className){
	var argc = this.setClass.arguments.length;
	var argv = this.setClass.arguments;
	
	var blockClass = (argc > 3) ? argv[3] : "";

	if(className.length < 1) return false;
	if(typeof(eleId) == "string") var ele = getElem("id",eleId,null);
	else if(typeof(eleId) == "object") var ele = eleId;
	else return false;
	if(typeof(ele) == "object"){
		//alert(ele.className+" != "+blockClass);
		if(status == 0 || status == 1){
			if(ele.className != blockClass) ele.className = className;
		}
		if(status == 2){
			if(ele.className == className) ele.className = blockClass;
			else ele.className = className;
		}
	}
}
function trim(str){
	str = str.replace(new RegExp("(^[ ]*|[ ]*$)","g"),"");
	//str = str.replace(new RegExp("^[ ]+","g"),"");
	//str = str.replace(new RegExp("[ ]+$","g"),"");
	return str;
}

function strip_tags(str){
	str = str.replace(new RegExp("</[a-zA-Z0-9]+>","g"),"");
	str = str.replace(new RegExp("<.*>","g"),"");
	return str;
}
function setElementAttribute(eleId,attr,value){
	var argc = setElementAttribute.arguments.length;
	var argv = setElementAttribute.arguments;
	
	var attrType = (argc > 3) ? argv[3] : "string";
	var isAttribute = (argc > 4) ? argv[4] : false;
	
	if(typeof(eleId) == "string") var ele = getElem("id",eleId,null);
	else if(typeof(eleId) == "object") var ele = eleId;
	
	if(DOM || MS){
		//curColor = rgbToHex(eval("obj.style.backgroundColor"));
		var prop = new Property(attr,"string",isAttribute);
	}else if(NS){
		//curColor = rgbToHex(eval("obj.backgroundColor"));
		var prop = new Property(attr,"string",true);
	}
	prop.setValue(ele,value);
}
function getElementAttribute(eleId,attr){
	var argc = getElementAttribute.arguments.length;
	var argv = getElementAttribute.arguments;
	
	var attrType = (argc > 2) ? argv[2] : "string";
	var isAttribute = (argc > 3) ? argv[3] : false;
	
	//if(typeof(eleId) == "string") var ele = getElem("id",eleId,null);
	//else if(typeof(eleId) == "object") var ele = eleId;
	
	if(DOM || MS){
		var prop = new Property(attr,"string",isAttribute);
	}else if(NS){
		var prop = new Property(attr,"string",true);
	}
	prop.attachValue(eleId);
	return prop.getValue();
}
function removeAllTextNodes(eleId){
	var argc = removeAllTextNodes.arguments.length;
	var argv = removeAllTextNodes.arguments;
	
	if(typeof(eleId) == "string") var ele = getElem("id",eleId,null);
	else if(typeof(eleId) == "object") var ele = eleId;
	if(typeof(ele) != "object") return false;
	
	for(var i=0;i<ele.childNodes.length;i++){
		child = ele.childNodes[i];
		if(child.nodeType == 3){
			ele.removeChild(child);
			i--;
		}
	}
	return ele;
}
function toggleLayerDisplay(layer1,layer2){
	l1 = getElementAttribute(layer1,"display","string",false);
	l2 = getElementAttribute(layer2,"display","string",false);
	if(l1 == "block" && l2 == "block"){
		setElementAttribute(layer1,"display","none","string",false);
		setElementAttribute(layer2,"display","none","string",false);
	}else if(l1 == "block"){
		setElementAttribute(layer1,"display","none","string",false);
		setElementAttribute(layer2,"display","block","string",false);
	}else if(l2 == "block"){
		setElementAttribute(layer1,"display","block","string",false);
		setElementAttribute(layer2,"display","none","string",false);
	}else{
		setElementAttribute(layer1,"display","block","string",false);
		setElementAttribute(layer2,"display","block","string",false);
	}
}
function browserDetect(){
	(browserDetect.arguments.length > 0) ? flag = arguments[0] : flag = true;
	if(!flag){
		if(navigator.appName.toLowerCase().indexOf("microsoft") >= 0 && document.all) return "ie4";
		else if(navigator.appName.toLowerCase().indexOf("opera") >= 0 && document.all) return "opera";
		else if(document.all) return "ie4";
		else if(document.layers) return "ns4";
		else if(document.getElementById && !document.all) return "ns6"; 
		else return "other";
	}else{
		//alert(navigator.appName+"\n"+navigator.appVersion+"\n"+navigator.userAgent);
		var _ver = navigator.appVersion.toLowerCase();
		var _ua = navigator.userAgent.toLowerCase();
		if(_ver.indexOf("windows") > 0) _ver = "win";
		else if(_ver.indexOf("mac") > 0) _ver = "mac";
		else if(_ver.indexOf("linux") > 0) _ver = "linux";
		else if(_ver.indexOf("unix") > 0) _ver = "unix";
		else _ver = "other";
		
		if(_ua.indexOf("msie") > 0){
			var m = _ua.match(/msie[ ]*(\d\.?)+/g);
			m = m[m.length-1].replace("/[ ]+/"," ").split(" ");
			return {name : m[0], version : m[1], plattform : _ver};
		}else{
			var m = _ua.match(/[\w]+\/(\d\.?)+/g);
			m = m[m.length-1].split("/");
			return {name : m[0], version : m[1], plattform : _ver};
		}
	}
}

function browserDetect__OLD__(){
	if(navigator.appName.toLowerCase().indexOf("microsoft") >= 0 && document.all) return "ie4";
	else if(navigator.appName.toLowerCase().indexOf("opera") >= 0 && document.all) return "opera";
	else if(document.all) return "ie4";
	else if(document.layers) return "ns4";
	else if(document.getElementById && !document.all) return "ns6"; 
	else return "other";
}
function platformDetect(){
	if(navigator.appVersion.indexOf("Win") != -1) return "win";
	else if(navigator.appVersion.indexOf("Mac") != -1) return "mac";
	else return "other";
}
function getWindowX(){
	if(typeof(window.innerWidth) == "undefined" || window.innerWidth == null){
		if(document.compatMode.toLowerCase() == "css1compat") return document.body.parentNode.clientWidth;
		else return document.body.clientWidth;
	}else return window.innerWidth;
}
function getWindowY(){
	if(typeof(window.innerHeight) == "undefined" || window.innerHeight == null){
		if(document.compatMode.toLowerCase() == "css1compat") return document.body.parentNode.clientHeight;
		else return document.body.clientHeight;
	}else return window.innerHeight;
}
function getMouseX(evt){
	if(br.name == "msie" || typeof(evt.pageX) == "undefined") return window.event.clientX;
	else return evt.pageX;
}
function getMouseY(evt){
	if(br.name == "msie" || typeof(evt.pageY) == "undefined") return window.event.clientY;
	else return evt.pageY;
}
function getPicX(pic){
	obj = document.images[pic];
	if(typeof(obj) != "object" || obj == null) return false;
	if(br.name == "msie" || br.name == "opera"){
		x = 0;
		do{
			x+=obj.offsetLeft;
			obj = obj.offsetParent;
		}while(obj.offsetLeft > 0);
		return x;
	}else return obj.x;
}
function getObjX(obj){
	if(typeof(obj) == "string") obj = document.getElementById(obj);
	if(typeof(obj) != "object" || obj == null) return false;
	if(typeof(obj.offsetLeft) != "undefined"){
		x = 0;
		do{
			x+=obj.offsetLeft;
			obj = obj.offsetParent;
		}while(obj.offsetLeft > 0);
		return x;
	}else return obj.x;
}
function getObjY(obj){
	if(typeof(obj) == "string") obj = document.getElementById(obj);
	if(typeof(obj) != "object" || obj == null) return false;
	if(typeof(obj.offsetTop) != "undefined"){
		y = 0;
		do{
			y+=obj.offsetTop;
			obj = obj.offsetParent;
		}while(obj.offsetTop > 0);
		return y;
	}else return obj.y;
}
function getPicY(pic){
	obj = document.images[pic];
	if(typeof(obj) != "object" || obj == null) return false;
	if(br.name == "msie" || br.name == "opera"){
		y = 0;
		do{
			y+=obj.offsetTop;
			obj = obj.offsetParent;
		}while(obj.offsetTop > 0);
		return y;
	}else return obj.y;
}
function getPaddingLeft(ele){
	return getPadding(ele,"left");
}
function getPaddingRight(ele){
	return getPadding(ele,"right");
}
function getPaddingTop(ele){
	return getPadding(ele,"top");
}
function getPaddingBottom(ele){
	return getPadding(ele,"bottom");
}
function getPadding(ele,side){
	if(typeof(ele) == "string") ele = document.getElementById(ele);
	if(typeof(ele) != "object") return 0;
	if(typeof(side) == "undefined"){
		return {left:getPadding(ele,"left"),right:getPadding(ele,"right"),bottom:getPadding(ele,"bottom"),top:getPadding(ele,"top")};
	}
	var prop = "padding"+side.substr(0,1).toUpperCase()+side.substr(1).toLowerCase();
	var prop2 = "";
	if(prop == "paddingLeft" || prop == "paddingRight") prop2 = "offsetWidth"; 
	else if(prop == "paddingTop" || prop == "paddingBottom") prop2 = "offsetHeight";
	if(typeof(ele.style[prop]) == "undefined" || prop2 == "") return 0;

	var val = ele.style[prop];
	if(val.length < 1) return 0;
	var pc = val.indexOf("%");
	var px = val.indexOf("px");
	try{
		if(pc == val.length-1){
			return  Math.round(ele[prop2]*(parseInt(val)/100));
		}else if(px == val.length-2){
			return parseInt(val);
		}else if(val.toLowerCase() == "inherit"){
			return getPadding(ele.parentNode,side);
		}else{
			return 0;
		}
	}catch(e){
		return 0;
	}
}

function windowOpenFullscreen(url){
	argv = windowOpenFullscreen.arguments;
	args = windowOpenFullscreen.arguments.length;
	(args > 1) ? name = argv[1] : name = "FullscreenWindow";
	if (window.screen){
		var hori=screen.availWidth;
		var verti=screen.availHeight;
		window.open(url,name, 'width='+hori+',height='+verti+',fullscreen=1, scrollbars=auto,left='+(0)+',top='+(0));
	}
}
function array_merge(a1,a2){
	var argc = this.array_merge.arguments.length;
	var argv = this.array_merge.arguments;
	
	var a = new Array();
	for(var i in a1) a.push(a1[i]);
	for(var x=1;x<argc;x++){
		for(var i in argv[x]){
			var flag = false;
			for(var ii in a){
				if(a[ii] == argv[x][i]){
					flag = true;
					break;
				}
			}
			if(!flag) a.push(argv[x][i]);
		}
	}
	return a;
}
function float2money(val){
	val = parseInt(val*100) / 100;
	if(typeof val != "string") val+= "";
	val = val.replace(/\./,",");
	val = val.replace(/(,[\d])/,"$10");
	if(val.indexOf(",") < 1) val+=",00";
	val = val.replace(/(\d+)([\d]{3},)/g,"$1.$2");
	val = val.replace(/(\d+)([\d]{3}.)/g,"$1.$2");
	return val;
}
function money2float(val){
	if(typeof val != "string") return val;
	val = val.replace(/\./g,"");
	val = val.replace(/,/g,".");
	return val*1;
}
function selectNodeText(node){
	if(document.selection){
		sel = document.selection;
		var range = sel.createRange();
		range.moveToElementText(node);
		//range.text = "xxx";
		range.select();
	}else if(document.getSelection){
		sel = window.getSelection();
		var range = document.createRange();
		//var range = sel.getRangeAt(0);
		range.selectNodeContents(node);
		//range.insertNode(document.createTextNode("xxx"));
		//node.parentNode.normalize();
		sel.addRange(range);
	}else return;
}
function array_search(key,array){
	for(iter in array){
		if(array[iter] == key) return iter;
	}
	return -1;
}
function getUrlQueries(url){
	var params = url.match(/([\w_]+=[^&]*)&?/g);
	var objStr = "{";
	var keysStr = "";
	if(params){
		for(var iter=0;iter<params.length;iter++){
			var a = params[iter].split("=");
			keysStr+= "\""+a[0]+"\"";
			a[1] = a[1].replace(/&$/,"");
			objStr+= "\""+a[0]+"\" : \""+a[1]+"\"";
			if(iter < params.length-1){
				objStr+=", ";
				keysStr+=", ";
			}
		}
		objStr+= ", \"props\" : ["+keysStr+"]";
	}
	objStr+= "}";
	var obj = eval("("+objStr+")");
	obj.getProp = function(idx){
		if(typeof idx == "number"){
			idx = this.props[idx];
		}
		return eval("this."+idx);
	}
	return obj;
}

function createXMLHttpRequest(){
	try{ return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e){}
	try{ return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e){}
	try{ return new XMLHttpRequest(); } catch(e){}
	alert("XMLHttpRequest not supported");
	return null;
}

function getDOMTreePath(ele){
	var p = new Array();
	var addSelf = (arguments.length > 1) ? arguments[1] : true;
	if(addSelf) p.push(ele.tagName);
	while(ele.parentNode != null && typeof(ele.parentNode) == "object"){
		p.unshift(ele.parentNode.tagName);
		ele = ele.parentNode;
	}
	return p.join("/");
}

var os = platformDetect();
var br = browserDetect();

if(typeof(util) == "undefined" || util == null) var util = new Object();
util.moveRow = function(from,to,rows,toggleListener){
	if(rows < 1) return false;
	var to = to % rows;
	to = from + to;
	if(to < 0) to = to = rows + to;
	if(to > rows-1) to = to - rows;
	var diff = to - from;
	
	if(diff > 0){
		for(var i=from;i<to;i++){
			toggleListener(i,i+1);
		}
	}else if(diff < 0){
		for(var i=from;i>to;i--){
			toggleListener(i,i-1);
		}
	}
}

