includes/clientside/static/sliders.js
author Dan
Sat, 03 Jan 2009 18:11:18 -0500
changeset 800 9cdfe82c56cd
parent 779 609e35845ec3
child 855 4f7521dd981f
permissions -rw-r--r--
Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].

// Sliding drawers on the sidebar

// our global vars
// the delay between the slide in/out, and a little inertia

/*
pseudocode:
  oninit():
    i = 0
    for every div with class "slideblock", do
      if ( cookie['mdgSliderState_' || i] == 'closed' )
        hide(div)
        
      div.trigger.addEvent onclick():
        if ( div.hidden )
          div.show()
          cookie['mdgSliderState_' || i] = 'open'
        else
          div.hide()
          cookie['mdgSliderState_' || i] = 'closed
          
      i++
    
*/


var sliders_initted = false;
      
var initSliders = function()
{
  if ( KILL_SWITCH || IE )
    return false;
  
  var divs = getElementsByClassName(document, "div", "slideblock");
  var divs2 = getElementsByClassName(document, "div", "slideblock2");
  for ( var i = 0; i < divs2.length; i++ )
  {
    divs.push(divs2[i]);
  }
  delete divs2;
  
  if ( divs.length < 1 )
    return false;
  
  for ( var i = 0; i < divs.length; i++ )
  {
    var div = divs[i];
    // set a unique id for this slider
    div.metaid = i;
    
    var cookiename = 'mdgSliderState_' + i;
    if ( readCookie(cookiename) == 'closed' )
    {
      div.style.display = 'none';
    }
    
    var el = div.previousSibling;
    if ( !el )
      continue;
    while ( el.tagName != 'DIV' )
    {
      el = el.previousSibling;
      if ( !el )
        break;
    }
    if ( !el )
      continue;
    var toggler = el.getElementsByTagName('a')[0];
    if ( !toggler )
      continue;
    toggler.onclick = function()
    {
      load_component(['jquery', 'jquery-ui']);
      
      var mydiv = this.parentNode.nextSibling;
      while ( mydiv.tagName != 'DIV' )
        mydiv = mydiv.nextSibling;
      if ( mydiv.style.display == 'none' )
      {
        $(mydiv).show('blind');
        var cookiename = 'mdgSliderState_' + mydiv.metaid;
        createCookie(cookiename, 'open', 365);
      }
      else
      {
        $(mydiv).hide('blind');
        var cookiename = 'mdgSliderState_' + mydiv.metaid;
        createCookie(cookiename, 'closed', 365);
      }
      
      return false;
    }
  }
}

addOnloadHook(initSliders);