
// ########## Add Array.indexOf for Javascript Version < 1.6 ########## //

if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function (obj, fromIndex) {
        if (fromIndex == null) {
            fromIndex = 0;
        } else if (fromIndex < 0) {
            fromIndex = Math.max(0, this.length + fromIndex);
        }
        for (var i = fromIndex; i < this.length; i++) {
            if (this[i] === obj)
                return i;
        }
        return -1;
    };
}


// ########## Slider Class ########## //

function pixelfusion_Slider(parentElement, sliderElement, panelElements) {

  var pixelfusion_Slider = {
    
    panelPositions : [],

    init : function(_parent, _slider, _panels) {
      // Set Args
      pixelfusion_Slider._parent = _parent;
      pixelfusion_Slider._slider = _slider;
      pixelfusion_Slider._panels = _panels;
      jQuery.easing.def = 'easeOutSine';
      // Add Slider arrows
      $(pixelfusion_Slider._parent)
        /* .prepend('<span id="slide-previous" title="Previous">Previous</span>') */
        .children('#slide-previous')
        .attr('href', '  [Previous]')
        .click(function() {
          pixelfusion_Slider.previousSlide();
          return false;
      });
      $(pixelfusion_Slider._parent)
        /* .append('<span id="slide-next" title="Next">Next</span>') */
        .children('#slide-next')
        .attr('href', '  [Next]')
        .click(function() {
          pixelfusion_Slider.nextSlide();
          return false;
      });
      // Initialize Panel positions
      var pfPanels = $(pixelfusion_Slider._slider).children(pixelfusion_Slider._panels);
      pfPanels.each(
        function(i) {
          if ((pfPanels.length - 1) == i)
            $(this).css('left', -1 * $(pixelfusion_Slider._slider).width() + 'px');
          else
            $(this).css('left', i * $(pixelfusion_Slider._slider).width() + 'px');
          pixelfusion_Slider.panelPositions.push(i);
        }
      );
      pixelfusion_Slider.panelPositions.unshift(pixelfusion_Slider.panelPositions.pop());
      pixelfusion_Slider.panelPositions.unshift(pixelfusion_Slider.panelPositions.pop());
    },
    
    previousSlide : function() {
      var hidden = pixelfusion_Slider.panelPositions.pop();
      pixelfusion_Slider.panelPositions.unshift(hidden);
      pixelfusion_Slider.panelArrange(hidden);
    },
    
    nextSlide : function() {
      var hidden = pixelfusion_Slider.panelPositions.shift();
      pixelfusion_Slider.panelPositions.push(hidden);
      pixelfusion_Slider.panelArrange(hidden);
    },
    
    panelArrange : function(x) {
      // Show all panels
      $(pixelfusion_Slider._slider).children(pixelfusion_Slider._panels).css({display: 'block'});
      x = x + 1;
      if (x == pixelfusion_Slider.panelPositions.length) x = 0;
      // Hide end panel
      if (2 < pixelfusion_Slider.panelPositions.length)
        $(pixelfusion_Slider._slider).children(pixelfusion_Slider._panels + ':eq('+ x +')').css({display: 'none'});
      // Move panel animation
      $(pixelfusion_Slider._slider).children(pixelfusion_Slider._panels).each(
        function(i) {
          var position = i - 1;
          if (position < 0) position = pixelfusion_Slider.panelPositions.length - 1;
          $(this).animate({ left: (pixelfusion_Slider.panelPositions.indexOf(position) - 1) * $(pixelfusion_Slider._slider).width() + 'px'}, '333', 'swing');
        }
      );
    }

  }

  // Initiate Slider
  pixelfusion_Slider.init(parentElement, sliderElement, panelElements);
  return pixelfusion_Slider;

}


// ########## Charts Class ########## //

(function(x) {
  
  $.fn.flashChart = function(children) {
    this.each(
      function(i) {
        var img = $(this).children('img');
        $(this).flash(
          {
            flashvars: {
              '&dataXML': fusioncharts[$(this).attr('id')]['dataXML'],
              '&chartWidth': img.width(),
              '&chartHeight': img.height()
            },
            src: fusioncharts[$(this).attr('id')]['src'],
            width: img.width(),
            height: img.height()
          },
          {update: false}
        );
      }
    );
  }
  
})(jQuery);
