function init()
{
  var rollovers;

  if (document.getElementById)
  {
    rollovers = document.getElementById('bite_main').getElementsByTagName('img');
  } else if (document.all)
  {
    rollovers = document.all['bite_main'].all.tags('img');
  } else
  {
    return;
  }

  var preloads = new Object();

  for (var i = 0; i < rollovers.length; i++)
  {
    if (rollovers[i].alt)
    {
      preloads['n' + rollovers[i].id] = new Image();
      preloads['n' + rollovers[i].id].src = 'images/' + rollovers[i].id + '.gif';
      preloads['o' + rollovers[i].id] = new Image();
      preloads['o' + rollovers[i].id].src = 'images/' + rollovers[i].id + '_high.gif';
      rollovers[i].onmouseover = function () { this.src = preloads['o' + this.id].src; }
      rollovers[i].onmouseout = function () { this.src = preloads['n' + this.id].src; }
    }
  }
}

function mainMenuInit(websiteIndex)
{
  var rollovers;
  var bigLogoSrc;

  if (document.getElementById)
  {
    rollovers = document.getElementById('siteMenu' + websiteIndex).getElementsByTagName('img');
  }
  else if (document.all)
  {
    rollovers = document.all['siteMenu' + websiteIndex].all.tags('img');
  }
  else
  {
    return;
  }

  var preloads = new Object();

  bigLogoSrc = getObject('logo' + websiteIndex).src;

  for (var i = 0; i < rollovers.length; i++)
  {
    if (rollovers[i].alt)
    {
      preloads['o' + rollovers[i].id] = new Image;
      preloads['o' + rollovers[i].id].src = 'images/logos/' + rollovers[i].id + '.png';
      rollovers[i].onmouseover = function () { getObject('logo' + websiteIndex).src = preloads['o' + this.id].src; getObject('text' + websiteIndex).innerHTML = this.alt; }
      rollovers[i].onmouseout = function () { getObject('logo' + websiteIndex).src = bigLogoSrc; getObject('text' + websiteIndex).innerHTML = "&nbsp;"}
    }
  }
}

var displayingSignin = false;

function displaySigninToggle()
{
  var signinDiv = $('signin');
  var signinSrcDiv = $('signinSrc');
  displayingSignin = !displayingSignin;

  if ((signinDiv) && (displayingSignin))
  {
    signinDiv.innerHTML = signinSrcDiv.innerHTML;
    signinDiv.style.display = "block";
    return false;
  }

  if (signinDiv)
  {
    signinDiv.style.display = "none";
    return false;
  }

  return true;
}

function getObject(objectId)
{
  if (document.getElementById && document.getElementById(objectId))
  {
    return document.getElementById(objectId);
  }
  else if (document.all && document.all(objectId))
  {
    return document.all(objectId);
  }
  else
  {
    return false;
  }
}

function changeObjectDisplay(objectId, newDisplay)
{
  var object = getObject(objectId);

  if (object)
  {
    if (newDisplay)
    {
      object.style.display = "block";
    }
    else
    {
      object.style.display = "none";
    }
    return true;
  }
  else
  {
    return false;
  }
}

function toggleObjectDisplay(objectId, scrollTo)
{
  var object = getObject(objectId);

  if (object)
  {
    if (object.style.display == 'none')
    {
      changeObjectDisplay(objectId, true);

      if (scrollTo)
      {
        self.scrollTo(object.offsetLeft, object.offsetTop);
      }
    }
    else
    {
      changeObjectDisplay(objectId, false);
    }
  }
}

function clearEmail(emailInput)
{
  if (emailInput.value == "Email address")
  {
    emailInput.value = "";
    emailInput.style.color = "#063";
    emailInput.onkeydown = "";
  }
}

function clearPassword(passwordInput, event)
{
  if (passwordInput.value == "Password")
  {
    var signinPasswordSpan = getObject("signinPassword");

    if (signinPasswordSpan)
    {
      var addValue = false;
      var keynum = false;
      var keychar;

      if ((event) && (window.event))
      {
        keynum = event.keyCode;
      } else if ((event) && (event.which))
      {
        keynum = event.which;
      }

      if (keynum)
      {
        keychar = String.fromCharCode(keynum);
        var charcheck = /[\w]/;
        addValue = charcheck.test(keychar);
      }

      if (addValue)
      {
        signinPasswordSpan.innerHTML = "<input type=\"password\" name=\"password\" style=\"border: 1px solid #000; padding: 2px; margin-right: 5px; color: #000;\" value=\"" + keychar + "\" onblur=\"maybeResetPassword(this);\"/>";
      }
      else
      {
        signinPasswordSpan.innerHTML = "<input type=\"password\" name=\"password\" style=\"border: 1px solid #000; padding: 2px; margin-right: 5px; color: #000;\" onblur=\"maybeResetPassword(this);\"/>";
      }
    }

    setTimeout(passwordFocus, 10);
  }
}

