var contentElem        = null;
var loadingElem        = null;

// add extra functionality to the string object
if(!String.prototype.trim)
  String.prototype.trim=function(){return this.replace(/(^\s+)|\s+$/g,"");}

// set the first letter ([a-z]) of a string to uppercase >> does not work for a string like s'-Hertogenbosch
if(!String.prototype.ucfirst)
  String.prototype.ucfirst=function(){return this.replace(/^[a-z]{1}/, this.charAt(0).toUpperCase());}


/**
* Function that finds the real position of an element
*
* @param obect obj
* @return void
*/
function findPos(obj)
{
  if (typeof(obj) == 'object')
  {
    var curleft = curtop = 0;

    if (obj.offsetParent) {

      do {
        curleft += obj.offsetLeft;
        curtop += obj.offsetTop;
      } while (obj = obj.offsetParent);

      return [curleft,curtop];
    }
  }

  return false;
}

/**
* Function that scrolls to an anchor position
*
* @param string name
* @return void
*/
function toAnchor(name)
{
  var anchors = null;
  var anchor = null;

  if (anchors = document.getElementsByName('anchor_' + name))
  {
    anchor = anchors[0];

    var pos = findPos(anchor);

    if (pos)
    {
      scroll(pos[0], pos[1]);
    }
  }
}

// Will be set in initJavascript and is very important
var defaultSiteUrl     = '';

/**
* Function that gives back the base href or an empty string
*
* @param void
* @return string
*/
function getBaseHref()
{
  var baseHref = '';

  var tempBaseHref = null;

  if (tempBaseHref = document.getElementsByTagName('base'))
  {
    if (tempBaseHref[0] && tempBaseHref[0].href)
      baseHref = tempBaseHref[0].href;

  }

  return baseHref;
}

function initJavascript(siteUrl, isLoggedIn)
{
  if (siteUrl)
    defaultSiteUrl = siteUrl;

  if (contentElem = document.getElementById('content'))
  {

  }

  if (loadingElem = document.getElementById('loading_box'))
  {

  }

  YAHOO.namespace("container");

  // Initialize the temporary Panel to display while waiting for external content to load
  YAHOO.container.wait =
    new YAHOO.widget.Panel("wait",
      { width:"240px",
        fixedcenter:true,
        close:false,
        draggable:false,
        zindex:9000,
        modal:true,
        visible:false
      }
      );

  var baseHref = getBaseHref();

  YAHOO.container.wait.setHeader("Een moment geduld a.u.b...");
  YAHOO.container.wait.setBody('<img src="' + baseHref + '/static/img/loader.gif" />');
  YAHOO.container.wait.render(document.body);

  // Only execute when the user logs on
  if (isLoggedIn)
  {
    updateNumberOfObjects('all');
  }

}

/**
* Function that sets a ToolTip to 1 or more elements defined
*
* @param mixed elementIds
* @param string text
* @return void
*/
function setToolTips(elementIds, text)
{
  var toolTip = new YAHOO.widget.Tooltip("tooltip", { context:elementIds, text:text, showDelay:200, width: 'auto', zIndex: 900 });
}

function scrollToTop()
{
  scroll(0,0);
}

/**
* Function that toggles a tab defined and disables the rest
*
* @param mixed elem
* @param string parentStartId
* @param string tabContainerId
*/
function toggleTab(elem, parentStartId, tabContainerId)
{
  if (!elem)
    return;

  if (typeof(elem) != 'object')
    elem = document.getElementById(elem);

  if (!elem)
    return;

  var elems = null;

  if (parentStartId != null)
    elems = document.getElementById(parentStartId);
  else
    elems = elem.parentNode.parentNode;

  var linkElems = elems.getElementsByTagName('LI');

  // Loop through all of the links and set them to normal.
  if (linkElems.length > 0)
  {
    for (i = 0; i < linkElems.length; i++)
    {
      linkElems[i].className = 'itemNor';
    }
  }

  if (elem.parentNode)
    elem.parentNode.className = 'itemAct';

  // Now switch the tabs display
  if (tabContainerId)
  {
    var tabContainerElem = null;

    if (tabContainerElem = document.getElementById(tabContainerId))
    {
      var curElem = null;
      var elementId = '';
      var curElementId = '';

      for (j = 0; j < tabContainerElem.childNodes.length; j++)
      {
        curElem = tabContainerElem.childNodes[j];

        if (elem.id && curElem.id)
        {
          elementId = elem.id.replace(/tab_link_/, '');
          curElementId = curElem.id.replace(/tab_/, '');

          if (elementId == curElementId)
            curElem.style.display = 'block';
          else
            curElem.style.display = 'none';

        }

      }
    }
  }
}

function setElementEvent(elem, eventName, eventAction)
{
  if (!elem)
    return;

  if (typeof(elem) != 'object')
    elem = document.getElementById(elem);

  if (!elem)
    return;

  switch (eventName)
  {
    case 'onclick':

      elem.onclick = function()
      {
        eval(eventAction);
      };

    break;

  }

  return;

}


function showLoadingBox()
{
  YAHOO.container.wait.show();
}

function hideLoadingBox()
{
  YAHOO.container.wait.hide();
}

function toggleElements(mode, onValue, sourceElem, elementIds)
{
  if (mode != 'show' && mode != 'hide')
    return;

  var currentValue = null;
  var elem         = null;

  if (currentValue = sourceElem.value)
  {
    if (elem = document.getElementById(elementIds))
    {
      if (currentValue == onValue)
        elem.style.display = 'block';
      else
        elem.style.display = 'none';

    }
  }

}

