/* remap jQuery to $
(function($){

})(window.jQuery);
*/


/*
 * UTIL event loader
 * http://paulirish.com/2009/markup-based-unobtrusive-comprehensive-dom-ready-execution/
 */
UTIL = {
 
  fire : function(func,funcname, args){
 
    var namespace = SAQ;  // indicate your obj literal namespace here
 
    funcname = (funcname === undefined) ? 'init' : funcname;
    if (func !== '' && namespace[func] && typeof namespace[func][funcname] == 'function'){
      namespace[func][funcname](args);
    } 
 
  }, 
 
  loadEvents : function(){
 
    var bodyId = document.body.id;
 
    // hit up common first.
    UTIL.fire('common');
 
    // do all the classes too.
    $.each(document.body.className.split(/\s+/),function(i,classnm){
      UTIL.fire(classnm);
      UTIL.fire(classnm,bodyId);
    });
 
    UTIL.fire('common','finalize');
 
  } 
 
};


/*
 * Tetris
 *
 * ## Block format
 * [width, [cell_0, cell_1, cell_3, ...]]
 */

(function($){

  var _generate_slice = function(block, field_columns, at){
    var slice = [],
        columns = block[0],
        cells   = block[1],
        rows    = cells.length / columns,
        row, i;
    
    for (row = 0; row < rows; row ++) {
      // padding
      for (i = 0; i < at; i++) {
        slice.push(0);
      }
      
      // block
      for (i = 0; i < columns; i++) {
        slice.push(cells[(row * columns) + i]);
      }
      
      // padding
      for (i = (at + columns); i < field_columns; i++) {
        slice.push(0);
      }
    }
    
    return slice;
  };
  
  var _check_fit = function(slice, cells, width, y) {
    var th = cells.length / width,
        sh = slice.length / width,
        rh = (th - y),
        i;
    
    for (i = 0; i < (rh * width) ; i++) {
      if ((slice[i] == 1) && (cells[(y * width) + i] == 1))
        return false;
    }
    
    return true;
  };
  
  var _find_row = function(slice, cells, width){
    var rows = cells.length / width,
        i = 0, miss=true;
    
    for (i = (rows - 1); i >= 0 ; i--) {
      if (!_check_fit(slice, cells, width, i)) {
        i += 1;
        miss = false;
        break;
      }
    }
    
    if (miss) i = 0;
    
    return i;
  };
  
  var _put_slice = function(slice, cells, width, y) {
    var th = cells.length / width,
        sh = slice.length / width,
        i;
    
    for (i = 0; i < (sh * width) ; i++) {
      if (slice[i] == 1) {
        cells[(y * width) + i] = 1;
      } else if (!cells[(y * width) + i]) {
        cells[(y * width) + i] = 0;
      }
    }
  };

  var Tetris = function(columns, cell_size){
    this.columns    = columns;
    this.cell_size  = cell_size;
    this.cells      = [];
    this.blocks     = {};
    this.block_cols = {};
    this.slices     = {};
    this.positions  = {};
    this.id         = 0;
    
    var i;
    for (i = 0; i < columns; i ++) this.cells.push(0);
  };
  
  Tetris.prototype.drop_block = function(block, at){
    var id = this.id;
    this.id++;
    
    this.blocks[id] = block;
    this.block_cols[id] = at;
    this.slices[id] = _generate_slice(block, this.columns, at);
        
    var row = _find_row(this.slices[id], this.cells, this.columns);
    
    _put_slice(this.slices[id], this.cells, this.columns, row);
    
    this.positions[id] = [(at  * this.cell_size[0]),
                          (row * this.cell_size[1])];
    
    
    return [id, this.positions[id]];
  };
  
  Tetris.prototype.each = function(callback){
    var i;
    for (i in this.positions) {
      callback.call(_root, i, this.positions[i]);
    }
  };
  
  Tetris.prototype.height = function(){
    return (this.cells.length / this.columns) * this.cell_size[1];
  };
  
  Tetris.prototype.width = function(){
    return this.columns * this.cell_size[0];
  };
  
  Tetris.prototype.redrop = function(){
    var blocks = this.blocks,
        cols   = this.block_cols,
        i;
    
    this.blocks    = {};
    this.cells     = [];
    this.slices    = {};
    this.positions = {};
    
    for (i in blocks) {
      this.drop_block(i, blocks[i], cols[i]);
    }
  };
  
  $.fn.tetrisGrid = function(settings){
     var config = {columns: 8, cell_size: [100, 100]};
 
     if (settings) $.extend(config, settings);
     
     this.each(function(){
       this.tetris_grid = new Tetris(settings.columns, settings.cell_size);
     });
     
     return this;
  };
  
  $.fn.tetrisDrop = function(elements, block, at){
    this.each(function(){
      var grid = $(this);
      var info;
      var tetris = this.tetris_grid;
      if (tetris) {

        var off = Math.floor((tetris.columns - block[0]) * at);
        elements.each(function(){
                  
          info = tetris.drop_block(block, off);
          this.tetris_id = info[0];
          //console.log($(this).clone());
          //grid.append($(this).clone(true).css({
          grid.append($(this).css({
            'position': 'absolute',
            'left':     info[1][0],
            'top':      info[1][1]
          }));
        });
        
        grid.css({ 'height': tetris.height(), 'width': tetris.width() });
      }
    });
    
    return this;
  };
  
})(jQuery);



/*
 * Lightweight wrapper for console.log
 *
 * usage: log('inside coolFunc',this,arguments);
 * paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
 */
window.log = function(){
  log.history = log.history || [];   // store logs to an array for reference
  log.history.push(arguments);
  if(this.console){
    console.log( Array.prototype.slice.call(arguments) );
  }
};


/*
 * Get querystring
 * @param = querystring you're looking for
 * returns querystring value if found
 * returns false if not found
 * 
 */
var querystring = {
  get: function(param){
    var y = false;
    var qs = window.location.search.substring(1);
    qs = qs.split('&');
    for (var i = 0; i < qs.length; i++) {
      x = qs[i].split("=");
      if (x[0] == param) {
        y = x[1];
      } 
    }
    return y;
  }
};


/*
  mustache.js — Logic-less templates in JavaScript

  See http://mustache.github.com/ for more info.
*/

var Mustache = function() {
  var Renderer = function() {};

  Renderer.prototype = {
    otag: "{{",
    ctag: "}}",
    pragmas: {},
    buffer: [],
    pragmas_implemented: {
      "IMPLICIT-ITERATOR": true
    },
    context: {},

    render: function(template, context, partials, in_recursion) {
      // reset buffer & set context
      if(!in_recursion) {
        this.context = context;
        this.buffer = []; // TODO: make this non-lazy
      }

      // fail fast
      if(!this.includes("", template)) {
        if(in_recursion) {
          return template;
        } else {
          this.send(template);
          return;
        }
      }

      template = this.render_pragmas(template);
      var html = this.render_section(template, context, partials);
      if(in_recursion) {
        return this.render_tags(html, context, partials, in_recursion);
      }

      this.render_tags(html, context, partials, in_recursion);
    },

    /*
      Sends parsed lines
    */
    send: function(line) {
      if(line != "") {
        this.buffer.push(line);
      }
    },

    /*
      Looks for %PRAGMAS
    */
    render_pragmas: function(template) {
      // no pragmas
      if(!this.includes("%", template)) {
        return template;
      }

      var that = this;
      var regex = new RegExp(this.otag + "%([\\w-]+) ?([\\w]+=[\\w]+)?" +
            this.ctag);
      return template.replace(regex, function(match, pragma, options) {
        if(!that.pragmas_implemented[pragma]) {
          throw({message: 
            "This implementation of mustache doesn't understand the '" +
            pragma + "' pragma"});
        }
        that.pragmas[pragma] = {};
        if(options) {
          var opts = options.split("=");
          that.pragmas[pragma][opts[0]] = opts[1];
        }
        return "";
        // ignore unknown pragmas silently
      });
    },

    /*
      Tries to find a partial in the curent scope and render it
    */
    render_partial: function(name, context, partials) {
      name = this.trim(name);
      if(!partials || partials[name] === undefined) {
        throw({message: "unknown_partial '" + name + "'"});
      }
      if(typeof(context[name]) != "object") {
        return this.render(partials[name], context, partials, true);
      }
      return this.render(partials[name], context[name], partials, true);
    },

    /*
      Renders inverted (^) and normal (#) sections
    */
    render_section: function(template, context, partials) {
      if(!this.includes("#", template) && !this.includes("^", template)) {
        return template;
      }

      var that = this;
      // CSW - Added "+?" so it finds the tighest bound, not the widest
      var regex = new RegExp(this.otag + "(\\^|\\#)\\s*(.+)\\s*" + this.ctag +
              "\n*([\\s\\S]+?)" + this.otag + "\\/\\s*\\2\\s*" + this.ctag +
              "\\s*", "mg");

      // for each {{#foo}}{{/foo}} section do...
      return template.replace(regex, function(match, type, name, content) {
        var value = that.find(name, context);
        if(type == "^") { // inverted section
          if(!value || that.is_array(value) && value.length === 0) {
            // false or empty list, render it
            return that.render(content, context, partials, true);
          } else {
            return "";
          }
        } else if(type == "#") { // normal section
          if(that.is_array(value)) { // Enumerable, Let's loop!
            return that.map(value, function(row) {
              return that.render(content, that.create_context(row),
                partials, true);
            }).join("");
          } else if(that.is_object(value)) { // Object, Use it as subcontext!
            return that.render(content, that.create_context(value),
              partials, true);
          } else if(typeof value === "function") {
            // higher order section
            return value.call(context, content, function(text) {
              return that.render(text, context, partials, true);
            });
          } else if(value) { // boolean section
            return that.render(content, context, partials, true);
          } else {
            return "";
          }
        }
      });
    },

    /*
      Replace {{foo}} and friends with values from our view
    */
    render_tags: function(template, context, partials, in_recursion) {
      // tit for tat
      var that = this;

      var new_regex = function() {
        return new RegExp(that.otag + "(=|!|>|\\{|%)?([^\\/#\\^]+?)\\1?" +
          that.ctag + "+", "g");
      };

      var regex = new_regex();
      var tag_replace_callback = function(match, operator, name) {
        switch(operator) {
        case "!": // ignore comments
          return "";
        case "=": // set new delimiters, rebuild the replace regexp
          that.set_delimiters(name);
          regex = new_regex();
          return "";
        case ">": // render partial
          return that.render_partial(name, context, partials);
        case "{": // the triple mustache is unescaped
          return that.find(name, context);
        default: // escape the value
          return that.escape(that.find(name, context));
        }
      };
      var lines = template.split("\n");
      for(var i = 0; i < lines.length; i++) {
        lines[i] = lines[i].replace(regex, tag_replace_callback, this);
        if(!in_recursion) {
          this.send(lines[i]);
        }
      }

      if(in_recursion) {
        return lines.join("\n");
      }
    },

    set_delimiters: function(delimiters) {
      var dels = delimiters.split(" ");
      this.otag = this.escape_regex(dels[0]);
      this.ctag = this.escape_regex(dels[1]);
    },

    escape_regex: function(text) {
      // thank you Simon Willison
      if(!arguments.callee.sRE) {
        var specials = [
          '/', '.', '*', '+', '?', '|',
          '(', ')', '[', ']', '{', '}', '\\'
        ];
        arguments.callee.sRE = new RegExp(
          '(\\' + specials.join('|\\') + ')', 'g'
        );
      }
      return text.replace(arguments.callee.sRE, '\\$1');
    },

    /*
      find `name` in current `context`. That is find me a value
      from the view object
    */
    find: function(name, context) {
      name = this.trim(name);

      // Checks whether a value is thruthy or false or 0
      function is_kinda_truthy(bool) {
        return bool === false || bool === 0 || bool;
      }

      var value;
      if(is_kinda_truthy(context[name])) {
        value = context[name];
      } else if(is_kinda_truthy(this.context[name])) {
        value = this.context[name];
      }

      if(typeof value === "function") {
        return value.apply(context);
      }
      if(value !== undefined) {
        return value;
      }
      // silently ignore unkown variables
      return "";
    },

    // Utility methods

    /* includes tag */
    includes: function(needle, haystack) {
      return haystack.indexOf(this.otag + needle) != -1;
    },

    /*
      Does away with nasty characters
    */
    escape: function(s) {
      s = String(s === null ? "" : s);
      return s.replace(/&(?!\w+;)|["<>\\]/g, function(s) {
        switch(s) {
        case "&": return "&amp;";
        case "\\": return "\\\\";
        case '"': return '\"';
        case "<": return "&lt;";
        case ">": return "&gt;";
        default: return s;
        }
      });
    },

    // by @langalex, support for arrays of strings
    create_context: function(_context) {
      if(this.is_object(_context)) {
        return _context;
      } else {
        var iterator = ".";
        if(this.pragmas["IMPLICIT-ITERATOR"]) {
          iterator = this.pragmas["IMPLICIT-ITERATOR"].iterator;
        }
        var ctx = {};
        ctx[iterator] = _context;
        return ctx;
      }
    },

    is_object: function(a) {
      return a && typeof a == "object";
    },

    is_array: function(a) {
      return Object.prototype.toString.call(a) === '[object Array]';
    },

    /*
      Gets rid of leading and trailing whitespace
    */
    trim: function(s) {
      return s.replace(/^\s*|\s*$/g, "");
    },

    /*
      Why, why, why? Because IE. Cry, cry cry.
    */
    map: function(array, fn) {
      if (typeof array.map == "function") {
        return array.map(fn);
      } else {
        var r = [];
        var l = array.length;
        for(var i = 0; i < l; i++) {
          r.push(fn(array[i]));
        }
        return r;
      }
    }
  };

  return({
    name: "mustache.js",
    version: "0.3.0",

    /*
      Turns a template and view into HTML
    */
    to_html: function(template, view, partials, send_fun) {
      var renderer = new Renderer();
      if(send_fun) {
        renderer.send = send_fun;
      }
      renderer.render(template, view, partials);
      if(!send_fun) {
        return renderer.buffer.join("\n");
      }
    }
  });
}();

