/**
 * element.lib.js - insert headline here
 *
 * COPYRIGHT: All  title   and  proprietary  rights,  including  trade
 * secrets,   in   the   Software   and   any   copies thereof and the
 * accompanying  written   materials,   are  owned  by   schukai  GmbH
 * and  are  protected  by  German  copyright  laws,  other applicable
 * copyright   laws  and  international  treaty  provisions.
 *
 * @package    alvine
 * @author     schukai GmbH <info@schukai.de>
 * @copyright  Copyright (C) 2002, 2003, 2004, 2005, 2006 schukai GmbH
 * @license    http://www.alvine.de/license/
 * @version    20061114
 * @link       http://www.alvine.de/
 */

function alvine_element_createObjectPath(initObject, pathString){

  if(typeof initObject != 'object') initObject = document;

  var pathParts = pathString.split('.');
  var newObjName = pathParts.shift();

  if(typeof initObject[newObjName] != 'object') initObject[newObjName] = new Object();

  if(pathParts.length > 0) alvine_element_createObjectPath(initObject[newObjName], pathParts.join('.'));

  return true;
}

if(typeof alvine != 'object') alvine = new Object();
alvine_element_createObjectPath(alvine, 'data.cache.elements');

//PAGE
function page_onLoad(fn, useCapturing){
  obj = window;

  if(typeof event_add == 'undefined') return false;

  useCapturing = (useCapturing===true)?true:false;
  event_add(obj, 'load', fn, useCapturing);

  return true;
}

function page_onScroll(fn, useCapturing){
  obj = document;
  if(_ALVINE_IE) obj = window;

  if(typeof event_add == 'undefined') return false;

  useCapturing = (useCapturing===true)?true:false;
  event_add(obj, 'scroll', fn, useCapturing);

  return true;
}


//Element
function element_get(type,res){
  var obj;

  //caching  
  //if(typeof alvine.data.cache.elements[type] != 'object') alvine.data.cache.elements[type] = new Object();
  //if(typeof alvine.data.cache.elements[type][res] == 'object') return alvine.data.cache.elements[type][res];

  if(document.getElementById) {
    
    if(type=='id') obj = document.getElementById(res);
    
  } else if(document.all) {

    if(type=='id') obj = document.all[res];
  }

  //set cache
  //alvine.data.cache.elements[type][res] = obj;

  return obj;
}

//Class


function element_addClassName(obj, className) {
  return _element_addClassName(obj, className, ' ');
};


function _element_addClassName(obj,className, offset){
  obj = element_isObject(obj);
  
  if(!obj) return false;
  if(typeof offset == 'undefined') offset = '';
  obj.className+=offset+className;

  return true;
}

function element_removeClassName(obj,className,offset){
  obj = element_isObject(obj);

  if(!obj) return false;
  if(typeof offset == 'undefined') offset = '';
    
  obj.className = str_replace(offset+className, '', obj.className);  
  
  return true;

}

function element_replaceClassName(obj,classNameSearch,classNameReplace){
  obj = element_isObject(obj);
  
  obj.className = str_replace(classNameSearch, classNameReplace, obj.className);
  
  
  return true;

}

//Position

function element_move(obj,vleft,vtop){
  obj = element_isObject(obj);
  
  var size = element_getSize(obj);

  vleft = element_recalcValue2px(vleft,size.width);
  vtop  = element_recalcValue2px(vtop,size.height);
  vleft = parseInt(vleft);
  vtop  = parseInt(vtop);

  element_setLeft(obj, vleft);
  element_setTop(obj, vtop);
                          
  return true;
}

function element_center(obj){
  obj = element_isObject(obj);
  
  element_centerX(obj);
  element_centerY(obj);
  
  
  return true;
}

function element_centerX(obj){
  obj = element_isObject(obj);
  
  var viewPort   = alvine_getViewport();

  var size = element_getSize(obj);
  
  var parentCenter = new Object();
  var objectCenter = new Object();
  
  parentCenter.x = parseInt((viewPort.width/2));
  
  objectCenter.x = parseInt((size.width/2));
  
  var newPosition = new Object();
  
  newPosition.x = parentCenter.x - objectCenter.x;
  
  var currentPositionY = element_getPositionY(obj);
  
  element_move(obj, newPosition.x, currentPositionY);
  
  return true;
}

