// $Id: collapse.js,v 1.6.2.2 2006/12/01 14:57:29 killes Exp $


/**
 * Returns true if an element has a specified class name
 */
function hasClass(node, className) 
{
  if (node.className == className) 
  {
    return true;
  }
  var reg = new RegExp('(^| )'+ className +'($| )')
  if (reg.test(node.className)) 
  {
    return true;
  }
  return false;
}

/**
 * Adds a class name to an element
 */
function addClass(node, className) {
  if (hasClass(node, className)) {
    return false;
  }
  node.className += ' ' + className;
  return true;
}

/**
 * Removes a class name from an element
 */
function removeClass(node, className) {
  if (!hasClass(node, className)) {
    return false;
  }
  // Replaces words surrounded with whitespace or at a string border with a space. Prevents multiple class names from being glued together.
  node.className = eregReplace('(^|\\s+)'+ className +'($|\\s+)', ' ', node.className);
  return true;
}

/**
 * Emulate PHP's ereg_replace function in javascript
 */
function eregReplace(search, replace, subject) {
  return subject.replace(new RegExp(search,'g'), replace);
}

/**
 * Toggles a class name on or off for an element
 */
function toggleClass(node, className) 
{
  if (!removeClass(node, className) && !addClass(node, className)) 
  {
    return false;
  }
  return true;
}

/**
 * Retrieves the absolute position of an element on the screen
 */
function absolutePosition(el) {
  var sLeft = 0, sTop = 0;
  var isDiv = /^div$/i.test(el.tagName);
  if (isDiv && el.scrollLeft) {
    sLeft = el.scrollLeft;
  }
  if (isDiv && el.scrollTop) {
    sTop = el.scrollTop;
  }
  var r = { x: el.offsetLeft - sLeft, y: el.offsetTop - sTop };
  if (el.offsetParent) {
    var tmp = absolutePosition(el.offsetParent);
    r.x += tmp.x;
    r.y += tmp.y;
  }
  return r;
};

function collapseScrollIntoView(node) 
{
  var h = self.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0;
  var offset = self.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
  var pos = absolutePosition(node);
  if (pos.y + node.scrollHeight > h + offset) 
  {
    if (node.scrollHeight > h) 
    {
      window.scrollTo(0, pos.y);
    } 
    else 
    {
      window.scrollTo(0, pos.y + node.scrollHeight - h);
    }
  }
}

/**
 * Adds a function to the window onload event
 */
function addLoadEvent(func) {
  var oldOnload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  }
  else {
    window.onload = function() {
      oldOnload();
      func();
    }
  }
}

var amenityGroupIds = new Array();
  
function toggleCollapse(node, useThisNode) 
{
    var n = node;
    if(!useThisNode)
    {
        n = node.parentNode.parentNode;
    }
    toggleClass(n, 'collapsed');
    if (hasClass(n, 'collapsed')) 
    {
        if(!Array.contains(amenityGroupIds, n.id))
        {
            amenityGroupIds[amenityGroupIds.length] = n.id;
        }
    }
    else
    {
        if(Array.contains(amenityGroupIds, n.id))
        {
            Array.remove(amenityGroupIds, n.id);
        }
        collapseScrollIntoView(n);
    }
    node.blur();
    return false;
}

function expandAll(node)
{
    amenityGroupIds = new Array();
    var fieldsets = document.getElementsByTagName('fieldset');
    for(var i = 0; i < fieldsets.length; i++)
    {
        if(hasClass(fieldsets[i], 'collapsible'))
        {
            if(hasClass(fieldsets[i], 'collapsed'))
            {
                toggleCollapse(fieldsets[i], true);
            }
        }
    }
    if(node != null)
    {
        collapseScrollIntoView(node);
    }
    return false;
}

function collapseCollapsed()
{
    var fieldsets = document.getElementsByTagName('fieldset');
    for(var i = 0; i < fieldsets.length; i++)
    {
        if(hasClass(fieldsets[i], 'collapsible'))
        {
            if(!hasClass(fieldsets[i], 'collapsed') && Array.contains(amenityGroupIds, fieldsets[i].id))
            {
                toggleCollapse(fieldsets[i], true);
            }
        }
    }
}

function setCookie(c_name,value,expiredays)
{
    var exdate=new Date()
    exdate.setDate(exdate.getDate()+expiredays)
    document.cookie=c_name+ "=" +escape(value)+
    ((expiredays==null) ? "" : ";expires="+exdate.toGMTString())
}

function getCookie(c_name)
{
    if (document.cookie.length>0)
      {
      c_start=document.cookie.indexOf(c_name + "=")
      if (c_start!=-1)
        { 
        c_start=c_start + c_name.length+1 
        c_end=document.cookie.indexOf(";",c_start)
        if (c_end==-1) c_end=document.cookie.length
        return unescape(document.cookie.substring(c_start,c_end))
        } 
      }
    return ""
}