/*
 * Viewport dimensions
 * http://geekswithblogs.net/khillinger/archive/2009/06/04/jquery-and-the-viewport-dimensions.aspx
 * @example
 *   viewport.height();
 */
window.viewport =
{
    height: function() {
        return $(window).height();
    },
   
    width: function() {
        return $(window).width();
    },
   
    scrollTop: function() {
        return $(window).scrollTop();
    },
   
    scrollLeft: function() {
        return $(window).scrollLeft();
    }
};


/**
 * jQuery Plugin to obtain touch gestures from iPhone, iPod Touch and iPad, should also work with Android mobile phones (not tested yet!)
 * Common usage: wipe images (left and right to show the previous or next image)
 * 
 * @author Andreas Waltl, netCU Internetagentur (http://www.netcu.de)
 * @version 1.0 (15th July 2010)
 */
(function($){$.fn.touchwipe=function(settings){var config={min_move_x:20,wipeLeft:function(){alert("left");},wipeRight:function(){alert("right");},preventDefaultEvents:true};if(settings)$.extend(config,settings);this.each(function(){var startX;var isMoving=false;function cancelTouch(){this.removeEventListener('touchmove',onTouchMove);startX=null;isMoving=false;}function onTouchMove(e){if(config.preventDefaultEvents){e.preventDefault();}if(isMoving){var x=e.touches[0].pageX;var dx=startX-x;if(Math.abs(dx)>=config.min_move_x){cancelTouch();if(dx>0){config.wipeLeft();}else{config.wipeRight();}}}}function onTouchStart(e){if(e.touches.length==1){startX=e.touches[0].pageX;isMoving=true;this.addEventListener('touchmove',onTouchMove,false);}}this.addEventListener('touchstart',onTouchStart,false);});return this;};})(jQuery);



/*
 * Overslayer, the badass overlayer
 * Just a simple overlayer with callbacks
 *
 * Author: Yves Van Broekhoven & Simon Menke
 * Date: 2010-09-29
 * Version: 0.1
 *
 */
(function($){
  
  var _open, _close;
  
  $.fn.overslayer = function(options){
    
    // Extend options
    var opts = options ? $.extend({}, $.fn.overslayer.defaults, options) : $.fn.overslayer.defaults;
    $this = $(this);
    return this.each(function(){
      
      this.overslayer_options = opts;
      $this.click(function(e){
        e.preventDefault();
        $.fn.overslayer.open.call(this);
      });
      
    });
    
  };
  
  /*
   * Default options
   * @options opts [Function] beforeOpen (null) Function runs before the overlayer opens
   * @options opts [Function] beforeOpenAsync (null) Function runs before the overlayer opens and triggers the open function when done
   * @options opts [Function] beforeClose (null) Function runs before the overlayer closes
   * @options opts [Function] beforeCloseAsync (null) Function runs before the overlayer closes and triggers the close function when done
   * @options opts [Function] afterOpen (null) Function runs after the overlay opened
   * @options opts [Function] afterClose (null) Function runs after the overlay closed
   * @options opts [Object] closeOnClick (true) Clicked this element(s) to close the overlayer
   */
  $.fn.overslayer.defaults = {
    beforeOpen: null,
    beforeOpenAsync: null,
    beforeClose: null,
    beforeCloseAsync: null,
    onOpen: null,
    afterOpen: null,
    afterClose: null,
    closeOnClick: '#overslayer',
    fadeSpeed: 300
  };
  
  
  /*
   * Open the overlayer
   * @param [Object] opts
   * @see $.fn.overslayer.defaults
   */
  $.fn.overslayer.open = function(opts){

    if (this.overslayer_options) {
      opts = opts ? $.extend({}, this.overslayer_options, opts) : this.overslayer_options;
    } else {
      opts = opts ? $.extend({}, $.fn.overslayer.defaults, opts) : $.fn.overslayer.defaults;
    }
    
    // Before open
    if ($.isFunction(opts.beforeOpen)) {
      opts.beforeOpen();
    };
    
    // Before open with callback
    if ($.isFunction(opts.beforeOpenAsync)) {
      opts.beforeOpenAsync(function(content){
        opts.content = content;
        _open(opts);
      });
    } else {
      _open(opts);
    };
    
  };
  
  
  /*
   * Closes the overlayer
   * @param [Object] opts
   * @see $.fn.overslayer.defaults
   */
  $.fn.overslayer.close = function(opts){
    
    if (this.overslayer_options) {
      opts = opts ? $.extend({}, this.overslayer_options, opts) : this.overslayer_options;
    } else {
      opts = opts ? $.extend({}, $.fn.overslayer.defaults, opts) : $.fn.overslayer.defaults;
    }
    
    // Before close
    if ($.isFunction(opts.beforeClose)) {
      opts.beforeClose();
    };
    
    // Before open with callback
    if ($.isFunction(opts.beforeCloseAsync)) {
      opts.beforeCloseAsync(function(){
        _close(opts);
      });
    } else {
      _close(opts);
    };
    
  };
  
  
  /*
   * The actually creation of the overlayer
   * @private
   *
   * @param [Object] opts
   * @see $.fn.overslayer.defaults
   */
  _open = function(opts){
    
    // Create overlayer
    var overlay = $('<div id="overslayer"></div>');
    if (opts.content) {
      overlay.append(opts.content);
    }
    // Attach close event
    $(opts.closeOnClick).live('click', function(event){
      event.preventDefault();
      $.fn.overslayer.close(opts);
    });
    
    // Open the bitch
    if ($('#overslayer').length <= 0) {
      overlay.appendTo('body').hide();
      
      // On open callback
      if ($.isFunction(opts.onOpen)) {
        opts.onOpen();
      }
      
      // Fade in
      overlay.fadeIn(opts.fadeSpeed, function(){
        // After open callback
        if ($.isFunction(opts.afterOpen)) {
          opts.afterOpen();
        }
      
      });
    }

  };
  
  
  /*
   * The actually close of the overlayer
   * @private
   *
   * @param [Object] opts
   * @see $.fn.overslayer.defaults
   */
  _close = function(opts){
    $('#overslayer').fadeOut(300, function(){
      
      $(this).remove();
      
      // After close callback
      if ($.isFunction(opts.afterClose)) {
        opts.afterClose();
      }
      
    });
  }
  
})(jQuery);

/*
 * Display or remove a message in an element
 */
(function($){
  
  var _add, _remove;
  
  $.fn.messenger = function(action, options){
    opts = options ? $.extend({}, $.fn.messenger.defaults, options) : $.fn.messenger.defaults;
    $this = this;
    
    this.each(function(){
      
      // Attach options to this element
      this.messenger_options = opts;
      
      // Action
      switch(action){
        case 'add':
          _add($(this), opts);
          break;
        default:
          $.fn.messenger.remove($(this), opts);
      }
    });
    
    return this;
  };
  
  _add = function($this, opts){
    var messengerContainer = $(opts.messengerContainer).addClass(opts.messengerClass).html(opts.messengerContent);
    if ($(opts.messengerClass).length <= 0) {
      messengerContainer.hide().appendTo($this).fadeIn(300);
    }
    if ($(opts.autoRemove)) {
      setTimeout(function(){
        $.fn.messenger.remove($this, opts);
      }, opts.autoRemoveDelay);
    }
  }
    
  $.fn.messenger.remove = function($this, opts){
    
    // Set options
    if ($this[0].messenger_options) {
      opts = opts ? $.extend({}, this.messenger_options, opts) : this.messenger_options;
    } else {
      opts = opts ? $.extend({}, $.fn.messenger.defaults, opts) : $.fn.messenger.defaults;
    };
    
    // Remove messenger
    $('.' + opts.messengerClass, $this).fadeOut(300, function(){
      $(this).remove();
    });
  }
  
  $.fn.messenger.defaults = {
    messengerContainer:  '<div></div>',
    messengerClass:      'messenger',
    messengerContent:    'loading',
    autoRemove:          false,
    autoRemoveDelay:     2000 
  }
  
})(jQuery);


/*
 * jQuery Cycle Plugin (core engine)
 * Examples and documentation at: http://jquery.malsup.com/cycle/
 * Copyright (c) 2007-2010 M. Alsup
 * Version: 2.88 (08-JUN-2010)
 * Dual licensed under the MIT and GPL licenses.
 * http://jquery.malsup.com/license.html
 * Requires: jQuery v1.2.6 or later
 */