function element_centerY(obj){
  obj = element_isObject(obj);
  
  var viewPort   = alvine_getViewport();


  var size = element_getSize(obj);
  
  var parentCenter = new Object();
  var objectCenter = new Object();
  
  parentCenter.y = parseInt((viewPort.height/2));
  
  objectCenter.y = parseInt((size.height/2));
  
  var newPosition = new Object();
  
  newPosition.y = parentCenter.y - objectCenter.y;
  
  var currentPositionX = element_getPositionX(obj);
  
  element_move(obj, currentPositionX, newPosition.y);
  
  return true;
}

function element_getAbsolutePositionX(obj, id){
  
  obj = element_isObject(obj);
  
  var left = element_getPositionX(obj);

  if(_ALVINE_NS) return left;  
  if(!id) id = "noid"; // dummywert!  


  if(typeof obj.offsetParent != 'object') return left;
  var parentObj = obj.offsetParent;  
  while(parentObj != null && typeof parentObj != 'undefined' && parentObj.tagName!="HTML") {    
    left += element_getPositionX(parentObj);
    if(parentObj.id==id) return left;
    parentObj = parentObj.offsetParent;
  }

  return left;   
  
}

function element_getAbsolutePositionY(obj, id){
  
  obj = element_isObject(obj);
   
  var top = element_getPositionY(obj); 
  if(_ALVINE_NS) return top;
  
  if(!id) id = "noid"; // dummywert!

  if(typeof obj.offsetParent != 'object') return top;
  var parentObj = obj.offsetParent;
  while(parentObj != null && typeof parentObj != 'undefined' && parentObj.tagName!="HTML") {    
    top += element_getPositionY(parentObj);
    if(parentObj.id==id) return top;
    parentObj = parentObj.offsetParent;
  }
  
  return top;
  
}

function element_getPositionX(obj){  
  
  obj = element_isObject(obj);

  if(typeof obj.style.position != 'undefined'){
    if(obj.style.position == 'absolute' && typeof obj.style.left !='undefined' && obj.style.left != '' && obj.style.left != 'auto'){
      return (parseInt(obj.style.left));
    }
  }
  
  if(typeof obj.offsetLeft =='number'){
    return (parseInt(obj.offsetLeft));
  }
  
  if(typeof obj.clientLeft =='number'){
    return (parseInt(obj.clientLeft));
  }

  if(typeof obj.layerX =='number'){
    return (parseInt(obj.layerX));
  }
  
  if(typeof obj.pageX =='number'){
    return (parseInt(obj.pageX));
  }
  
  return false;
  
}

function element_getPositionY(obj){
  
  obj = element_isObject(obj);

  if(typeof obj.style.position != 'undefined'){
    if(obj.style.position == 'absolute' && typeof obj.style.top != 'undefined' && obj.style.top != '' && obj.style.top != 'auto'){
      return (parseInt(obj.style.top));
    }
  }
  
  if(typeof obj.offsetTop =='number'){
    return (parseInt(obj.offsetTop));
  }
  
  if(typeof obj.clientTop =='number'){
    return (parseInt(obj.clientTop));
  }

  if(typeof obj.layerY =='number'){
    return (parseInt(obj.layerY));
  }
  
  if(typeof obj.pageY =='number'){
    return (parseInt(obj.pageY));
  }
  
  return false;
  
}

function element_getScrollPositionX(){

  if(_ALVINE_IE){
    var left = 0;

    if(_ALVINE_QUIRKS_MODE && document.body && typeof document.body.scrollLeft != 'undefined'){ //quirks
      left = document.body.scrollLeft;
    } else if(typeof document.documentElement != 'undefined'){ //standard
      if(typeof document.documentElement.scrollLeft != 'undefined'){
        left = document.documentElement.scrollLeft;
      }
    }

    return parseInt(left);
  }

  if(typeof window.pageXOffset != 'undefined'){
    return parseInt(window.pageXOffset);
  }

  if(typeof window.scrollX !='undefined'){
    return parseInt(window.scrollX);
  }

  return 0;
}

