;(function($) {
var jqmsInterval = {};
var messageDisplayed = false;

$.fn.msgQueue = function (options,msg) {
  var defaults = { 
    'mainClass' : 'jqms-messages',
    'wrapClass' : 'jqms-wrapper',
    'msgClass' : 'jqms-msg',
	'imgPath' : './'
  };
  
  if(typeof(options)!='string') {
    var options = $.extend(defaults, options);
    
    return this.each(function () {
    
      initMessageBar(this);
      setListener();
    });
  } else {
    var type = options;
    var options = $.data($(this).get(0),'defaults');
    messageQueue(msg,type);
  }
  
  function initMessageBar(obj) {
    // add our msgClass class to the message container
    if(!$(obj).hasClass(options.mainClass)) {
      $(obj).addClass(options.mainClass);
    }
    // add our wrapping element with the appropriate class
    if($(obj).find('.'+options.wrapClass).length==0) {
      $('<div></div>').addClass(options.wrapClass).appendTo(obj);
    }
    $.data($(obj).get(0),'defaults',options)
  };
  
  function messageQueue(msg,type) {
    var iconSrc = (type=='message') ? 'jqms_imgs/information.png' : (type=='warning') ? 'jqms_imgs/exclamation.png' : 'jqms_imgs/error.png';
    var icon = '<img src="' + options.imgPath + iconSrc + '" align="absmiddle" style="margin-right:5px;">';
    $('<div></div>')
      .addClass(options.msgClass)
      .addClass(type)
      .html(icon + msg)
      .css('display','none')
      .appendTo('.'+options.wrapClass)
  };
  
  function setListener() {
    jqmsInterval = setInterval(function () {
      var num_msgs = $('.'+options.msgClass).length;
      if(num_msgs>0) {
        if(!$('.'+options.mainClass).is(":visible")) {
          $('.'+options.mainClass).fadeIn(500);
        }
        if(!messageDisplayed) {
          displayMessage();
        }
      }
    },500);
  };
  
  function displayMessage() {
    messageDisplayed = true;
    var msg = $('.'+options.msgClass).eq(0);
    $(msg).fadeIn(500, function () {
      setTimeout(function () {
        $(msg).fadeOut(500, function () { 
          messageDisplayed = false;
          $(msg).remove();
          if($('.'+options.msgClass).length==0) {
            $('.'+options.mainClass).fadeOut(250);
          }
        });
      },5000);
    });
    
  };
};
})(jQuery || $QM);
