
if (!jQuery.waitforbar) {

    (function($){
    
        $.waitforbar = function(options){
        
            function getWindowScrollOffset(){
                return (document.documentElement.scrollTop || document.body.scrollTop) + 'px';
            };
            
            function getWindowSize(){
                var size = {
                    width: window.innerWidth || (window.document.documentElement.clientWidth || window.document.body.clientWidth),
                    height: window.innerHeight || (window.document.documentElement.clientHeight || window.document.body.clientHeight)
                };
                return size;
            };
            
            function ie6scroll(){
                jqib.css({
                    top: getWindowScrollOffset()
                });
            };
            
            function flashPrompt(){
                var i = 0;
                jqib.addClass(DefaultSettings_.prefix + 'warning');
                var intervalid = setInterval(function(){
                    jqib.toggleClass(DefaultSettings_.prefix + 'warning');
                    if (i++ > 1) {
                        clearInterval(intervalid);
                        jqib.removeClass(DefaultSettings_.prefix + 'warning');
                    }
                }, 100);
            };
            
            function positionPrompt(){
                var wsize = getWindowSize();
                jqib.css({
                    position: (ie6) ? "absolute" : "fixed",
                    height: wsize.height,
                    width: "100%",
                    top: (ie6) ? getWindowScrollOffset() : 0,
                    left: 0,
                    right: 0,
                    bottom: 0
                });
                jqif.css({
                    position: "absolute",
                    height: wsize.height,
                    width: "100%",
                    top: 0,
                    left: 0,
                    right: 0,
                    bottom: 0
                });
                jqi.css({
                    position: "absolute",
                    top: DefaultSettings_.top,
                    left: "50%",
                    marginLeft: ((((jqi.css("paddingLeft").split("px")[0] * 1) + jqi.width()) / 2) * -1)
                });
            };
            
            function stylePrompt(){
                jqib.css({
                    zIndex: DefaultSettings_.zIndex
                });
                jqif.css({
                    zIndex: DefaultSettings_.zIndex,
                    display: "none",
                    opacity: DefaultSettings_.opacity
                });
                jqi.css({
                    zIndex: DefaultSettings_.zIndex + 1,
                    display: "none"
                });
            };
            
            function removePrompt(callCallback, clicked, msg){
				Bar_.stopTime(TimerId_, ChangeBarPos);
				
                jqi.remove();
                
                if (ie6) 
                    b.unbind('scroll', ie6scroll);
                
                w.unbind('resize', positionPrompt);
                
                jqif.fadeOut(DefaultSettings_.overlayspeed, function(){
                    jqif.unbind('click', flashPrompt);
                    jqif.remove();
                    jqib.remove();
                });
            };
            
            function ChangeBarPos(){
				Bar_.progressBar(BarPos_);
				flashPrompt();
				
				if(AddPos_){
					if (BarPos_ == 100){
						AddPos_ = false;
					}
					else
	                	BarPos_ += 2;	
				}
				else{
					if (BarPos_ == 0){
						AddPos_ = true;
					}
					else
	                	BarPos_ -= 2;	
				};
            };
            
            function InitProBar(){
                Bar_ = jqi.progressBar({
                    increment: 1,
                    speed: 15,
                    showText: false
                });
                Bar_.everyTime(5, TimerId_, ChangeBarPos);
				return Bar_;
            };
            
            function Init(opts){
                DefaultSettings_ = $.extend({}, DefaultSettings_, opts);
                
                ie6 = (jQuery.browser.msie && jQuery.browser.version < 7);
                
                b = jQuery(document.body);
                w = jQuery(window);
                
                var msgbox = '<div class="' + DefaultSettings_.prefix + 'box" id="' + DefaultSettings_.prefix + 'box">';
                msgbox += '<div class="' + DefaultSettings_.prefix + 'fade" id="' + DefaultSettings_.prefix + 'fade">';
                msgbox += '<div class="' + DefaultSettings_.prefix + '" id="' + DefaultSettings_.prefix + '">';
                msgbox += '</div></div></div>';
                
                jqib = b.append(msgbox).children('#' + DefaultSettings_.prefix + 'box');
                jqif = jqib.children('#' + DefaultSettings_.prefix + 'fade');
                jqi = jqif.children('#' + DefaultSettings_.prefix);
                
                InitProBar();
                
                positionPrompt();
                stylePrompt();
                
                if (ie6) 
                    w.scroll(ie6scroll);
                
                jqif.click(flashPrompt);
                w.resize(positionPrompt);
                
                jqif.fadeIn(DefaultSettings_.overlayspeed);
                jqi[DefaultSettings_.show](DefaultSettings_.promptspeed, DefaultSettings_.loaded);
                return jqib;
            };
            
            var Bar_ = null;
            var BarPos_ = 0;
			var AddPos_ = true;
            
            var TimerId_ = 200;
            
            var ie6 = null;
            
            var b = null;
            var w = null;
            
            var jqib = null;
            var jqif = null;
            var jqi = null;
            
            var DefaultSettings_ = {
                prefix: 'jqi',
                opacity: 0.6,
                zIndex: 999,
                overlayspeed: 'slow',
                promptspeed: 'fast',
                show: 'fadeIn',
                focus: 0,
                top: '100px'
            };
			
            Init(options);
			
			return removePrompt;
        };
        
        
    })(jQuery);
}
