var BrowserDetect = {
    init: function () {
        this.browser = this.searchString(this.dataBrowser) || "";
        this.version = this.searchVersion(navigator.userAgent)
            || this.searchVersion(navigator.appVersion)
            || "";
        this.OS = this.searchString(this.dataOS) || "";
    },
    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: "Chrome",
            identity: "Chrome"
        },
        {
            string: navigator.vendor,
            subString: "Apple",
            identity: "Safari",
            versionSearch: "Version"
        },
        {
            prop: window.opera,
            identity: "Opera"
        },
        {
            string: navigator.userAgent,
            subString: "Firefox",
            identity: "Firefox"
        },
        {       // for newer Netscapes (6+)
            string: navigator.userAgent,
            subString: "Netscape",
            identity: "Netscape"
        },
        {
            string: navigator.userAgent,
            subString: "MSIE",
            identity: "ie",
            versionSearch: "MSIE"
        },
        {
            string: navigator.userAgent,
            subString: "Gecko",
            identity: "Mozilla",
            versionSearch: "rv"
        }
    ],
    dataOS : [
        {
            string: navigator.platform,
            subString: "Win",
            identity: "windows"
        },
        {
            string: navigator.platform,
            subString: "Mac",
            identity: "mac"
        },
        {
               string: navigator.userAgent,
               subString: "iPhone",
               identity: "ios"
        },
        {
            string: navigator.platform,
            subString: "Linux",
            identity: "linux"
        }
    ]

};

(function($) {
    $.fn.browserDetect = function() {  
      
        return this.each(function() {
            BrowserDetect.init();
            
            if ($.browser.msie) {
                $(this).addClass('msie');
                $(this).addClass('ie' + $.browser.version.split('.',1));
            }
            else if ($.browser.webkit) {
                $(this).addClass('webkit');
            }
            else if ($.browser.mozilla) {
                $(this).addClass('mozilla');
            }
            else if ($.browser.opera) {
                $(this).addClass('opera');
            }
            
            $(this).addClass(BrowserDetect.OS.toLowerCase());
        });
    }
    
    $.fn.toggleBack = function() {  
        
        return this.each(function() {
            if( document.referrer.indexOf(document.domain) > -1 ) {
                $(this).attr('href', 'javascript:history.go(-1)');
            }
        });
    }
    
    $.fn.togglePopup = function() {
        return this.bind('click', function() {
            newwindow = window.open($(this).attr('href'),'','height=400,width=650');
            if (newwindow == null || typeof(newwindow) == "undefined") return true;
            if (window.focus) newwindow.focus();
            return false;
        });
    }
    
    $.fn.gaTrackLink = function() {
        return this.each(function() {
            $(this).click(function() {
                if (typeof(_gaq) != "undefined") {
                    _gaq.push(['_trackEvent', $(this).data('category'), $(this).data('action'), $(this).data('resource')]);
                }
            });
        });
    }
    
    $.fn.padComments = function() {
        
        return this.each(function() {
            $(this).css('min-height', '0');
            
            var container = $(this).parent(),
                comments = $(this).next(),
                sidebar = $('.sidebar');
            
            var min = sidebar.height(),
                offset = comments.position().top,
                rendered = (min-offset);
            
            comments.css('min-height', (rendered > 0) ? rendered +'px' : '0px');
        });
    };
    
    $.fn.defaultValue = function() {  
        
        return this.each(function() {
            $(this).attr('default', $(this).val());
            $(this).focusin(function() {
                if ($(this).val() == $(this).attr('default')) {
                    $(this).val('');
                }
            } );
            $(this).focusout(function() {
                if ($(this).val() == '') {
                    $(this).val($(this).attr('default'));
                }
            } );
        });
    }
})(jQuery);