(function($){var ver="2.88";if($.support==undefined){$.support={opacity:!($.browser.msie)};}function debug(s){if($.fn.cycle.debug){log(s);}}function log(){if(window.console&&window.console.log){window.console.log("[cycle] "+Array.prototype.join.call(arguments," "));}}$.fn.cycle=function(options,arg2){var o={s:this.selector,c:this.context};if(this.length===0&&options!="stop"){if(!$.isReady&&o.s){log("DOM not ready, queuing slideshow");$(function(){$(o.s,o.c).cycle(options,arg2);});return this;}log("terminating; zero elements found by selector"+($.isReady?"":" (DOM not ready)"));return this;}return this.each(function(){var opts=handleArguments(this,options,arg2);if(opts===false){return;}opts.updateActivePagerLink=opts.updateActivePagerLink||$.fn.cycle.updateActivePagerLink;if(this.cycleTimeout){clearTimeout(this.cycleTimeout);}this.cycleTimeout=this.cyclePause=0;var $cont=$(this);var $slides=opts.slideExpr?$(opts.slideExpr,this):$cont.children();var els=$slides.get();if(els.length<2){log("terminating; too few slides: "+els.length);return;}var opts2=buildOptions($cont,$slides,els,opts,o);if(opts2===false){return;}var startTime=opts2.continuous?10:getTimeout(els[opts2.currSlide],els[opts2.nextSlide],opts2,!opts2.rev);if(startTime){startTime+=(opts2.delay||0);if(startTime<10){startTime=10;}debug("first timeout: "+startTime);this.cycleTimeout=setTimeout(function(){go(els,opts2,0,(!opts2.rev&&!opts.backwards));},startTime);}});};function handleArguments(cont,options,arg2){if(cont.cycleStop==undefined){cont.cycleStop=0;}if(options===undefined||options===null){options={};}if(options.constructor==String){switch(options){case"destroy":case"stop":var opts=$(cont).data("cycle.opts");if(!opts){return false;}cont.cycleStop++;if(cont.cycleTimeout){clearTimeout(cont.cycleTimeout);}cont.cycleTimeout=0;$(cont).removeData("cycle.opts");if(options=="destroy"){destroy(opts);}return false;case"toggle":cont.cyclePause=(cont.cyclePause===1)?0:1;checkInstantResume(cont.cyclePause,arg2,cont);return false;case"pause":cont.cyclePause=1;return false;case"resume":cont.cyclePause=0;checkInstantResume(false,arg2,cont);return false;case"prev":case"next":var opts=$(cont).data("cycle.opts");if(!opts){log('options not found, "prev/next" ignored');return false;}$.fn.cycle[options](opts);return false;default:options={fx:options};}return options;}else{if(options.constructor==Number){var num=options;options=$(cont).data("cycle.opts");if(!options){log("options not found, can not advance slide");return false;}if(num<0||num>=options.elements.length){log("invalid slide index: "+num);return false;}options.nextSlide=num;if(cont.cycleTimeout){clearTimeout(cont.cycleTimeout);cont.cycleTimeout=0;}if(typeof arg2=="string"){options.oneTimeFx=arg2;}go(options.elements,options,1,num>=options.currSlide);return false;}}return options;function checkInstantResume(isPaused,arg2,cont){if(!isPaused&&arg2===true){var options=$(cont).data("cycle.opts");if(!options){log("options not found, can not resume");return false;}if(cont.cycleTimeout){clearTimeout(cont.cycleTimeout);cont.cycleTimeout=0;}go(options.elements,options,1,(!opts.rev&&!opts.backwards));}}}function removeFilter(el,opts){if(!$.support.opacity&&opts.cleartype&&el.style.filter){try{el.style.removeAttribute("filter");}catch(smother){}}}function destroy(opts){if(opts.next){$(opts.next).unbind(opts.prevNextEvent);}if(opts.prev){$(opts.prev).unbind(opts.prevNextEvent);}if(opts.pager||opts.pagerAnchorBuilder){$.each(opts.pagerAnchors||[],function(){this.unbind().remove();});}opts.pagerAnchors=null;if(opts.destroy){opts.destroy(opts);}}function buildOptions($cont,$slides,els,options,o){var opts=$.extend({},$.fn.cycle.defaults,options||{},$.metadata?$cont.metadata():$.meta?$cont.data():{});if(opts.autostop){opts.countdown=opts.autostopCount||els.length;}var cont=$cont[0];$cont.data("cycle.opts",opts);opts.$cont=$cont;opts.stopCount=cont.cycleStop;opts.elements=els;opts.before=opts.before?[opts.before]:[];opts.after=opts.after?[opts.after]:[];opts.after.unshift(function(){opts.busy=0;});if(!$.support.opacity&&opts.cleartype){opts.after.push(function(){removeFilter(this,opts);});}if(opts.continuous){opts.after.push(function(){go(els,opts,0,(!opts.rev&&!opts.backwards));});}saveOriginalOpts(opts);if(!$.support.opacity&&opts.cleartype&&!opts.cleartypeNoBg){clearTypeFix($slides);}if($cont.css("position")=="static"){$cont.css("position","relative");}if(opts.width){$cont.width(opts.width);}if(opts.height&&opts.height!="auto"){$cont.height(opts.height);}if(opts.startingSlide){opts.startingSlide=parseInt(opts.startingSlide);}else{if(opts.backwards){opts.startingSlide=els.length-1;}}if(opts.random){opts.randomMap=[];for(var i=0;i<els.length;i++){opts.randomMap.push(i);}opts.randomMap.sort(function(a,b){return Math.random()-0.5;});opts.randomIndex=1;opts.startingSlide=opts.randomMap[1];}else{if(opts.startingSlide>=els.length){opts.startingSlide=0;}}opts.currSlide=opts.startingSlide||0;var first=opts.startingSlide;$slides.css({position:"absolute",top:0,left:0}).hide().each(function(i){var z;if(opts.backwards){z=first?i<=first?els.length+(i-first):first-i:els.length-i;}else{z=first?i>=first?els.length-(i-first):first-i:els.length-i;}$(this).css("z-index",z);});$(els[first]).css("opacity",1).show();removeFilter(els[first],opts);if(opts.fit&&opts.width){$slides.width(opts.width);}if(opts.fit&&opts.height&&opts.height!="auto"){$slides.height(opts.height);}var reshape=opts.containerResize&&!$cont.innerHeight();if(reshape){var maxw=0,maxh=0;for(var j=0;j<els.length;j++){var $e=$(els[j]),e=$e[0],w=$e.outerWidth(),h=$e.outerHeight();if(!w){w=e.offsetWidth||e.width||$e.attr("width");}if(!h){h=e.offsetHeight||e.height||$e.attr("height");}maxw=w>maxw?w:maxw;maxh=h>maxh?h:maxh;}if(maxw>0&&maxh>0){$cont.css({width:maxw+"px",height:maxh+"px"});}}if(opts.pause){$cont.hover(function(){this.cyclePause++;},function(){this.cyclePause--;});}if(supportMultiTransitions(opts)===false){return false;}var requeue=false;options.requeueAttempts=options.requeueAttempts||0;$slides.each(function(){var $el=$(this);this.cycleH=(opts.fit&&opts.height)?opts.height:($el.height()||this.offsetHeight||this.height||$el.attr("height")||0);this.cycleW=(opts.fit&&opts.width)?opts.width:($el.width()||this.offsetWidth||this.width||$el.attr("width")||0);if($el.is("img")){var loadingIE=($.browser.msie&&this.cycleW==28&&this.cycleH==30&&!this.complete);var loadingFF=($.browser.mozilla&&this.cycleW==34&&this.cycleH==19&&!this.complete);var loadingOp=($.browser.opera&&((this.cycleW==42&&this.cycleH==19)||(this.cycleW==37&&this.cycleH==17))&&!this.complete);var loadingOther=(this.cycleH==0&&this.cycleW==0&&!this.complete);if(loadingIE||loadingFF||loadingOp||loadingOther){if(o.s&&opts.requeueOnImageNotLoaded&&++options.requeueAttempts<100){log(options.requeueAttempts," - img slide not loaded, requeuing slideshow: ",this.src,this.cycleW,this.cycleH);setTimeout(function(){$(o.s,o.c).cycle(options);},opts.requeueTimeout);requeue=true;return false;}else{log("could not determine size of image: "+this.src,this.cycleW,this.cycleH);}}}return true;});if(requeue){return false;}opts.cssBefore=opts.cssBefore||{};opts.animIn=opts.animIn||{};opts.animOut=opts.animOut||{};$slides.not(":eq("+first+")").css(opts.cssBefore);if(opts.cssFirst){$($slides[first]).css(opts.cssFirst);}if(opts.timeout){opts.timeout=parseInt(opts.timeout);if(opts.speed.constructor==String){opts.speed=$.fx.speeds[opts.speed]||parseInt(opts.speed);}if(!opts.sync){opts.speed=opts.speed/2;}var buffer=opts.fx=="shuffle"?500:250;while((opts.timeout-opts.speed)<buffer){opts.timeout+=opts.speed;}}if(opts.easing){opts.easeIn=opts.easeOut=opts.easing;}if(!opts.speedIn){opts.speedIn=opts.speed;}if(!opts.speedOut){opts.speedOut=opts.speed;}opts.slideCount=els.length;opts.currSlide=opts.lastSlide=first;if(opts.random){if(++opts.randomIndex==els.length){opts.randomIndex=0;}opts.nextSlide=opts.randomMap[opts.randomIndex];}else{if(opts.backwards){opts.nextSlide=opts.startingSlide==0?(els.length-1):opts.startingSlide-1;}else{opts.nextSlide=opts.startingSlide>=(els.length-1)?0:opts.startingSlide+1;}}if(!opts.multiFx){var init=$.fn.cycle.transitions[opts.fx];if($.isFunction(init)){init($cont,$slides,opts);}else{if(opts.fx!="custom"&&!opts.multiFx){log("unknown transition: "+opts.fx,"; slideshow terminating");return false;}}}var e0=$slides[first];if(opts.before.length){opts.before[0].apply(e0,[e0,e0,opts,true]);}if(opts.after.length>1){opts.after[1].apply(e0,[e0,e0,opts,true]);}if(opts.next){$(opts.next).bind(opts.prevNextEvent,function(){return advance(opts,opts.rev?-1:1);});}if(opts.prev){$(opts.prev).bind(opts.prevNextEvent,function(){return advance(opts,opts.rev?1:-1);});}if(opts.pager||opts.pagerAnchorBuilder){buildPager(els,opts);}exposeAddSlide(opts,els);return opts;}function saveOriginalOpts(opts){opts.original={before:[],after:[]};opts.original.cssBefore=$.extend({},opts.cssBefore);opts.original.cssAfter=$.extend({},opts.cssAfter);opts.original.animIn=$.extend({},opts.animIn);opts.original.animOut=$.extend({},opts.animOut);$.each(opts.before,function(){opts.original.before.push(this);});$.each(opts.after,function(){opts.original.after.push(this);});}function supportMultiTransitions(opts){var i,tx,txs=$.fn.cycle.transitions;if(opts.fx.indexOf(",")>0){opts.multiFx=true;opts.fxs=opts.fx.replace(/\s*/g,"").split(",");for(i=0;i<opts.fxs.length;i++){var fx=opts.fxs[i];tx=txs[fx];if(!tx||!txs.hasOwnProperty(fx)||!$.isFunction(tx)){log("discarding unknown transition: ",fx);opts.fxs.splice(i,1);i--;}}if(!opts.fxs.length){log("No valid transitions named; slideshow terminating.");return false;}}else{if(opts.fx=="all"){opts.multiFx=true;opts.fxs=[];for(p in txs){tx=txs[p];if(txs.hasOwnProperty(p)&&$.isFunction(tx)){opts.fxs.push(p);}}}}if(opts.multiFx&&opts.randomizeEffects){var r1=Math.floor(Math.random()*20)+30;for(i=0;i<r1;i++){var r2=Math.floor(Math.random()*opts.fxs.length);opts.fxs.push(opts.fxs.splice(r2,1)[0]);}debug("randomized fx sequence: ",opts.fxs);}return true;}function exposeAddSlide(opts,els){opts.addSlide=function(newSlide,prepend){var $s=$(newSlide),s=$s[0];if(!opts.autostopCount){opts.countdown++;}els[prepend?"unshift":"push"](s);if(opts.els){opts.els[prepend?"unshift":"push"](s);}opts.slideCount=els.length;$s.css("position","absolute");$s[prepend?"prependTo":"appendTo"](opts.$cont);if(prepend){opts.currSlide++;opts.nextSlide++;}if(!$.support.opacity&&opts.cleartype&&!opts.cleartypeNoBg){clearTypeFix($s);}if(opts.fit&&opts.width){$s.width(opts.width);}if(opts.fit&&opts.height&&opts.height!="auto"){$slides.height(opts.height);}s.cycleH=(opts.fit&&opts.height)?opts.height:$s.height();s.cycleW=(opts.fit&&opts.width)?opts.width:$s.width();$s.css(opts.cssBefore);if(opts.pager||opts.pagerAnchorBuilder){$.fn.cycle.createPagerAnchor(els.length-1,s,$(opts.pager),els,opts);}if($.isFunction(opts.onAddSlide)){opts.onAddSlide($s);}else{$s.hide();}};}$.fn.cycle.resetState=function(opts,fx){fx=fx||opts.fx;opts.before=[];opts.after=[];opts.cssBefore=$.extend({},opts.original.cssBefore);opts.cssAfter=$.extend({},opts.original.cssAfter);opts.animIn=$.extend({},opts.original.animIn);opts.animOut=$.extend({},opts.original.animOut);opts.fxFn=null;$.each(opts.original.before,function(){opts.before.push(this);});$.each(opts.original.after,function(){opts.after.push(this);});var init=$.fn.cycle.transitions[fx];if($.isFunction(init)){init(opts.$cont,$(opts.elements),opts);}};function go(els,opts,manual,fwd){if(manual&&opts.busy&&opts.manualTrump){debug("manualTrump in go(), stopping active transition");$(els).stop(true,true);opts.busy=false;}if(opts.busy){debug("transition active, ignoring new tx request");return;}var p=opts.$cont[0],curr=els[opts.currSlide],next=els[opts.nextSlide];if(p.cycleStop!=opts.stopCount||p.cycleTimeout===0&&!manual){return;}if(!manual&&!p.cyclePause&&!opts.bounce&&((opts.autostop&&(--opts.countdown<=0))||(opts.nowrap&&!opts.random&&opts.nextSlide<opts.currSlide))){if(opts.end){opts.end(opts);}return;}var changed=false;if((manual||!p.cyclePause)&&(opts.nextSlide!=opts.currSlide)){changed=true;var fx=opts.fx;curr.cycleH=curr.cycleH||$(curr).height();curr.cycleW=curr.cycleW||$(curr).width();next.cycleH=next.cycleH||$(next).height();next.cycleW=next.cycleW||$(next).width();if(opts.multiFx){if(opts.lastFx==undefined||++opts.lastFx>=opts.fxs.length){opts.lastFx=0;}fx=opts.fxs[opts.lastFx];opts.currFx=fx;}if(opts.oneTimeFx){fx=opts.oneTimeFx;opts.oneTimeFx=null;}$.fn.cycle.resetState(opts,fx);if(opts.before.length){$.each(opts.before,function(i,o){if(p.cycleStop!=opts.stopCount){return;}o.apply(next,[curr,next,opts,fwd]);});}var after=function(){$.each(opts.after,function(i,o){if(p.cycleStop!=opts.stopCount){return;}o.apply(next,[curr,next,opts,fwd]);});};debug("tx firing; currSlide: "+opts.currSlide+"; nextSlide: "+opts.nextSlide);opts.busy=1;if(opts.fxFn){opts.fxFn(curr,next,opts,after,fwd,manual&&opts.fastOnEvent);}else{if($.isFunction($.fn.cycle[opts.fx])){$.fn.cycle[opts.fx](curr,next,opts,after,fwd,manual&&opts.fastOnEvent);}else{$.fn.cycle.custom(curr,next,opts,after,fwd,manual&&opts.fastOnEvent);}}}if(changed||opts.nextSlide==opts.currSlide){opts.lastSlide=opts.currSlide;if(opts.random){opts.currSlide=opts.nextSlide;if(++opts.randomIndex==els.length){opts.randomIndex=0;}opts.nextSlide=opts.randomMap[opts.randomIndex];if(opts.nextSlide==opts.currSlide){opts.nextSlide=(opts.currSlide==opts.slideCount-1)?0:opts.currSlide+1;}}else{if(opts.backwards){var roll=(opts.nextSlide-1)<0;if(roll&&opts.bounce){opts.backwards=!opts.backwards;opts.nextSlide=1;opts.currSlide=0;}else{opts.nextSlide=roll?(els.length-1):opts.nextSlide-1;opts.currSlide=roll?0:opts.nextSlide+1;}}else{var roll=(opts.nextSlide+1)==els.length;if(roll&&opts.bounce){opts.backwards=!opts.backwards;opts.nextSlide=els.length-2;opts.currSlide=els.length-1;}else{opts.nextSlide=roll?0:opts.nextSlide+1;opts.currSlide=roll?els.length-1:opts.nextSlide-1;}}}}if(changed&&opts.pager){opts.updateActivePagerLink(opts.pager,opts.currSlide,opts.activePagerClass);}var ms=0;if(opts.timeout&&!opts.continuous){ms=getTimeout(els[opts.currSlide],els[opts.nextSlide],opts,fwd);}else{if(opts.continuous&&p.cyclePause){ms=10;}}if(ms>0){p.cycleTimeout=setTimeout(function(){go(els,opts,0,(!opts.rev&&!opts.backwards));},ms);}}$.fn.cycle.updateActivePagerLink=function(pager,currSlide,clsName){$(pager).each(function(){$(this).children().removeClass(clsName).eq(currSlide).addClass(clsName);});};function getTimeout(curr,next,opts,fwd){if(opts.timeoutFn){var t=opts.timeoutFn.call(curr,curr,next,opts,fwd);while((t-opts.speed)<250){t+=opts.speed;}debug("calculated timeout: "+t+"; speed: "+opts.speed);if(t!==false){return t;}}return opts.timeout;}$.fn.cycle.next=function(opts){advance(opts,opts.rev?-1:1);};$.fn.cycle.prev=function(opts){advance(opts,opts.rev?1:-1);};function advance(opts,val){var els=opts.elements;var p=opts.$cont[0],timeout=p.cycleTimeout;if(timeout){clearTimeout(timeout);p.cycleTimeout=0;}if(opts.random&&val<0){opts.randomIndex--;if(--opts.randomIndex==-2){opts.randomIndex=els.length-2;}else{if(opts.randomIndex==-1){opts.randomIndex=els.length-1;}}opts.nextSlide=opts.randomMap[opts.randomIndex];}else{if(opts.random){opts.nextSlide=opts.randomMap[opts.randomIndex];}else{opts.nextSlide=opts.currSlide+val;if(opts.nextSlide<0){if(opts.nowrap){return false;}opts.nextSlide=els.length-1;}else{if(opts.nextSlide>=els.length){if(opts.nowrap){return false;}opts.nextSlide=0;}}}}var cb=opts.onPrevNextEvent||opts.prevNextClick;if($.isFunction(cb)){cb(val>0,opts.nextSlide,els[opts.nextSlide]);}go(els,opts,1,val>=0);return false;}function buildPager(els,opts){var $p=$(opts.pager);$.each(els,function(i,o){$.fn.cycle.createPagerAnchor(i,o,$p,els,opts);});opts.updateActivePagerLink(opts.pager,opts.startingSlide,opts.activePagerClass);}$.fn.cycle.createPagerAnchor=function(i,el,$p,els,opts){var a;if($.isFunction(opts.pagerAnchorBuilder)){a=opts.pagerAnchorBuilder(i,el);debug("pagerAnchorBuilder("+i+", el) returned: "+a);}else{a='<a href="#">'+(i+1)+"</a>";}if(!a){return;}var $a=$(a);if($a.parents("body").length===0){var arr=[];if($p.length>1){$p.each(function(){var $clone=$a.clone(true);$(this).append($clone);arr.push($clone[0]);});$a=$(arr);}else{$a.appendTo($p);}}opts.pagerAnchors=opts.pagerAnchors||[];opts.pagerAnchors.push($a);$a.bind(opts.pagerEvent,function(e){e.preventDefault();opts.nextSlide=i;var p=opts.$cont[0],timeout=p.cycleTimeout;if(timeout){clearTimeout(timeout);p.cycleTimeout=0;}var cb=opts.onPagerEvent||opts.pagerClick;if($.isFunction(cb)){cb(opts.nextSlide,els[opts.nextSlide]);}go(els,opts,1,opts.currSlide<i);});if(!/^click/.test(opts.pagerEvent)&&!opts.allowPagerClickBubble){$a.bind("click.cycle",function(){return false;});}if(opts.pauseOnPagerHover){$a.hover(function(){opts.$cont[0].cyclePause++;},function(){opts.$cont[0].cyclePause--;});}};$.fn.cycle.hopsFromLast=function(opts,fwd){var hops,l=opts.lastSlide,c=opts.currSlide;if(fwd){hops=c>l?c-l:opts.slideCount-l;}else{hops=c<l?l-c:l+opts.slideCount-c;}return hops;};function clearTypeFix($slides){debug("applying clearType background-color hack");function hex(s){s=parseInt(s).toString(16);return s.length<2?"0"+s:s;}function getBg(e){for(;e&&e.nodeName.toLowerCase()!="html";e=e.parentNode){var v=$.css(e,"background-color");if(v.indexOf("rgb")>=0){var rgb=v.match(/\d+/g);return"#"+hex(rgb[0])+hex(rgb[1])+hex(rgb[2]);}if(v&&v!="transparent"){return v;}}return"#ffffff";}$slides.each(function(){$(this).css("background-color",getBg(this));});}$.fn.cycle.commonReset=function(curr,next,opts,w,h,rev){$(opts.elements).not(curr).hide();opts.cssBefore.opacity=1;opts.cssBefore.display="block";if(w!==false&&next.cycleW>0){opts.cssBefore.width=next.cycleW;}if(h!==false&&next.cycleH>0){opts.cssBefore.height=next.cycleH;}opts.cssAfter=opts.cssAfter||{};opts.cssAfter.display="none";$(curr).css("zIndex",opts.slideCount+(rev===true?1:0));$(next).css("zIndex",opts.slideCount+(rev===true?0:1));};$.fn.cycle.custom=function(curr,next,opts,cb,fwd,speedOverride){var $l=$(curr),$n=$(next);var speedIn=opts.speedIn,speedOut=opts.speedOut,easeIn=opts.easeIn,easeOut=opts.easeOut;$n.css(opts.cssBefore);if(speedOverride){if(typeof speedOverride=="number"){speedIn=speedOut=speedOverride;}else{speedIn=speedOut=1;}easeIn=easeOut=null;}var fn=function(){$n.animate(opts.animIn,speedIn,easeIn,cb);};$l.animate(opts.animOut,speedOut,easeOut,function(){if(opts.cssAfter){$l.css(opts.cssAfter);}if(!opts.sync){fn();}});if(opts.sync){fn();}};$.fn.cycle.transitions={fade:function($cont,$slides,opts){$slides.not(":eq("+opts.currSlide+")").css("opacity",0);opts.before.push(function(curr,next,opts){$.fn.cycle.commonReset(curr,next,opts);opts.cssBefore.opacity=0;});opts.animIn={opacity:1};opts.animOut={opacity:0};opts.cssBefore={top:0,left:0};}};$.fn.cycle.ver=function(){return ver;};$.fn.cycle.defaults={fx:"fade",timeout:4000,timeoutFn:null,continuous:0,speed:1000,speedIn:null,speedOut:null,next:null,prev:null,onPrevNextEvent:null,prevNextEvent:"click.cycle",pager:null,onPagerEvent:null,pagerEvent:"click.cycle",allowPagerClickBubble:false,pagerAnchorBuilder:null,before:null,after:null,end:null,easing:null,easeIn:null,easeOut:null,shuffle:null,animIn:null,animOut:null,cssBefore:null,cssAfter:null,fxFn:null,height:"auto",startingSlide:0,sync:1,random:0,fit:0,containerResize:1,pause:0,pauseOnPagerHover:0,autostop:0,autostopCount:0,delay:0,slideExpr:null,cleartype:!$.support.opacity,cleartypeNoBg:false,nowrap:0,fastOnEvent:0,randomizeEffects:1,rev:0,manualTrump:true,requeueOnImageNotLoaded:true,requeueTimeout:250,activePagerClass:"activeSlide",updateActivePagerLink:null,backwards:false};})(jQuery);

