/**
 * NUS User Interface
 */ 
var NUS = {
    //handle to accordion
    homeacc: null,
    
    /**
     * Init UI functions
     */         
    init: function () {
        NUS.SortableBoxes.init();
        NUS.textSize();
        // NUS.emulateHover(jQuery('#nav li'));
        // NUS.mainNav();
        NUS.sitePrefsToggle(jQuery('.prefs a'));
        NUS.homeAccordion();
        NUS.audiencePanels();
        NUS.expandableBoxes();
        NUS.rollovers();
        NUS.preloadImages(["http://www.nus.edu.sg/js/images/buttons/index-submit_over.gif", 
                           "http://www.nus.edu.sg/js/images/buttons/full-page_over.gif", 
                           "http://www.nus.edu.sg/js/images/bg/flyout.jpg", 
                           "http://www.nus.edu.sg/js/images/bg/audience-panel.jpg"]);
        /*NUS.azIndex('#az-index-search', '#az-index-results', '#az-desc');
        jQuery(".az-index form").bind("submit", function() { return false; });
        NUS.wipSlideshow('#slideshow', '{timeout: 5000}');*/
        NUS.loadPrefs();

    },
    
    
    /**
     * Increase/decrease text size
     */          
    textSize: function () {
        
        if (jQuery.cookie('larger-text')) {
            jQuery('body').addClass('large-text');
        }
        
        jQuery('.accessibility .increase').bind('click', function () {
            jQuery('body').addClass('larger-text');
            jQuery.cookie('larger-text', 1);
            return false;
        });
        
        jQuery('.accessibility .decrease').bind('click', function () {
            jQuery('body').removeClass('larger-text');
            jQuery.cookie('larger-text', null);
            return false;
        });
    },
    
    /**
     * Home page accordion
     */ 
    homeAccordion: function () {
        homeacc = jQuery('#StandardAccordion').accordion({ 
            header: 'h2',
            selectedClass: 'current'
        }).bind("click", function(event) {
            jQuery('#StandardAccordion .inner').removeClass('opened');
        }).bind("accordionchange", function(event, ui) {
            ui.newContent.addClass('opened');
        });
    },          
    
    /**
     * Toogle expandle boxes on home page
     */         
    expandableBoxes: function () {
        jQuery('.expandable-box .tab a').bind('click', function () {
             jQuery(this).parents('.expandable-box').find('.inner').toggleClass('expanded-box');
             jQuery(this).toggleClass('expanded');
             return false;
        });
    },
    
    /**
     * Toogle alumni panels
     */         
    audiencePanels: function () {
        var panels = jQuery('.orange-panel:not(.orange-panel-static)');
        /*var links = jQuery('#orange-nav a:not(#a-nav06)');*/
        var links = jQuery('#orange-nav:not(.orange-nav-static) a');
        links.each(function (i) {
            jQuery(this).bind('click', function () {
                panels.each(function (j) {
                    if (i !== j) {
                        jQuery(panels[j]).hide();
                        jQuery(links[j]).removeClass('current');
                    }
                })
                jQuery(panels[i]).slideToggle();
                jQuery(this).toggleClass('current');
                return false;
            });
        });
    },
    
    /**
     * Emulate hover in IE6
     */          
    emulateHover: function (items) {
        items.hover(
            function () {
                jQuery(this).addClass('hover');
            },
            function () {
                jQuery(this).removeClass('hover');
            }
        )
    },
    
    /**
     * Site Preferences toggler
     */          
    sitePrefsToggle: function (items) {
        items.toggle(
            function () {
                jQuery(this).parent().addClass('active');
            },
            function () {
                jQuery(this).parent().removeClass('active');
            }
        )
    },
    
    /**
     * Main navigation
     */          
    mainNav: function () {
        jQuery("#nav > li > a").bind('click', function () {
            jQuery("#nav > li > a").not(this).parent().removeClass('hover');
            if(jQuery(this).next() && jQuery(this).next().is('.flyout')) {
              jQuery(this).parent().toggleClass('hover');
              return false;
            }
            return true;
        });
    },
    /**
     * Rollovers buttons
     */
    rollovers: function () {
        jQuery('.rollover').hover(
            function () {
                jQuery(this).attr('src', jQuery(this).attr('src').replace(/.gif/, 'http://www.nus.edu.sg/js/_over.gif'));
            },
            function () {
                jQuery(this).attr('src', jQuery(this).attr('src').replace(/_over.gif/, 'http://www.nus.edu.sg/js/.gif')); 
            }
        );
    },
     
    /**
     * 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];
        }
    },

    /** 
     * A-Z Index Autocomplete
     * @param searchbox - <input> to be bound
     * @param results - id of results target
     * @loading - id of loading image/animation
     * @desc - id of element which describes the content (ARIA)
     */
   /* azIndex: function (searchbox, results, desc) {
        clearAutoComplete();
        setAutoComplete(searchbox, results);
        autoComplete("a", "alpha");
        jQuery(searchbox).focus(function(){ jQuery(this).attr("value",""); });
        jQuery(desc).hide();
    },
    */
    /** 
     * WIP Slideshow
     * @param args - options for slideshow (str)
     */
    /*wipSlideshow: function (target, args) {
        jQuery(target).slideshow({timeout: 5000});
    },
*/
    loadPrefs: function() {
        //nav mouseover or hover
        if(jQuery.cookie('prefs_navclick') !== null && jQuery.cookie('prefs_navclick') == "1") {
          NUS.mainNav();
        }
        else {
          NUS.emulateHover(jQuery('#nav li'));
        }
    
        //accordion
        if (jQuery.cookie('prefs_accordion') !== null && jQuery.cookie('prefs_accordion') != '') {
          homeacc.activate(parseInt(jQuery.cookie('prefs_accordion')));
          //jQuery('#StandardAccordion:nth-child('+parseInt(jQuery.cookie('prefs_accordion'))+')').addClass('current');
        }
        
        //search
        if (jQuery.cookie('prefs_search') !== null && jQuery.cookie('prefs_search') != '') {
          jQuery(".search_type:eq(" + jQuery.cookie('prefs_search') + ")").attr("checked","checked");
          jQuery(".search_type2:eq(" + jQuery.cookie('prefs_search') + ")").attr("checked","checked");
        }
        else {
          jQuery(".search_type:eq(0)").attr("checked","checked");
          jQuery(".search_type2:eq(0)").attr("checked","checked");
        }
    }
}


