/**
 * Maritz User Interface
 */ 
var Maritz = {

    /**
     * Init UI functions
     */         
    init: function () {
         if (dollar.browser.msie) {
            Maritz.emulateHover(dollar("#nav li"));
            }
             
         Maritz.navigationOpacity();
         Maritz.initsIFR(); 
         Maritz.insertFlash();
         Maritz.promoRollovers();
         Maritz.promoRollovers2();
         Maritz.pageTools();
         Maritz.FontSize.setTextSize();
         Maritz.FontSize.init();
         Maritz.toolTips();
         Maritz.toolTips2();
         Maritz.serviceToolTips();
         Maritz.eventRollover();
         Maritz.printPopup();
         Maritz.print();
         Maritz.preloadImages(["/images/bg/video-rollover.png", "/images/bg/text-rollover-inner.png", "/images/bg/text-rollover-top.png", "/images/bg/text-rollover-bottom.png", "/images/bg/text-rollover-arrow.png"]);
    },
    
    print: function () {
        dollar("#print-header .print-button a").bind("click", function () {
            window.print();
            return false;
        });
    },
    
    printPopup: function () {
        dollar("#print").bind("click", function () {
            var new_window = window.open(dollar(this).attr('href'), '', 'width=600,height=900,top=50,left=50,resizable=yes,scrollbars=yes');
            new_window.focus();
            return false;
        });
    },
    
    /**
     * Init sIFR 
     */         
    initsIFR: function () {
        if (typeof sIFR == "function") {
            sIFR.replaceElement(named({sSelector: "#content h1.sifr", sFlashSrc: "flash/fonts/frutiger-light.swf", sColor: "#2F70D5", sWmode: "transparent"}));
            sIFR.replaceElement(named({sSelector: "#content h2.grey", sFlashSrc: "flash/fonts/frutiger-roman.swf", sColor: "#6F6F62", sWmode: "transparent", sCase: "upper"}));
        }
    },
    
    /**
     * Insert flash
     */         
    insertFlash: function () {
        if (dollar("#video1").length) {
            var video1 = new SWFObject("flash/videos/player.swf", "video1", "189", "174", "7", "#ffffff");
            video1.addParam("wmode", "transparent");
            video1.addVariable("variable1", "value1");
            video1.write("video1");
        }
    },
    
    /**
     * Home Page Rollovers 
     */         
    promoRollovers: function () {    
         dollar("#promo .rollovers li").each(function (i) {
         
            var li = dollar(this);
            var rollover = dollar(this).find('.rollover');
         
            li.bind("mouseover", function () {
                rollover.css("display", "block");
                li.css("z-index", 10);
            });

            rollover.hover(
                function () {
                },
                function () {
                    rollover.css("display", "none");
                    li.css("z-index", 1);
                }
            )
         });       
    },
    
    /**
     * Home Page Rollovers v2
     */         
    promoRollovers2: function () {    
         dollar("#promo .rollovers2 li").each(function (i) {
         
            var li = dollar(this);
            var rollover = dollar(this).find('.rollover');

            li.hover(
                function () {
                    rollover.css("display", "block");
                    li.css("z-index", 10);
                },
                function () {
                    rollover.css("display", "none");
                    li.css("z-index", 1);
                }
            )

            rollover.hover(
                function () {
                },
                function () {
                    rollover.css("display", "none");
                    li.css("z-index", 1);
                }
            )
         });       
    },
    
    
    /**
     * Page tools rollovers
     */         
    pageTools: function () {    
         dollar("#page-tools a").each(function (i) {
         
            var img = dollar(this).find('img');
            var bubble = dollar('<div class="bubble"><p>' + jQuery.trim(dollar(this).attr("title")) + '</p></div>');
            dollar('#page-tools').append(bubble);
            
            dollar(this).hover(
                function () {
                    var offset =  dollar(this).offset();
                    var top = offset.top + 19;
                    var left = offset.left - 76;
                    
                    bubble.css('top', top + 'px'); 
                    bubble.css('left', left + 'px'); 
                    img.attr('src', img.attr('src').replace(/.gif/, '_over.gif')); 
                    bubble.css('display', 'block');
                },
                function () {
                    img.attr('src', img.attr('src').replace(/_over.gif/, '.gif'));
                    bubble.css('display', 'none');
                }
            )
         });       
    },
    
    /**
     * Calendar Event Rollovers
     *     
     */   
    eventRollover: function () {
        dollar(".calendar table h3").each(function (i) {
            var offset =  dollar(this).offset();
            var top = offset.top + dollar(this).height() - 20;
            var left = offset.left + 13;	
            var event_title = jQuery.trim(dollar(this).text());            
            var event_description = jQuery.trim(dollar(this).parent().find('.description').text());
            var para_id = "[id="+jQuery.trim(dollar(this).attr("id"))+"P]";
            var event_date = jQuery.trim(dollar(this).parent().find('.date').filter(para_id).text());
            var event_url = jQuery.trim(dollar(this).find('a').attr("href"));
			if( top > 750) {
	            var rollover = dollar('<div class="event-rollover"><span class="topNonArrowed"></span><div class="wrapper"><div class="rollover-inner"><h3>' + event_title + '</h3><p>' + event_description + '</p><p class="date">'+ event_date + '</p><div class="button"><p><a href="' + event_url + '">View Event Detail</a></p></div></div><span class="bottomArrowed"></span></div>');            								
				top = offset.top- 100 - ( event_date.length/50)*12 -  ( event_title.length/50)*12;
                left = offset.left ;
			} else {
				var rollover = dollar('<div class="event-rollover"><span class="top"></span><div class="wrapper"><div class="rollover-inner"><h3>' + event_title + '</h3><p>' + event_description + '</p><p class="date">'+ event_date + '</p><div class="button"><p><a href="' + event_url + '">View Event Detail</a></p></div></div><span class="bottom"></span></div>');            
			}

            rollover.css("top", top + 'px');
            rollover.css("left", left + 'px');

            
            dollar('body').append(rollover);
            
            dollar(this).bind("mouseover", function () {
                rollover.css("display", "block");
            });
            
            dollar(this).bind("mouseout", function () {
                rollover.css("display", "none");
            });
            
            rollover.hover (
                function () {
                    rollover.css("display", "block");
                },
                function () {
                    rollover.css("display", "none");
                }
            )
        });
    },
    
    /**
     * Tooltips
     */         
    toolTips: function () {
        dollar('.tooltip').each(function (i) {
            var tooltip = dollar('<div class="tooltip-bubble"><p>' + jQuery.trim(dollar(this).find('span').html()) + '</p><span class="top"></span><span class="bottom"></span></div>');
            dollar('body').append(tooltip);
            dollar(this).hover(
                function () {
                    var offset =  dollar(this).offset();
                    
                    var top = offset.top + dollar(this).height() + 4;
                    var left = offset.left - (180 - dollar(this).width()/2);

                    tooltip.css('top', top + 'px'); 
                    tooltip.css('left', left + 'px'); 
                    tooltip.css('display', 'block');
                },
                function () {
                    tooltip.css('display', 'none');
                }
            )
        }); 
    },
    
    /**
     * Tooltips2
     */         
    toolTips2: function () {
        dollar('.tooltip2').each(function (i) {
            var tooltip = dollar('<div class="tooltip-bubble tooltip2-bubble"><p>' + jQuery.trim(dollar(this).find('span').html()) + '</p><span class="top"></span><span class="bottom"></span></div>');
            dollar('body').append(tooltip);
            dollar(this).hover(
                function () {
                    var offset =  dollar(this).offset();
                    
                    var top = offset.top + dollar(this).height() + 4;
                    var left = offset.left;

                    tooltip.css('top', top + 'px'); 
                    tooltip.css('left', left + 'px'); 
                    tooltip.css('display', 'block');
                },
                function () {
                    tooltip.css('display', 'none');
                }
            )
        }); 
    },
    
    /**
     * Services Tooltips
     */         
    serviceToolTips: function () {
        var bubbles = dollar('.service-tooltip-bubble');
    
        dollar('.service-tooltip').each(function (i) {
        
            var tooltip = dollar(bubbles[i]);
            dollar(this).hover(
                function () {
                    var offset =  dollar(this).offset();
                    
                    var top = offset.top - tooltip.height() - dollar(this).height() - 8;
                    var left = offset.left;

                    tooltip.css('top', top + 'px'); 
                    tooltip.css('left', left + 'px'); 
                    tooltip.css('display', 'block');
                },
                function () {
                    tooltip.css('display', 'none');
                }
            )
        }); 
    },
    
     /**
     * Emulate hover in IE6
     */          
    emulateHover: function (items) {
        items.hover(
            function () {
                dollar(this).addClass('hover');
                var link = dollar(this).children('a');
								if(link.attr('id') == undefined){
									var temp = this.parentNode;
									link = dollar(temp).children('a');
									while(link.attr('id') == undefined && temp != undefined){
										temp = temp.parentNode;
										link = dollar(temp).children('a');
									}
								}
                if (link.attr('id') == 'nav02' || link.attr('id') == 'nav03' || link.attr('id') == 'nav04') {
					 dollar('.sort-by select').css('display', 'none');
                }
            },
            function () {				
                dollar(this).removeClass('hover');
				dollar('.sort-by select').css('display', 'block');
            }
        )
    },

    /**
     * Set navigation opacity
     */         
    navigationOpacity: function () {
        if (BrowserDetect.browser == 'Firefox' && BrowserDetect.OS == 'Mac') {
            return;
        }      
        dollar("#nav ul a").not('.current').each(function (i) {
            
            dollar(this).css('opacity', 0.9);
            
            dollar(this).hover ( 
                function () {
                    dollar(this).css('opacity', 1.0);
                },
                function () {
                    dollar(this).css('opacity', 0.9);
                }
            );
        });
    },
    
    /**
     * Preload images
     * @param {Array} images array with names of images   
     */               
    preloadImages: function (images) {
        for (var i = 0; i < images.length; i++) {
            var image = new Image();
            image.src = images[i];
        }
    }
}