function element_getScrollPositionY(){

  if(_ALVINE_IE){
    var top = 0;

    if(_ALVINE_QUIRKS_MODE && document.body && typeof document.body.scrollTop != 'undefined'){ //quirks
      top = document.body.scrollTop;

    } else if(typeof document.documentElement != 'undefined'){ //standard
      if(typeof document.documentElement.scrollTop != 'undefined'){
        top = document.documentElement.scrollTop;
        
      }
    }

    return parseInt(top);
  }
  
  if(typeof window.pageYOffset != 'undefined'){
    return parseInt(window.pageYOffset);
  }

  if(typeof window.scrollY !='undefined'){
    return parseInt(window.scrollY);
  } 

  return 0;
}


function element_getScrollPosition(){
  var ret = {
    x:0,
    y:0
  };

  ret.x = element_getScrollPositionX();
  ret.y = element_getScrollPositionY();

  return ret;
}
function element_getPosition(obj, absolute, id){
  obj = element_isObject(obj); 
  
  var scrollPos;
  
  if(!absolute){  
    var xpos = element_getPositionX(obj);
    var ypos = element_getPositionY(obj);    
  } else {
    var xpos = element_getAbsolutePositionX(obj, id);
    var ypos = element_getAbsolutePositionY(obj, id);
    
  }

  return {
    x:xpos,
    y:ypos
  };
  
}

function element_setLeft(obj, vleft){
  obj = element_isObject(obj);
  if(!obj) return;

  obj.style.position = (obj.style.position!='fixed' && obj.style.position!='absolute')?'absolute':obj.style.position;
  vleft = vleft+0;
  obj.style.left  = vleft.toString() + "px";

  return true;
}

function element_setTop(obj, vtop){
  obj = element_isObject(obj);
  
  obj.style.position = (obj.style.position!='fixed' && obj.style.position!='absolute')?'absolute':obj.style.position;
  vtop = vtop+0;
  obj.style.top  = vtop.toString() + "px";

  return true;
}

function element_getZIndex(obj,value){
  obj = element_isObject(obj);
      
  if(obj.style.zIndex != null) {
    return obj.style.zIndex;
  }
  
  return true; 
}

function element_setZIndex(obj,value){
  obj = element_isObject(obj);
      
  if(obj.style.zIndex != null) {
    obj.style.zIndex  = value;
    return true;
  }
  
  return true; 
}

//Display
function element_setDisplay(obj,status){
  obj = element_isObject(obj);
  if(!obj) return false;
  
  obj.style.display = status;
  
  return true;
}

function element_setVisibility(obj,status){
  obj = element_isObject(obj);

  obj.style.visibility = status;
  
  return true;
}

function element_isVisible(obj){
  obj = element_isObject(obj);

  return (obj.style.visibility=='visible')?true:false;

}

function element_resetOpacity(obj){
  
  obj = element_isObject(obj)

  try {
    if(isDefined(obj.style.MozOpacity)) {
      obj.style.MozOpacity = 1;
      return true;
    } else if(isDefined(obj.style.opacity)) {
      obj.style.opacity  = 1;
      return true;
    } else if(isDefined(obj.filters)) {
      if(!isDefined(obj.filters.alpha)) {
        obj.style.filter = 'alpha(opacity=100)';
        return true;
      }
      obj.filters.alpha.opacity = 100;
      return true;
    } else if(isDefined(obj.style.KhtmlOpacity)) {
      obj.style.KhtmlOpacity  = 1;
      return true;
    }
  } catch(e) {}
}

function element_setOpacity(obj,value){
  obj = element_isObject(obj);
  
  value = value>100?100:value;
  value = value<0?value*100:value;
  value = parseInt(value);
  value = value<0?0:value;

  try {
    if(typeof obj.style.opacity != 'undefined') {
      obj.style.opacity  = value/100;
    } else if(typeof obj.style.MozOpacity != 'undefined') {
      obj.style.MozOpacity = value/100;
    } else if(typeof obj.filters != 'undefined' && typeof obj.filters != 'unknown') {

      // @ToDo: Handling verbessern, Filter einzeln ansprechen.
      if(obj.filters.alpha){
        var hasLayout = element_getComputedStyleProperty(obj,'hasLayout');
        if(!hasLayout && !obj.style.zoom) obj.style.zoom = '1';

        obj.filters.alpha.opacity = value.toString();
      } else {
        obj.style.filter = 'alpha(opacity='+value.toString()+')';
      }
    } else if(typeof obj.style.KhtmlOpacity != 'undefined') {
      obj.style.KhtmlOpacity  = value/100;
    }

  } catch (e) {};

  
  return true; 
}

