/**
 * default.js
 *
 * library to provide default functions
 *
 * @category   Bos
 * @package    Bos_Extensions
 * @subpackage System
 * @author     Carsten Thiel <cth@bos-bremen.de>
 * @copyright  Copyright (c) 2010, bremen online services GmbH & Co. KG
 * @version    $Revision: 1.12 $
 */

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]);
  }
}
