﻿/**

* hoverIntent r5 // 2007.03.27 // jQuery 1.1.2+

* <http://cherne.net/brian/resources/jquery.hoverIntent.html>

* 

* @param  f  onMouseOver function || An object with configuration options

* @param  g  onMouseOut function  || Nothing (use configuration options object)

* @author    Brian Cherne <brian@cherne.net>

*/

(function ($) { $.fn.hoverIntent = function (f, g) { var cfg = { sensitivity: 7, interval: 100, timeout: 0 }; cfg = $.extend(cfg, g ? { over: f, out: g} : f); var cX, cY, pX, pY; var track = function (ev) { cX = ev.pageX; cY = ev.pageY; }; var compare = function (ev, ob) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); if ((Math.abs(pX - cX) + Math.abs(pY - cY)) < cfg.sensitivity) { $(ob).unbind("mousemove", track); ob.hoverIntent_s = 1; return cfg.over.apply(ob, [ev]); } else { pX = cX; pY = cY; ob.hoverIntent_t = setTimeout(function () { compare(ev, ob); }, cfg.interval); } }; var delay = function (ev, ob) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); ob.hoverIntent_s = 0; return cfg.out.apply(ob, [ev]); }; var handleHover = function (e) { var p = (e.type == "mouseover" ? e.fromElement : e.toElement) || e.relatedTarget; while (p && p != this) { try { p = p.parentNode; } catch (e) { p = this; } } if (p == this) { return false; } var ev = jQuery.extend({}, e); var ob = this; if (ob.hoverIntent_t) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); } if (e.type == "mouseover") { pX = ev.pageX; pY = ev.pageY; $(ob).bind("mousemove", track); if (ob.hoverIntent_s != 1) { ob.hoverIntent_t = setTimeout(function () { compare(ev, ob); }, cfg.interval); } } else { $(ob).unbind("mousemove", track); if (ob.hoverIntent_s == 1) { ob.hoverIntent_t = setTimeout(function () { delay(ev, ob); }, cfg.timeout); } } }; return this.mouseover(handleHover).mouseout(handleHover); }; })(jQuery);





//Data Selecter

(function ($) {

    //We use a small helper function that will return true when 'a' is undefined (so we can do if(checkUndefined(data)) return false;

    //If we would continue with undefined data we would piss javascript off as we would be getting properties of an

    //non-exsitent object (ie typeof data === 'undefined'; data.fooBar; //throws error

    var checkUndefined = function (a) {

        return typeof a === 'undefined';

    }

    $.expr[':'].data = function (elem, counter, params) {

        if (checkUndefined(elem) || checkUndefined(params)) return false;

        //:data(__) accepts 'dataKey', 'dataKey=Value', 'dataKey.InnerdataKey', 'dataKey.InnerdataKey=Value'

        //Also instead of = we accept: != (does not equal Value), ^= (starts with Value), 

        //      $= (ends with Value), *=Value (contains Value);

        //$(elem).data(dataKey) or $(elem).data(dataKey)[innerDataKey] (optional more innerDataKeys)

        //When no value is speciefied we return all elements that have the dataKey specified, similar to [attribute]

        var query = params[3]; //The part in the parenthesis, thus: selector:data( query )

        if (!query) return false; //query can not be anything that evaluates to false, it has to be string

        var querySplitted = query.split('='); //for dataKey=Value/dataKey.innerDataKey=Value

        //We check if the condition was an =, an !=, an $= or an *=

        var selectType = querySplitted[0].charAt(querySplitted[0].length - 1);

        if (selectType == '^' || selectType == '$' || selectType == '!' || selectType == '*') {

            querySplitted[0] = querySplitted[0].substring(0, querySplitted[0].length - 1);

            //the ^=, *= and $= are only available when the $.stringQuery plugin is loaded, if it is not and any of these are used we return false

            if (!$.stringQuery && selectType != '!') {

                return false;

            }

        }

        else selectType = '=';

        var dataName = querySplitted[0]; //dataKey or dataKey.innerDataKey

        //Now we go check if we need dataKey or dataKey.innerDataKey

        var dataNameSplitted = dataName.split('.');

        var data = $(elem).data(dataNameSplitted[0]);

        if (checkUndefined(data)) return false;

        if (dataNameSplitted[1]) {//We have innerDataKeys

            for (i = 1, x = dataNameSplitted.length; i < x; i++) { //we start counting at 1 since we ignore the first value because that is the dataKey

                data = data[dataNameSplitted[i]];

                if (checkUndefined(data)) return false;

            }

        }

        if (querySplitted[1]) { //should the data be of a specified value?

            var checkAgainst = (data + '');

            //We cast to string as the query will always be a string, otherwise boolean comparison may fail

            //beacuse in javaScript true!='true' but (true+'')=='true'

            //We use this switch to check if we chould check for =, $=, ^=, !=, *=

            switch (selectType) {

                case '=': //equals

                    return checkAgainst == querySplitted[1];

                    break;

                case '!': //does not equeal

                    return checkAgainst != querySplitted[1];

                    break;

                case '^': //starts with

                    return $.stringQuery.startsWith(checkAgainst, querySplitted[1]);

                    break;

                case '$': //ends with

                    return $.stringQuery.endsWith(checkAgainst, querySplitted[1]);

                    break;

                case '*': //contains

                    return $.stringQuery.contains(checkAgainst, querySplitted[1]);

                    break;

                default: //default should never happen

                    return false;

                    break;

            }

        }

        else { //the data does not have to be a speciefied value

            //, just return true (we are here so the data is specified, otherwise false would have been returned by now)

            return true;

        }

    }

})(jQuery);



