var preLoadImages = function(imagePaths) {
	$(document).ready(function() {
		var div = document.createElement("div");
		var tmpImage;
		div.setAttribute("style", "display:none;visibility:hidden;height:0px;overflow:hidden;");
		div.setAttribute("id", "preLoadImages");
		
		for(var i = 0; i < imagePaths.length; ++i) {
			var tmpImage = document.createElement("img");
			tmpImage.setAttribute("src", imagePaths[i])
			div.appendChild(tmpImage);
		}
		
		$("body").append(div);
	});
};
var currHash	= "";
var hashSpooler = null;
var hashListeners = Array();
var startHashSpooler = function() {
	hashSpooler = window.setInterval(checkHash, 500);
}
var checkHash = function() {
	if(currHash != window.location.hash) {
		currHash = window.location.hash;
		
		for(var i = 0;i<hashListeners.length;++i) {
			hashListeners[i](currHash);
		}
	}
}
var changeWindowHash = function(hash) {
	currHash = hash;
	
	var currScrollX = window.scrollX;
	var currScrollY = window.scrollY;
	
	window.location.hash = hash;
	window.scrollTo(currScrollX, currScrollY);
}
var onHashChanged = function(func) {
	hashListeners[hashListeners.length] = func;
	
	if(hashSpooler == null) startHashSpooler();
}

$(document).ready(function() {
	
	var hoverFunc = function(elm) {
		elm.attr("src", elm.attr("src").substring(0, elm.attr("src").indexOf(".png"))+"-hover.png");
	}
	var outFunc = function(elm) {
		elm.attr("src", elm.attr("src").substring(0, elm.attr("src").indexOf("-hover"))+".png");
	}
	
	$("ul#navigation li:nth-child(1)").hover(
		function() { hoverFunc($("ul#navigation li:nth-child(1) img")); },
		function() { outFunc($("ul#navigation li:nth-child(1) img")); }
	);
	$("ul#navigation li:nth-child(2)").hover(
		function() { hoverFunc($("ul#navigation li:nth-child(2) img")); },
		function() { outFunc($("ul#navigation li:nth-child(2) img")); }
	);
	$("ul#navigation li:nth-child(3)").hover(
		function() { hoverFunc($("ul#navigation li:nth-child(3) img")); },
		function() { outFunc($("ul#navigation li:nth-child(3) img")); }
	);
	$("ul#navigation li:nth-child(4)").hover(
		function() { hoverFunc($("ul#navigation li:nth-child(4) img")); },
		function() { outFunc($("ul#navigation li:nth-child(4) img")); }
	);
	$("ul#navigation li:nth-child(5)").hover(
		function() { hoverFunc($("ul#navigation li:nth-child(5) img")); },
		function() { outFunc($("ul#navigation li:nth-child(5) img")); }
	);
});

var loading = function(set) {
	var append;
	append = "<div id=\"loading_bg\" style=\"opacity:0;position:fixed;width:100%;height:100%;top:0;left:0;background:#000;\">&nbsp;</div>";
	append+= "<div id=\"loading_ap\" style=\"opacity:0;position:fixed;width:350px;height:125px;top:50%;left:50%;margin:-50px 0 0 -125px;";
	append+= "background:url(/templates/oswebstyle_v5_1/images/loading_bg.png) no-repeat;\"><table cellspacing=\"3\" width=\"98%\" height=\"100%\"><tr>";
	append+= "<td align=\"center\" valign=\"middle\"><img src=\"/templates/oswebstyle_v5_1/images/loading.gif\" style=\"margin: 0 2px 0 20px;\" />";
	append+= "</td><td valign=\"middle\"><div>"+set.text+"</div></td></tr></table></div>";
	
	$("body").append(append);
	
	$("#loading_bg").animate({opacity: 0.8},{duration: 1000, queue: true});
	$("#loading_ap").animate({opacity: 1},{duration: 1000, queue: true});
};
var loading_finished = function(set) {
	$("#loading_ap img").attr("src", "/templates/oswebstyle_v5_1/images/loading_finished.png");
	$("#loading_ap div").text(set.text);
	
	$("#loading_ap").delay(2500).animate({opacity: 0},{duration: 1000, queue: true, complete: function() {$("#loading_ap").remove();}});
	$("#loading_bg").delay(2500).animate({opacity: 0},{duration: 1000, queue: true, complete: function() {$("#loading_bg").remove();}});
}