/*
 * Author: Simon Menke
 * Check if elements are in viewport
 * http://gist.github.com/604705
 */
(function($){
  $.fn.viewportState = (function(){
    var results = [];
    this.each(function(){
      var bounds = this.getBoundingClientRect();
      if (window.viewport.height() < bounds.top) {
        results.push(['below', $(this)]);
      } else if (bounds.bottom <= 0) {
        results.push(['above', $(this)]);
      } else {
        results.push(['screen', $(this)]);
      };
    });
    return results;
  });
  
  $.fn.inViewport = (function(){
    var results = [];
    this.each(function(){
      var bounds = this.getBoundingClientRect();
      if (window.viewport.height() < bounds.top) {
        // ignore
      } else if (bounds.bottom <= 0) {
        // ignore
      } else {
        results.push(this);
      };
    });
    return $(results);
  });
  
  $.fn.aboveViewport = (function(){
    var results = [];
    this.each(function(){
      var bounds = this.getBoundingClientRect();
      if (window.viewport.height() < bounds.top) {
        // ignore
      } else if (bounds.bottom <= 0) {
        results.push(this);
      } else {
        // ignore
      };
    });
    return $(results);
  });
  
  $.fn.belowViewport = (function(){
    var results = [];
    this.each(function(){
      var bounds = this.getBoundingClientRect();
      if (window.viewport.height() < bounds.top) {
        results.push(this);
      } else if (bounds.bottom <= 0) {
        // ignore
      } else {
        // ignore
      };
    });
    return $(results);
  });
})(jQuery);