/**
 * Sortable boxes 
 */
NUS.SortableBoxes = {
    
    closed: Array, 
    numSortables: 3,
    /**
     * Init function
     */          
    init: function () {
        NUS.SortableBoxes.moveBoxes();
        NUS.SortableBoxes.toggleBoxes();
        NUS.SortableBoxes.toggleBoxesOnLoad();
    },
        
    /**
     * Move sortable boxes
     */         
    moveBoxes: function () {
        jQuery("#sortable1").sortable({
            connectWith: ["#sortable2", "#sortable3"],
            handle: "h2",
			update: function(e, ui) {
               NUS.SortableBoxes.createCookie('sortable1', jQuery(this).sortable('toArray'));
            },
            receive: function(e, ui) {
                NUS.SortableBoxes.createCookie('sortable1', jQuery(this).sortable('toArray'));
            },
            remove: function(e, ui) { 
                NUS.SortableBoxes.createCookie('sortable1', jQuery(this).sortable('toArray'));
            } 
        }); 
        jQuery("#sortable2").sortable({
            connectWith: ["#sortable1", "#sortable3"],
            handle: "h2",
			 update: function(e, ui) { 
               NUS.SortableBoxes.createCookie('sortable2', jQuery(this).sortable('toArray')); 
            },
            receive: function(e, ui) { 
                NUS.SortableBoxes.createCookie('sortable2', jQuery(this).sortable('toArray')); 
            },
            remove: function(e, ui) { 
                NUS.SortableBoxes.createCookie('sortable2', jQuery(this).sortable('toArray'));
            } 
        });
        jQuery("#sortable3").sortable({
            connectWith: ["#sortable1", "#sortable2"],
            handle: "h2",
			 update: function(e, ui) { 
               NUS.SortableBoxes.createCookie('sortable3', jQuery(this).sortable('toArray')); 
            },
            receive: function(e, ui) { 
                NUS.SortableBoxes.createCookie('sortable3', jQuery(this).sortable('toArray')); 
            },
            remove: function(e, ui) { 
                NUS.SortableBoxes.createCookie('sortable3', jQuery(this).sortable('toArray'));
            } 
        });
    },
    
    createCookie: function (column, boxes) {
       //alert(column);
        var cookie = '';
        for (var i = 0; i < boxes.length; i++) {
            cookie += boxes[i] + ".";
        }
       // alert(cookie);
        jQuery.cookie(column, cookie, {expires: 365});
    },
        
    /**
     * Toggle boxes on/off
     */         
    toggleBoxes: function () {
        var links = jQuery(".customize-box h2 a, .sortable-box h2 a")
        links.bind('click', function () {
             var closedboxes = '';
             jQuery(this).parents('li').toggleClass('sortable-box-closed');
             jQuery('.sortable-box-closed').each(function (i) {
                 closedboxes += jQuery(this).attr('id') + '.';
             });
             jQuery.cookie('closedboxes', closedboxes, {expires: 365});
             return false;
        });
    },
    
    /**
     * Close boxes onload 
     */         
    toggleBoxesOnLoad: function () {
        
        // Check if user set any boxes to be closed
        if (jQuery.cookie('closedboxes') !== null && jQuery.cookie('closedboxes') != '') {
            var closedboxes = jQuery.cookie('closedboxes').slice(0, -1);
            NUS.SortableBoxes.closed = closedboxes.split('.');
       
        // Cookie is set but is empty - user have all boxes opened    
        } else if (jQuery.cookie('closedboxes') !== null && jQuery.cookie('closedboxes') == '') {
            NUS.SortableBoxes.closed = [];
        }
        
        if (NUS.SortableBoxes.closed.length > 0) {
            for (var i = 0; i < NUS.SortableBoxes.closed.length; i++) {
                jQuery("#" + NUS.SortableBoxes.closed[i]).addClass('sortable-box-closed');
            }
        }
    }
}    

jQuery(document).ready(function () {
    NUS.init();
}); 