function element_getOpacity(obj){
  
  obj = element_isObject(obj);

  if(!obj) return 100;

  if(typeof obj.style.opacity != 'undefined' && obj.style.opacity != '') return parseInt(obj.style.opacity*100);
  if(typeof obj.style.MozOpacity != 'undefined' && obj.style.MozOpacity != '') return parseInt(obj.style.MozOpacity*100);
  if(typeof obj.style.KhtmlOpacity!= 'undefined' && obj.style.KhtmlOpacity != '') return parseInt(obj.style.KhtmlOpacity*100);

  if(document.all && document.all[obj.id] && document.all[obj.id].style){
    if(document.all[obj.id].style.opacity) return parseInt(document.all[obj.id].style.opacity*100);
    if(document.all[obj.id].style.MozOpacity) return parseInt(document.all[obj.id].style.MozOpacity*100); 
    if(document.all[obj.id].style.KhtmlOpacity) return parseInt(document.all[obj.id].style.KhtmlOpacity*100);
  }
  try {
    if(typeof obj.filters != 'undefined' && obj.filters != '') {
      if(obj.filters.alpha && obj.filters.alpha.opacity) {
        return parseInt(obj.filters.alpha.opacity);
      } else {

        var compOpacity = element_getComputedStyleProperty(obj,'opacity');
        if(compOpacity){
          return parseInt(compOpacity*100);
        } else {
          obj.style.filter = 'alpha(opacity=100)';
          return parseInt(obj.filters.alpha.opacity);
        }
      }
    }
  } catch(e) {};

  var compOpacity = element_getComputedStyleProperty(obj,'opacity');
  if(!compOpacity) compOpacity = element_getComputedStyleProperty(obj,'MozOpacity');
  if(!compOpacity) compOpacity = element_getComputedStyleProperty(obj,'KhtmlOpacity');

  if(compOpacity) return parseInt(compOpacity*100);

  return 100;
}

//Size

function element_getSize(obj){
  
  obj = element_isObject(obj);
  
  var ret = new Object();
  ret['width']  = element_getWidth(obj);    
  ret['height'] = element_getHeight(obj);

  return ret;
}