/*
 * Author: Simon Menke
 * Chain async tasks
 * http://github.com/fd/chains.js
 */
(function($){

  var exports = $;

  exports.stacks = {};

  exports.stacks.sync = function(func){
    return function(ctx, clb) {
      var new_ctx = func.call(this, ctx);
      clb(new_ctx);
    };
  };

  exports.stacks.serial = function(){
    var state = {};

    if ((arguments.length == 1) && (arguments[0] instanceof Array)) {
      state.steps = arguments[0];
    } else {
      state.steps = Array.prototype.slice.call(arguments, 0);
    }

    var perform_step, continue_chain;

    perform_step = function(step, rest, ctx, clb) {
      var _this = this;
      var _clb = function(_ctx){
        continue_chain.call(_this, rest, _ctx || ctx, clb);
      };
      _clb.pass = function(_ctx){
        if (clb || clb.pass) {
          clb.pass(_ctx || ctx);
        } else {
          continue_chain.call(_this, [], _ctx || ctx, clb);
        }
      };
      step.call(_this, ctx, _clb);
    };

    continue_chain = function(rest, ctx, clb) {
      if (rest.length == 0) {
        if (clb) { clb.call(this, ctx); }
      } else {
        perform_step.call(this, rest.shift(), rest, ctx, clb);
      }
    };

    var build;
    build = function(_state){
      var state = {steps:[]};
      for (i in _state.steps) { state.steps[i] = _state.steps[i]; }

      var serial = function(ctx, clb){
        var _steps = [], i;
        for (i in state.steps) { _steps.push(state.steps[i]); }
        continue_chain.call(this, _steps, ctx, clb);
      };

      serial.state = state;

      serial.toString = function(){
        return "serial:["+serial.state.steps.toString()+"]";
      };

      serial.push = function(step){
        var s = build(state);
        s.state.steps.push(step);
        return s;
      };

      return serial;
    };

    return build(state);
  };

  exports.stacks.parallel = function(){
    var steps;

    if ((arguments.length == 1) && (arguments[0] instanceof Array)) {
      steps = arguments[0];
    } else {
      steps = Array.prototype.slice.call(arguments, 0);
    }

    var emit_step = function(steps, step_id, ctx, clb){
      var _this = this;
      steps[step_id].call(_this, ctx, function(){
        delete steps[step_id];
        steps.length -= 1;

        if ((steps.length <= 0) && (clb)) {
          clb.call(_this, ctx, clb);
        }
      });
    };

    var emit_steps = function(steps, ctx, clb){
      var step, i;
      for(i in steps) {
        if (i != 'length')
          emit_step.call(this, steps, i, ctx, clb);
      }
    };

    return function(ctx, clb){
      var _steps = {}, i;
      _steps.length = steps.length;
      for (i in steps) { _steps[i] = steps[i]; }
      emit_steps.call(this, _steps, ctx, clb);
    };
  };

  exports.stacks.cascade = function(){
    var state = {};

    if ((arguments.length == 1) && (arguments[0] instanceof Array)) {
      state.stacks = arguments[0];
    } else {
      state.stacks = Array.prototype.slice.call(arguments, 0);
    }

    var perform_stack, continue_chain;

    perform_stack = function(stack, rest, ctx, clb) {
      var _this = this;
      var _clb = function(_ctx){
        continue_chain.call(_this, 'done', _ctx || ctx, clb);
      };
      _clb.pass = function(_ctx){
        continue_chain.call(_this, rest, _ctx || ctx, clb);
      };
      stack.call(_this, ctx, _clb);
    };

    continue_chain = function(rest, ctx, clb) {
      if (rest == 'done') {
        if (clb) { clb.call(this, ctx); }
      } else if (rest.length == 0) {
        if (clb && clb.pass) { clb.pass(ctx); }
      } else {
        perform_stack.call(this, rest.shift(), rest, ctx, clb);
      }
    };

    var build;
    build = function(_state){
      var state = {stacks:[]};
      for (i in _state.stacks) { state.stacks[i] = _state.stacks[i]; }

      var cascade = function(ctx, clb){
        var _stacks = [], i;
        for (i in state.stacks) { _stacks[i] = state.stacks[i]; }
        continue_chain.call(this, _stacks, ctx, clb);
      };

      cascade.state = state;

      cascade.toString = function(){
        return "cascade:["+cascade.state.stacks.toString()+"]";
      };

      cascade.push = function(stack, by_ref){
        if (by_ref) {
          state.stacks.push(stack);
          return this;
        } else {
          var c = build(state);
          c.state.stacks.push(stack);
          return c;
        }
      };

      return cascade;
    };

    return build(state);
  };


  exports.stacks.ajax = function(options){
    var key = options.key || 'response';
    delete options['key'];
    return function(ctx, clb) {
      $.extend(options, {
        success: function(data, textStatus, XMLHttpRequest){
          ctx[key] = {
            success:        true,
            data:           data,
            textStatus:     textStatus,
            XMLHttpRequest: XMLHttpRequest
          };
          clb(ctx);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){
          ctx[key] = {
            success:        false,
            errorThrown:    errorThrown,
            textStatus:     textStatus,
            XMLHttpRequest: XMLHttpRequest
          };
          clb(ctx);
        }
      })
      $.ajax(options);
    };
  };

  exports.stacks.batch_ajax = function(options){
    var key, opts, ajax = [];
    for(key in options) {
      opts = options[key];
      opts.key = key;
      ajax.push(exports.stacks.ajax(opts));
    }
    return exports.stacks.parallel(ajax);
  };

  exports.stacks.image = function(url, prefix){
    if (!prefix) prefix = 'images';
    return function(ctx, clb) {
      var image = new Image();
      image.onload = function(){
        if (!ctx[prefix]) ctx[prefix] = [];
        image.status = 'success';
        ctx[prefix].push(image);
        clb(ctx);
      };
      image.onerror = function(){
        if (!ctx[prefix]) ctx[prefix] = [];
        image.status = 'error';
        ctx[prefix].push(image);
        clb(ctx);
      };
      image.onabort = function(){
        if (!ctx[prefix]) ctx[prefix] = [];
        image.status = 'abort';
        ctx[prefix].push(image);
        clb(ctx);
      };
      image.src = url;
    };
  };

  exports.stacks.images = function(urls, prefix){
    var i, images = [];
    for (i in urls)
      images.push(exports.stacks.image(urls[i], prefix));
    return exports.stacks.parallel(images);
  };

  exports.stacks.preload_image = function(image, src_attr){
    if (!src_attr) src_attr = 'data-src';
    return function(ctx, clb) {
      var $image = $(image),
          url    = $image.attr(src_attr);
      image.onload = function(){
        image.status = 'success';
        clb(image);
      };
      image.onerror = function(){
        image.status = 'error';
        clb(image);
      };
      image.onabort = function(){
        image.status = 'abort';
        clb(image);
      };
      image.src = url;
    };
  };

  exports.stacks.preload_images = function(container, src_attr, after){
    if (!src_attr) src_attr = 'data-src';
    var images = $(container).find('img['+src_attr+']'), tasks=[], task;
    images.each(function(){
      task = exports.stacks.preload_image(this, src_attr);

      if (after) {
        task = exports.stacks.serial([ task, after ]);
      }

      tasks.push(task);
    });
    return exports.stacks.parallel(tasks);
  };

})(jQuery);



/*
 * jScrollPane - v2.0.0beta5 - 2010-09-18
 * http://jscrollpane.kelvinluck.com/
 *
 * Copyright (c) 2010 Kelvin Luck
 * Dual licensed under the MIT and GPL licenses.
 */