/**
* Function that shows a form response
*
* @param string mode
* @param string type
* @param string responseText
*/
function toggleFormResponse(mode, type, responseText, formErrorElemId)
{
  if (mode != 'show' && mode != 'hide')
    return;

  if (type != 'error' && type != 'success')
    return;

  var formResponseContainer       = null;
  var formResponseElems           = null;
  var formResponseElem            = null;
  var defaultFormErrorId          = 'form_error';
  var formErrorId                 = '';

  if (formErrorElemId)
    formErrorId = formErrorElemId;
  else
    formErrorId = defaultFormErrorId;

  formErrorIds = formErrorId.split(',');

  if (!formErrorIds)
    return;

  var j = 0;

  // Loop through all the formErrorIds to hide or show them
  for (j = 0; j < formErrorIds.length; j++)
  {
    if (formResponseContainer = document.getElementById(formErrorIds[j]))
    {
      if (formResponseElems = formResponseContainer.getElementsByTagName('div'))
      {
        var i = 0;

        for (i = 0; i < formResponseElems.length; i++)
        {

          if (formResponseElems[i].id && formResponseElems[i].id == 'form_error_response')
          {
            formResponseElem = formResponseElems[i];

            var typeClassName = '';

            if (type == 'success')
              typeClassName = 'success';
            else
              typeClassName = 'error';

            formResponseElem.className = typeClassName;

            if (mode == 'show')
            {
              formResponseElem.innerHTML = responseText;
              formResponseElem.style.display = 'block';
              formResponseContainer.style.display = 'block';
            }
            else
            {
              formResponseElem.innerHTML = '';
              formResponseElem.style.display = 'none';
              formResponseContainer.style.display = 'none';
            }

          }
        }
      }
    }
  }
}

/**
* @desc change the display style for one or more elements
*
* @param string show id's of elemenst that will be set to 'block'
* @param string hide id's of elemenst that will be set to 'none'
* @param int nr of seconds to wait before making the change
* @return void
**/
function changeDisplay(show, hide, delay)
{
  if (delay && !isNaN(delay))
  {
    var timer = window.setTimeout("changeDisplay('"+ show +"', '"+ hide +"')", delay);
    return;
  }

  if (show != '')
  {
    var showDivs = show.split(',');

    for (var i = 0; i < showDivs.length; i++)
    {
      if (document.getElementById(showDivs[i]))
        document.getElementById(showDivs[i]).style.display = 'block';

    }
  }
  if (hide != '')
  {
    var hideDivs = hide.split(',');

    for (var i = 0; i < hideDivs.length; i++)
    {
      if (document.getElementById(hideDivs[i]))
        document.getElementById(hideDivs[i]).style.display = 'none';

    }
  }
}


/**
* @desc dynamic load a javascript file
* @param path to file
* @return void
**/
  function loadJsFile(path)
  {

    var headTags = document.getElementsByTagName("head");
    var headTag  = null;

    if(headTags && headTags[0])
      var headTag = headTags[0];

    if(!headTag)
      return false;

    // check if the script is not already included yet !!
    var scriptTags = headTag.getElementsByTagName("script");

    if(scriptTags && scriptTags.length > 0)
    {
      var index = 0;
      for(index in scriptTags)
      {
        if(scriptTags[index].src && scriptTags[index].src.indexOf(path) >= 0)
          return true;
      }
    }
    // add the script to the document
    var script = document.createElement("script");
    script.src = path;
    script.type = "text/javascript";
    headTag.appendChild(script);
    return true;
  }

/**
* @desc get parent on an html element by classname
* @param object html element
* @param string classname
* @return object null / parentElement
**/
function getParentByClass(el, className)
{
  //if(el.id) el = document.getElementById(el.id);

  className = className.trim();
  while(el && el.parentNode)
  {
    el = el.parentNode;
    classNameArr = new Array();
    if(el.className && el.className.split)
    {
      classNameArr = el.className.split(" ");
    }

    for(var c=0; c < classNameArr.length; c++)
    {
      if(className == classNameArr[c].trim()){  return el ; }
    }
  }
  return null;
}

/**
* @desc get a child element of the given element by id
* @param objecy html element
* @param string html tag name
* @param string id to find
* @return
**/
function getChildById(el, tagName, Id)
{
  var els = el.getElementsByTagName(tagName);
  for(var i=0;i<els.length;i++)
  {
    if( els[i].id == Id){ return els[i] ;}
  }
  return null;
}

/**
* @desc get child element in gevien html element with classname
* @param object html element
* @param string html tag name
* @param string class name
* @return
**/
function getChildByClass(el,tagName,className)
{
  var els = el.getElementsByTagName(tagName);
  if (els)
  {
    className = className.split(",");
    for( var i=0;i<els.length;i++)
    {
      for(var c=0;c<className.length;c++)
      {
        // first check the whole className
        if(els[i].className.trim() == className[c].trim() ){ return els[i] ;}
        // check parts of the className
        elClassNames = els[i].className.split(" ");
        for(elClassName in elClassNames)
          if( elClassNames[elClassName].trim() == className[c].trim() ){ return els[i] ;}
      }
    }
  }
  return null;
}

function hasClass(el,className)
{
  if(el.className == className){ return true;}
  var c = el.className.split(" ");
  for(var i=0;i<c.length;i++)
  {
    if(c[i] == className){return true;};
  }
  return false;
}

function addClass(el,className)
{
  var c = el.className.split(" ");
  for(var i=0;i<c.length;i++)
  {
    if(c[i]==className){return;};
  }
  if(c.length>0)
  {
    el.className = (el.className + " " +className).trim();
  }
  else
  {
    el.className = className.trim();
  }
}


function removeClass(el,className)
{
  var c = el.className.split(" ");
  for(var i=0;i<c.length;i++)
  {
    if(c[i]==className){c[i]="";};
  }
  el.className = c.join(" ").trim();

}
