(function() {
    //jquery 1.0.2 ajax fix
    /*
    var oldAjax = jQuery.ajax;
    jQuery.ajax =  function( type, url, data, ret, ifModified ) {
        if(!url) {
            if(typeof type.global == "undefined") type.global = true;
            if(typeof type.timeout == "undefined") type.timeout = jQuery.timeout;
        } else {
            type = {
                type:       type,
                url:        url,
                data:       data,
                ifModified: ifModified,
                global:     true,
                timeout:    jQuery.timeout,
                complete:   ret
            };
        }
        return oldAjax.call(jQuery, type);
    };

    */

    // add-ons
    jQuery.fn.hoverClass = function(c) {
        return this.each(function(){
            $(this).hover( 
                function() { $(this).addClass(c);  },
                function() { $(this).removeClass(c); }
            );
        });
    };

    $.mousePosition = { x: 0, y: 0};
    $(function() {
        $(document).mousemove(function(e) {
            e = e || window.event;
            if (typeof e.pageX != "undefined") { // FF
                $.mousePosition.x = e.pageX;
                $.mousePosition.y = e.pageY;
            } else if (typeof e.clientX != "undefined") { // IE6 & IE7
                var win = jQuery.winSizes();
                $.mousePosition.x = event.clientX + win.scrollLeft;
                $.mousePosition.y = event.clientY + win.scrollTop;
            }
        });
    });

    jQuery.fn.x_dimensions = function() {
        var self = $(this).get(0);
        if(typeof self == "undefined" || typeof self.offsetLeft == "undefined") return {left: 0, top: 0};
        var p = $(self.offsetParent).x_dimensions();
        return {left: self.offsetLeft + p.left, top: self.offsetTop + p.top, width: self.offsetWidth, height: self.offsetHeight};
    };

    jQuery.winSizes = function() {
        return {
            width:  window.innerWidth || jQuery.boxModel && document.documentElement.clientWidth || document.body.clientWidth,
            height: window.innerHeight || jQuery.boxModel && document.documentElement.clientHeight || document.body.clientHeight,
            scrollLeft: window.pageXOffset || jQuery.boxModel && document.documentElement.scrollLeft || document.body.scrollLeft,
            scrollTop:  window.pageYOffset || jQuery.boxModel && document.documentElement.scrollTop || document.body.scrollTop
            };
    };

})();

