function setQueryParam(_loc, _query){
	_loc.href = _loc.protocol+'//'+_loc.host+':'+_loc.port+_loc.pathname+'?'+_query;
}

function getForm(_node){
	while(_node.parentNode != null && _node.nodeName.toLowerCase() != 'form'){
		_node = _node.parentNode;
	}
	return _node;
}

function isDefined( variable){
	return (typeof(window[variable]) == "undefined")?  false: true;
}

function addEvent( obj, type, fn ){
   if (obj.addEventListener) {
      obj.addEventListener( type, fn, false );
   } else if (obj.attachEvent) {
      obj["e"+type+fn] = fn;
      obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
      obj.attachEvent( "on"+type, obj[type+fn] );
   }
}

function removeEvent( obj, type, fn ){
   if (obj.removeEventListener) {
      obj.removeEventListener( type, fn, false );
   } else if (obj.detachEvent) {
      obj.detachEvent( "on"+type, obj[type+fn] );
      obj[type+fn] = null;
      obj["e"+type+fn] = null;
   }
}

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}
/* empty debug function */
function debug(_var){
}

function addOnClickEvent(_element, func) {
  var oldFunc = _element.onclick;
  if (typeof _element.onclick != 'function') {
    _element.onclick = func;
  } else {
    _element.onclick = function() {
      oldFunc();
      func();
    }
  }
}

function addOnMouseOverEvent(_element, func) {
  var oldFunc = _element.onmouseover;
  if (typeof _element.onmouseover != 'function') {
    _element.onmouseover = func;
  } else {
    _element.onmouseover = function() {
      oldFunc();
      func();
    }
  }
}
function addOnMouseOutEvent(_element, func) {
  var oldFunc = _element.onmouseout;
  if (typeof _element.onmouseout != 'function') {
    _element.onmouseout = func;
  } else {
    _element.onmouseout = function() {
      oldFunc();
      func();
    }
  }
}

function getInnerSize(){
	var myWidth = 0, myHeight = 0;
	if( typeof( window.innerWidth ) == 'number' ) {
	  //Non-IE
	  myWidth = window.innerWidth;
	  myHeight = window.innerHeight;
	} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
	  //IE 6+ in 'standards compliant mode'
	  myWidth = document.documentElement.clientWidth;
	  myHeight = document.documentElement.clientHeight;
	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
	  //IE 4 compatible
	  myWidth = document.body.clientWidth;
	  myHeight = document.body.clientHeight;
	}
	return [myWidth, myHeight];
}

function getInnerWidth(){
	return getInnerSize()[0];
}

function getInnerHeight(){
	return getInnerSize()[1];
}

function getKeyCode(event){
	if (!event) 
		event = window.event; 
	return (event.charCode) ? event.charCode : event.keyCode;
}

function handleEnterAction(form, event, action, value){
	var charCode = getKeyCode(event);
	if(charCode == 13){ 
		form.action_name.value=action;
		form.action_value.value=value;
		form.submit();
		return false;
	}
	return true;
}

function checkElementByLength(_id, _minlen){
	var
		element = document.getElementById(_id);

	if (!element)
		return 0;

	var
		clazz = element.className;
	var
		nClazz;
	if (clazz){
		nClazz = clazz.replace(/_marked$/, '');
	}
	
	if (element.value.length < _minlen){
		element.className =nClazz+'_marked';
		return 0;
	}else{
		element.className =nClazz;
		//debug(element.className);
	}
	return 1;
}

function setElementSizeById(_id, _width, _height){
	setElementPositionById(_id, null, null, _width, _height);
}

function setElementWidthById(_id, _width){
	setElementPositionById(_id, null, null, _width, null);
}

function setElementPositionById(_id, _x, _y, _width, _height){
	setElementPosition(document.getElementById(_id), _x, _y, _width, _height);
}

function setElementPosition(element, _x, _y, _width, _height){
	if (!element){
   		error("element not found!");
   		return;
  }
 	if (document.all){
 		// ohne px

 		if (_x != null)
			element.style.left=_x;
 		if (_y != null)
			element.style.top=_y;
 		if (_width != null)
  		element.style.width=_width;
 		if (_height != null)
  		element.style.height=_height;
 	}else{
 		// mit px
 		if (_x != null)
			element.style.left=_x+"px";
 		if (_y != null)
			element.style.top=_y+"px";
 		if (_width != null){
 			if (_width == 'auto')
 				element.style.width=_width;
 			else
				element.style.width=_width+"px";
		}
 		if (_height != null){
 			if (_height == 'auto')
 				element.style.height=_height;
 			else
  			element.style.height=_height+"px";
  	}
 	}
}

function StringBuffer() {
	this.buffer = []; 
}
StringBuffer.prototype.append = function(string){
	this.buffer.push(string);
	return this;
}