//KILL IE6
var IE6UPDATE_OPTIONS = {
	message: "Internet Explorer fehlen wichtige Updates um diese Webseite anzeigen zu können. Klicken Sie hier um Internet Explorer auf den neusten Stand zu bringen ...",
	icons_path: "/templates/oswebstyle_v5_1/images/ie6update/"
}

try {
  document.execCommand("BackgroundImageCache", true, true);
} catch(err) {}

(function($) {
    $.fn.activebar = function( options ) {
        // Merge the specified options with the default ones
        options = $.fn.extend( {}, $.fn.activebar.defaults, options );
        
        if ( $.fn.activebar.container === null ) {
            $.fn.activebar.container = initializeActivebar( options );
        }

        // Update the style values according to the provided options
        setOptionsOnContainer( $.fn.activebar.container, options );

        // If the activebar is currently visible hide it
        $.fn.activebar.hide();
        
        // Remove all elements from the activebar content, which might be there
        $( '.content', $.fn.activebar.container ).empty();

        // Use all provided elements as new content source
        $(this).each( function() {
            $( '.content', $.fn.activebar.container ).append( this );
        });

        // Remove any "gotoURL" function
        $.fn.activebar.container.unbind( 'click' );

        // Add a new "gotoURL" function if one has been supplied
        if( options.url !== null ) {
            $.fn.activebar.container.click( 
                function() {
                    window.location.href = options.url;
                }
            );
        }

        // Update the position based on the new content data height
        $.fn.activebar.container.css( 'top', '-' + $.fn.activebar.container.height() + 'px' );

        // Show the activebar
        if(options.preload){
          var load = {a:0, b:0, c:0, d:0}          
          
          function preloadInit(){
            if(load.a && load.b && load.c && load.d){
              $.fn.activebar.show();
            }
          }
          
          $('<img src="'+options.icons_path+'icon.png" class="normal">').load(function(){load.a=1; preloadInit()});
          $('<img src="'+options.icons_path+'icon-over.png" class="normal">').load(function(){load.b=1; preloadInit()});
          $('<img src="'+options.icons_path+'close.png" class="normal">').load(function(){load.c=1; preloadInit()});
          $('<img src="'+options.icons_path+'close-over.png" class="normal">').load(function(){load.d=1; preloadInit()});
          
        }else{
          $.fn.activebar.show();
        }
        
    };

    /**
     * Default options used if nothing more specific is provided.
     */
    $.fn.activebar.defaults = {
        'background': '#ffffe1',
        'border': '#666', 
        'highlight': '#3399ff',
        'font': 'Bitstream Vera Sans,verdana,sans-serif',
        'fontColor': 'InfoText',
        'fontSize': '11px',
        'icons_path' : 'images/',
        'url': 'http://www.microsoft.com/windows/internet-explorer/default.aspx',
        'preload': true
    };

    /**
     * Indicator in which state the activebar currently is
     * 0: Moved in (hidden)
     * 1: Moving in (hiding)
     * 2: Moving out (showing)
     * 3: Moved out (shown)
     */
    $.fn.activebar.state = 0;

    /**
     * Activebar container object which holds the shown content
     */
    $.fn.activebar.container = null;

    /**
     * Show the activebar by moving it in
     */
    $.fn.activebar.show = function() {
        if ( $.fn.activebar.state > 1 ) {
            // Already moving out or visible. Do Nothing.
            return;
        }
        
        $.fn.activebar.state = 2;
        $.fn.activebar.container.css( 'display', 'block' );
        
        var height = $.fn.activebar.container.height();
        $.fn.activebar.container.animate({
            'top': '+=' + height + 'px' 
        }, height * 20, 'linear', function() {
            $.fn.activebar.state = 3;
        });
    };

    /**
     * Hide the activebar by moving it out
     */
    $.fn.activebar.hide = function() {
        if ( $.fn.activebar.state < 2 ) {
            // Already moving in or hidden. Do nothing.
            return;
        }

        $.fn.activebar.state = 1;

        var height   = $.fn.activebar.container.height();
        $.fn.activebar.container.animate({
            'top': '-=' + height + 'px' 
        }, height * 20, 'linear', function() {
            $.fn.activebar.container.css( 'display', 'none' );
            $.fn.activebar.visible = false;
        });
    };

    /****************************************************************
     * Private function only accessible from within this plugin
     ****************************************************************/

     /**
      * Create the a basic activebar container object and return it
      */
     function initializeActivebar( options ) {
        // Create the container object
        var container = $( '<div></div>' ).attr( 'id', 'activebar-container' );
        
        // Set the needed css styles
        container.css({
          'display': 'none',
          'position': 'fixed',
          'zIndex': '9999',
          'top': '0px',
          'left': '0px',            
          'cursor': 'default',
          'padding': '4px',
          'font-size' : '9px',
          'background': options.background,
          'borderBottom': '1px solid ' + options.border,
          'color': options.fontColor
        });

        // Make sure the bar has always the correct width
        $(window).bind( 'resize', function() {
            container.width( $(this).width() );
        });

        // Set the initial bar width
        $(window).trigger( 'resize' );
        
        // The IE prior to version 7.0 does not support position fixed. However
        // the correct behaviour can be emulated using a hook to the scroll
        // event. This is a little choppy, but it works.
		
        if ( $.browser.msie && ( $.browser.version.substring( 0, 1 ) == '5' || $.browser.version.substring( 0, 1 ) == '6' ) ) {
            // Position needs to be changed to absolute, because IEs fallback
            // for fixed is static, which is quite useless here.
            container.css( 'position', 'absolute' );
            $( window ).scroll(
                function() {
                    container.stop( true, true );
                    if ( $.fn.activebar.state == 3 ) {
                      // Activebar is visible
                      container.css( 'top', $( window ).scrollTop() + 'px' );
                    }
                    else {
                      // Activebar is hidden
                      container.css( 'top', ( $( window ).scrollTop() - container.height() ) + 'px' );
                    }
                }
            ).resize(function(){$(window).scroll();}); 
        }

        // Add the icon container
        container.append( 
          $( '<div></div>' ).attr( 'class', 'icon' )
          .css({
            'float': 'left',
            'width': '16px',
            'height': '16px',
            'margin': '0 4px 0 0',
            'padding': '0'
          })
          .append('<img src="'+options.icons_path+'icon.png" class="normal">')
          .append('<img src="'+options.icons_path+'icon-over.png" class="hover">')
        );

        // Add the close button
        container.append( 
          $( '<div></div>' ).attr( 'class', 'close' )
          .css({
            'float': 'right',
            'margin': '0 5px 0 0 ',
            'width': '16px',
            'height': '16px'
          })
          .click(function(event) {
                $.fn.activebar.hide();
                event.stopPropagation();
          }) 
          .append('<img src="'+options.icons_path+'close.png" class="normal">')
          .append('<img src="'+options.icons_path+'close-over.png" class="hover">')
        );
       
        // Create the initial content container
        container.append( 
          $( '<div></div>' ).attr( 'class', 'content' )
          .css({
            'margin': '0px 8px',
            'paddingTop': '1px'
          })
        );
        $('.hover', container).hide();
        $('body').prepend( container );

        return container;
     };

     /**
      * Set the provided options on the given activebar container object
      */
     function setOptionsOnContainer( container, options ) {
        // Register functions to change between normal and highlight background
        // color on mouseover
        container.unbind( 'mouseenter mouseleave' );
        container.hover( 
            function() {
                $(this).css({backgroundColor: options.highlight, color: "#FFFFFF"}).addClass('hover');
                $('.hover', container).show();
                $('.normal', container).hide();
            },
            function() {
                $(this).css( {'backgroundColor': options.background, color: "#000000"} ).removeClass('hover');
                $('.hover', container).hide();
                $('.normal', container).show();
            }
        );

        // Set the content font styles
        $( '.content', container ).css({
            'fontFamily': options.font,
            'fontSize': options.fontSize,
			'text-align': 'left'
        });                                      
     }

})(jQuery);


jQuery(document).ready(function($) {
	if (!($.browser.msie && $.browser.version.substr(0,1)<7))  return false;
	
	$('<div></div>').html(IE6UPDATE_OPTIONS.message || 'Internet Explorer is missing updates required to view this site. Click here to update... ').activebar(window.IE6UPDATE_OPTIONS);
});