function element_getWidth(obj){  
  obj = element_isObject(obj);
  
  if(!obj) return null;
   
  switch(obj.tagName){
    case 'TR':
      //ask tbody
      return element_getWidth(obj.parentNode);
      break;
    default:
      break;
  }

  //if(typeof obj.style.posWidth != 'undefined') return parseInt(obj.style.posWidth);

  if(typeof obj.style != 'undefined' && typeof obj.style.width != 'undefined' && obj.style.width != null && obj.style.width != '' && obj.style.width!='auto') return parseInt(obj.style.width);

  if(typeof obj.offsetWidth != 'undefined' && obj.offsetWidth != null && obj.offsetWidth != '') return parseInt(obj.offsetWidth);

  if(typeof obj.clientWidth != 'undefined' && obj.clientWidth != null && obj.clientWidth != '') return parseInt(obj.clientWidth);
  
  if(typeof obj.width != 'undefined' && obj.width != null && obj.width != '') return parseInt(obj.width);
  
  if(typeof obj.naturalWidth != 'undefined' && obj.naturalWidth != null && obj.naturalWidth != '') return parseInt(obj.naturalWidth);
  
  if(typeof document.all == 'object'){
    if(typeof document.all[obj.id] != 'undefined' && typeof document.all[obj.id].offsetWidth != 'undefined' && document.all[obj.id].offsetWidth != null && document.all[obj.id].offsetWidth != ''){
      return parseInt(document.all[obj.id].offsetWidth);
    }
  }
  
  if(typeof obj.style != 'undefined' && typeof obj.style.maxWidth != 'undefined' && obj.style.maxWidth != null && obj.style.maxWidth != '') return parseInt(obj.style.maxWidth);
  if(typeof obj.style != 'undefined' && typeof obj.style.minWidth != 'undefined' && obj.style.minWidth != null && obj.style.minWidth != '') return parseInt(obj.style.minWidth);
  
  return 0;
}
function element_getHeight(obj){
  obj = element_isObject(obj);
  
  if(!obj) return null;
  
  switch(obj.tagName){
    case 'TR':
      var tdObjList = obj.getElementsByTagName('TD');
      if(typeof tdObjList[0] == 'undefined') return false;
      var height = 0;
      for(var i in tdObjList){
        if(typeof tdObjList[i].tagName == 'undefined') continue;
        if(tdObjList[i].tagName!='TD') continue;
        
        var tmpHeight = element_getHeight(tdObjList[i]);
        if(tmpHeight<=height) continue;
        
        height = tmpHeight;
      }            
      return height;
      break;
    
    case 'TD':
      var height = 0;

      for(var i in obj.childNodes){
        if(typeof obj.childNodes[i].tagName == 'undefined') continue;
        height+= element_getHeight(obj.childNodes[i]);
      }            
      return height;
      break;
    
  }

  //if(typeof obj.style.posHeight != 'undefined') return parseInt(obj.style.posHeight);

  if(typeof obj.style != 'undefined' && typeof obj.style.height != 'undefined' && obj.style.height != null && obj.style.height != '' && obj.style.height!='auto') return parseInt(obj.style.height);

  if(typeof obj.offsetHeight != 'undefined' && obj.offsetHeight != null && obj.offsetHeight != '') return parseInt(obj.offsetHeight);
  
  if(typeof obj.clientHeight != 'undefined' && obj.clientHeight != null && obj.clientHeight != '') return parseInt(obj.clientHeight);
  
  if(typeof obj.height != 'undefined' && obj.height != null && obj.height != '') return parseInt(obj.height);
  
  if(typeof obj.naturalHeight != 'undefined' && obj.naturalHeight != null && obj.naturalHeight != '') return parseInt(obj.naturalHeight);
  
  if(typeof document.all == 'object'){
    if(typeof document.all[obj.id] != 'undefined' && typeof document.all[obj.id].offsetHeight != 'undefined' && document.all[obj.id].offsetHeight != null && document.all[obj.id].offsetHeight != ''){
      return parseInt(document.all[obj.id].offsetHeight);
    }
  }
  
  if(typeof obj.style != 'undefined' && typeof obj.style.maxHeight != 'undefined' && obj.style.maxHeight != null && obj.style.maxHeight != '') return parseInt(obj.style.maxHeight);
  if(typeof obj.style != 'undefined' && typeof obj.style.minHeight != 'undefined' && obj.style.minHeight != null && obj.style.minHeight != '') return parseInt(obj.style.minHeight);
  
  return 0;
}

function element_setWidth(obj,width,fixOverflow){
  
  obj = element_isObject(obj);
  
  if(!obj) return null;
  
  fixOverflow = (fixOverflow===false)?false:true;
  
  var inputWidth = width;
  if(_ALVINE_IE) width = width<0?0:width;
  width = (width!='auto')?parseInt(width).toString()+'px':width;
  if(inputWidth.toString().substr(-1)=='%') width = inputWidth;
  
  switch(obj.tagName){
    case 'TR':
      var tdList = obj.getElementsByTagName('TD');
      if(tdList.length==0) return false;
      for(var i in tdList){
        element_setWidth(tdList[i], inputWidth);
      }
      
      return true;
      break;
  }
  
  if(fixOverflow) obj.style.overflow = 'hidden';
  obj.style.width = width;
  
  return true;
}

function element_setHeight(obj,height,fixOverflow){

  obj = element_isObject(obj);
  
  if(!obj) return null;
  
  fixOverflow = (fixOverflow===false)?false:true;

  if(height==false) height = 0;
  var inputHeight = height;
  if(_ALVINE_IE) height = height<0?0:height;
  height = (height!='auto')?parseInt(height).toString()+'px':height;
  if(inputHeight.toString().substr(-1)=='%') height = inputHeight;

  switch(obj.tagName){
    case 'TR':
      var tdList = obj.getElementsByTagName('TD');
      if(tdList.length==0) return false;
      for(var i in tdList){
        element_setHeight(tdList[i], inputHeight);
      }
      
      return true;
      break;
  }

  if(fixOverflow) obj.style.overflow = 'hidden';
  
  obj.style.height = height;
  
  return true;
}

function element_setSize(obj,width,height,fixOverflow){
  obj = element_isObject(obj);
  
  fixOverflow = (fixOverflow===false)?false:true;
  
  element_setWidth(obj, width, fixOverflow);
  element_setHeight(obj, height, fixOverflow);
  
  return true;
}

function element_resetSize(obj){
  obj = element_isObject(obj);
  
  
  element_resetWidth(obj);
  element_resetHeight(obj);
  
  return true;
}