(function(b,a,c){b.fn.jScrollPane=function(f){function d(C,L){var au,N=this,V,ah,v,aj,Q,W,y,q,av,aB,ap,i,H,h,j,X,R,al,U,t,A,am,ac,ak,F,l,ao,at,x,aq,aE,g,aA,ag=true,M=true,aD=false,k=false,Z=b.fn.mwheelIntent?"mwheelIntent.jsp":"mousewheel.jsp";aE=C.css("paddingTop")+" "+C.css("paddingRight")+" "+C.css("paddingBottom")+" "+C.css("paddingLeft");g=(parseInt(C.css("paddingLeft"))||0)+(parseInt(C.css("paddingRight"))||0);an(L);function an(aH){var aL,aK,aJ,aG,aF,aI;au=aH;if(V==c){C.css({overflow:"hidden",padding:0});ah=C.innerWidth()+g;v=C.innerHeight();C.width(ah);V=b('<div class="jspPane" />').wrap(b('<div class="jspContainer" />').css({width:ah+"px",height:v+"px"}));C.wrapInner(V.parent());aj=C.find(">.jspContainer");V=aj.find(">.jspPane");V.css("padding",aE)}else{C.css("width",null);aI=C.outerWidth()+g!=ah||C.outerHeight()!=v;if(aI){ah=C.innerWidth()+g;v=C.innerHeight();aj.css({width:ah+"px",height:v+"px"})}aA=V.innerWidth();if(!aI&&V.outerWidth()==Q&&V.outerHeight()==W){if(aB||av){V.css("width",aA+"px");C.css("width",(aA+g)+"px")}return}V.css("width",null);C.css("width",(ah)+"px");aj.find(">.jspVerticalBar,>.jspHorizontalBar").remove().end()}aL=V.clone().css("position","absolute");aK=b('<div style="width:1px; position: relative;" />').append(aL);b("body").append(aK);Q=Math.max(V.outerWidth(),aL.outerWidth());aK.remove();W=V.outerHeight();y=Q/ah;q=W/v;av=q>1;aB=y>1;if(!(aB||av)){C.removeClass("jspScrollable");V.css({top:0,width:aj.width()-g});n();D();O();w();af()}else{C.addClass("jspScrollable");aJ=au.maintainPosition&&(H||X);if(aJ){aG=ay();aF=aw()}aC();z();E();if(aJ){K(aG);J(aF)}I();ad();if(au.enableKeyboardNavigation){P()}if(au.clickOnTrack){p()}B();if(au.hijackInternalLinks){m()}}if(au.autoReinitialise&&!aq){aq=setInterval(function(){an(au)},au.autoReinitialiseDelay)}else{if(!au.autoReinitialise&&aq){clearInterval(aq)}}C.trigger("jsp-initialised",[aB||av])}function aC(){if(av){aj.append(b('<div class="jspVerticalBar" />').append(b('<div class="jspCap jspCapTop" />'),b('<div class="jspTrack" />').append(b('<div class="jspDrag" />').append(b('<div class="jspDragTop" />'),b('<div class="jspDragBottom" />'))),b('<div class="jspCap jspCapBottom" />')));R=aj.find(">.jspVerticalBar");al=R.find(">.jspTrack");ap=al.find(">.jspDrag");if(au.showArrows){am=b('<a class="jspArrow jspArrowUp" />').bind("mousedown.jsp",az(0,-1)).bind("click.jsp",ax);ac=b('<a class="jspArrow jspArrowDown" />').bind("mousedown.jsp",az(0,1)).bind("click.jsp",ax);if(au.arrowScrollOnHover){am.bind("mouseover.jsp",az(0,-1,am));ac.bind("mouseover.jsp",az(0,1,ac))}ai(al,au.verticalArrowPositions,am,ac)}t=v;aj.find(">.jspVerticalBar>.jspCap:visible,>.jspVerticalBar>.jspArrow").each(function(){t-=b(this).outerHeight()});ap.hover(function(){ap.addClass("jspHover")},function(){ap.removeClass("jspHover")}).bind("mousedown.jsp",function(aF){b("html").bind("dragstart.jsp selectstart.jsp",function(){return false});ap.addClass("jspActive");var s=aF.pageY-ap.position().top;b("html").bind("mousemove.jsp",function(aG){S(aG.pageY-s,false)}).bind("mouseup.jsp mouseleave.jsp",ar);return false});o()}}function o(){al.height(t+"px");H=0;U=au.verticalGutter+al.outerWidth();V.width(ah-U-g);if(R.position().left==0){V.css("margin-left",U+"px")}}function z(){if(aB){aj.append(b('<div class="jspHorizontalBar" />').append(b('<div class="jspCap jspCapLeft" />'),b('<div class="jspTrack" />').append(b('<div class="jspDrag" />').append(b('<div class="jspDragLeft" />'),b('<div class="jspDragRight" />'))),b('<div class="jspCap jspCapRight" />')));ak=aj.find(">.jspHorizontalBar");F=ak.find(">.jspTrack");h=F.find(">.jspDrag");if(au.showArrows){at=b('<a class="jspArrow jspArrowLeft" />').bind("mousedown.jsp",az(-1,0)).bind("click.jsp",ax);x=b('<a class="jspArrow jspArrowRight" />').bind("mousedown.jsp",az(1,0)).bind("click.jsp",ax);
if(au.arrowScrollOnHover){at.bind("mouseover.jsp",az(-1,0,at));x.bind("mouseover.jsp",az(1,0,x))}ai(F,au.horizontalArrowPositions,at,x)}h.hover(function(){h.addClass("jspHover")},function(){h.removeClass("jspHover")}).bind("mousedown.jsp",function(aF){b("html").bind("dragstart.jsp selectstart.jsp",function(){return false});h.addClass("jspActive");var s=aF.pageX-h.position().left;b("html").bind("mousemove.jsp",function(aG){T(aG.pageX-s,false)}).bind("mouseup.jsp mouseleave.jsp",ar);return false});l=aj.innerWidth();ae()}else{}}function ae(){aj.find(">.jspHorizontalBar>.jspCap:visible,>.jspHorizontalBar>.jspArrow").each(function(){l-=b(this).outerWidth()});F.width(l+"px");X=0}function E(){if(aB&&av){var aF=F.outerHeight(),s=al.outerWidth();t-=aF;b(ak).find(">.jspCap:visible,>.jspArrow").each(function(){l+=b(this).outerWidth()});l-=s;v-=s;ah-=aF;F.parent().append(b('<div class="jspCorner" />').css("width",aF+"px"));o();ae()}if(aB){V.width((aj.outerWidth()-g)+"px")}W=V.outerHeight();q=W/v;if(aB){ao=1/y*l;if(ao>au.horizontalDragMaxWidth){ao=au.horizontalDragMaxWidth}else{if(ao<au.horizontalDragMinWidth){ao=au.horizontalDragMinWidth}}h.width(ao+"px");j=l-ao;ab(X)}if(av){A=1/q*t;if(A>au.verticalDragMaxHeight){A=au.verticalDragMaxHeight}else{if(A<au.verticalDragMinHeight){A=au.verticalDragMinHeight}}ap.height(A+"px");i=t-A;aa(H)}}function ai(aG,aI,aF,s){var aK="before",aH="after",aJ;if(aI=="os"){aI=/Mac/.test(navigator.platform)?"after":"split"}if(aI==aK){aH=aI}else{if(aI==aH){aK=aI;aJ=aF;aF=s;s=aJ}}aG[aK](aF)[aH](s)}function az(aF,s,aG){return function(){G(aF,s,this,aG);this.blur();return false}}function G(aH,aF,aK,aJ){aK=b(aK).addClass("jspActive");var aI,s=function(){if(aH!=0){T(X+aH*au.arrowButtonSpeed,false)}if(aF!=0){S(H+aF*au.arrowButtonSpeed,false)}},aG=setInterval(s,au.arrowRepeatFreq);s();aI=aJ==c?"mouseup.jsp":"mouseout.jsp";aJ=aJ||b("html");aJ.bind(aI,function(){aK.removeClass("jspActive");clearInterval(aG);aJ.unbind(aI)})}function p(){w();if(av){al.bind("mousedown.jsp",function(aH){if(aH.originalTarget==c||aH.originalTarget==aH.currentTarget){var aG=b(this),s=setInterval(function(){var aI=aG.offset(),aJ=aH.pageY-aI.top;if(H+A<aJ){S(H+au.trackClickSpeed)}else{if(aJ<H){S(H-au.trackClickSpeed)}else{aF()}}},au.trackClickRepeatFreq),aF=function(){s&&clearInterval(s);s=null;b(document).unbind("mouseup.jsp",aF)};b(document).bind("mouseup.jsp",aF);return false}})}if(aB){F.bind("mousedown.jsp",function(aH){if(aH.originalTarget==c||aH.originalTarget==aH.currentTarget){var aG=b(this),s=setInterval(function(){var aI=aG.offset(),aJ=aH.pageX-aI.left;if(X+ao<aJ){T(X+au.trackClickSpeed)}else{if(aJ<X){T(X-au.trackClickSpeed)}else{aF()}}},au.trackClickRepeatFreq),aF=function(){s&&clearInterval(s);s=null;b(document).unbind("mouseup.jsp",aF)};b(document).bind("mouseup.jsp",aF);return false}})}}function w(){F&&F.unbind("mousedown.jsp");al&&al.unbind("mousedown.jsp")}function ar(){b("html").unbind("dragstart.jsp selectstart.jsp mousemove.jsp mouseup.jsp mouseleave.jsp");ap&&ap.removeClass("jspActive");h&&h.removeClass("jspActive")}function S(s,aF){if(!av){return}if(s<0){s=0}else{if(s>i){s=i}}if(aF==c){aF=au.animateScroll}if(aF){N.animate(ap,"top",s,aa)}else{ap.css("top",s);aa(s)}}function aa(aF){if(aF==c){aF=ap.position().top}aj.scrollTop(0);H=aF;var aI=H==0,aG=H==i,aH=aF/i,s=-aH*(W-v);if(ag!=aI||aD!=aG){ag=aI;aD=aG;C.trigger("jsp-arrow-change",[ag,aD,M,k])}u(aI,aG);V.css("top",s);C.trigger("jsp-scroll-y",[-s,aI,aG])}function T(aF,s){if(!aB){return}if(aF<0){aF=0}else{if(aF>j){aF=j}}if(s==c){s=au.animateScroll}if(s){N.animate(h,"left",aF,ab)}else{h.css("left",aF);ab(aF)}}function ab(aF){if(aF==c){aF=h.position().left}aj.scrollTop(0);X=aF;var aI=X==0,aH=X==j,aG=aF/j,s=-aG*(Q-ah);if(M!=aI||k!=aH){M=aI;k=aH;C.trigger("jsp-arrow-change",[ag,aD,M,k])}r(aI,aH);V.css("left",s);C.trigger("jsp-scroll-x",[-s,aI,aH])}function u(aF,s){if(au.showArrows){am[aF?"addClass":"removeClass"]("jspDisabled");ac[s?"addClass":"removeClass"]("jspDisabled")}}function r(aF,s){if(au.showArrows){at[aF?"addClass":"removeClass"]("jspDisabled");
x[s?"addClass":"removeClass"]("jspDisabled")}}function J(s,aF){var aG=s/(W-v);S(aG*i,aF)}function K(aF,s){var aG=aF/(Q-ah);T(aG*j,s)}function Y(aN,aL,aF){var aJ,aH,s=0,aG,aK,aM;try{aJ=b(aN)}catch(aI){return}aH=aJ.outerHeight();aj.scrollTop(0);while(!aJ.is(".jspPane")){s+=aJ.position().top;aJ=aJ.offsetParent();if(/^body|html$/i.test(aJ[0].nodeName)){return}}aG=aw();aK=aG+v;if(s<aG||aL){aM=s-au.verticalGutter}else{if(s+aH>aK){aM=s-v+aH+au.verticalGutter}}if(aM){J(aM,aF)}}function ay(){return -V.position().left}function aw(){return -V.position().top}function ad(){aj.unbind(Z).bind(Z,function(aI,aJ,aH,aF){var aG=X,s=H;T(X+aH*au.mouseWheelSpeed,false);S(H-aF*au.mouseWheelSpeed,false);return aG==X&&s==H})}function n(){aj.unbind(Z)}function ax(){return false}function I(){V.unbind("focusin.jsp").bind("focusin.jsp",function(s){if(s.target===V[0]){return}Y(s.target,false)})}function D(){V.unbind("focusin.jsp")}function P(){var aF,s;C.attr("tabindex",0).unbind("keydown.jsp").bind("keydown.jsp",function(aJ){if(aJ.target!==C[0]){return}var aH=X,aG=H,aI=aF?2:16;switch(aJ.keyCode){case 40:S(H+aI,false);break;case 38:S(H-aI,false);break;case 34:case 32:J(aw()+Math.max(32,v)-16);break;case 33:J(aw()-v+16);break;case 35:J(W-v);break;case 36:J(0);break;case 39:T(X+aI,false);break;case 37:T(X-aI,false);break}if(!(aH==X&&aG==H)){aF=true;clearTimeout(s);s=setTimeout(function(){aF=false},260);return false}});if(au.hideFocus){C.css("outline","none");if("hideFocus" in aj[0]){C.attr("hideFocus",true)}}else{C.css("outline","");if("hideFocus" in aj[0]){C.attr("hideFocus",false)}}}function O(){C.attr("tabindex","-1").removeAttr("tabindex").unbind("keydown.jsp")}function B(){if(location.hash&&location.hash.length>1){var aG,aF;try{aG=b(location.hash)}catch(s){return}if(aG.length&&V.find(aG)){if(aj.scrollTop()==0){aF=setInterval(function(){if(aj.scrollTop()>0){Y(location.hash,true);b(document).scrollTop(aj.position().top);clearInterval(aF)}},50)}else{Y(location.hash,true);b(document).scrollTop(aj.position().top)}}}}function af(){b("a.jspHijack").unbind("click.jsp-hijack").removeClass("jspHijack")}function m(){af();b("a[href^=#]").addClass("jspHijack").bind("click.jsp-hijack",function(){var s=this.href.split("#"),aF;if(s.length>1){aF=s[1];if(aF.length>0&&V.find("#"+aF).length>0){Y("#"+aF,true);return false}}})}b.extend(N,{reinitialise:function(aF){aF=b.extend({},aF,au);an(aF)},scrollToElement:function(aG,aF,s){Y(aG,aF,s)},scrollTo:function(aG,s,aF){K(aG,aF);J(s,aF)},scrollToX:function(aF,s){K(aF,s)},scrollToY:function(s,aF){J(s,aF)},scrollBy:function(aF,s,aG){N.scrollByX(aF,aG);N.scrollByY(s,aG)},scrollByX:function(s,aG){var aF=ay()+s,aH=aF/(Q-ah);T(aH*j,aG)},scrollByY:function(s,aG){var aF=aw()+s,aH=aF/(W-v);S(aH*i,aG)},animate:function(aF,aI,s,aH){var aG={};aG[aI]=s;aF.animate(aG,{duration:au.animateDuration,ease:au.animateEase,queue:false,step:aH})},getContentPositionX:function(){return ay()},getContentPositionY:function(){return aw()},getIsScrollableH:function(){return aB},getIsScrollableV:function(){return av},getContentPane:function(){return V},scrollToBottom:function(s){S(i,s)},hijackInternalLinks:function(){m()}})}f=b.extend({},b.fn.jScrollPane.defaults,f);var e;this.each(function(){var g=b(this),h=g.data("jsp");if(h){h.reinitialise(f)}else{h=new d(g,f);g.data("jsp",h)}e=e?e.add(g):g});return e};b.fn.jScrollPane.defaults={showArrows:false,maintainPosition:true,clickOnTrack:true,autoReinitialise:false,autoReinitialiseDelay:500,verticalDragMinHeight:0,verticalDragMaxHeight:99999,horizontalDragMinWidth:0,horizontalDragMaxWidth:99999,animateScroll:false,animateDuration:300,animateEase:"linear",hijackInternalLinks:false,verticalGutter:4,horizontalGutter:4,mouseWheelSpeed:10,arrowButtonSpeed:10,arrowRepeatFreq:100,arrowScrollOnHover:false,trackClickSpeed:30,trackClickRepeatFreq:100,verticalArrowPositions:"split",horizontalArrowPositions:"split",enableKeyboardNavigation:true,hideFocus:false}})(jQuery,this);


