/*
 * jQuery plugin top slideDown menu
 *
 * 
 *
 * @author Filip Williamsson
 * @date 2011-03-15
 */

(function() {
    $.fn.topMenu = function(options) {
        var
        defaults = {
            expandFirst: true,
            expander: $(this),
            information: "#navigator",
            expandedClass: "open",
            informationWidth: "100%",
            duration: 200
        },
        settings = $.extend({}, defaults, options),
        $expander = $(settings.expander),
        $information = $(settings.information),
        
        $isIOS = ((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)));
    
        $information.css({"visibility" : "hidden"});
        $information.show();
       
        var $height = $(settings.information).height();
       
        if (!this) return false;
        
        // iOS hardware accelerated fix
        if ($isIOS) {
            
            $information.css({ "position" : "absolute",
                                "width" : settings.informationWidth,
                                "-webkit-transition" : "translate3d "+settings.duration+"ms ease-in-out",
                                "-webkit-transform" : "translate3d(0,"+(-1)*$height+"px,0)",
                                "visibility" : "visible"
            });
            $("body").css({"-webkit-transition" : "-webkit-transform "+settings.duration+"ms ease-in-out"});

            $expander.click(function(){
                if($("body").hasClass(settings.expandedClass)) {
                    $("body").removeClass(settings.expandedClass);
                    $("body").css({
                        "-webkit-transform" : "none",
                        "padding-bottom" : "0px"
                    });
                } else {
                    $("body").addClass(settings.expandedClass);
                    $("body").css({
                        "-webkit-transform" : "translate3d(0,"+$height+"px,0)",
                        "padding-bottom" : $height+"px"
                    });
                }
                return false;
            });
        // The rest
        } else {
            $information.hide();

            $information.css({  "overflow" : "hidden",
                                "visibility" : "visible"
            });
            
            $expander.click(function(){
                if($expander.hasClass(settings.expandedClass)) {
                    $expander.removeClass(settings.expandedClass);
                } else {
                    $expander.addClass(settings.expandedClass);
                }
                $information.slideToggle(settings.duration);
                
                return false;
            });
        }
        
        return this;
    };
})(jQuery);