function element_resetWidth(obj){
  obj = element_isObject(obj);

  if(_ALVINE_IE6){
    obj.style.overflow = 'visible';
    obj.style.width = null;
  } else {
    //element_setWidth(obj, 'auto');
    obj.style.width = null;
  }

  return true;
}

function element_resetHeight(obj){
  obj = element_isObject(obj);
  
  if(_ALVINE_IE6){
    obj.style.overflow = 'visible';
    obj.style.height = null;
  } else {
    //element_setHeight(obj, 'auto');
    obj.style.height = null;
  }
  return true;
}


//Layout
function element_setBackground(obj,background){

  obj = element_isObject(obj);

  obj.style.background = background;
  
  return true;
}

//Content
function element_setText(obj, newString){
  obj = element_isObject(obj);
  
  if(!obj) return false;
  
  if(isDefined(obj.text))        obj.text        = newString;
  if(isDefined(obj.innerText))   obj.innerText   = newString;
  if(isDefined(obj.textContent)) obj.textContent = newString;
  if(isDefined(obj.innerHTML))   obj.innerHTML   = newString;
  
  return true;

}


function element_getText(obj){
  obj = element_isObject(obj);
  
  if(!obj) return false;
  
  if(isDefined(obj.text))        return obj.text;
  if(isDefined(obj.innerText))   return obj.innerText;
  if(isDefined(obj.textContent)) return obj.textContent;
  if(isDefined(obj.innerHTML))   return obj.innerHTML;
  
  return true;

}

//Children
function element_addChildNodes(obj, mixed, clear, copyNodes){
  obj = element_isObject(obj);

  if(!obj) return true;

  clear     = (clear==true)?true:false;
  copyNodes = (copyNodes==false)?false:true;

  //is mixed an ID?
  var check = element_isObject(mixed);
  if(check) mixed = check;

  //is mixed a string?
  if(typeof mixed == 'string'){
    var strObj = document.createElement('DIV');
    strObj.innerHTML = mixed.toString();

    mixed = document.createElement('DIV');
    mixed.appendChild(strObj);

    mixed = mixed.childNodes;
  }

  //is mixed the parentNode?
  if(typeof mixed.className != 'undefined' && strstr(mixed.className, 'hidden')){
    mixed = mixed.childNodes;
  }

  //is mixed an object?
  if(mixed == null || (typeof mixed != 'object' && typeof mixed != 'function')) return false;

  if(clear==true){
    //remove all children 
    element_removeChildNodes(obj);
  }

  var copyObj;
  if(typeof mixed.length != 'undefined'){
    for(var i = 0;i< mixed.length;i++){
      if(typeof mixed[i] != 'object') continue;
      try {
        if(copyNodes){
          copyObj = element_cloneNode(mixed[i], true);          
        } else {
          copyObj = mixed[i];
        }
        obj.appendChild(copyObj);
      } catch(e) {
        continue;
      }
    }
  } else {
    if(copyNodes){
      copyObj = element_cloneNode(mixed, true);      
    } else {
      copyObj = mixed;
    }
    obj.appendChild(copyObj);
  }

  return true;
}

function element_cloneNode(obj, recursive){
  if(typeof obj != 'object') return false;

  recursive = (recursive===false)?false:true;

  var newNode = obj.cloneNode(recursive);
  
  element_cloneEvents(obj, newNode, recursive);

  if(typeof obj.alvine_onOpen != 'undefined') newNode.alvine_onOpen = obj.alvine_onOpen;
  if(typeof obj.alvine_onClose != 'undefined') newNode.alvine_onClose = obj.alvine_onClose;

  for(var i in obj){
    //copy object custom entries/methods/objects
    if(typeof newNode[i] != 'undefined') continue;
    
    try{
      var copyEntity = obj[i];
      newNode[i] = copyEntity;
    } catch(e){
    }
  }

  newNode.id = '';
  element_buildUniqueObjectID(newNode);
  return newNode;
}

function element_cloneEvents(objSrc, objDst, recursive){

  if(typeof objSrc.alvine_eventListeners == 'object'){
    for(var i in objSrc.alvine_eventListeners) {
      var t = objSrc.alvine_eventListeners[i];
      for(var j in t){
        var ev = t[j];
        event_add(objDst, ev.type, ev.fn, ev.useCapture);

      }
    }
  }
  if(!recursive) return;
  
  for(var i=0;i<objSrc.childNodes.length;i++){
    element_cloneEvents(objSrc.childNodes[i], objDst.childNodes[i], recursive);
  }

}



