/**
 * 
 * JQuery plug-in for accordion user tabs
 * It can be used in any HTML that needed an accordion user style.
 * 
 * The way of using it is the following:
 * 
 * It has an object of default values (var defaults) that can be override
 * when creating the object, with values that are suitable for the particular
 * project.
 * 
 * The number of accordion tabs are any number.
 * The CSS classes should be passed by parameter, in this case, is using the default
 * CSS classes made by Esteban Rao for the accordion.
 * 
 * 
 * For enable this plug-in, a snippet like the one below must be placed inside "document.ready.js":
 * 
 * 
    $("ul.accordion").accordion({});
 *
 * The defaultTabIndex is the tab number that will be selected at the loading of the page.
 * There are 2 ways of selecting the default value:
 * 	1) Set the defaultTabIndex variable  to the index needed.
 *  2) Add a class named "default-x", where "x" is the value of the index, if there are both ways
 *     this will be the one left.  
 * 
 * 
 */

(function($) {
    $.fn.accordion = function(options) {  
    	
    	var defaults = {
    			accordionElement: "ul.accordion",
    			accordionTabs: "li",
    			links: "h4 a",                
                selectedClass: "selected",
                rightClass: "right-title",
                leftClass: "left-title",
    			printTab: "ul li a.print-button",
    			printButton: "a.print-button",
    			noPrintTabClass: "js-no-print",
    			subAccordionCTA: "div.expandable-items dl dt",
    			subAccordionContent: "div.expandable-items dl dd",
    			subAccordionToggleOnClass: "toggle-on",
    			subAccordionToggleOffClass: "toggle-off",
    			footnotesPlace: "div.footer div.container"	
    	};
    		
    	var settings = $.extend(defaults, options);
    	
    	var footNote = '<p class="js-dynamic-footnote footnote">{0}</p>';
    
    	var defaultTabIndex_tmp;
    	
        return this.each(function() {
            var container = $(this).find(settings.accordionElement);            
            var listItems = container.children("li");

            $( settings.printTab , container ).unbind("click").click(function(e){
            	e.preventDefault();
            	$.log("print icon clicked");              	
            	listItems.not("." + settings.selectedClass).addClass(settings.noPrintTabClass);
            	window.print();
            });
            
            $( settings.printButton ).not( settings.printTab , container ).unbind("click").click(function(e){
            	e.preventDefault();
            	listItems.not("." + settings.selectedClass).removeClass(settings.noPrintTabClass);
            	window.print();            	
            });
            
            $( settings.subAccordionCTA , container).click(function(e){
            	e.preventDefault();
            	var thisElement = $(this);
            	var clickedInd = $( settings.subAccordionCTA , container).index(thisElement) ;
            	if($(thisElement).find("a").hasClass("link-on")){
            		$( $( settings.subAccordionCTA , container ).find("a")[clickedInd]).removeClass('link-on').addClass('link-off');
            		$( $( settings.subAccordionContent , container )[clickedInd]).addClass(settings.subAccordionToggleOffClass).removeClass(settings.subAccordionToggleOnClass);
            	}else{
	            	$( settings.subAccordionCTA , container ).find("a").addClass('link-off').removeClass('link-on');
	            	$( settings.subAccordionContent , container ).removeClass(settings.subAccordionToggleOnClass).addClass(settings.subAccordionToggleOffClass);
	            	$( $( settings.subAccordionContent , container )[clickedInd]).addClass(settings.subAccordionToggleOnClass).removeClass(settings.subAccordionToggleOffClass);//muestra content
	            	$( $( settings.subAccordionCTA , container ).find("a")[clickedInd]).removeClass('link-off').addClass('link-on');//se agrega el -
            	}	
            });
            
            $( settings.links , container).each(function(index, link) {
                $(link).click(function(e) {
                	e.preventDefault();
                	if( ieVersion() <= 7 ){
                		$("li." + settings.selectedClass, container).find('div.expandable-items img').addClass('toggle-off');
                	}
                    $("li." + settings.selectedClass, container).removeClass(settings.selectedClass);
                    

                    
                    setItemsOrdinal(index, listItems);                    
                    var listItem = $(this).parents("li");
                    var tabClasses = $(this).parent().parent().attr('class');
                    var hashC = tabClasses.replace(settings.leftClass,"");
                    hashC = hashC.replace("js-","#").replace(settings.rightClass,"").replace(" ","");
                    //window.location.hash = hashC;
                    hasher.setHash(hashC);
                    selectItem(listItem);
                    $(settings.footnotesPlace).find('.js-dynamic-footnote').remove();
                    var thisIsTheTab = $(this).parent().parent();
                    if ($(thisIsTheTab).find('.hidden-footnotes').html()!= null){
                        $(settings.footnotesPlace).prepend(String.format( footNote , $(thisIsTheTab).find('.hidden-footnotes').html()));
                    }   
                });
            });
            
            if(typeof(hasher) != "undefined") {
	            hasher.prependHash = "";
	            hasher.changed.add(function(newHash, oldHash){
	            	var $link = $(".js-" + newHash + " h4 a");
	            	if($link.length > 0){
	            		$link.click();	
	            	} else {
	            		$( settings.links , container).eq(0).click();
	            	}
	            });
	            hasher.init();
	
	            var windowLocationHash =  hasher.getHash();            
	            if( windowLocationHash ){
	            	$(".js-" + windowLocationHash + " h4 a").click();
	            }
            }
               
            setItemsOrdinal(settings.defaultTabIndex, listItems);
                        
            selectItem($(listItems[settings.defaultTabIndex]));
        });
        
        function selectItem(listItem) {
        	if (listItem) {
            	listItem.addClass(settings.selectedClass);
            	if( ieVersion() <= 7 ){
            		listItem.find('img').removeClass('toggle-off');
            	}
            } 
        }

        function setItemsOrdinal(index, listItems) {
            if (listItems && index <= listItems.length) {
                for (i = 0; i < listItems.length; i++) {
                    var item = $(listItems[i]);
                    item.removeClass('right-title');
                    item.removeClass('left-title');
                    if (i < index)
                        item.addClass(settings.leftClass);
                    else
                        item.addClass(settings.rightClass);
                }
            }
        }
    };
    
    
})(jQuery);