/*

* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/

*

* Uses the built in easing capabilities added In jQuery 1.1

* to offer multiple easing options

*

* TERMS OF USE - jQuery Easing

* 

* Open source under the BSD License. 

* 

* Copyright © 2008 George McGinley Smith

* All rights reserved.

* 

* Redistribution and use in source and binary forms, with or without modification, 

* are permitted provided that the following conditions are met:

* 

* Redistributions of source code must retain the above copyright notice, this list of 

* conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice, this list 

* of conditions and the following disclaimer in the documentation and/or other materials 

* provided with the distribution.

* 

* Neither the name of the author nor the names of contributors may be used to endorse 

* or promote products derived from this software without specific prior written permission.

* 

* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 

* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF

* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE

*  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,

*  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE

*  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 

* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING

*  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 

* OF THE POSSIBILITY OF SUCH DAMAGE. 

*

*/



// t: current time, b: begInnIng value, c: change In value, d: duration

jQuery.easing['jswing'] = jQuery.easing['swing'];



jQuery.extend(jQuery.easing,

                                                {

                                                    def: 'easeOutQuad',

                                                    swing: function (x, t, b, c, d) {

                                                        //alert(jQuery.easing.default);

                                                        return jQuery.easing[jQuery.easing.def](x, t, b, c, d);

                                                    },

                                                    easeInQuad: function (x, t, b, c, d) {

                                                        return c * (t /= d) * t + b;

                                                    },

                                                    easeOutQuad: function (x, t, b, c, d) {

                                                        return -c * (t /= d) * (t - 2) + b;

                                                    },

                                                    easeInOutQuad: function (x, t, b, c, d) {

                                                        if ((t /= d / 2) < 1) return c / 2 * t * t + b;

                                                        return -c / 2 * ((--t) * (t - 2) - 1) + b;

                                                    },

                                                    easeInCubic: function (x, t, b, c, d) {

                                                        return c * (t /= d) * t * t + b;

                                                    },

                                                    easeOutCubic: function (x, t, b, c, d) {

                                                        return c * ((t = t / d - 1) * t * t + 1) + b;

                                                    },

                                                    easeInOutCubic: function (x, t, b, c, d) {

                                                        if ((t /= d / 2) < 1) return c / 2 * t * t * t + b;

                                                        return c / 2 * ((t -= 2) * t * t + 2) + b;

                                                    },

                                                    easeInQuart: function (x, t, b, c, d) {

                                                        return c * (t /= d) * t * t * t + b;

                                                    },

                                                    easeOutQuart: function (x, t, b, c, d) {

                                                        return -c * ((t = t / d - 1) * t * t * t - 1) + b;

                                                    },

                                                    easeInOutQuart: function (x, t, b, c, d) {

                                                        if ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b;

                                                        return -c / 2 * ((t -= 2) * t * t * t - 2) + b;

                                                    },

                                                    easeInQuint: function (x, t, b, c, d) {

                                                        return c * (t /= d) * t * t * t * t + b;

                                                    },

                                                    easeOutQuint: function (x, t, b, c, d) {

                                                        return c * ((t = t / d - 1) * t * t * t * t + 1) + b;

                                                    },

                                                    easeInOutQuint: function (x, t, b, c, d) {

                                                        if ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b;

                                                        return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;

                                                    },

                                                    easeInSine: function (x, t, b, c, d) {

                                                        return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;

                                                    },

                                                    easeOutSine: function (x, t, b, c, d) {

                                                        return c * Math.sin(t / d * (Math.PI / 2)) + b;

                                                    },

                                                    easeInOutSine: function (x, t, b, c, d) {

                                                        return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;

                                                    },

                                                    easeInExpo: function (x, t, b, c, d) {

                                                        return (t == 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;

                                                    },

                                                    easeOutExpo: function (x, t, b, c, d) {

                                                        return (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;

                                                    },

                                                    easeInOutExpo: function (x, t, b, c, d) {

                                                        if (t == 0) return b;

                                                        if (t == d) return b + c;

                                                        if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b;

                                                        return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;

                                                    },

                                                    easeInCirc: function (x, t, b, c, d) {

                                                        return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;

                                                    },

                                                    easeOutCirc: function (x, t, b, c, d) {

                                                        return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;

                                                    },

                                                    easeInOutCirc: function (x, t, b, c, d) {

                                                        if ((t /= d / 2) < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;

                                                        return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;

                                                    },

                                                    easeInElastic: function (x, t, b, c, d) {

                                                        var s = 1.70158; var p = 0; var a = c;

                                                        if (t == 0) return b; if ((t /= d) == 1) return b + c; if (!p) p = d * .3;

                                                        if (a < Math.abs(c)) { a = c; var s = p / 4; }

                                                        else var s = p / (2 * Math.PI) * Math.asin(c / a);

                                                        return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;

                                                    },

                                                    easeOutElastic: function (x, t, b, c, d) {

                                                        var s = 1.70158; var p = 0; var a = c;

                                                        if (t == 0) return b; if ((t /= d) == 1) return b + c; if (!p) p = d * .3;

                                                        if (a < Math.abs(c)) { a = c; var s = p / 4; }

                                                        else var s = p / (2 * Math.PI) * Math.asin(c / a);

                                                        return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;

                                                    },

                                                    easeInOutElastic: function (x, t, b, c, d) {

                                                        var s = 1.70158; var p = 0; var a = c;

                                                        if (t == 0) return b; if ((t /= d / 2) == 2) return b + c; if (!p) p = d * (.3 * 1.5);

                                                        if (a < Math.abs(c)) { a = c; var s = p / 4; }

                                                        else var s = p / (2 * Math.PI) * Math.asin(c / a);

                                                        if (t < 1) return -.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;

                                                        return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b;

                                                    },

                                                    easeInBack: function (x, t, b, c, d, s) {

                                                        if (s == undefined) s = 1.70158;

                                                        return c * (t /= d) * t * ((s + 1) * t - s) + b;

                                                    },

                                                    easeOutBack: function (x, t, b, c, d, s) {

                                                        if (s == undefined) s = 1.70158;

                                                        return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;

                                                    },

                                                    easeInOutBack: function (x, t, b, c, d, s) {

                                                        if (s == undefined) s = 1.70158;

                                                        if ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;

                                                        return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;

                                                    },

                                                    easeInBounce: function (x, t, b, c, d) {

                                                        return c - jQuery.easing.easeOutBounce(x, d - t, 0, c, d) + b;

                                                    },

                                                    easeOutBounce: function (x, t, b, c, d) {

                                                        if ((t /= d) < (1 / 2.75)) {

                                                            return c * (7.5625 * t * t) + b;

                                                        } else if (t < (2 / 2.75)) {

                                                            return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;

                                                        } else if (t < (2.5 / 2.75)) {

                                                            return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;

                                                        } else {

                                                            return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;

                                                        }

                                                    },

                                                    easeInOutBounce: function (x, t, b, c, d) {

                                                        if (t < d / 2) return jQuery.easing.easeInBounce(x, t * 2, 0, c, d) * .5 + b;

                                                        return jQuery.easing.easeOutBounce(x, t * 2 - d, 0, c, d) * .5 + c * .5 + b;

                                                    }

                                                });                                           


