$(document).ready(on_ready);
function on_ready() {
    
    enable_smooth_scroll();
    
    if (typeof sh_highlightDocument == "function") {
        sh_highlightDocument();
    }
    
    if (typeof pageTracker != 'undefined') {
        pageTracker._trackEvent(
            'Browser Dimensions',
            'load',
            $(window).width()
                + 'x'
                + $(window).height(),
            $(window).width()
        );

        $(window).resize(function () {
            if ($(this).data('gatimer')) {
                clearTimeout($(this).data('gatimer'));
                $(this).data('gatimer', null);
            }

            $(this).data(
                'gatimer',
                setTimeout(function () {
                    pageTracker._trackEvent(
                        'Browser Dimensions',
                        'resize',
                        $(window).width()
                            + 'x'
                            + $(window).height(),
                        $(window).width()
                        );
                    },
                  500
                )
            );
        });
    }
}


(function() {
    // Override default jQuery css() method to support CSS 'transform' property
    // uniformly across Webkit/Safari and Firefox 3.1+
    // 2009 Zachary Johnson www.zachstronaut.com
    function getTransformProperty(element) {
        // Try transform first for forward compatibility
        var properties = ['transform', 'WebkitTransform', 'MozTransform'];
        var p;
        while (p = properties.shift()) {
            if (typeof element.style[p] != 'undefined') {
                return p;
            }
        }
        // Default to transform also
        return 'transform';
    }
    
    var proxied = jQuery.fn.css;
    jQuery.fn.css = function(key, value) {
        if (key == 'transform') {
            if (typeof jQuery.props[key] == 'undefined') {
                jQuery.props[key] = getTransformProperty(this.get(0));
            }
            // We force the property mapping here because jQuery.attr() does
            // property mapping with jQuery.props when setting a CSS property,
            // but curCSS() does *not* do property mapping when *getting* a
            // CSS property.  (It probably should since it manually does it
            // for 'float' now anyway.)
            key = jQuery.props[key];
        }
        return proxied.apply(this, arguments);
    };
})();


// http://www.learningjquery.com/2007/10/improved-animated-scrolling-script-for-same-page-links
// major changes by Paul Armstrong and Zachary Johnson
function enable_smooth_scroll() {
    function filterPath(string) {
        return string
                .replace(/^\//,'')
                .replace(/(index|default).[a-zA-Z]{3,4}$/,'')
                .replace(/\/$/,'');
    }

    var locationPath = filterPath(location.pathname);

    var scrollElement = 'html, body';
    $('html, body').each(function () {
        var initScrollTop = $(this).attr('scrollTop');
        $(this).attr('scrollTop', initScrollTop + 1);
        if ($(this).attr('scrollTop') == initScrollTop + 1) {
            scrollElement = this.nodeName.toLowerCase();
            $(this).attr('scrollTop', initScrollTop);
            return false;
        }    
    });
    
    $('a[href*=#]').each(function() {
        var thisPath = filterPath(this.pathname) || locationPath;
        if  (   locationPath == thisPath
                && (location.hostname == this.hostname || !this.hostname)
                && this.hash.replace(/#/, '')
            ) {
                if ($(this.hash).length) {
                    $(this).click(function(event) {
                        var targetOffset = $(this.hash).offset().top;
                        var target = this.hash;
                        event.preventDefault();
                        $(scrollElement).animate({scrollTop: targetOffset}, 800, function() {
                            location.hash = target;
                        });
                    });
                }
        }
    });
}


/**
 * jQuery Default Value Plugin v1.0
 * Progressive enhancement technique for inital input field values
 *
 * The MIT License
 * 
 * Copyright (c) 2007 Paul Campbell (pauljamescampbell.co.uk)
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * Improvements by Zachary Johnson 2009
 */
(function($) {
	$.fn.defaultVal = function() {
		// Scope
		var elements = this;
		var args = arguments;
		var c = 0;
		
		return (
            elements.each(function() {
				var el = $(this);
				var value = args[c++];

                if (el.val() == '') {
                    el.val(value);
                }
                
				el.focus(function() {
					if(el.val() == value) {
						el.val('');
					}
					
					el.blur(function() {
    					if(el.val() == '') {
    						el.val(value);
    					}
    				});
				});
			})
    	);
    };
})(jQuery);