function element_removeChildNodes(obj, childNode){
  obj = element_isObject(obj);
  
  var removeAll = (!isDefined(childNode) || isNull(childNode))?true:false;
  
  if(!removeAll){
    obj.removeChildNode(childNode);
  } else {
    while (obj.childNodes[0]){
      obj.removeChild(obj.childNodes[0]);
    }
  }
  
  return true;
}

//calc
function element_calcDifference(value1,value2){

  value1 = parseInt(value1);
  value2 = parseInt(value2);

  var retdiff = value1 - value2;

  //consider which direction to go
  var retdirection = 1;
  if (value1 < value2) retdirection = -1;
	
  retdiff = retdirection * parseInt(retdiff);
  
  return {
    difference:retdiff,
    direction:retdirection
  };
}

function element_recalcValue2px(value,val100percent){
  if(typeof value == 'undefined') return null;
  if(value == null) return null;

  if(value.toString().substring((value.toString().length-1))=='%'){  //Umrechnung bei %-Angabe
    return parseInt(((val100percent/100) * parseInt(value)));
  }
  
  if(value.toString().substring((value.toString().length-2),2)=='px'){  //Umwandlung bei px-Angabe
    return parseInt(value);
  }

  return parseInt(value);
}


//Check

function element_isObject(mixed){
  if(mixed==null) return false;
  
  if (typeof(mixed)=="object") {
    if(typeof mixed.id != 'undefined' && mixed.id=='') element_buildUniqueObjectID(mixed);

    mixed = element_browser_prepareObject(mixed);
    return mixed;
  }
  
  var checkObj = element_get('id',mixed);
  if (typeof checkObj !='object' || checkObj==null) return false;

  if(typeof checkObj.id != 'undefined' && checkObj.id=='') element_buildUniqueObjectID(checkObj);

  checkObj = element_browser_prepareObject(checkObj);  
  return checkObj;
	 
}

function element_isNumber(value){
  if(parseInt(value) != value) return false;
  
  return true;
}

function isNull(val){
  return(val===null);
}

function isDefined(mixed){
  if(typeof mixed == 'undefined') return false;

  return true;
}

function element_getComputedStyleProperty(obj,propertyName){
  obj = element_isObject(obj);
  if(!obj) return null;

  var ret = null;
  if (obj.currentStyle){ // IE
    if(typeof propertyName != 'undefined' && propertyName != ''){
      ret = (typeof obj.currentStyle[propertyName] != 'undefined')?obj.currentStyle[propertyName]:null;
    } else {
      ret = obj.currentStyle;
    }
  } else if (window.getComputedStyle) { //OTHERS
    if(document.defaultView.getComputedStyle(obj, null)){
      if(typeof propertyName != 'undefined' && propertyName != ''){
        ret = document.defaultView.getComputedStyle(obj, null).getPropertyValue(propertyName);
      } else {
        ret = document.defaultView.getComputedStyle(obj, null);
      }
    }
  }

  return ret;
}

/*** BROWSER  ***/
function element_browser_prepareObject(obj){

  if(_ALVINE_IE){
    obj = element_browser_ie_prepareObject(obj);
  }

  return obj;
}
/*** IE ***/
function element_browser_ie_prepareObject(obj){
  if(!_ALVINE_IE) return obj;
  if(typeof obj != 'object') return obj;

  if(typeof obj.style != 'undefined'){
  //if(typeof obj.style.position != 'undefined' && obj.style.position == '') obj.style.position = 'relative';
  //if(typeof obj.style.zIndex != 'undefined' &&  parseInt(obj.style.zIndex) == 0) obj.style.zIndex = 1;
  }

  return obj;
}


function alvine_getElementsByAttribute(tagName, attributeName){
  var elements = document.getElementsByTagName(tagName);
  var returnCollection = new Array();
  var current;
  var attribute;
  for(var i=0; i<elements.length; i++){
    current = elements[i];
    attribute = current.getAttribute(attributeName);
    if(typeof attribute == 'undefined') continue;
    if(typeof attribute != 'string') continue;
    returnCollection.push(current);
  }
  return returnCollection;
}