/**
 * Font size
 */ 
Maritz.FontSize = {

    text_size: 1,
  
    /**
     * Set text size when user navigates between pages
     */         
    setTextSize: function () {
        if (dollar.cookie("text_size")) {
            Maritz.FontSize.text_size = dollar.cookie("text_size");
            dollar('body').addClass(Maritz.FontSize.makeClass(Maritz.FontSize.text_size));
        }
    },

    /**
     * Make class name from text size
     * @param {Number} size Text size       
     * @return {String} 
     */                        
    makeClass: function (size) {
        return 'text' + size;
    },
    
    /**
     * Increase and decrease text size by adding classes to body element
     * Classes are defined in screen.css     
     */         
    init: function () {
        var body = dollar('body');
        
        dollar('#text-up').bind('click', function () {
            if (Maritz.FontSize.text_size < 7) {
                body.removeClass(Maritz.FontSize.makeClass(Maritz.FontSize.text_size));
                Maritz.FontSize.text_size++;
                body.addClass(Maritz.FontSize.makeClass(Maritz.FontSize.text_size));
                dollar.cookie("text_size", Maritz.FontSize.text_size); 
            }
            return false;
        });
        
        dollar('#text-down').bind('click', function () {
            if (Maritz.FontSize.text_size > 1) {
                body.removeClass(Maritz.FontSize.makeClass(Maritz.FontSize.text_size));
                Maritz.FontSize.text_size--;
                body.addClass(Maritz.FontSize.makeClass(Maritz.FontSize.text_size));
                dollar.cookie("text_size", Maritz.FontSize.text_size);
            }
            return false;
        });
    } 
}

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};

BrowserDetect.init();

dollar(document).ready(function () {
    Maritz.init();   
});
