/**
 * default.js
 *
 * library to provide default functions
 *
 * @author Carsten Thiel (cth@bos-bremen.de)
 * @copyright Copyright 2010, bremen online services GmbH & Co. KG
 * @version 1.0
 * @package bos_extensions
 *
 */

var  BOS = {};

function base_setBrowser(stJSON){
  BOS.browser = base_importJSONData(stJSON);
}

function base_getElement(mxObjectId){
  if(typeof mxObjectId == 'object') return mxObjectId;

  var oNew = document.getElementById(mxObjectId);
  if(!typeof oNew == 'object') return false;

  return oNew
}


function base_dissolveElement(obj){
  obj = base_getElement(obj);
  if(!obj) return;
  document.body.appendChild(obj);
}

function base_hideElement(obj){
  obj = base_getElement(obj);
  if(!obj) return;

  if(obj.style.left != null){
    obj.bos_prevHiddenPos = {
      x:parseInt(obj.style.left),
      y:parseInt(obj.style.top)
      };
    base_resetLeft(obj);
    base_resetTop(obj);
  }

  base_addClassName(obj, 'hidden');
}
function base_showElement(obj){
  obj = base_getElement(obj);
  if(!obj) return;


  base_removeClassName(obj, 'hidden');

  if(typeof obj.bos_prevHiddenPos == 'undefined') return;
  base_setPosition(obj, obj.bos_prevHiddenPos.x, obj.bos_prevHiddenPos.y);
}


function base_addClassName(obj, strClassName){
  obj = base_getElement(obj);
  if(!obj) return;
  if(typeof obj.className == 'undefined') return;
  if(strClassName.substr(0, 1) != ' ') strClassName = ' '+strClassName;
  if(obj.className.indexOf(strClassName)>-1) return;

  obj.className+= strClassName;

}

function base_removeClassName(obj, strClassName){
  obj = base_getElement(obj);
  if(!obj) return;
  if(typeof obj.className == 'undefined') return;
  if(strClassName.substr(0, 1) != ' ') strClassName = ' '+strClassName;
  if(!obj.className.indexOf(strClassName)) return;
  
  obj.className = bos_string_replace(strClassName, '', obj.className);

}

function base_setPosition(obj, lLeft, lTop){
  obj = base_getElement(obj);
  if(!obj) return;
  
  base_setLeft(obj, lLeft);
  base_setTop(obj, lTop);
}

function base_setLeft(obj, lValue){
  obj = base_getElement(obj);
  if(!obj) return;
  if(typeof obj.style == 'undefined') return;
  if(typeof obj.style.left == 'undefined') return;

  obj.style.left = lValue.toString()+'px';

}

function base_getWidth(obj){
  obj = base_getElement(obj);
  if(!obj) return;

  var ret = 0;

  ret = parseInt(obj.clientWidth);
  //ret = parseInt(obj.offsetWidth);

  return ret;

}

function base_setWidth(obj, lValue){
  obj = base_getElement(obj);
  if(!obj) return;
  if(typeof obj.style == 'undefined') return;
  if(typeof obj.style.width == 'undefined') return;

  obj.style.width = lValue.toString()+'px';
  
}

function base_getPosition(obj, fAbsolute){
  fAbsolute = (typeof fAbsolute != 'undefined' && fAbsolute===true)?true:false;
  
  obj = base_getElement(obj);
  if(!obj) return false;
  
  var mpRet = {};
  mpRet.left = base_getLeft(obj, fAbsolute);
  mpRet.top  = base_getTop(obj, fAbsolute);

  mpRet.left = (!mpRet.left)?0:mpRet.left;
  mpRet.top  = (!mpRet.top)?0:mpRet.top;

  return mpRet;
}

function base_getLeft(obj, fAbsolute){
  fAbsolute = (typeof fAbsolute != 'undefined' && fAbsolute===true)?true:false;

  obj = base_getElement(obj);
  if(!obj) return false;

  if(typeof obj.style != 'undefined' && !isNaN(parseInt(obj.style.left))) return parseInt(obj.style.left);
  if(typeof obj.offsetLeft != 'undefined') return parseInt(obj.offsetLeft);

  return false;
}

function base_getTop(obj, fAbsolute){
  fAbsolute = (typeof fAbsolute != 'undefined' && fAbsolute===true)?true:false;

  obj = base_getElement(obj);
  if(!obj) return false;

  if(typeof obj.style != 'undefined' && !isNaN(parseInt(obj.style.top))) return parseInt(obj.style.top);
  if(typeof obj.offsetTop != 'undefined') return parseInt(obj.offsetTop);

  return false;
}

function base_setTop(obj, lValue){
  obj = base_getElement(obj);
  if(!obj) return;
  if(typeof obj.style == 'undefined') return;
  if(typeof obj.style.top == 'undefined') return;

  obj.style.top = lValue.toString()+'px';

}

function base_resetLeft(obj){
  obj = base_getElement(obj);
  if(!obj) return;
  if(typeof obj.style == 'undefined') return;
  if(typeof obj.style.left == 'undefined') return;

  obj.style.left = null;

}
function base_resetTop(obj){
  obj = base_getElement(obj);
  if(!obj) return;
  if(typeof obj.style == 'undefined') return;
  if(typeof obj.style.top == 'undefined') return;

  obj.style.top = null;

}


function bos_count(mxData){
  
  if(typeof mxData == 'undefined') return 0;
  if(typeof mxData != 'object') return 0;
  if(typeof mxData.length != 'undefined') return mxData.length;
  
  var lCnt = 0;
  for(var i in lCnt) lCnt++;
  
  return lCnt;
}

function bos_urldecode(stText) {
  //stText = stText.split('+').join('%20');
  return decodeURIComponent(stText);
}
function bos_urlencode(stText) {
  //stText = escape(stText);
  stText = encodeURIComponent(stText);
  return stText;
}

function bos_enableHighlighting(obj){
  obj = base_getElement(obj);
  if(!obj) return;
  var fnMouseOver = function(){
    base_addClassName(this, 'highlightHover');
  }

  var fnMouseOut = function(){
    base_removeClassName(this, 'highlightHover');
  }

  bos_addEvent(obj, 'mouseover', fnMouseOver);
  bos_addEvent(obj, 'mouseout',  fnMouseOut);
}

function bos_addEvent(obj, stEventType, fnEvent){
  obj = base_getElement(obj);
  if(!obj) return;

  var fn = fnEvent;
  if(typeof fn == 'string'){
    fn = function(){
      eval(fn);
    };
  }
  
  obj.addEventListener(stEventType, fn, false);
}

function bos_removeEvent(obj, fnEvent){

}

function bos_string_replace(stFrom, stTo, stSource){
  stSource = stSource.toString();

  return stSource.replace(stFrom, stTo);
}

function bos_removeChildNodes(obj){
  while (obj.childNodes[0]){
    obj.removeChild(obj.childNodes[0]);
  }
}