StringBuffer.prototype.toString = function(){
	return this.buffer.join("");
}


function getMouseXY(ev) {
  var
  	x,y;
  
  if(ev && ev.pageX){
    x = ev.pageX;	
    y = ev.pageY;
  } else if(window.event && window.event.clientX) {
    var isStrictMode = document.compatMode 
        && document.compatMode != 'BackCompat' ? true : false;
    var scrollX = isStrictMode ? 
        document.documentElement.scrollLeft : document.body.scrollLeft;
    var scrollY	= isStrictMode ? 
        document.documentElement.scrollTop : document.body.scrollTop;
    x = window.event.clientX + scrollX;
    y = window.event.clientY + scrollY;
  }
  return [x,y];
}

function getDimension(_element) {
	return [_element.offsetWidth, _element.offsetHeight];
}


function findPosition(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function buildFormData(_form){
	var
		len = _form.elements.length;
	var
		i;
	var
		arr = new Array();

	for (i=0; i < len; i++){
		var
			element = _form.elements[i];
		var
			type = element.type;
		var
			name = element.name;
		var
			value;// = getValueByElement(element);
		if (type == 'checkbox' || type == 'radio'){
			if (!element.checked)
				continue;
			value = element.value;
		}else
			value = getValueByElement(element);
		
		arr[name] = value;
	}
			
	return arr;
}

function setStateInMap(_start, _map, _id, _state){
	var
		name = _id.split('_');
	var
		current;
	
	for (i=0; i < name.length; i++){
		if (current)
			current += '_'+name[i];
		else
			current = name[i];
		
		if (i >= _start)
			_map[current]=_state;
	}
}

function setValueById(_id, _value){
	var
		element = document.getElementById(_id);
	if (element)
		element.value = _value;
}

function getValueById(_id){
	var
		element = document.getElementById(_id);
	if (element){
		return getValueByElement(element);
		
	}else{
		error('element with id: '+_id+' not found!');
	}

	return null;	
}

function getValueByElement(element){
		var
			type = element.type;
		
		if (type == 'checkbox' || type == 'radio'){
			if (!element.checked)
				return null;
			return element.value;
		}else		
		if (type == 'select-one'){
			if (element.selectedIndex >=0)
				return element.options[element.selectedIndex].value;
			else
				return null;
		}else
			return element.value;
}

function setCheckedById(_id, _state){
	var
		element = document.getElementById(_id);
	if (element)
		element.checked = _state;
}

function setCSSClassById(_id, _cssClass){
	var
		element = document.getElementById(_id);
	if (element)
		element.className=_cssClass;
}

function setDisplayBlockOrNoneById(_id, _block){
	var
		element = document.getElementById(_id);
	if (element){
		
		if (_block){
			element.style.display = 'block';
			element.style.visibility='visible';
		}
		else{
			element.style.display = 'none';
			element.style.visibility='hidden';
		}
	}
}
function setVisibilityById(_id, _visible){
	if (_visible)
		showElementById(_id);
	else
		hideElementById(_id);
}

function showElementById(_id){
	var
		element = document.getElementById(_id);
	if (element)
		element.style.visibility='visible';
}

function hideElementById(_id){
	var
		element = document.getElementById(_id);
	if (element)
		element.style.visibility='hidden';
}

function setContent(_id, text){
	var element;
	
	if (typeof(_id) == 'string')	
		element = document.getElementById(_id);
	else
		element = _id;
		
	if (element){
		if (text != null)
			element.innerHTML = text;
		else
			element.innerHTML = '';
	}
}
function showContent(_id, text){
	var element = document.getElementById(_id);

	if (element){
		if (text != null)
			element.innerHTML = text;
		else
			element.innerHTML = '';
		element.style.visibility='visible';			
	}
}
function backupContent(_id){
	var element = document.getElementById(_id);
	
	if (element){
		if (document.contentCache == null){
			document.contentCache = new Array();
		}
		document.contentCache[_id] = element.innerHTML;
	}
}
function restoreContent(_id){
	var element = document.getElementById(_id);
	
	if (element && document.contentCache){
		element.innerHTML = document.contentCache[_id];
	}
}
function hideContent(_id){
	var element = document.getElementById(_id);
	
	if (element){
		element.style.visibility='hidden';
		element.innerHTML = '';
	}
}

function preloadImage(_target){
	if (_target == null)
		return;
	var
		id = _target.id;
	if (!document.imageCache)
		document.imageCache = new Array(); 

	if (document.imageCache[id] == null){
		document.imageCache[id] = new Image();			
		document.imageCache[id].src = _target.uri;
		
		//debug('adding uri:'+_target.uri+' to cache');
	}
}


function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