function passwordFocus()
{
  document.forms[0].elements["password"].focus();
}

function maybeResetEmail(emailInput)
{
  if (emailInput.value === "")
  {
    emailInput.value = "Email address";
    emailInput.style.color = "#999";
  }
}

function maybeResetPassword(passwordInput)
{
  if (passwordInput.value === "")
  {
    var signinPasswordSpan = getObject("signinPassword");

    if (signinPasswordSpan)
    {
      signinPasswordSpan.innerHTML = "<input type=\"text\" name=\"password\" value=\"Password\" style=\"border: 1px solid #000; padding: 2px; margin-right: 5px; color: #999;\" onfocus=\"clearPassword(this, false);\"/>";
    }
  }
}

function checkUncheckAll(formName, checked)
{
  var theForm = getObject(formName);

  if (theForm)
  {
    for (var ii = 0; ii < theForm.length; ii++)
	{
	  if (theForm[ii].type == 'checkbox')
	  {
	    theForm[ii].checked = checked;
	  }
    }
  }

  return(false);
}

function useDefault(el, id)
{
  $(id).disabled = el.checked;
}

function selectFont(el)
{
  alert(el.value);
  el.value = "X";
  return(false);
}

function submitButtonClick(button)
{
  button.form.ds_method.value = button.value;
}

function standardizeLink(link)
{
  if (link.match(/^((([a-z]+):\/\/)|mailto:)/i))
  {
    return(link);
  }
  else
  {
    return('http://' + link);
  }
}

function testLink(link)
{
  if (link.length > 0)
  {
    var standardized = standardizeLink(link);
    window.open(standardized);
  }
  return false;
}

function showButtonClick(ajax, id, formName, pageName, isEditor)
{
  if (ajax)
  {
    if ($(id).innerHTML == '')
    {
      $(id + 'ShowImg').src = 'images/v2/loading.gif';
      updateDiv(pageName,
                formName,
                id, 
                function()
                {
                  $(id).style.display='block';
                  $(id + 'Show').style.display='none';
                  $(id + 'ShowImg').src = 'images/v2/expand.png';
                  $(id + 'Hide').style.display='inline';
                  if (isEditor)
                  {
                    var names = editorNames.values();
                    for (var ii = 0; ii < names.length; ii++)
                    {
                      loadEditor(names[ii]);
                    }
                  }
                });
    }
    else
    {
      $(id).style.display='block';
      $(id + 'Hide').style.display='inline';
      $(id + 'Show').style.display='none';
    }
  }
  else
  {
    $(id).style.display='block';
    $(id + 'Hide').style.display='inline';
    $(id + 'Show').style.display='none';
  }
  
  return(false);
}

function hideButtonClick(ajax, id, isEditor)
{
  if (isEditor)
  {
    hideEditor();
  }
  
  $(id + 'Show').style.display='inline';
  $(id + 'Hide').style.display='none';
  $(id).style.display='none';
  
  if (ajax)
  {
    $(id).innerHTML='';
  }
  
  return(false);
}

function editPageTitle(pageDoUrl, websiteId, pageId, subpageId)
{
  var options = "toolbar=no,status=no,resizable=yes,dependent=yes," +
                "scrollbars=yes";
  options += ",width=" + 500 ;
  options += ",height=" + 150 ;
  window.open(pageDoUrl + "?dsb/editPage/editPageTitle" +
              "&websiteId=" + websiteId +
              "&pageId=" + pageId +
              "&subpageId=" + subpageId,
              'EditPageTitleWindow',
              options);
}

function updatePageTop(pageTitleHTML, sidebarNavHTML)
{
  $('pageTitle').innerHTML = pageTitleHTML;
  $('sidebarNav').innerHTML = sidebarNavHTML;
}

function editAlbumTitle(websiteId, albumId)
{
  var options = "toolbar=no,status=no,resizable=yes,dependent=yes," +
                "scrollbars=yes";
  options += ",width=" + 500 ;
  options += ",height=" + 150 ;
  window.open("page.do?dsb/website/album/editAlbumTitle" +
              "&websiteId=" + websiteId +
              "&albumId=" + albumId,
              'EditAlbumTitleWindow',
              options);
}

function updateAlbumTop(albumTitleHTML, sidebarNavHTML)
{
  $('albumTitle').innerHTML = albumTitleHTML;
  $('sidebarNav').innerHTML = sidebarNavHTML;
}

/*****************************************************************************/
/* OPTIONS                                                                   */
/*****************************************************************************/

function Option(name, parent, chosenChild, onSelect)
{
  this._name = name;
  this._parent = parent;
  this._chosenChild = chosenChild;
  this._onSelect = onSelect;
}