/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net)
 * Licensed under the MIT License (LICENSE.txt).
 *
 * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
 * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
 * Thanks to: Seamus Leahy for adding deltaX and deltaY
 *
 * Version: 3.0.4
 * 
 * Requires: 1.2.2+
 */

(function($) {

  var types = ['DOMMouseScroll', 'mousewheel'];

  $.event.special.mousewheel = {
      setup: function() {
          if ( this.addEventListener ) {
              for ( var i=types.length; i; ) {
                  this.addEventListener( types[--i], handler, false );
              }
          } else {
              this.onmousewheel = handler;
          }
      },
    
      teardown: function() {
          if ( this.removeEventListener ) {
              for ( var i=types.length; i; ) {
                  this.removeEventListener( types[--i], handler, false );
              }
          } else {
              this.onmousewheel = null;
          }
      }
  };

  $.fn.extend({
      mousewheel: function(fn) {
          return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
      },
    
      unmousewheel: function(fn) {
          return this.unbind("mousewheel", fn);
      }
  });


  function handler(event) {
      var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true, deltaX = 0, deltaY = 0;
      event = $.event.fix(orgEvent);
      event.type = "mousewheel";
    
      // Old school scrollwheel delta
      if ( event.wheelDelta ) { delta = event.wheelDelta/120; }
      if ( event.detail     ) { delta = -event.detail/3; }
    
      // New school multidimensional scroll (touchpads) deltas
      deltaY = delta;
    
      // Gecko
      if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
          deltaY = 0;
          deltaX = -1*delta;
      }
    
      // Webkit
      if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY/120; }
      if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = -1*orgEvent.wheelDeltaX/120; }
    
      // Add event and delta to the front of the arguments
      args.unshift(event, delta, deltaX, deltaY);
    
      return $.event.handle.apply(this, args);
  }

})(jQuery);


