/**
* @author tothsz
*/

/**
 * @author Alexander Farkas
 * v. 1.02
 */
(function($) {
	$.extend($.fx.step,{
	    backgroundPosition: function(fx) {
            if (fx.state === 0 && typeof fx.end == 'string') {
                var start = $.curCSS(fx.elem,'backgroundPosition');
                start = toArray(start);
                fx.start = [start[0],start[2]];
                var end = toArray(fx.end);
                fx.end = [end[0],end[2]];
                fx.unit = [end[1],end[3]];
			}
            var nowPosX = [];
            nowPosX[0] = ((fx.end[0] - fx.start[0]) * fx.pos) + fx.start[0] + fx.unit[0];
            nowPosX[1] = ((fx.end[1] - fx.start[1]) * fx.pos) + fx.start[1] + fx.unit[1];
            fx.elem.style.backgroundPosition = nowPosX[0]+' '+nowPosX[1];

           function toArray(strg){
               strg = strg.replace(/left|top/g,'0px');
               strg = strg.replace(/right|bottom/g,'100%');
               strg = strg.replace(/([0-9\.]+)(\s|\)|$)/g,"$1px$2");
               var res = strg.match(/(-?[0-9\.]+)(px|\%|em|pt)\s(-?[0-9\.]+)(px|\%|em|pt)/);
               return [parseFloat(res[1],10),res[2],parseFloat(res[3],10),res[4]];
           }
        }
	});
})(jQuery);


// in_ragne
function in_range(value, range) {
    return (value < range[0] || value > range[1]) ? false : true;
}

// later
jQuery.later = function(_o, _s, _m) {
    var that = _o,
		args = Array.prototype.slice.apply(arguments, [3]);
    if (typeof _m === 'string') _m = that[_m];
    time = setTimeout(function() { _m.apply(that, args); }, _s);
    return time;
};

// cookie
jQuery.cookie = {

    set: function(name, value, expires, path, domain, secure) {
        var now = new Date();
        var base = new Date(0);
        var skew = base.getTime();
        if (skew > 0)
            date.setTime(date.getTime() - skew);

        now.setTime(now.getTime() + expires);
        var curCookie = name + "=" + escape(value) +
			((expires) ? "; expires=" + now.toGMTString() : "") +
			((path) ? "; path=" + path : "") +
			((domain) ? "; domain=" + domain : "") +
			((secure) ? "; secure" : "");
        document.cookie = curCookie;
    },

    get: function(name) {
        var dc = document.cookie;
        var prefix = name + "=";
        var begin = dc.indexOf("; " + prefix);
        if (begin == -1) {
            begin = dc.indexOf(prefix);
            if (begin != 0) return null;
        } else
            begin += 2;
        var end = document.cookie.indexOf(";", begin);
        if (end == -1)
            end = dc.length;
        return unescape(dc.substring(begin + prefix.length, end));
    },

    del: function(name, path, domain) {
        if (this.get(name)) {
            document.cookie = [name, "=", ((path) ? "; path=" + path : ""), ((domain) ? "; domain=" + domain : ""), "; expires=Thu, 01-Jan-70 00:00:01 GMT"].join('');
        }
    }
};

// events
$.fn.extend({
    target: function() {
        return this[0].target || this[0].srcElement;
    },
    stopPropagation: function() {
        if (this[0].stopPropagation) {
            this[0].stopPropagation();
        }
        else {
            this[0].cancelBubble = true;
        }
    },
    preventDefault: function() {
        if (this[0].preventDefault) {
            this[0].preventDefault();
        }
        else {
            this[0].returnValue = false;
        }
    },
    stopEvent: function() {
        this.stopPropagation(this[0]);
        this.preventDefault(this[0]);
    },

    pointerX: function() {
        return this[0].pageX || (this[0].clientX +
		  (document.documentElement.scrollLeft || document.body.scrollLeft));
    },
    pointerY: function() {
        return this[0].pageY || (this[0].clientY +
		  (document.documentElement.scrollTop || document.body.scrollTop));
    }
});

// clone
function clone(object) {
    function F() { }
    F.prototype = object;
    return new F;
}

/**
* 
* credits for this plugin go to brandonaaron.net
* 	
* unfortunately his site is down
* 
* @param {Object} up
* @param {Object} down
* @param {Object} preventDefault
*/
jQuery.fn.extend({
    mousewheel: function(up, down, preventDefault) {
        return this.hover(
			function() {
			    jQuery.event.mousewheel.giveFocus(this, up, down, preventDefault);
			},
			function() {
			    jQuery.event.mousewheel.removeFocus(this);
			}
		);
    },
    mousewheeldown: function(fn, preventDefault) {
        return this.mousewheel(function() { }, fn, preventDefault);
    },
    mousewheelup: function(fn, preventDefault) {
        return this.mousewheel(fn, function() { }, preventDefault);
    },
    unmousewheel: function() {
        return this.each(function() {
            jQuery(this).unmouseover().unmouseout();
            jQuery.event.mousewheel.removeFocus(this);
        });
    },
    unmousewheeldown: jQuery.fn.unmousewheel,
    unmousewheelup: jQuery.fn.unmousewheel
});


jQuery.event.mousewheel = {
    giveFocus: function(el, up, down, preventDefault) {
        if (el._handleMousewheel) jQuery(el).unmousewheel();

        if (preventDefault == window.undefined && down && down.constructor != Function) {
            preventDefault = down;
            down = null;
        }

        el._handleMousewheel = function(event) {
            if (!event) event = window.event;
            if (preventDefault)
                if (event.preventDefault) event.preventDefault();
            else event.returnValue = false;
            var delta = 0;
            if (event.wheelDelta) {
                delta = event.wheelDelta / 120;
                if (window.opera) delta = -delta;
            } else if (event.detail) {
                delta = -event.detail / 3;
            }
            if (up && (delta > 0 || !down))
                up.apply(el, [event, delta]);
            else if (down && delta < 0)
                down.apply(el, [event, delta]);
        };

        if (window.addEventListener)
            window.addEventListener('DOMMouseScroll', el._handleMousewheel, false);
        window.onmousewheel = document.onmousewheel = el._handleMousewheel;
    },

    removeFocus: function(el) {
        if (!el._handleMousewheel) return;

        if (window.removeEventListener)
            window.removeEventListener('DOMMouseScroll', el._handleMousewheel, false);
        window.onmousewheel = document.onmousewheel = null;
        el._handleMousewheel = null;
    }
};