Option.prototype._name;
Option.prototype._parent;
Option.prototype._chosenChild;
Option.prototype._onSelect;

Option.prototype.getName = function()
{
  return(this._name);
}

Option.prototype.getParent = function()
{
  return(this._parent);
}

Option.prototype.getChosenChild = function()
{
  return(this._chosenChild);
}

Option.prototype.setChosenChild = function(child)
{
  this._chosenChild = child;
}

Option.prototype.select = function(directClick)
{
  if (this._onSelect != null)
  {
    this._onSelect(this._name, directClick);
  }
}

function optionMouseOver(element)
{
  element.style.backgroundColor = '#A1C2CA';
}

function optionMouseOut(element)
{
  var option = options.get(element.id);
  var highlight = false;

  if (option != null)
  {
    var parent = options.get(option.getParent());

    if (parent != null)
    {
      if (element.id == parent.getChosenChild())
      {
        highlight = true;
      }
    }
  }

  if (!highlight)
  {
    element.style.backgroundColor = '';
  }
}

function optionMouseClick(element)
{
  var option = options.get(element.id);
  var parent = options.get(option.getParent());
  
  // Record the selected option.
  parent.setChosenChild(element.id);

  // Display the selected option and hide the others.
  displayOption(option);

  option.select(true);

  var treeOptionName = options.get('root').getChosenChild()

  while (treeOptionName != '')
  {
    var treeOption = options.get(treeOptionName);
    treeOption.select(false);
    treeOptionName = treeOption.getChosenChild();
  }
}

function displayOption(option)
{
  var parent = options.get(option.getParent());
  $(option.getName()).style.backgroundColor = '#A1C2CA';
  
  for (var ii = 0; ii < options.values().length; ii++)
  {
    var loopOption = options.values()[ii];
    if (loopOption.getParent() == option.getParent())
    {
      if (loopOption.getName() != parent.getChosenChild())
      {
        if ($(loopOption.getName()))
        {
          $(loopOption.getName()).style.backgroundColor='';
        }
        if ($(loopOption.getName() + "2"))
        {
          $(loopOption.getName() + "2").style.display = 'none';
        }
      }
      else if ($(loopOption.getName() + "2"))
      {
        $(loopOption.getName() + "2").style.display = 'block';
      }
    }
  }          
}

function setupOptions()
{
  for (var ii = 0; ii < options.values().length; ii++)
  {
    var loopOption = options.values()[ii];
    if (loopOption.getChosenChild() != '')
    {
      displayOption(options.get(loopOption.getChosenChild()));
    }
  }
}

function openPopup(url, name, options, blockedMsg)
{
  var newWin = window.open(url, name, options);
  
  if (!newWin || !newWin.top)
  {
    if (blockedMsg != null)
    {
      alert(blockedMsg);
    }
    return;
  }
  
  newWin.focus();
  
  return;
}

/*****************************************************************************/
/* SCROLLING                                                                 */
/* http://www.leigeber.com/2008/05/ultimate-javascript-scroller-and-slider/  */
/*****************************************************************************/
var SLIDETIMER = 3;
var SLIDESPEED = 3;
var SCROLLTIMER = 4;
var SCROLLSPEED = 0.8;
var STARTINGOPACITY = 40;
var lastScrollTime;

// handles section to section scrolling of the content //
function slideContent(id,prefix,timer)
{
  var div = $(id);
  var slider = div.parentNode;
  clearInterval(slider.timer);
  slider.section = parseInt(id.replace(/\D/g,''));
  slider.target = div.offsetTop;
  slider.style.top = slider.style.top || '0px';
  slider.current = slider.style.top.replace('px','');
  slider.direction = (Math.abs(slider.current) > slider.target) ? 1 : -1;
  slider.style.opacity = STARTINGOPACITY * .01;
  slider.style.filter = 'alpha(opacity=' + STARTINGOPACITY + ')';
  slider.timer = setInterval( function(){ slideAnimate(slider,prefix,timer)}, SLIDETIMER);
}

function slideAnimate(slider,prefix,timer)
{
  var curr = Math.abs(slider.current);
  var tar = Math.abs(slider.target);
  var dir = slider.direction;
  if ((tar - curr <= SLIDESPEED && dir == -1) || (curr - tar <= SLIDESPEED && dir == 1))
  {
    slider.style.top = (slider.target * -1) + 'px';
    slider.style.opacity = 1;
    slider.style.filter = 'alpha(opacity=100)';
    clearInterval(slider.timer);
    if (slider.autoscroll)
    {
      setTimeout( function(){ autoScroll(slider.id,prefix,timer)}, timer * 1000);
    }
  }
  else
  {
    var pos = (dir == 1) ? parseInt(slider.current) + SLIDESPEED : slider.current - SLIDESPEED;
    slider.current = pos;
    slider.style.top = pos + 'px';
  }
}

