/**
 * @fileoverview frozTabs plugin
 * @author Lawrence Natividad
 * @copyright Copyright ( c ) 2010 Frozynart Designs
 * @license Licensed under MIT ( http://www.frozynart.com/license/mit )
 * @version: 1.0 2010-04-28
 */

( function( $ ) {
    /**
     * Strict mark-up required
     * Places contents in tabs
     * @namespace frozTabs
     * @requires jQuery 1.2.6 and above / jQuery scrollTo / jqueryhashchange / frozTabs.css
     * @example jQuery( "#id-of-block-that-contains-links and contents" ).frozTabs
     * @return {jQuery Object}
     */
    jQuery.fn.frozTabs = function( options ) {
        var opts                     = jQuery.extend( {}, jQuery.fn.frozTabs.defaults, options );
        jQuery.fn.frozTabs.opts      = opts;
        var $this                    = jQuery( this );
        
        var storeData = function(set){
            var contentArray = new Array();
            var heightArray = new Array();
               
            jQuery('.' + opts.tabContainerClass, set).children('div').each( function(){
            	jQuery(this).addClass(opts.mainTabClass);
                contentArray.push('#' + jQuery(this).attr('id'));
                heightArray.push(jQuery(this).outerHeight(true));
            })
            
            set.data('contentArray', contentArray)
               .data('heightArray', heightArray)
               .data('contentLength', contentArray.length);
            
            return set;
        }
        
        var setupTabs = function(set){
        
            var tabs = new Array();
            var links = new Array();

            if ( opts.slider !== null ){
                jQuery('.' + opts.tabContainerClass, set).wrapInner(jQuery('<div class="' + opts.slider + '"></div>'));
                set.data('slider', jQuery('.' + opts.tabContainerClass, set).children())
                jQuery('.' + opts.tabContainerClass, set).children('div').children('div').each( function(){
                    tabs.push(jQuery(this));
                })
                set.data('slider').css({
                    overflow: 'hidden',
                    display: 'block',
                    position: 'relative'
                });
            } else {
                jQuery('.' + opts.tabContainerClass, set).children('div').each( function(){
                    tabs.push(jQuery(this).css({position: 'absolute'}).hide());
                })
            }
            
            jQuery('.' + opts.linkContainerClass, set).children('li').children('a').each( function(){
                links.push(jQuery(this));
            })
            
            set.data('tabs', tabs);
            set.data('links', links);
            
            setStarter(set);
            
            return set;
        }
        
        var setStarter = function(set){
            var finalIndex = 0;
            
            if ( opts.hashing === true ){
                var loc = checkHash();
                for ( index in set.data('contentArray') ){
                    if ( set.data('contentArray')[index] === loc ){
                        finalIndex = index;
                        break;
                    }
                }
            jQuery(window).data('tabhashclicked', false);
            } else {
                for( index in set.data('tabs') ){
                    if ( index == opts.selected ){
                        finalIndex = index;
                        break;
                    }
                }
            }
            
			activate(set, finalIndex);
            set.data('activeTabCount', finalIndex );
            var height = getContentHeight(set, finalIndex)

            if ( opts.slider !== null ){
                var top = getContentTop(set, finalIndex);
                jQuery('.' + opts.tabContainerClass, set).css({height: height + 'px'});
                set.data('slider').css({top: top + 'px'})
            } else {
            	showContent(set, finalIndex, height);
//                set.data('tabs')[finalIndex].show();
            }
            
            handleAutoScroll(set);
        }
        
        var activate = function(set, finalIndex){
        	for ( index in set.data('links') ){
        		set.data('links')[index].closest('li').removeClass(opts.activeClass);
        	}
        	
        	for ( index in set.data('tabs') ){
        		set.data('tabs')[index].removeClass(opts.activeClass);
        	}
        	
        	var baseIndex = opts.tabZIndexBase;
        	var liCount = set.data('links').length;
        	
        	set.data('links')[finalIndex].closest('li').addClass(opts.activeClass);
        	set.data('tabs')[finalIndex].addClass(opts.activeClass);
        	
        }
        
        var handleAutoScroll = function(set){
        	if (opts.autoScroll === true){
    	        jQuery.scrollTo(('#' + set.attr('id')), opts.autoScrollSpeed);   //scroll to tab
    	    } else if (opts.autoScroll === false){
    	        jQuery.scrollTo('body', opts.autoScrollSpeed);   //scroll to body
    	    } else {
    	        if (opts.autoScroll !== null){
    	            jQuery.scrollTo(opts.autoScroll, opts.autoScrollSpeed);  //scroll to specified element
    	        }
    	    } 
        }
        
        var checkHash = function(){
            if ( (jQuery.browser.msie === true) && (jQuery.browser.version === '7.0') ) {
            	var tabParam = window.location.toString().substring(window.location.toString().indexOf('#'));
            } else {
            	var tabParam = window.location.hash;
            }

            return tabParam;
        }
        
        var getContentHeight = function(set, index){
            
            return set.data('heightArray')[index];
        }
        
        var getContentTop = function(set, index){
            
            var finalTop = 0;
            
            for ( count in set.data('heightArray') ){
                if ( !(count > (index - 1)) ){
                    finalTop += set.data('heightArray')[count];
                }
            }
            
            return -(finalTop);            
        }
        
        var setupBehavior = function(set){
        	
        	for ( linkCount in set.data('links') ){
		        set.data('links')[linkCount].closest('li').click( function(){
		        	if ( !jQuery(this).hasClass(opts.activeClass) ){

				        var href = jQuery(this).children('a').attr('href');
				        var finalCount = 0;
				        
				        for ( count in set.data('contentArray') ){
				            if ( set.data('contentArray')[count] === href ){
				                finalCount = count;
				                break;
				            }
				        }
				            
			            var height = getContentHeight(set, finalCount);
				        if ( opts.slider !== null ){
				            var top = getContentTop(set, finalCount);
				            slideContent(set, height, top);
				        } else if ( opts.tabFade === true ){
				            fadeContent(set, finalCount, height);
				        } else {
				            showContent(set, finalCount, height);
				        }
				        
						activate(set, finalCount);
				        set.data('activeTabCount', finalCount );
				            
				        if ( opts.hashing === true ){
				        	jQuery(window).data('tabhashclicked', true);
				            updateHash(set, finalCount, href);
				        }
				        
		            }
		            return false;
		        })
            }
            return set;
        }
        
        var slideContent = function(set, height, top){
            jQuery('.' + opts.tabContainerClass, set).stop( false, true )
               .animate({height: height + 'px'}, opts.easingDuration, opts.slideEasing );
               
            set.data('slider').stop( false, true )
               .animate({top: top + 'px'}, opts.easingDuration, opts.slideEasing);
        }
        
        var fadeContent = function(set, finalCount, height){
            jQuery('.' + opts.tabContainerClass, set).stop( false, true )
               .animate({height: height + 'px'}, opts.easingDuration, opts.slideEasing );
            set.data('tabs')[set.data('activeTabCount')].stop( false, true ).fadeOut(opts.fadeTime);
            set.data('tabs')[finalCount].stop( false, true ).fadeIn(opts.fadeTime);
        }
        
        var showContent = function(set, finalCount, height){
            jQuery('.' + opts.tabContainerClass, set).stop( false, true )
               .css({height: height + 'px'});
            set.data('tabs')[set.data('activeTabCount')].stop( false, true ).hide();
            set.data('tabs')[finalCount].stop( false, true ).show();
        }
        
        var setupLinks = function(set){
        	var linkHead = jQuery('ul.' + opts.linkContainerClass, set);
        	var baseIndex = opts.tabZIndexBase;
        	var liCount = linkHead.children('li').length;

        	if ( opts.roundCorner === true ){
        		linkHead.addClass(opts.roundCornerClass)
        	}
        	
        	if ( opts.alignReverse === true ){
        		linkHead.addClass(opts.alignRightClass)
        		alignListRight(set, linkHead, liCount);
        	} 
        	
        	if ( opts.tabRightPos > 0 ){
        		linkHead.addClass(opts.alignRightClass)
        		alignListRight(set, linkHead, liCount);
        		
        		for ( index in set.data('links') ){
        			var parentLi = set.data('links')[index].closest('li');
        			parentLi.css({
        				zIndex: (baseIndex + (liCount - index)), 
        				left: (opts.tabRightPos * (liCount - index - 1))
        			});
        		}
        	
        	} else if ( opts.tabLeftPos > 0 ){
        		for ( index in set.data('links') ){
        			var parentLi = set.data('links')[index].closest('li');
        			parentLi.css({zIndex: (baseIndex + (liCount - index)), left: -(index * opts.tabLeftPos) + 'px'});
        		}
        	}
        
        	return set;
        }
        
        var alignListRight = function(set, linkHead, liCount){
        	var linkArray = new Array();
        	var dataLinks = new Array();
        	
        	linkHead.children('li').each( function(){
        		var clone = jQuery(this).clone(); 
        		
        		if ((jQuery.browser.msie === true) && (jQuery.browser.version === '7.0')){
		    		clone.children('a').attr('href', 
		    			clone.children('a').attr('href').slice(clone.children('a').attr('href').indexOf('#'))
		    		)
        		}	
        		
        		if (jQuery(this).nextAll().length === 0){
        			linkArray.push(clone);
        			dataLinks.push(clone.children('a'))
        			for ( ctr = 0; ctr < liCount; ctr++){
        				jQuery(this).after(linkArray[ctr]);
        			}
        			jQuery(this).remove();
        		} else {     	
        			linkArray.push(clone);
        			dataLinks.push(clone.children('a'))
        			jQuery(this).remove();
        		}
        	});      
        	
        	set.data('links', dataLinks);  
        }
        
        var updateHash = function(set, finalCount, href){
        	
        	var target = set.data('tabs')[finalCount]
        	var temp = target.attr('id');
        	
        	target.attr('id', '');
        
            if((jQuery.browser.msie === true) && (jQuery.browser.version === '7.0')){
		    	window.location = window.location.toString().substring(0, window.location.toString().indexOf('#')) + href;
		    } else {
            	window.location.hash = href;
		    }
		    
		    target.attr('id', temp);
		    
        }
        
        var handleHashchange = function(set){
        	if ( jQuery(window).data('tabhashclicked') === false ){
        		var href = checkHash();
        		var finalCount = null;
        		for ( index in set.data('contentArray') ){
        			if ( href === set.data('contentArray')[index] ){
        				finalCount = index;
        			}
        		}
        		
        		if ( finalCount !== null ){
        			set.data('links')[finalCount].trigger('click');
        			jQuery(window).data('tabhashclicked', false);
        		}
        	} else {
        		jQuery(window).data('tabhashclicked', false);
        	}
        }
        
        if ( $this.length > 0 ){
            jQuery(window).load( function(){
            	
            	$this.each( function(){
            	    var set = storeData(jQuery(this));
            	    set = setupTabs(set);
            	    set = setupLinks(set);
            	    set = setupBehavior(set);
		        
		    	    jQuery(window).bind( 'hashchange', function(event) {
						if ( opts.hashing === true ){
							handleHashchange(set);	
						}
		        	})
			    });
            	
            });
        }
         
	 	return $this;
    };
    
    /** 
     * Sends a message to the console
     * @private
     */
    var _debug = function( message ) {
        if ( true === jQuery.fn.frozTabs.opts.debug ) {
            console.log( message );
        }
    };
	    
    jQuery.fn.frozTabs.defaults =   {
    selected: 0,
	slider: null,
	slideEasing: 'easeInOutExpo',
	easingDuration: 'slow',
    roundCorner: false,
    tabZIndexBase: 1,
    tabLeftPos: 0,
    tabRightPos: 0,
    alignReverse: false, 					//should be true if links are aligned to the right but tabRightPos=0
    activeClass: 'froz-tab-active',
    alignRightClass: 'froz-tab-link-right',
    roundCornerClass: 'froz-tab-link-round',
    linkContainerClass: 'link-container',
    tabContainerClass: 'tab-container',     //div containing contents
    mainTabClass: 'tab-main',
    tabFade: true,
    fadeTime: 400,
    hashing: true,                          //determines if hash is used and updated along with tab usage
    autoScrollSpeed: 0,
    autoScroll: null                        //true: page auto-scrolls to tab
                                            //false: page auto scrolls to body
                                            //null: page does not autoscroll
                                            //if selectors are declared here, page auto-scrolls to declared element
    };          

} )(jQuery);
jQuery( document ).ready( function() {
        if ( navigator.appVersion.match('MSIE 7.0') !== null){
        jQuery("ul.sf-menu").superfish().supersubs({ 
              minWidth:    18,   
              maxWidth:    100, 
              extraWidth:  0 
        });
    } else {        
        jQuery("ul.sf-menu").supersubs({ 
              minWidth:    18,   
              maxWidth:    100, 
              extraWidth:  0 
        }).superfish();
    };
    
    // jQuery('#tabs').frozTabs({slider: 'froz-tabs-slider', tabLeftPos: 10});
        
    jQuery('a.fancybox-enable').fancybox({
        cyclic: true,
        titlePosition: 'over',
        centerOnScroll: true
     });
	 
	 jQuery('#slider').nivoSlider({
			effect:'random',
			animSpeed:900,
			directionNavHide:true,
			controlNav:false
		});
		
		var frozSimpleAccordion = function(el, minHeight)
    {
        var el            = jQuery(el);
        var collapsedFlag = 'collapsed';
        var autoClose     = true;
        // var menuTarget    = '#sidebar-menu li a';
        
        el.siblings( '.toggle-info' ).slideUp(0, 'easeInOutBack');
        el.data(collapsedFlag, false);
        
        el.click(function(e){
            var _this     = jQuery(this);
            var _parentId = _this.parent().attr('id');
            
            // jQuery(menuTarget).removeClass('selected');
            // jQuery(menuTarget).parent('li').removeClass('selected');
            
            if (false === _this.data(collapsedFlag)) {
                _this.data(collapsedFlag, true);
                
                _this.addClass( 'selected' );
                
                // jQuery( menuTarget + '.' + _parentId ).addClass('selected');
                // jQuery( menuTarget + '.' + _parentId ).parent('li').addClass('selected');
                
                _this.siblings( '.toggle-info' ).slideDown(550, 'easeInOutBack', function(){
                    jQuery.scrollTo('#' + _parentId, 800);
                });
                
            } else {
                _this.data(collapsedFlag, false);
                _this.removeClass( 'selected' );
                _this.siblings( '.toggle-info' ).slideUp(400, 'easeInOutBack');
            }
            
            if (true === autoClose) {
                el.each(function(){
                    var _el = jQuery(this);
                    
                    if (_parentId === _el.parent().attr('id')) {
                        return;
                    }
                    if (true === _el.data(collapsedFlag)) {
                        _el.data(collapsedFlag, false);
                        _el.removeClass('selected');
                        _el.siblings( '.toggle-info' ).slideUp(400, 'easeInOutBack');
                    }
                });
            }
            return false;
        });
    };
    
    frozSimpleAccordion('header.title-header', 120);
    
    jQuery('#sidebar-menu li a').click(function(){
        var elId = jQuery( this ).attr('href');
        jQuery( elId ).find('.title-header').click();
        return false;
    });

        
    
});