// MSDropDown - jquery.dd.js
// author: Marghoob Suleman - Search me on google
// Date: 12th Aug, 2009
// Version: 2.3 {date: 18 June 2010}
// Revision: 27
// web: www.giftlelo.com | www.marghoobsuleman.com
/*
// msDropDown is free jQuery Plugin: you can redistribute it and/or modify
// it under the terms of the either the MIT License or the Gnu General Public License (GPL) Version 2
*/
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}(';(6($){4 1E="";4 2T=6(p,q){4 r=p;4 s=1b;4 q=$.2U({1j:3F,2a:7,2V:23,1F:11,1V:3G,2W:\'1W\',1G:14,2t:\'\',1k:\'\'},q);1b.1N=2b 2X();4 t="";4 u={};u.2u=11;u.2c=14;u.2d=1n;4 v=14;4 w={2v:\'3H\',1O:\'3I\',1H:\'3J\',1I:\'3K\',1f:\'3L\',2w:\'3M\',2x:\'3N\',3O:\'3P\',2e:\'3Q\',2Y:\'3R\'};4 x={1W:q.2W,2y:\'2y\',2z:\'2z\',2A:\'2A\',1p:\'1p\',1i:.30,2B:\'2B\'};4 y={2Z:"2f,2C,2D,1P,2g,2h,1q,1w,2i,1J,3S,1X,2E",3T:"1x,1r,1i,3U"};1b.1K=2b 2X();4 z=$(r).12("1a");4 A=$(r).12("1k");q.1k+=(A==18)?"":A;4 B=$(r).31();v=($(r).12("1x")>0||$(r).12("1r")==11)?11:14;5(v){q.2a=$(r).12("1x")};4 C={};4 D=6(a){15 z+w[a]};4 E=6(a){4 b=a;4 c=$(b).12("1k");15 c};4 F=6(a){4 b=$("#"+z+" 2j:9");5(b.1c>1){1s(4 i=0;i<b.1c;i++){5(a==b[i].1g){15 11}}}1d 5(b.1c==1){5(b[0].1g==a){15 11}};15 14};4 G=6(a,b,c,d){4 e="";4 f=(d=="2F")?D("2x"):D("2w");4 g=(d=="2F")?f+"2G"+(b)+"2G"+(c):f+"2G"+(b);4 h="";4 i="";5(q.1G!=14){i=\' \'+q.1G+\' \'+a.32}1d{h=$(a).12("1Q");h=(h.1c==0)?"":\'<33 34="\'+h+\'" 35="36" /> \'};4 j=$(a).1y();4 k=$(a).3V();4 l=($(a).12("1i")==11)?"1i":"2k";C[g]={1z:h+j,1Y:k,1y:j,1g:a.1g,1a:g};4 m=E(a);5(F(a.1g)==11){e+=\'<a 3a="3b:3c(0);" 1o="9 \'+l+i+\'"\'}1d{e+=\'<a  3a="3b:3c(0);" 1o="\'+l+i+\'"\'};5(m!==14&&m!==18){e+=" 1k=\'"+m+"\'"};e+=\' 1a="\'+g+\'">\';e+=h+\'<1t 1o="\'+x.1p+\'">\'+j+\'</1t></a>\';15 e};4 H=6(){4 f=B;5(f.1c==0)15"";4 g="";4 h=D("2w");4 i=D("2x");f.2H(6(c){4 d=f[c];5(d.3W=="3X"){g+="<1u 1o=\'3Y\'>";g+="<1t 1k=\'3d-3Z:41;3d-1k:42; 43:44;\'>"+$(d).12("45")+"</1t>";4 e=$(d).31();e.2H(6(a){4 b=e[a];g+=G(b,c,a,"2F")});g+="</1u>"}1d{g+=G(d,c,"","")}});15 g};4 I=6(){4 a=D("1O");4 b=D("1f");4 c=q.1k;1R="";1R+=\'<1u 1a="\'+b+\'" 1o="\'+x.2A+\'"\';5(!v){1R+=(c!="")?\' 1k="\'+c+\'"\':\'\'}1d{1R+=(c!="")?\' 1k="46-2l:47 48 #49;1S:2I;1A:2J;\'+c+\'"\':\'\'}1R+=\'>\';15 1R};4 J=6(){4 a=D("1H");4 b=D("2e");4 c=D("1I");4 d=D("2Y");4 e="";4 f="";5(8.10(z).1B.1c>0){e=$("#"+z+" 2j:9").1y();f=$("#"+z+" 2j:9").12("1Q")};f=(f.1c==0||f==18||q.1F==14||q.1G!=14)?"":\'<33 34="\'+f+\'" 35="36" /> \';4 g=\'<1u 1a="\'+a+\'" 1o="\'+x.2y+\'"\';g+=\'>\';g+=\'<1t 1a="\'+b+\'" 1o="\'+x.2z+\'"></1t><1t 1o="\'+x.1p+\'" 1a="\'+c+\'">\'+f+\'<1t 1o="\'+x.1p+\'">\'+e+\'</1t></1t></1u>\';15 g};4 K=6(){4 c=D("1f");$("#"+c+" a.2k").1e("1P",6(a){a.1Z();N(1b);5(!v){$("#"+c).1L("1w");P(14);4 b=(q.1F==14)?$(1b).1y():$(1b).1z();T(b);s.20()};X()})};4 L=6(){4 d=14;4 e=D("1O");4 f=D("1H");4 g=D("1I");4 h=D("1f");4 i=D("2e");4 j=$("#"+z).2K();j=j+2;4 k=q.1k;5($("#"+e).1c>0){$("#"+e).2m();d=11};4 l=\'<1u 1a="\'+e+\'" 1o="\'+x.1W+\'"\';l+=(k!="")?\' 1k="\'+k+\'"\':\'\';l+=\'>\';l+=J();l+=I();l+=H();l+="</1u>";l+="</1u>";5(d==11){4 m=D("2v");$("#"+m).2L(l)}1d{$("#"+z).2L(l)};5(v){4 f=D("1H");$("#"+f).2n()};$("#"+e).19("2K",j+"21");$("#"+h).19("2K",(j-2)+"21");5(B.1c>q.2a){4 n=22($("#"+h+" a:3e").19("24-3f"))+22($("#"+h+" a:3e").19("24-2l"));4 o=((q.2V)*q.2a)-n;$("#"+h).19("1j",o+"21")}1d 5(v){4 o=$("#"+z).1j();$("#"+h).19("1j",o+"21")};5(d==14){S();O(z)};5($("#"+z).12("1i")==11){$("#"+e).19("2o",x.1i)};R();$("#"+f).1e("1w",6(a){2M(1)});$("#"+f).1e("1J",6(a){2M(0)});K();$("#"+h+" a.1i").19("2o",x.1i);5(v){$("#"+h).1e("1w",6(c){5(!u.2c){u.2c=11;$(8).1e("1X",6(a){4 b=a.3g;u.2d=b;5(b==39||b==40){a.1Z();a.2p();U();X()};5(b==37||b==38){a.1Z();a.2p();V();X()}})}})};$("#"+h).1e("1J",6(a){P(14);$(8).1L("1X");u.2c=14;u.2d=1n});$("#"+f).1e("1P",6(b){P(14);5($("#"+h+":3h").1c==1){$("#"+h).1L("1w")}1d{$("#"+h).1e("1w",6(a){P(11)});s.3i()}});$("#"+f).1e("1J",6(a){P(14)});5(q.1F&&q.1G!=14){W()}};4 M=6(a){1s(4 i 2q C){5(C[i].1g==a){15 C[i]}};15-1};4 N=6(a){4 b=D("1f");5(!v){$("#"+b+" a.9").1M("9")};4 c=$("#"+b+" a.9").12("1a");5(c!=18){4 d=(u.1T==18||u.1T==1n)?C[c].1g:u.1T};5(a&&!v){$(a).1D("9")};5(v){4 e=u.2d;5($("#"+z).12("1r")==11){5(e==17){u.1T=C[$(a).12("1a")].1g;$(a).4a("9")}1d 5(e==16){$("#"+b+" a.9").1M("9");$(a).1D("9");4 f=$(a).12("1a");4 g=C[f].1g;1s(4 i=3j.4b(d,g);i<=3j.4c(d,g);i++){$("#"+M(i).1a).1D("9")}}1d{$("#"+b+" a.9").1M("9");$(a).1D("9");u.1T=C[$(a).12("1a")].1g}}1d{$("#"+b+" a.9").1M("9");$(a).1D("9");u.1T=C[$(a).12("1a")].1g}}};4 O=6(a){4 b=a;8.10(b).4d=6(e){$("#"+b).1U(q)}};4 P=6(a){u.2u=a};4 Q=6(){15 u.2u};4 R=6(){4 b=D("1O");4 c=y.2Z.4e(",");1s(4 d=0;d<c.1c;d++){4 e=c[d];4 f=Y(e);5(f==11){3k(e){1m"2f":$("#"+b).1e("4f",6(a){8.10(z).2f()});1h;1m"1P":$("#"+b).1e("1P",6(a){$("#"+z).1C("1P")});1h;1m"2g":$("#"+b).1e("2g",6(a){$("#"+z).1C("2g")});1h;1m"2h":$("#"+b).1e("2h",6(a){$("#"+z).1C("2h")});1h;1m"1q":$("#"+b).1e("1q",6(a){$("#"+z).1C("1q")});1h;1m"1w":$("#"+b).1e("1w",6(a){$("#"+z).1C("1w")});1h;1m"2i":$("#"+b).1e("2i",6(a){$("#"+z).1C("2i")});1h;1m"1J":$("#"+b).1e("1J",6(a){$("#"+z).1C("1J")});1h}}}};4 S=6(){4 a=D("2v");$("#"+z).2L("<1u 1o=\'"+x.2B+"\' 1k=\'1j:4g;4h:4i;1A:3l;\' 1a=\'"+a+"\'></1u>");$("#"+z).4j($("#"+a))};4 T=6(a){4 b=D("1I");$("#"+b).1z(a)};4 U=6(){4 a=D("1I");4 b=D("1f");4 c=$("#"+b+" a.2k");1s(4 d=0;d<c.1c;d++){4 e=c[d];4 f=$(e).12("1a");5($(e).3m("9")&&d<c.1c-1){$("#"+b+" a.9").1M("9");$(c[d+1]).1D("9");4 g=$("#"+b+" a.9").12("1a");5(!v){4 h=(q.1F==14)?C[g].1y:C[g].1z;T(h)};5(22(($("#"+g).1A().2l+$("#"+g).1j()))>=22($("#"+b).1j())){$("#"+b).2r(($("#"+b).2r())+$("#"+g).1j()+$("#"+g).1j())};1h}}};4 V=6(){4 a=D("1I");4 b=D("1f");4 c=$("#"+b+" a.2k");1s(4 d=0;d<c.1c;d++){4 e=c[d];4 f=$(e).12("1a");5($(e).3m("9")&&d!=0){$("#"+b+" a.9").1M("9");$(c[d-1]).1D("9");4 g=$("#"+b+" a.9").12("1a");5(!v){4 h=(q.1F==14)?C[g].1y:C[g].1z;T(h)};5(22(($("#"+g).1A().2l+$("#"+g).1j()))<=0){$("#"+b).2r(($("#"+b).2r()-$("#"+b).1j())-$("#"+g).1j())};1h}}};4 W=6(){5(q.1G!=14){4 a=D("1I");4 b=8.10(z).1B[8.10(z).1l].32;5(b.1c>0){4 c=D("1f");4 d=$("#"+c+" a."+b).12("1a");4 e=$("#"+d).19("25-4k");4 f=$("#"+d).19("25-1A");4 g=$("#"+d).19("24-3n");5(e!=18){$("#"+a).26("."+x.1p).12(\'1k\',"25:"+e)};5(f!=18){$("#"+a).26("."+x.1p).19(\'25-1A\',f)};5(g!=18){$("#"+a).26("."+x.1p).19(\'24-3n\',g)};$("#"+a).26("."+x.1p).19(\'25-3o\',\'4l-3o\');$("#"+a).26("."+x.1p).19(\'24-3f\',\'4m\')}}};4 X=6(){4 a=D("1f");4 b=$("#"+a+" a.9");5(b.1c==1){4 c=$("#"+a+" a.9").1y();4 d=$("#"+a+" a.9").12("1a");5(d!=18){4 e=C[d].1Y;8.10(z).1l=C[d].1g};5(q.1F&&q.1G!=14)W()}1d 5(b.1c>1){4 f=$("#"+z+" > 2j:9").4n("9");1s(4 i=0;i<b.1c;i++){4 d=$(b[i]).12("1a");4 g=C[d].1g;8.10(z).1B[g].9="9"}};4 h=8.10(z).1l;s.1N["1l"]=h};4 Y=6(a){5($("#"+z).12("4o"+a)!=18){15 11};4 b=$("#"+z).2N("4p");5(b&&b[a]){15 11};15 14};4 Z=6(){4 b=D("1f");5(Y(\'2D\')==11){4 c=C[$("#"+b+" a.9").12("1a")].1y;5(t!=c){$("#"+z).1C("2D")}};5(Y(\'1q\')==11){$("#"+z).1C("1q")};5(Y(\'2C\')==11){$(8).1e("1q",6(a){$("#"+z).2f();$("#"+z)[0].2C();X();$(8).1L("1q")})}};4 2M=6(a){4 b=D("2e");5(a==1)$("#"+b).19({3p:\'0 4q%\'});1d $("#"+b).19({3p:\'0 0\'})};4 3q=6(){1s(4 i 2q 8.10(z)){5(4r(8.10(z)[i])!=\'6\'&&8.10(z)[i]!==18&&8.10(z)[i]!==1n){s.1v(i,8.10(z)[i],11)}}};4 3r=6(a,b){5(M(b)!=-1){8.10(z)[a]=b;4 c=D("1f");$("#"+c+" a.9").1M("9");$("#"+M(b).1a).1D("9");4 d=M(8.10(z).1l).1z;T(d)}};4 3s=6(i,a){5(a==\'d\'){1s(4 b 2q C){5(C[b].1g==i){4s C[b];1h}}};4 c=0;1s(4 b 2q C){C[b].1g=c;c++}};1b.3i=6(){5((s.28("1i",11)==11)||(s.28("1B",11).1c==0))15;4 c=D("1f");5(1E!=""&&c!=1E){$("#"+1E).3t("2O");$("#"+1E).19({1V:\'0\'})};5($("#"+c).19("1S")=="3u"){$(8).1e("1X",6(a){4 b=a.3g;5(b==39||b==40){a.1Z();a.2p();U()};5(b==37||b==38){a.1Z();a.2p();V()};5(b==27||b==13){s.20();X()};5($("#"+z).12("3v")!=18){8.10(z).3v()}});$(8).1e("2E",6(a){5($("#"+z).12("3w")!=18){8.10(z).3w()}});$(8).1e("1q",6(a){5(Q()==14){s.20()}});$("#"+c).19({1V:q.1V});$("#"+c).4t("2O",6(){5(s.1K["3x"]!=1n){2s(s.1K["3x"])(s)}});5(c!=1E){1E=c}}};1b.20=6(){4 b=D("1f");$(8).1L("1X");$(8).1L("2E");$(8).1L("1q");$("#"+b).3t("2O",6(a){Z();$("#"+b).19({1V:\'0\'});5(s.1K["3y"]!=1n){2s(s.1K["3y"])(s)}})};1b.1l=6(i){s.1v("1l",i)};1b.1v=6(a,b,c){5(a==18||b==18)3z{3A:"1v 4u 4v?"};s.1N[a]=b;5(c!=11){3k(a){1m"1l":3r(a,b);1h;1m"1i":s.1i(b,11);1h;1m"1r":8.10(z)[a]=b;v=($(r).12("1x")>0||$(r).12("1r")==11)?11:14;5(v){4 d=$("#"+z).1j();4 f=D("1f");$("#"+f).19("1j",d+"21");4 g=D("1H");$("#"+g).2n();4 f=D("1f");$("#"+f).19({1S:\'2I\',1A:\'2J\'});K()}1h;1m"1x":8.10(z)[a]=b;5(b==0){8.10(z).1r=14};v=($(r).12("1x")>0||$(r).12("1r")==11)?11:14;5(b==0){4 g=D("1H");$("#"+g).3B();4 f=D("1f");$("#"+f).19({1S:\'3u\',1A:\'3l\'});4 h="";5(8.10(z).1l>=0){4 i=M(8.10(z).1l);h=i.1z;N($("#"+i.1a))};T(h)}1d{4 g=D("1H");$("#"+g).2n();4 f=D("1f");$("#"+f).19({1S:\'2I\',1A:\'2J\'})};1h;4w:4x{8.10(z)[a]=b}4y(e){};1h}}};1b.28=6(a,b){5(a==18&&b==18){15 s.1N};5(a!=18&&b==18){15(s.1N[a]!=18)?s.1N[a]:1n};5(a!=18&&b!=18){15 8.10(z)[a]}};1b.3h=6(a){4 b=D("1O");5(a==11){$("#"+b).3B()}1d 5(a==14){$("#"+b).2n()}1d{15 $("#"+b).19("1S")}};1b.4z=6(a,b){4 c=a;4 d=c.1y;4 e=(c.1Y==18||c.1Y==1n)?d:c.1Y;4 f=(c.1Q==18||c.1Q==1n)?\'\':c.1Q;4 i=(b==18||b==1n)?8.10(z).1B.1c:b;8.10(z).1B[i]=2b 4A(d,e);5(f!=\'\')8.10(z).1B[i].1Q=f;4 g=M(i);5(g!=-1){4 h=G(8.10(z).1B[i],i,"","");$("#"+g.1a).1z(h)}1d{4 h=G(8.10(z).1B[i],i,"","");4 j=D("1f");$("#"+j).4B(h);K()}};1b.2m=6(i){8.10(z).2m(i);5((M(i))!=-1){$("#"+M(i).1a).2m();3s(i,\'d\')};5(8.10(z).1c==0){T("")}1d{4 a=M(8.10(z).1l).1z;T(a)};s.1v("1l",8.10(z).1l)};1b.1i=6(a,b){8.10(z).1i=a;4 c=D("1O");5(a==11){$("#"+c).19("2o",x.1i);s.20()}1d 5(a==14){$("#"+c).19("2o",1)};5(b!=11){s.1v("1i",a)}};1b.2P=6(){15(8.10(z).2P==18)?1n:8.10(z).2P};1b.2Q=6(){5(29.1c==1){15 8.10(z).2Q(29[0])}1d 5(29.1c==2){15 8.10(z).2Q(29[0],29[1])}1d{3z{3A:"4C 1g 4D 4E!"}}};1b.3C=6(a){15 8.10(z).3C(a)};1b.1r=6(a){5(a==18){15 s.28("1r")}1d{s.1v("1r",a)}};1b.1x=6(a){5(a==18){15 s.28("1x")}1d{s.1v("1x",a)}};1b.4F=6(a,b){s.1K[a]=b};1b.4G=6(a){2s(s.1K[a])(s)};4 3D=6(){s.1v("2R",$.1U.2R);s.1v("2S",$.1U.2S)};4 3E=6(){L();3q();3D();5(q.2t!=\'\'){2s(q.2t)(s)}};3E()};$.1U={2R:2.3,2S:"4H 4I",4J:6(a,b){15 $(a).1U(b).2N("1W")}};$.4K.2U({1U:6(b){15 1b.2H(6(){4 a=2b 2T(1b,b);$(1b).2N(\'1W\',a)})}})})(4L);',62,296,'||||var|if|function||document|selected|||||||||||||||||||||||||||||||||||||||||||||||||||||getElementById|true|attr||false|return|||undefined|css|id|this|length|else|bind|postChildID|index|break|disabled|height|style|selectedIndex|case|null|class|ddTitleText|mouseup|multiple|for|span|div|set|mouseover|size|text|html|position|options|trigger|addClass|bg|showIcon|useSprite|postTitleID|postTitleTextID|mouseout|onActions|unbind|removeClass|ddProp|postID|click|title|sDiv|display|oldIndex|msDropDown|zIndex|dd|keydown|value|preventDefault|close|px|parseInt||padding|background|find||get|arguments|visibleRows|new|keyboardAction|currentKey|postArrowID|focus|dblclick|mousedown|mousemove|option|enabled|top|remove|hide|opacity|stopPropagation|in|scrollTop|eval|onInit|insideWindow|postElementHolder|postAID|postOPTAID|ddTitle|arrow|ddChild|ddOutOfVision|blur|change|keyup|opt|_|each|block|relative|width|after|bi|data|fast|form|item|version|author|bh|extend|rowHeight|mainCSS|Object|postInputhidden|actions||children|className|img|src|align|absmiddle||||href|javascript|void|font|first|bottom|keyCode|visible|open|Math|switch|absolute|hasClass|left|repeat|backgroundPosition|bj|bk|bl|slideUp|none|onkeydown|onkeyup|onOpen|onClose|throw|message|show|namedItem|bm|bn|120|9999|_msddHolder|_msdd|_title|_titletext|_child|_msa|_msopta|postInputID|_msinput|_arrow|_inp|keypress|prop|tabindex|val|nodeName|OPTGROUP|opta|weight||bold|italic|clear|both|label|border|1px|solid|c3c3c3|toggleClass|min|max|refresh|split|mouseenter|0px|overflow|hidden|appendTo|image|no|2px|removeAttr|on|events|100|typeof|delete|slideDown|to|what|default|try|catch|add|Option|append|An|is|required|addMyEvent|fireEvent|Marghoob|Suleman|create|fn|jQuery'.split('|'),0,{}))