// handles manual scrolling of the content //
function scrollContent(id, dir, horiz)
{
  if (horiz)
  {
    var row = $(id);
    var div = row.parentNode.parentNode.parentNode;
    var sections = row.getElementsByTagName('td');
  }
  else
  {
    var div = document.getElementById(id);
    var sections = div.getElementsByTagName('img');
  }
  clearInterval(div.timer);
  var length = sections.length;
  var limit = 0;
  if (dir == -1)
  {
    limit = 0;
  }
  else
  {
    for (var ii = 0; ii < length; ii++)
    {
      if ((horiz) && (sections[ii].offsetLeft > limit))
      {
        limit = sections[ii].offsetLeft + sections[ii].offsetWidth - div.parentNode.offsetWidth;
      }
      else if ((!horiz) && (sections[ii].offsetTop > limit))
      {
        limit = sections[ii].offsetTop + sections[ii].offsetHeight - div.parentNode.offsetHeight;
      }
    }
    if (limit < 0)
    {
      limit = 0;
    }
  }
  lastScrollTime = 0;
  div.timer = setInterval( function(){ scrollAnimate(div, dir, limit, horiz)}, SCROLLTIMER);
}

function scrollAnimate(div, dir, limit, horiz)
{
  if (horiz)
  {
    div.style.left = div.style.left || '0px';
    var left = div.style.left.replace('px','');
  }
  else
  {
    div.style.top = div.style.top || '0px';
    var top = div.style.top.replace('px','');    
  }
  
  var scrollTime = (new Date()).getTime();

  if (lastScrollTime == 0)
  {
    scrollAmt = Math.ceil(SCROLLSPEED);
  }
  else
  {
    scrollAmt = Math.floor((scrollTime - lastScrollTime) / SCROLLTIMER * SCROLLSPEED);
  }

  lastScrollTime = scrollTime;

  if (dir == 1)
  {
    if (horiz)
    {
      if (limit - Math.abs(left) <= scrollAmt)
      {
        cancelScrollDiv(div);
        div.style.left = '-' + limit + 'px';
      }
      else
      {
        div.style.opacity = STARTINGOPACITY * .01;
        div.style.filter = 'alpha(opacity=' + STARTINGOPACITY + ')';
        div.style.left = left - scrollAmt + 'px';
      }
    }
    else
    {
      if (limit - Math.abs(top) <= scrollAmt)
      {
        cancelScroll(div.id);
        div.style.top = '-' + limit + 'px';
      }
      else
      {
        div.style.opacity = STARTINGOPACITY * .01;
        div.style.filter = 'alpha(opacity=' + STARTINGOPACITY + ')';
        div.style.top = top - scrollAmt + 'px';
      }      
    }
  }
  else
  {
    if (horiz)
    {
      if (Math.abs(left) - limit <= scrollAmt)
      {
        cancelScrollDiv(div);
        div.style.left = limit + 'px';
      }
      else
      {
        div.style.opacity = STARTINGOPACITY * .01;
        div.style.filter = 'alpha(opacity=' + STARTINGOPACITY + ')';
        div.style.left = parseInt(left) + scrollAmt + 'px';
      }
    }
    else
    {
      if (Math.abs(top) - limit <= scrollAmt)
      {
        cancelScroll(div.id);
        div.style.top = limit + 'px';
      }
      else
      {
        div.style.opacity = STARTINGOPACITY * .01;
        div.style.filter = 'alpha(opacity=' + STARTINGOPACITY + ')';
        div.style.top = parseInt(top) + scrollAmt + 'px';
      }
    }
  }
}

// cancel the scrolling on mouseout //
function cancelScroll(id, horiz)
{
  if (horiz)
  {
    var row = $(id);
    var div = row.parentNode.parentNode.parentNode;
  }
  else
  {
    var div = document.getElementById(id);
  }
  cancelScrollDiv(div);
}

function cancelScrollDiv(div)
{
  div.style.opacity = 1;
  div.style.filter = 'alpha(opacity=100)';
  clearTimeout(div.timer);
}

// initiate auto scrolling //
function autoScroll(id,prefix,timer,restart)
{
  var div = $(id);
  div.autoscroll = (!div.autoscroll && !restart) ? false : true;
  if (div.autoscroll)
  {
    var sections = div.getElementsByTagName('div');
    var length = sections.length;
    div.section = (div.section && div.section < length) ? div.section + 1 : 1;
    slideContent(prefix + '-' + div.section,prefix,timer);
  }
}

// cancel automatic scrolling //
function cancelAutoScroll(id)
{
  $(id).autoscroll = false;
}