
(function($) {

  $.fn.innerfade = function(options) {
    var settings;
    var elements;
    var elements_title;
    var curr_slide_id_number;
    var next_slide_id_number;
    return this.each(function() {
      $.innerfade(this, options);
    });
  };
  //control play and  pause functionality 
  jQuery.pause = function() {
    var elements = $("ul#" + settings.slide_ui_parent + " li");
    var isPlay = $("#" + settings.pause_button_id + " span").html();
    if (isPlay == "pause") {
      $("#" + settings.pause_button_id + " span").html("play");
      settings.slide_timer_on = 'no'
      $("#" + settings.pause_button_id).attr("class", "paused_button");
    }
    else {
      $("#" + settings.pause_button_id + " span").html("pause");
      settings.slide_timer_on = 'yes';
      $("#" + settings.pause_button_id).attr("class", "pause_button");
      button_class = $("#button_selected").attr("class");
      split_button_class_string = button_class.split("_");
      button_class_string = split_button_class_string.pop();
      curr_slide_id_number = parseFloat(button_class_string);
      next_slide_id_number = curr_slide_id_number - 1;
      setTimeout(function() {
        $.innerfade.next(elements, settings, curr_slide_id_number, next_slide_id_number);
      }, 0);
    }
  }

  // next button
  jQuery.next = function() {
    var elements = $("ul#" + settings.slide_ui_parent + " li");
    $("#" + settings.pause_button_id + " span").html("play");

    $("#" + settings.pause_button_id).attr("class", "paused_button");
    button_class = $("#button_selected").attr("class");
    split_button_class_string = button_class.split("_");
    button_class_string = split_button_class_string.pop();
    curr_slide_id_number = parseFloat(button_class_string) + 1;
    next_slide_id_number = curr_slide_id_number - 1;
    settings.slide_timer_on = 'no';

    if ((curr_slide_id_number) < elements.length) {
      $.skip();
    }
  }

  // prev button
  jQuery.prev = function() {
    var elements = $("ul#" + settings.slide_ui_parent + " li");
    $("#" + settings.pause_button_id + " span").html("play");
    $("#" + settings.pause_button_id).attr("class", "paused_button");
    button_class = $("#button_selected").attr("class");
    split_button_class_string = button_class.split("_");
    button_class_string = split_button_class_string.pop();
    curr_slide_id_number = parseFloat(button_class_string) - 1;
    next_slide_id_number = curr_slide_id_number - 1;
    settings.slide_timer_on = 'no'
    if ((curr_slide_id_number) >= 0) {
      $.skip();
    }
  }

  //first button
  jQuery.first = function() {
    $("#" + settings.pause_button_id + " span").html("play");
    $("#" + settings.pause_button_id).attr("class", "paused_button");
    curr_slide_id_number = 0;
    next_slide_id_number = curr_slide_id_number - 1;
    settings.slide_timer_on = 'no'
    $.skip();
  }

  //last button
  jQuery.last = function() {
    var elements = $("ul#" + settings.slide_ui_parent + " li");
    $("#" + settings.pause_button_id + " span").html("play");
    $("#" + settings.pause_button_id).attr("class", "paused_button");
    curr_slide_id_number = elements.length - 1;
    next_slide_id_number = curr_slide_id_number - 1;
    settings.slide_timer_on = 'no'
    $.skip();
  }

  //set options button click event
  jQuery.setOptionsButtonEvent = function() {
    $("#" + settings.slide_nav_id + " li").each(function() {
      // add click functionality to buttons
      $(this).click(function() {
        var elements = $("ul#" + settings.slide_ui_parent + " li");
        $("#" + settings.pause_button_id + " span").html("play");
        $("#" + settings.pause_button_id).attr("class", "paused_button");
        button_class = $(this).attr("class");
        split_button_class_string = button_class.split("_");
        button_class_string = split_button_class_string.pop();
        curr_slide_id_number = parseFloat(button_class_string);
        next_slide_id_number = curr_slide_id_number - 1;
        settings.slide_timer_on = 'no';
        $.skip();
      });
    });
  }

  $.innerfade = function(container, options) {
    settings = {
      'animationtype': 'fade',
      'speed': 'normal',
      'type': 'sequence',
      'timeout': 5000,
      'containerheight': 'auto',
      'runningclass': 'innerfade',
      'children': null,
      'slide_timer_on': 'yes',
      'slide_ui_parent': null,
      'slide_ui_text': null,
      'pause_button_id': null,
      'slide_nav_id': null
    };
    var elements;
    var elements_title;
    if (options)
      $.extend(settings, options);
    if (settings.children === null)
      elements = $(container).children();
    else
      elements = $(container).children(settings.children);
    if (elements.length > 1) {
      if (settings.slide_ui_text) {
        elements_title = $("ul#" + settings.slide_ui_text + " li")
      }

      $(container).addClass(settings.runningclass);
      for (var i = 0; i < elements.length; i++) {
        $(elements[i]).css('z-index', String(elements.length - i)).hide();
        if (settings.slide_ui_text) {
          $(elements_title[i]).css('z-index', String(elements_title.length - i)).hide();
        }
      };
      if (settings.type == "sequence") {
        setTimeout(function() {
          $.innerfade.next(elements, settings, 1, 0);
        }, settings.timeout);
        $(elements[0]).show();
        if (settings.slide_ui_text) {
          $(elements_title[0]).show();
        }
        if (settings.slide_nav_id) {
          $("#" + settings.slide_nav_id + " li").removeClass("active");
          $("#" + settings.slide_nav_id + " .slide_0").addClass("active");
        }
      }
      else if (settings.type == "random") {
        next_slide_id_number = Math.floor(Math.random() * (elements.length));
        setTimeout(function() {
          do {
            curr_slide_id_number = Math.floor(Math.random() * (elements.length));
          } while (next_slide_id_number == curr_slide_id_number);
          $.innerfade.next(elements, settings, curr_slide_id_number, next_slide_id_number);
        }, settings.timeout);
        $(elements[next_slide_id_number]).show();
        if (settings.slide_ui_text) {
          $(elements_title[next_slide_id_number]).show();
        }
      }
      else if (settings.type == 'random_start') {
        settings.type = 'sequence';
        curr_slide_id_number = Math.floor(Math.random() * (elements.length));
        setTimeout(function() {
          $.innerfade.next(elements, settings, (curr_slide_id_number + 1) % elements.length, curr_slide_id_number);
        }, settings.timeout);

        $(elements[curr_slide_id_number]).show();

        if (settings.slide_ui_text) {
          $(elements_title[curr_slide_id_number]).show();
        }
      }
      else {
        alert('Innerfade-Type must either be \'sequence\', \'random\' or \'random_start\'');
      }
    }
  };


  $.skip = function() {
    var elements = $("ul#" + settings.slide_ui_parent + " li");
    if (settings.slide_ui_text) {
      var elements_title = $("ul#" + settings.slide_ui_text + " li")
    }
    for (var i = 0; i < elements.length; i++) {
      if (settings.animationtype == 'fade') {
        $(elements[i]).fadeOut(settings.speed);
        if (settings.slide_ui_text) {
          $(elements_title[i]).fadeOut(settings.speed);
        }
      }
      else {
        $(elements[i]).slideUp(settings.speed);
        if (settings.slide_ui_text) {
          $(elements_title[i]).slideUp(settings.speed);
        }
      }

    }
    if (settings.animationtype == 'fade') {
      $(elements[curr_slide_id_number]).fadeIn(settings.speed, function() {
        removeFilter($(this)[0]);
      });
      if (settings.slide_ui_text) {
        $(elements_title[curr_slide_id_number]).fadeIn(settings.speed, function() {
          removeFilter($(this)[0]);
        });
      }
    }
    else {
      $(elements[curr_slide_id_number]).slideDown(settings.speed, function() {
        removeFilter($(this)[0]);
      });
      if (settings.slide_ui_text) {
        $(elements_title[curr_slide_id_number]).slideDown(settings.speed, function() {
          removeFilter($(this)[0]);
        });
      }
    }
    if (settings.slide_nav_id) {
      $("#" + settings.slide_nav_id + " li").removeClass("active");
      $("#" + settings.slide_nav_id + " .slide_" + curr_slide_id_number).addClass("active");
    }
  }

  $.innerfade.next = function(elements, settings, curr_slide_id_number, next_slide_id_number) {
    var elements_title;
    if (settings.slide_ui_text) {
      elements_title = $("ul#" + settings.slide_ui_text + " li");
    }

    if (settings.slide_timer_on == 'yes') {
      if (settings.animationtype == 'slide') {
        $(elements[next_slide_id_number]).slideUp(settings.speed);
        $(elements[curr_slide_id_number]).slideDown(settings.speed);

        $(elements[next_slide_id_number]).slideUp(settings.speed);
        if (settings.slide_ui_text) {
          $(elements_title[next_slide_id_number]).slideUp(settings.speed);
        }
        $(elements[curr_slide_id_number]).slideDown(settings.speed, function() {
          removeFilter($(this)[0]);
        });
        if (settings.slide_ui_text) {
          $(elements_title[curr_slide_id_number]).slideDown(settings.speed, function() {
            removeFilter($(this)[0]);
          });
        }
        if (settings.slide_nav_id) {
          $("#" + settings.slide_nav_id + " li").removeClass("active");
          $("#" + settings.slide_nav_id + " .slide_" + curr_slide_id_number).addClass("active");
        }
      }
      else if (settings.animationtype == 'fade') {
        $(elements[next_slide_id_number]).fadeOut(settings.speed);
        if (settings.slide_ui_text) {
          $(elements_title[next_slide_id_number]).fadeOut(settings.speed);
        }
        $(elements[curr_slide_id_number]).fadeIn(settings.speed, function() {
          removeFilter($(this)[0]);
        });
        if (settings.slide_ui_text) {
          $(elements_title[curr_slide_id_number]).fadeIn(settings.speed, function() {
            removeFilter($(this)[0]);
          });
        }
        if (settings.slide_nav_id) {
          $("#" + settings.slide_nav_id + " li").removeClass("active");
          $("#" + settings.slide_nav_id + " .slide_" + curr_slide_id_number).addClass("active");
        }
      }
      else
        alert('Innerfade-animationtype must either be \'slide\' or \'fade\'');

      if (settings.type == "sequence") {
        if ((curr_slide_id_number + 1) < elements.length) {
          curr_slide_id_number = curr_slide_id_number + 1;
          next_slide_id_number = curr_slide_id_number - 1;
        } else {
          curr_slide_id_number = 0;
          next_slide_id_number = elements.length - 1;
        }
      }
      else if (settings.type == "random") {
        next_slide_id_number = curr_slide_id_number;
        while (curr_slide_id_number == next_slide_id_number)
          curr_slide_id_number = Math.floor(Math.random() * elements.length);
      }
      else
        alert('Innerfade-Type must either be \'sequence\', \'random\' or \'random_start\'');
      setTimeout((function() {
        $.innerfade.next(elements, settings, curr_slide_id_number, next_slide_id_number);
      }), settings.timeout);
    };
  }
})(jQuery);

// **** remove Opacity-Filter in ie ****
function removeFilter(element) {
  return;
  if(element) {
	  if(element.style.removeAttribute){
		  element.style.removeAttribute('filter');
	  }
	}
}
