[Testbot] Plone 5.0 - Python 2.7 - Build # 3608 - Still failing! - 0 failure(s)

jenkins at plone.org jenkins at plone.org
Tue Nov 4 00:22:25 UTC 2014


-------------------------------------------------------------------------------
Plone 5.0 - Python 2.7 - Build # 3608 - Still Failing!
-------------------------------------------------------------------------------

http://jenkins.plone.org/job/plone-5.0-python-2.7/3608/


-------------------------------------------------------------------------------
CHANGES
-------------------------------------------------------------------------------

Repository: plone.app.jquerytools
Branch: refs/heads/master
Date: 2014-11-04T00:43:24+01:00
Author: Johannes Raggam (thet) <raggam-nl at adm.at>
Commit: https://github.com/plone/plone.app.jquerytools/commit/f57dd28211c169d2ca47b3fdb3636ab77b9036a3

Revert "check each tooltip for existence, fixes issue 349". Fixes broken Tooltip.

Files changed:
M CHANGES.rst
M plone/app/jquerytools/browser/jquery.tools.dateinput.js
M plone/app/jquerytools/browser/jquery.tools.js
M plone/app/jquerytools/browser/jquery.tools.min.js

diff --git a/CHANGES.rst b/CHANGES.rst
index b5af63a..2be2bd6 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -4,7 +4,9 @@ Changelog
 1.6.2 (unreleased)
 ------------------
 
-- Nothing changed yet.
+- Revert "check each tooltip for existence, fixes issue 349". Fixes broken
+  Tooltip.
+  [vincentfretin, thet]
 
 
 1.6.1 (2014-09-11)
diff --git a/plone/app/jquerytools/browser/jquery.tools.dateinput.js b/plone/app/jquerytools/browser/jquery.tools.dateinput.js
index 91a20b5..a3a0845 100644
--- a/plone/app/jquerytools/browser/jquery.tools.dateinput.js
+++ b/plone/app/jquerytools/browser/jquery.tools.dateinput.js
@@ -1,445 +1,445 @@
 /**
- * @license
+ * @license                                     
  * jQuery Tools @VERSION Dateinput - <input type="date" /> for humans
- *
+ * 
  * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
- *
+ * 
  * http://flowplayer.org/tools/form/dateinput/
  *
  * Since: Mar 2010
- * Date: @DATE
+ * Date: @DATE 
  */
-(function($, undefined) {
-
-    /* TODO:
-         preserve today highlighted
-    */
-
-    $.tools = $.tools || {version: '@VERSION'};
-
-    var instances = [],
-        formatters = {},
-         tool,
-
-         // h=72, j=74, k=75, l=76, down=40, left=37, up=38, right=39
-         KEYS = [75, 76, 38, 39, 74, 72, 40, 37],
-         LABELS = {};
-
-    tool = $.tools.dateinput = {
-
-        conf: {
-            format: 'mm/dd/yy',
-            formatter: 'default',
-            selectors: false,
-            yearRange: [-5, 5],
-            lang: 'en',
-            offset: [0, 0],
-            speed: 0,
-            firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
-            min: undefined,
-            max: undefined,
-            trigger: 0,
-            toggle: 0,
-            editable: 0,
-
-            css: {
-
-                prefix: 'cal',
-                input: 'date',
-
-                // ids
-                root: 0,
-                head: 0,
-                title: 0,
-                prev: 0,
-                next: 0,
-                month: 0,
-                year: 0,
-                days: 0,
-
-                body: 0,
-                weeks: 0,
-                today: 0,
-                current: 0,
-
-                // classnames
-                week: 0,
-                off: 0,
-                sunday: 0,
-                focus: 0,
-                disabled: 0,
-                trigger: 0
-            }
-        },
-
-        addFormatter: function(name, fn) {
-            formatters[name] = fn;
-        },
-
-        localize: function(language, labels) {
-            $.each(labels, function(key, val) {
-                labels[key] = val.split(",");
-            });
-            LABELS[language] = labels;
-        }
-
-    };
-
-    tool.localize("en", {
-        months:          'January,February,March,April,May,June,July,August,September,October,November,December',
-        shortMonths: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec',
-        days:          'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday',
-        shortDays:      'Sun,Mon,Tue,Wed,Thu,Fri,Sat'
-    });
-
-
+(function($, undefined) {	
+		
+	/* TODO: 
+		 preserve today highlighted
+	*/
+	
+	$.tools = $.tools || {version: '@VERSION'};
+	
+	var instances = [],
+		formatters = {},
+		 tool,
+		 
+		 // h=72, j=74, k=75, l=76, down=40, left=37, up=38, right=39
+		 KEYS = [75, 76, 38, 39, 74, 72, 40, 37],
+		 LABELS = {};
+	
+	tool = $.tools.dateinput = {
+		
+		conf: { 
+			format: 'mm/dd/yy',
+			formatter: 'default',
+			selectors: false,
+			yearRange: [-5, 5],
+			lang: 'en',
+			offset: [0, 0],
+			speed: 0,
+			firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+			min: undefined,
+			max: undefined,
+			trigger: 0,
+			toggle: 0,
+			editable: 0,
+			
+			css: {
+				
+				prefix: 'cal',
+				input: 'date',
+				
+				// ids
+				root: 0,
+				head: 0,
+				title: 0, 
+				prev: 0,
+				next: 0,
+				month: 0,
+				year: 0, 
+				days: 0,
+				
+				body: 0,
+				weeks: 0,
+				today: 0,		
+				current: 0,
+				
+				// classnames
+				week: 0, 
+				off: 0,
+				sunday: 0,
+				focus: 0,
+				disabled: 0,
+				trigger: 0
+			}  
+		},
+		
+		addFormatter: function(name, fn) {
+			formatters[name] = fn;
+		},
+		
+		localize: function(language, labels) {
+			$.each(labels, function(key, val) {
+				labels[key] = val.split(",");		
+			});
+			LABELS[language] = labels;	
+		}
+		
+	};
+	
+	tool.localize("en", {
+		months: 		 'January,February,March,April,May,June,July,August,September,October,November,December', 
+		shortMonths: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec',  
+		days: 		 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday', 
+		shortDays: 	 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'	  
+	});
+
+	
 //{{{ private functions
-
-
-    // @return amount of days in certain month
-    function dayAm(year, month) {
-        return new Date(year, month + 1, 0).getDate();
-    }
-
-    function zeropad(val, len) {
-        val = '' + val;
-        len = len || 2;
-        while (val.length < len) { val = "0" + val; }
-        return val;
-    }
-
-    // thanks: http://stevenlevithan.com/assets/misc/date.format.js
-    var tmpTag = $("<a/>");
-
-    function format(formatter, date, text, lang) {
-      var d = date.getDate(),
-            D = date.getDay(),
-            m = date.getMonth(),
-            y = date.getFullYear(),
-
-            flags = {
-                d:    d,
-                dd:   zeropad(d),
-                ddd:  LABELS[lang].shortDays[D],
-                dddd: LABELS[lang].days[D],
-                m:    m + 1,
-                mm:   zeropad(m + 1),
-                mmm:  LABELS[lang].shortMonths[m],
-                mmmm: LABELS[lang].months[m],
-                yy:   String(y).slice(2),
-                yyyy: y
-            };
-
-        var ret = formatters[formatter](text, date, flags, lang);
-
-        // a small trick to handle special characters
-        return tmpTag.html(ret).html();
-
-    }
-
-    tool.addFormatter('default', function(text, date, flags, lang) {
-        return text.replace(/d{1,4}|m{1,4}|yy(?:yy)?|"[^"]*"|'[^']*'/g, function ($0) {
-            return $0 in flags ? flags[$0] : $0;
-        });
-    });
-
-    tool.addFormatter('prefixed', function(text, date, flags, lang) {
-        return text.replace(/%(d{1,4}|m{1,4}|yy(?:yy)?|"[^"]*"|'[^']*')/g, function ($0, $1) {
-            return $1 in flags ? flags[$1] : $0;
-        });
-    });
-
-    function integer(val) {
-        return parseInt(val, 10);
-    }
-
-    function isSameDay(d1, d2)  {
-        return d1.getFullYear() === d2.getFullYear() &&
-            d1.getMonth() == d2.getMonth() &&
-            d1.getDate() == d2.getDate();
-    }
-
-    function parseDate(val) {
-
-        if (val === undefined) { return; }
-        if (val.constructor == Date) { return val; }
-
-        if (typeof val == 'string') {
-
-            // rfc3339?
-            var els = val.split("-");
-            if (els.length == 3) {
-                return new Date(integer(els[0]), integer(els[1]) -1, integer(els[2]));
-            }
-
-            // invalid offset
-            if ( !(/^-?\d+$/).test(val) ) { return; }
-
-            // convert to integer
-            val = integer(val);
-        }
-
-        var date = new Date;
-        date.setDate(date.getDate() + val);
-        return date;
-    }
-
+		
+
+	// @return amount of days in certain month
+	function dayAm(year, month) {
+		return new Date(year, month + 1, 0).getDate();
+	}
+ 
+	function zeropad(val, len) {
+		val = '' + val;
+		len = len || 2;
+		while (val.length < len) { val = "0" + val; }
+		return val;
+	}  
+	
+	// thanks: http://stevenlevithan.com/assets/misc/date.format.js 
+	var tmpTag = $("<a/>");
+	
+	function format(formatter, date, text, lang) {
+	  var d = date.getDate(),
+			D = date.getDay(),
+			m = date.getMonth(),
+			y = date.getFullYear(),
+
+			flags = {
+				d:    d,
+				dd:   zeropad(d),
+				ddd:  LABELS[lang].shortDays[D],
+				dddd: LABELS[lang].days[D],
+				m:    m + 1,
+				mm:   zeropad(m + 1),
+				mmm:  LABELS[lang].shortMonths[m],
+				mmmm: LABELS[lang].months[m],
+				yy:   String(y).slice(2),
+				yyyy: y
+			};
+			
+		var ret = formatters[formatter](text, date, flags, lang);
+		
+		// a small trick to handle special characters
+		return tmpTag.html(ret).html();
+		
+	}
+	
+	tool.addFormatter('default', function(text, date, flags, lang) {
+		return text.replace(/d{1,4}|m{1,4}|yy(?:yy)?|"[^"]*"|'[^']*'/g, function ($0) {
+			return $0 in flags ? flags[$0] : $0;
+		});
+	});
+	
+	tool.addFormatter('prefixed', function(text, date, flags, lang) {
+		return text.replace(/%(d{1,4}|m{1,4}|yy(?:yy)?|"[^"]*"|'[^']*')/g, function ($0, $1) {
+			return $1 in flags ? flags[$1] : $0;
+		});
+	});
+	
+	function integer(val) {
+		return parseInt(val, 10);	
+	} 
+
+	function isSameDay(d1, d2)  {
+		return d1.getFullYear() === d2.getFullYear() && 
+			d1.getMonth() == d2.getMonth() &&
+			d1.getDate() == d2.getDate(); 
+	}
+
+	function parseDate(val) {
+		
+		if (val === undefined) { return; }
+		if (val.constructor == Date) { return val; } 
+		
+		if (typeof val == 'string') {
+			
+			// rfc3339?
+			var els = val.split("-");		
+			if (els.length == 3) {
+				return new Date(integer(els[0]), integer(els[1]) -1, integer(els[2]));
+			}	
+			
+			// invalid offset
+			if ( !(/^-?\d+$/).test(val) ) { return; }
+			
+			// convert to integer
+			val = integer(val);
+		}
+		
+		var date = new Date;
+		date.setDate(date.getDate() + val);
+		return date; 
+	}
+	
 //}}}
-
-
-    function Dateinput(input, conf)  {
-
-        // variables
-        var self = this,
-             now = new Date,
-             yearNow = now.getFullYear(),
-             css = conf.css,
-             labels = LABELS[conf.lang],
-             root = $("#" + css.root),
-             title = root.find("#" + css.title),
-             trigger,
-             pm, nm,
-             currYear, currMonth, currDay,
-             value = input.attr("data-value") || conf.value || input.val(),
-             min = input.attr("min") || conf.min,
-             max = input.attr("max") || conf.max,
-             opened,
-             original;
-
-        // zero min is not undefined
-        if (min === 0) { min = "0"; }
-
-        // use sane values for value, min & max
-        value = parseDate(value) || now;
-
-        min   = parseDate(min || new Date(yearNow + conf.yearRange[0], 1, 1));
-        max   = parseDate(max || new Date( yearNow + conf.yearRange[1]+ 1, 1, -1));
-
-
-        // check that language exists
-        if (!labels) { throw "Dateinput: invalid language: " + conf.lang; }
-
-        // Replace built-in date input: NOTE: input.attr("type", "text") throws exception by the browser
-        if (input.attr("type") == 'date') {
-            var original = input.clone(),
+		 
+	
+	function Dateinput(input, conf)  { 
+
+		// variables
+		var self = this,  
+			 now = new Date,
+			 yearNow = now.getFullYear(),
+			 css = conf.css,
+			 labels = LABELS[conf.lang],
+			 root = $("#" + css.root),
+			 title = root.find("#" + css.title),
+			 trigger,
+			 pm, nm, 
+			 currYear, currMonth, currDay,
+			 value = input.attr("data-value") || conf.value || input.val(), 
+			 min = input.attr("min") || conf.min,  
+			 max = input.attr("max") || conf.max,
+			 opened,
+			 original;
+
+		// zero min is not undefined 	 
+		if (min === 0) { min = "0"; }
+		
+		// use sane values for value, min & max		
+		value = parseDate(value) || now;  
+		
+		min   = parseDate(min || new Date(yearNow + conf.yearRange[0], 1, 1));
+		max   = parseDate(max || new Date( yearNow + conf.yearRange[1]+ 1, 1, -1));
+		
+		
+		// check that language exists
+		if (!labels) { throw "Dateinput: invalid language: " + conf.lang; }
+		
+		// Replace built-in date input: NOTE: input.attr("type", "text") throws exception by the browser
+		if (input.attr("type") == 'date') {
+			var original = input.clone(),
           def = original.wrap("<div/>").parent().html(),
           clone = $(def.replace(/type/i, "type=text data-orig-type"));
-
-            if (conf.value) clone.val(conf.value);   // jquery 1.6.2 val(undefined) will clear val()
-
-            input.replaceWith(clone);
-            input = clone;
-        }
-
-        input.addClass(css.input);
-
-        var fire = input.add(self);
-
-        // construct layout
-        if (!root.length) {
-
-            // root
-            root = $('<div><div><a/><div/><a/></div><div><div/><div/></div></div>')
-                .hide().css({position: 'absolute'}).attr("id", css.root);
-
-            // elements
-            root.children()
-                .eq(0).attr("id", css.head).end()
-                .eq(1).attr("id", css.body).children()
-                    .eq(0).attr("id", css.days).end()
-                    .eq(1).attr("id", css.weeks).end().end().end()
-                .find("a").eq(0).attr("id", css.prev).end().eq(1).attr("id", css.next);
-
-            // title
-            title = root.find("#" + css.head).find("div").attr("id", css.title);
-
-            // year & month selectors
-            if (conf.selectors) {
-                var monthSelector = $("<select/>").attr("id", css.month),
-                     yearSelector = $("<select/>").attr("id", css.year);
-                title.html(monthSelector.add(yearSelector));
-            }
-
-            // day titles
-            var days = root.find("#" + css.days);
-
-            // days of the week
-            for (var d = 0; d < 7; d++) {
-                days.append($("<span/>").text(labels.shortDays[(d + conf.firstDay) % 7]));
-            }
-
-            $("body").append(root);
-        }
-
-
-        // trigger icon
-        if (conf.trigger) {
-            trigger = $("<a/>").attr("href", "#").addClass(css.trigger).click(function(e)  {
-                conf.toggle ? self.toggle() : self.show();
-                return e.preventDefault();
-            }).insertAfter(input);
-        }
-
-
-        // layout elements
-        var weeks = root.find("#" + css.weeks);
-        yearSelector = root.find("#" + css.year);
-        monthSelector = root.find("#" + css.month);
-
-
+          
+			if (conf.value) clone.val(conf.value);   // jquery 1.6.2 val(undefined) will clear val()
+			
+			input.replaceWith(clone);
+			input = clone;
+		}
+		
+		input.addClass(css.input);
+		
+		var fire = input.add(self);
+			 
+		// construct layout
+		if (!root.length) {
+			
+			// root
+			root = $('<div><div><a/><div/><a/></div><div><div/><div/></div></div>')
+				.hide().css({position: 'absolute'}).attr("id", css.root);			
+						
+			// elements
+			root.children()
+				.eq(0).attr("id", css.head).end() 
+				.eq(1).attr("id", css.body).children()
+					.eq(0).attr("id", css.days).end()
+					.eq(1).attr("id", css.weeks).end().end().end()
+				.find("a").eq(0).attr("id", css.prev).end().eq(1).attr("id", css.next);		 				  
+			
+			// title
+			title = root.find("#" + css.head).find("div").attr("id", css.title);
+			
+			// year & month selectors
+			if (conf.selectors) {				
+				var monthSelector = $("<select/>").attr("id", css.month),
+					 yearSelector = $("<select/>").attr("id", css.year);				
+				title.html(monthSelector.add(yearSelector));
+			}						
+			
+			// day titles
+			var days = root.find("#" + css.days); 
+			
+			// days of the week
+			for (var d = 0; d < 7; d++) { 
+				days.append($("<span/>").text(labels.shortDays[(d + conf.firstDay) % 7]));
+			}
+			
+			$("body").append(root);
+		}	
+		
+				
+		// trigger icon
+		if (conf.trigger) {
+			trigger = $("<a/>").attr("href", "#").addClass(css.trigger).click(function(e)  {
+				conf.toggle ? self.toggle() : self.show();
+				return e.preventDefault();
+			}).insertAfter(input);	
+		}
+		
+		
+		// layout elements
+		var weeks = root.find("#" + css.weeks);
+		yearSelector = root.find("#" + css.year);
+		monthSelector = root.find("#" + css.month);
+			 
+		
 //{{{ pick
-
-        function select(date, conf, e) {
-            // If it is readonly, then we'll just close the calendar
-            if (input.attr('readonly')) {
-                self.hide(e);
-                return;
-            }
-
-            // current value
-            value      = date;
-            currYear  = date.getFullYear();
-            currMonth = date.getMonth();
-            currDay     = date.getDate();
-
-            e || (e = $.Event("api"));
-
-            // focus the input after selection (doesn't work in IE)
-            if (e.type == "click" && !/msie/.test(navigator.userAgent.toLowerCase())) {
-                input.focus();
-            }
-
-            // beforeChange
-            e.type = "beforeChange";
-
-            fire.trigger(e, [date]);
-            if (e.isDefaultPrevented()) { return; }
-
-            // formatting
-            input.val(format(conf.formatter, date, conf.format, conf.lang));
-
-            // change
-            e.type = "change";
-            e.target = input[0];
-            fire.trigger(e);
-
-            // store value into input
-            input.data("date", date);
-
-            self.hide(e);
-        }
+			 			 
+		function select(date, conf, e) {
+			// If it is readonly, then we'll just close the calendar
+			if (input.attr('readonly')) {
+				self.hide(e);
+				return;
+			}
+			
+			// current value
+			value 	 = date;
+			currYear  = date.getFullYear();
+			currMonth = date.getMonth();
+			currDay	 = date.getDate();				
+			
+			e || (e = $.Event("api"));
+
+			// focus the input after selection (doesn't work in IE)
+			if (e.type == "click" && !/msie/.test(navigator.userAgent.toLowerCase())) {
+				input.focus();
+			}
+			
+			// beforeChange
+			e.type = "beforeChange";
+			
+			fire.trigger(e, [date]);
+			if (e.isDefaultPrevented()) { return; }
+			
+			// formatting			
+			input.val(format(conf.formatter, date, conf.format, conf.lang));
+			
+      // change
+      e.type = "change";
+      e.target = input[0];
+			fire.trigger(e);
+              
+			// store value into input
+			input.data("date", date);
+			
+			self.hide(e); 
+		}
 //}}}
-
-
+		
+		
 //{{{ onShow
 
-        function onShow(ev) {
-
-            ev.type = "onShow";
-            fire.trigger(ev);
-
-            $(document).on("keydown.d", function(e) {
-
-                if (e.ctrlKey) { return true; }
-                var key = e.keyCode;
-
-                // backspace or delete clears the value
-                if (key == 8 || key == 46) {
-                    input.val("");
-                    return self.hide(e);
-                }
-
-                // esc or tab key exits
-                if (key == 27 || key == 9) { return self.hide(e); }
-
-                if ($(KEYS).index(key) >= 0) {
-
-                    if (!opened) {
-                        self.show(e);
-                        return e.preventDefault();
-                    }
-
-                    var days = $("#" + css.weeks + " a"),
-                         el = $("." + css.focus),
-                         index = days.index(el);
-
-                    el.removeClass(css.focus);
-
-                    if (key == 74 || key == 40) { index += 7; }
-                    else if (key == 75 || key == 38) { index -= 7; }
-                    else if (key == 76 || key == 39) { index += 1; }
-                    else if (key == 72 || key == 37) { index -= 1; }
-
-
-                    if (index > 41) {
-                         self.addMonth();
-                         el = $("#" + css.weeks + " a:eq(" + (index-42) + ")");
-                    } else if (index < 0) {
-                         self.addMonth(-1);
-                         el = $("#" + css.weeks + " a:eq(" + (index+42) + ")");
-                    } else {
-                         el = days.eq(index);
-                    }
-
-                    el.addClass(css.focus);
-                    return e.preventDefault();
-
-                }
-
-                // pageUp / pageDown
-                if (key == 34) { return self.addMonth(); }
-                if (key == 33) { return self.addMonth(-1); }
-
-                // home
-                if (key == 36) { return self.today(); }
-
-                // enter
-                if (key == 13) {
-                    if (!$(e.target).is("select")) {
-                        $("." + css.focus).click();
-                    }
-                }
-
-                return $([16, 17, 18, 9]).index(key) >= 0;
-            });
-
-
-            // click outside dateinput
-            $(document).on("click.d", function(e) {
-                var el = e.target;
-
-                if (!(el.id == css.root || $(el).parents("#" + css.root).length) && el != input[0] && (!trigger || el != trigger[0])) {
-                    self.hide(e);
-                }
-
-            });
-        }
+		function onShow(ev) {
+			
+			ev.type = "onShow";
+			fire.trigger(ev);
+			
+			$(document).on("keydown.d", function(e) {
+					
+				if (e.ctrlKey) { return true; }				
+				var key = e.keyCode;			 
+				
+				// backspace or delete clears the value
+				if (key == 8 || key == 46) {
+					input.val("");
+					return self.hide(e);	
+				}
+				
+				// esc or tab key exits
+				if (key == 27 || key == 9) { return self.hide(e); }						
+					
+				if ($(KEYS).index(key) >= 0) {
+					
+					if (!opened) { 
+						self.show(e); 
+						return e.preventDefault();
+					} 
+					
+					var days = $("#" + css.weeks + " a"), 
+						 el = $("." + css.focus),
+						 index = days.index(el);
+					 
+					el.removeClass(css.focus);
+					
+					if (key == 74 || key == 40) { index += 7; }
+					else if (key == 75 || key == 38) { index -= 7; }							
+					else if (key == 76 || key == 39) { index += 1; }
+					else if (key == 72 || key == 37) { index -= 1; }
+					
+					
+					if (index > 41) {
+						 self.addMonth();
+						 el = $("#" + css.weeks + " a:eq(" + (index-42) + ")");
+					} else if (index < 0) {
+						 self.addMonth(-1);
+						 el = $("#" + css.weeks + " a:eq(" + (index+42) + ")");
+					} else {
+						 el = days.eq(index);
+					}
+					
+					el.addClass(css.focus);
+					return e.preventDefault();
+					
+				}
+			 
+				// pageUp / pageDown
+				if (key == 34) { return self.addMonth(); }
+				if (key == 33) { return self.addMonth(-1); }
+				
+				// home
+				if (key == 36) { return self.today(); }
+				
+				// enter
+				if (key == 13) {
+					if (!$(e.target).is("select")) {
+						$("." + css.focus).click();
+					}
+				}
+				
+				return $([16, 17, 18, 9]).index(key) >= 0;  				
+			});
+			
+			
+			// click outside dateinput
+			$(document).on("click.d", function(e) {					
+				var el = e.target;
+				
+				if (!(el.id == css.root || $(el).parents("#" + css.root).length) && el != input[0] && (!trigger || el != trigger[0])) {
+					self.hide(e);
+				}
+				
+			}); 
+		}
 //}}}
 
 
-        $.extend(self, {
-
-
-            /**
-            *   @public
-            *   Show the calendar
-            */
-            show: function(e) {
-
-                if (input.attr("disabled") || opened) { return; }
-
-                // onBeforeShow
-                e = e || $.Event();
-                e.type = "onBeforeShow";
-                fire.trigger(e);
-                if (e.isDefaultPrevented()) { return; }
-
-                $.each(instances, function() {
-                    this.hide();
-                });
-
-                opened = true;
-
+		$.extend(self, {
+
+      
+			/**
+			*   @public
+			*   Show the calendar
+			*/					
+			show: function(e) {
+				
+				if (input.attr("disabled") || opened) { return; }
+				
+				// onBeforeShow
+				e = e || $.Event();
+				e.type = "onBeforeShow";
+				fire.trigger(e);
+				if (e.isDefaultPrevented()) { return; }
+			
+				$.each(instances, function() {
+					this.hide();	
+				});
+				
+				opened = true;
+				
         // month selector
         monthSelector.off("change").change(function() {
           self.setValue(integer(yearSelector.val()), integer($(this).val()));
@@ -449,365 +449,365 @@
         yearSelector.off("change").change(function() {
           self.setValue(integer($(this).val()), integer(monthSelector.val()));
         });
-
-                // prev / next month
-                pm = root.find("#" + css.prev).off("click").click(function(e) {
-                    if (!pm.hasClass(css.disabled)) {
-                      self.addMonth(-1);
-                    }
-                    return false;
-                });
-
-                nm = root.find("#" + css.next).off("click").click(function(e) {
-                    if (!nm.hasClass(css.disabled)) {
-                        self.addMonth();
-                    }
-                    return false;
-                });
-
-                // set date
-                self.setValue(value);
-
-                // show calendar
-                var pos = input.offset();
-
-                // iPad position fix
-                if (/iPad/i.test(navigator.userAgent)) {
-                    pos.top -= $(window).scrollTop();
-                }
-
-                root.css({
-                    top: pos.top + input.outerHeight(true) + conf.offset[0],
-                    left: pos.left + conf.offset[1]
-                });
-
-                if (conf.speed) {
-                    root.show(conf.speed, function() {
-                        onShow(e);
-                    });
-                } else {
-                    root.show();
-                    onShow(e);
-                }
-
-                return self;
-            },
+        
+				// prev / next month
+				pm = root.find("#" + css.prev).off("click").click(function(e) {
+					if (!pm.hasClass(css.disabled)) {	
+					  self.addMonth(-1);
+					}
+					return false;
+				});
+				
+				nm = root.find("#" + css.next).off("click").click(function(e) {
+					if (!nm.hasClass(css.disabled)) {
+						self.addMonth();
+					}
+					return false;
+				});	 
+				
+				// set date
+				self.setValue(value);				 
+				
+				// show calendar
+				var pos = input.offset();
+
+				// iPad position fix
+				if (/iPad/i.test(navigator.userAgent)) {
+					pos.top -= $(window).scrollTop();
+				}
+				
+				root.css({ 
+					top: pos.top + input.outerHeight(true) + conf.offset[0], 
+					left: pos.left + conf.offset[1] 
+				});
+				
+				if (conf.speed) {
+					root.show(conf.speed, function() {
+						onShow(e);			
+					});	
+				} else {
+					root.show();
+					onShow(e);
+				}
+				
+				return self;
+			}, 
 
       /**
       *   @public
       *
       *   Set the value of the dateinput
       */
-            setValue: function(year, month, day)  {
-
-                var date = integer(month) >= -1 ? new Date(integer(year), integer(month), integer(day == undefined || isNaN(day) ? 1 : day)) :
-                    year || value;
-
-                if (date < min) { date = min; }
-                else if (date > max) { date = max; }
-
-                // date given as ISO string
-                if (typeof year == 'string') { date = parseDate(year); }
-
-                year = date.getFullYear();
-                month = date.getMonth();
-                day = date.getDate();
-
-
-                // roll year & month
-                if (month == -1) {
-                    month = 11;
-                    year--;
-                } else if (month == 12) {
-                    month = 0;
-                    year++;
-                }
-
-                if (!opened) {
-                    select(date, conf);
-                    return self;
-                }
-
-                currMonth = month;
-                currYear = year;
-                currDay = day;
-
-                // variables
-                var tmp = new Date(year, month, 1 - conf.firstDay), begin = tmp.getDay(),
-                     days = dayAm(year, month),
-                     prevDays = dayAm(year, month - 1),
-                     week;
-
-                // selectors
-                if (conf.selectors) {
-
-                    // month selector
-                    monthSelector.empty();
-                    $.each(labels.months, function(i, m) {
-                        if (min < new Date(year, i + 1, 1) && max > new Date(year, i, 0)) {
-                            monthSelector.append($("<option/>").html(m).attr("value", i));
-                        }
-                    });
-
-                    // year selector
-                    yearSelector.empty();
-                    var yearNow = now.getFullYear();
-
-                    for (var i = yearNow + conf.yearRange[0];  i < yearNow + conf.yearRange[1]; i++) {
-                        if (min < new Date(i + 1, 0, 1) && max > new Date(i, 0, 0)) {
-                            yearSelector.append($("<option/>").text(i));
-                        }
-                    }
-
-                    monthSelector.val(month);
-                    yearSelector.val(year);
-
-                // title
-                } else {
-                    title.html(labels.months[month] + " " + year);
-                }
-
-                // populate weeks
-                weeks.empty();
-                pm.add(nm).removeClass(css.disabled);
-
-                // !begin === "sunday"
-                for (var j = !begin ? -7 : 0, a, num; j < (!begin ? 35 : 42); j++) {
-
-                    a = $("<a/>");
-
-                    if (j % 7 === 0) {
-                        week = $("<div/>").addClass(css.week);
-                        weeks.append(week);
-                    }
-
-                    if (j < begin)  {
-                        a.addClass(css.off);
-                        num = prevDays - begin + j + 1;
-                        date = new Date(year, month-1, num);
-
-                    } else if (j >= begin + days)  {
-                        a.addClass(css.off);
-                        num = j - days - begin + 1;
-                        date = new Date(year, month+1, num);
-
-                    } else  {
-                        num = j - begin + 1;
-                        date = new Date(year, month, num);
-
-                        // current date
-                        if (isSameDay(value, date)) {
-                            a.attr("id", css.current).addClass(css.focus);
-
-                        // today
-                        } else if (isSameDay(now, date)) {
-                            a.attr("id", css.today);
-                        }
-                    }
-
-                    // disabled
-                    if (min && date < min) {
-                        a.add(pm).addClass(css.disabled);
-                    }
-
-                    if (max && date > max) {
-                        a.add(nm).addClass(css.disabled);
-                    }
-
-                    a.attr("href", "#" + num).text(num).data("date", date);
-
-                    week.append(a);
-                }
-
-                // date picking
-                weeks.find("a").click(function(e) {
-                    var el = $(this);
-                    if (!el.hasClass(css.disabled)) {
-                        $("#" + css.current).removeAttr("id");
-                        el.attr("id", css.current);
-                        select(el.data("date"), conf, e);
-                    }
-                    return false;
-                });
-
-                // sunday
-                if (css.sunday) {
-                    weeks.find("." + css.week).each(function() {
-                        var beg = conf.firstDay ? 7 - conf.firstDay : 0;
-                        $(this).children().slice(beg, beg + 1).addClass(css.sunday);
-                    });
-                }
-
-                return self;
-            },
-    //}}}
-
-            setMin: function(val, fit) {
-                min = parseDate(val);
-                if (fit && value < min) { self.setValue(min); }
-                return self;
-            },
-
-            setMax: function(val, fit) {
-                max = parseDate(val);
-                if (fit && value > max) { self.setValue(max); }
-                return self;
-            },
-
-            today: function() {
-                return self.setValue(now);
-            },
-
-            addDay: function(amount) {
-                return this.setValue(currYear, currMonth, currDay + (amount || 1));
-            },
-
-            addMonth: function(amount) {
-              var targetMonth        = currMonth + (amount || 1),
+			setValue: function(year, month, day)  {
+				
+				var date = integer(month) >= -1 ? new Date(integer(year), integer(month), integer(day == undefined || isNaN(day) ? 1 : day)) : 
+					year || value;				
+
+				if (date < min) { date = min; }
+				else if (date > max) { date = max; }
+
+				// date given as ISO string
+				if (typeof year == 'string') { date = parseDate(year); }
+				
+				year = date.getFullYear();
+				month = date.getMonth();
+				day = date.getDate(); 
+				
+				
+				// roll year & month
+				if (month == -1) {
+					month = 11;
+					year--;
+				} else if (month == 12) {
+					month = 0;
+					year++;
+				} 
+				
+				if (!opened) { 
+					select(date, conf);
+					return self; 
+				} 				
+				
+				currMonth = month;
+				currYear = year;
+				currDay = day;
+
+				// variables
+				var tmp = new Date(year, month, 1 - conf.firstDay), begin = tmp.getDay(),
+					 days = dayAm(year, month),
+					 prevDays = dayAm(year, month - 1),
+					 week;	 
+				
+				// selectors
+				if (conf.selectors) { 
+					
+					// month selector
+					monthSelector.empty();
+					$.each(labels.months, function(i, m) {					
+						if (min < new Date(year, i + 1, 1) && max > new Date(year, i, 0)) {
+							monthSelector.append($("<option/>").html(m).attr("value", i));
+						}
+					});
+					
+					// year selector
+					yearSelector.empty();		
+					var yearNow = now.getFullYear();
+					
+					for (var i = yearNow + conf.yearRange[0];  i < yearNow + conf.yearRange[1]; i++) {
+						if (min < new Date(i + 1, 0, 1) && max > new Date(i, 0, 0)) {
+							yearSelector.append($("<option/>").text(i));
+						}
+					}		
+					
+					monthSelector.val(month);
+					yearSelector.val(year);
+					
+				// title
+				} else {
+					title.html(labels.months[month] + " " + year);	
+				} 	   
+					 
+				// populate weeks
+				weeks.empty();				
+				pm.add(nm).removeClass(css.disabled); 
+				
+				// !begin === "sunday"
+				for (var j = !begin ? -7 : 0, a, num; j < (!begin ? 35 : 42); j++) { 
+					
+					a = $("<a/>");
+					
+					if (j % 7 === 0) {
+						week = $("<div/>").addClass(css.week);
+						weeks.append(week);			
+					}					
+					
+					if (j < begin)  { 
+						a.addClass(css.off); 
+						num = prevDays - begin + j + 1;
+						date = new Date(year, month-1, num);
+						
+					} else if (j >= begin + days)  {
+						a.addClass(css.off);	
+						num = j - days - begin + 1;
+						date = new Date(year, month+1, num);
+						
+					} else  { 
+						num = j - begin + 1;
+						date = new Date(year, month, num);  
+						
+						// current date
+						if (isSameDay(value, date)) {
+							a.attr("id", css.current).addClass(css.focus);
+							
+						// today
+						} else if (isSameDay(now, date)) {
+							a.attr("id", css.today);
+						}	 
+					}
+					
+					// disabled
+					if (min && date < min) {
+						a.add(pm).addClass(css.disabled);						
+					}
+					
+					if (max && date > max) {
+						a.add(nm).addClass(css.disabled);						
+					}
+					
+					a.attr("href", "#" + num).text(num).data("date", date);					
+					
+					week.append(a);
+				}
+				
+				// date picking					
+				weeks.find("a").click(function(e) {
+					var el = $(this); 
+					if (!el.hasClass(css.disabled)) {  
+						$("#" + css.current).removeAttr("id");
+						el.attr("id", css.current);	 
+						select(el.data("date"), conf, e);
+					}
+					return false;
+				});
+
+				// sunday
+				if (css.sunday) {
+					weeks.find("." + css.week).each(function() {
+						var beg = conf.firstDay ? 7 - conf.firstDay : 0;
+						$(this).children().slice(beg, beg + 1).addClass(css.sunday);		
+					});	
+				} 
+				
+				return self;
+			}, 
+	//}}}
+	
+			setMin: function(val, fit) {
+				min = parseDate(val);
+				if (fit && value < min) { self.setValue(min); }
+				return self;
+			},
+		
+			setMax: function(val, fit) {
+				max = parseDate(val);
+				if (fit && value > max) { self.setValue(max); }
+				return self;
+			}, 
+			
+			today: function() {
+				return self.setValue(now);	
+			},
+			
+			addDay: function(amount) {
+				return this.setValue(currYear, currMonth, currDay + (amount || 1));		
+			},
+			
+			addMonth: function(amount) {
+			  var targetMonth        = currMonth + (amount || 1),
             daysInTargetMonth  = dayAm(currYear, targetMonth),
             targetDay          = currDay <= daysInTargetMonth ? currDay : daysInTargetMonth;
-
+       
         return this.setValue(currYear, targetMonth, targetDay);
-            },
-
-            addYear: function(amount) {
-                return this.setValue(currYear + (amount || 1), currMonth, currDay);
-            },
-
-            destroy: function() {
-                input.add(document).off("click.d keydown.d");
-                root.add(trigger).remove();
-                input.removeData("dateinput").removeClass(css.input);
-                if (original)  { input.replaceWith(original); }
-            },
-
-            hide: function(e) {
-
-                if (opened) {
-
-                    // onHide
-                    e = $.Event();
-                    e.type = "onHide";
-                    fire.trigger(e);
-
-                    // cancelled ?
-                    if (e.isDefaultPrevented()) { return; }
-
-                    $(document).off("click.d keydown.d");
-
-                    // do the hide
-                    root.hide();
-                    opened = false;
-                }
-
-                return self;
-            },
-
-            toggle: function(){
-              return self.isOpen() ? self.hide() : self.show();
-            },
-
-            getConf: function() {
-                return conf;
-            },
-
-            getInput: function() {
-                return input;
-            },
-
-            getCalendar: function() {
-                return root;
-            },
-
-            getValue: function(dateFormat) {
-                return dateFormat ? format(conf.formatter, value, dateFormat, conf.lang) : value;
-            },
-
-            isOpen: function() {
-                return opened;
-            }
-
-        });
-
-        // callbacks
-        $.each(['onBeforeShow','onShow','change','onHide'], function(i, name) {
-
-            // configuration
-            if ($.isFunction(conf[name]))  {
-                $(self).on(name, conf[name]);
-            }
-
-            // API methods
-            self[name] = function(fn) {
-                if (fn) { $(self).on(name, fn); }
-                return self;
-            };
-        });
-
-        if (!conf.editable) {
-
-            // show dateinput & assign keyboard shortcuts
-            input.on("focus.d click.d", self.show).keydown(function(e) {
-
-                var key = e.keyCode;
-
-                // open dateinput with navigation keyw
-                if (!opened &&  $(KEYS).index(key) >= 0) {
-                    self.show(e);
-                    return e.preventDefault();
-
-            // clear value on backspace or delete
-            } else if (key == 8 || key == 46) {
-                input.val("");
-                }
-
-                // allow tab
-                return e.shiftKey || e.ctrlKey || e.altKey || key == 9 ? true : e.preventDefault();
-
-            });
-        }
-
-        // initial value
-        if (parseDate(input.val())) {
-            select(value, conf);
-        }
-
-    }
-
-    $.expr[':'].date = function(el) {
-        var type = el.getAttribute("type");
-        return type && type == 'date' || !!$(el).data("dateinput");
-    };
-
-
-    $.fn.dateinput = function(conf) {
-
-        // already instantiated
-        if (this.data("dateinput")) { return this; }
-
-        // configuration
-        conf = $.extend(true, {}, tool.conf, conf);
-
-        // CSS prefix
-        $.each(conf.css, function(key, val) {
-            if (!val && key != 'prefix') {
-                conf.css[key] = (conf.css.prefix || '') + (val || key);
-            }
-        });
-
-        var els;
-
-        this.each(function() {
-            var el = new Dateinput($(this), conf);
-            instances.push(el);
-            var input = el.getInput().data("dateinput", el);
-            els = els ? els.add(input) : input;
-        });
-
-        return els ? els : this;
-    };
-
-
+			},
+			
+			addYear: function(amount) {
+				return this.setValue(currYear + (amount || 1), currMonth, currDay);	
+			},						
+			
+			destroy: function() {
+				input.add(document).off("click.d keydown.d");
+				root.add(trigger).remove();
+				input.removeData("dateinput").removeClass(css.input);
+				if (original)  { input.replaceWith(original); }
+			},
+			
+			hide: function(e) {				 
+				
+				if (opened) {  
+					
+					// onHide 
+					e = $.Event();
+					e.type = "onHide";
+					fire.trigger(e);
+					
+					// cancelled ?
+					if (e.isDefaultPrevented()) { return; }
+					
+					$(document).off("click.d keydown.d");
+										
+					// do the hide
+					root.hide();
+					opened = false;
+				}
+				
+				return self;
+			},
+			
+			toggle: function(){
+			  return self.isOpen() ? self.hide() : self.show();
+			},
+			
+			getConf: function() {
+				return conf;	
+			},
+			
+			getInput: function() {
+				return input;	
+			},
+			
+			getCalendar: function() {
+				return root;	
+			},
+			
+			getValue: function(dateFormat) {
+				return dateFormat ? format(conf.formatter, value, dateFormat, conf.lang) : value;	
+			},
+			
+			isOpen: function() {
+				return opened;	
+			}
+			
+		}); 
+		
+		// callbacks	
+		$.each(['onBeforeShow','onShow','change','onHide'], function(i, name) {
+				
+			// configuration
+			if ($.isFunction(conf[name]))  {
+				$(self).on(name, conf[name]);	
+			}
+			
+			// API methods				
+			self[name] = function(fn) {
+				if (fn) { $(self).on(name, fn); }
+				return self;
+			};
+		});
+
+		if (!conf.editable) {
+			
+			// show dateinput & assign keyboard shortcuts
+			input.on("focus.d click.d", self.show).keydown(function(e) {
+	
+				var key = e.keyCode;
+		
+				// open dateinput with navigation keyw
+				if (!opened &&  $(KEYS).index(key) >= 0) {
+					self.show(e);
+					return e.preventDefault();
+			
+			// clear value on backspace or delete
+			} else if (key == 8 || key == 46) {
+				input.val("");
+				} 
+				
+				// allow tab
+				return e.shiftKey || e.ctrlKey || e.altKey || key == 9 ? true : e.preventDefault();   
+				
+			});
+		}
+		
+		// initial value 		
+		if (parseDate(input.val())) {
+			select(value, conf);
+		}
+		
+	} 
+	
+	$.expr[':'].date = function(el) {
+		var type = el.getAttribute("type");
+		return type && type == 'date' || !!$(el).data("dateinput");
+	};
+	
+	
+	$.fn.dateinput = function(conf) {   
+		
+		// already instantiated
+		if (this.data("dateinput")) { return this; } 
+		
+		// configuration
+		conf = $.extend(true, {}, tool.conf, conf);		
+		
+		// CSS prefix
+		$.each(conf.css, function(key, val) {
+			if (!val && key != 'prefix') { 
+				conf.css[key] = (conf.css.prefix || '') + (val || key);
+			}
+		});		
+	
+		var els;
+		
+		this.each(function() {									
+			var el = new Dateinput($(this), conf);
+			instances.push(el);
+			var input = el.getInput().data("dateinput", el);
+			els = els ? els.add(input) : input;	
+		});		
+	
+		return els ? els : this;		
+	}; 
+	
+	
 }) (jQuery);
-
-
+ 
+	
diff --git a/plone/app/jquerytools/browser/jquery.tools.js b/plone/app/jquerytools/browser/jquery.tools.js
index 13f30b2..89dce6a 100644
--- a/plone/app/jquerytools/browser/jquery.tools.js
+++ b/plone/app/jquerytools/browser/jquery.tools.js
@@ -1659,6 +1659,10 @@
 	
 	// jQuery plugin implementation
 	$.fn.tooltip = function(conf) {
+		
+		// return existing instance
+		var api = this.data("tooltip");
+		if (api) { return api; }
 
 		conf = $.extend(true, {}, $.tools.tooltip.conf, conf);
 		
@@ -1668,12 +1672,9 @@
 		}
 		
 		// install tooltip for each entry in jQuery object
-		// that is not an existing instance
 		this.each(function() {
-			if ( $(this).data("tooltip")===null){
-			    api = new Tooltip($(this), conf);
-			    $(this).data("tooltip", api);
-			};
+			api = new Tooltip($(this), conf); 
+			$(this).data("tooltip", api); 
 		});
 		
 		return conf.api ? api: this;		 
diff --git a/plone/app/jquerytools/browser/jquery.tools.min.js b/plone/app/jquerytools/browser/jquery.tools.min.js
index 442d8b8..4d2e5c5 100644
--- a/plone/app/jquerytools/browser/jquery.tools.min.js
+++ b/plone/app/jquerytools/browser/jquery.tools.min.js
@@ -1 +1 @@
-!function($){function Overlay(trigger,conf){var closers,overlay,opened,self=this,fire=trigger.add(self),w=$(window),maskConf=$.tools.expose&&(conf.mask||conf.expose),uid=Math.random().toString().slice(10);maskConf&&("string"==typeof maskConf&&(maskConf={color:maskConf}),maskConf.closeOnClick=maskConf.closeOnEsc=!1);var jq=conf.target||trigger.attr("rel");if(overlay=jq?$(jq):null||trigger,!overlay.length)throw"Could not find Overlay: "+jq;trigger&&-1==trigger.index(overlay)&&trigger.click(function(e){return self.load(e),e.preventDefault()}),$.extend(self,{load:function(e){if(self.isOpened())return self;var eff=effects[conf.effect];if(!eff)throw'Overlay: cannot find effect : "'+conf.effect+'"';if(conf.oneInstance&&$.each(instances,function(){this.close(e)}),e=e||$.Event(),e.type="onBeforeLoad",fire.trigger(e),e.isDefaultPrevented())return self;opened=!0,maskConf&&$(overlay).expose(maskConf);var top=conf.top,left=conf.left,oWidth=overlay.outerWidth(!0),oHeight=overlay.outerHeight(!0);return"string"==typeof top&&(top="center"==top?Math.max((w.height()-oHeight)/2,0):parseInt(top,10)/100*w.height()),"center"==left&&(left=Math.max((w.width()-oWidth)/2,0)),eff[0].call(self,{top:top,left:left},function(){opened&&(e.type="onLoad",fire.trigger(e))}),maskConf&&conf.closeOnClick&&$.mask.getMask().one("click",self.close),conf.closeOnClick&&$(document).on("click."+uid,function(e){$(e.target).parents(overlay).length||self.close(e)}),conf.closeOnEsc&&$(document).on("keydown."+uid,function(e){27==e.keyCode&&self.close(e)}),self},close:function(e){return self.isOpened()?(e=e||$.Event(),e.type="onBeforeClose",fire.trigger(e),e.isDefaultPrevented()?void 0:(opened=!1,effects[conf.effect][1].call(self,function(){e.type="onClose",fire.trigger(e)}),$(document).off("click."+uid+" keydown."+uid),maskConf&&$.mask.close(),self)):self},getOverlay:function(){return overlay},getTrigger:function(){return trigger},getClosers:function(){return closers},isOpened:function(){return opened},getConf:function(){return conf}}),$.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(i,name){$.isFunction(conf[name])&&$(self).on(name,conf[name]),self[name]=function(fn){return fn&&$(self).on(name,fn),self}}),closers=overlay.find(conf.close||".close"),closers.length||conf.close||(closers=$('<a class="close"></a>'),overlay.prepend(closers)),closers.click(function(e){self.close(e)}),conf.load&&self.load()}$.tools=$.tools||{version:"@VERSION"},$.tools.overlay={addEffect:function(name,loadFn,closeFn){effects[name]=[loadFn,closeFn]},conf:{close:null,closeOnClick:!0,closeOnEsc:!0,closeSpeed:"fast",effect:"default",fixed:!/msie/.test(navigator.userAgent.toLowerCase())||navigator.appVersion>6,left:"center",load:!1,mask:null,oneInstance:!0,speed:"normal",target:null,top:"10%"}};var instances=[],effects={};$.tools.overlay.addEffect("default",function(pos,onLoad){var conf=this.getConf(),w=$(window);conf.fixed||(pos.top+=w.scrollTop(),pos.left+=w.scrollLeft()),pos.position=conf.fixed?"fixed":"absolute",this.getOverlay().css(pos).fadeIn(conf.speed,onLoad)},function(onClose){this.getOverlay().fadeOut(this.getConf().closeSpeed,onClose)}),$.fn.overlay=function(conf){var el=this.data("overlay");return el?el:($.isFunction(conf)&&(conf={onBeforeLoad:conf}),conf=$.extend(!0,{},$.tools.overlay.conf,conf),this.each(function(){el=new Overlay($(this),conf),instances.push(el),$(this).data("overlay",el)}),conf.api?el:this)}}(jQuery),function($){function find(root,query){var el=$(query);return el.length<2?el:root.parent().find(query)}function Scrollable(root,conf){var self=this,fire=root.add(self),itemWrap=root.children(),index=0,vertical=conf.vertical;if(current||(current=self),itemWrap.length>1&&(itemWrap=$(conf.items,root)),conf.size>1&&(conf.circular=!1),$.extend(self,{getConf:function(){return conf},getIndex:function(){return index},getSize:function(){return self.getItems().size()},getNaviButtons:function(){return prev.add(next)},getRoot:function(){return root},getItemWrap:function(){return itemWrap},getItems:function(){return itemWrap.find(conf.item).not("."+conf.clonedClass)},move:function(offset,time){return self.seekTo(index+offset,time)},next:function(time){return self.move(conf.size,time)},prev:function(time){return self.move(-conf.size,time)},begin:function(time){return self.seekTo(0,time)},end:function(time){return self.seekTo(self.getSize()-1,time)},focus:function(){return current=self,self},addItem:function(item){return item=$(item),conf.circular?(itemWrap.children().last().before(item),itemWrap.children().first().replaceWith(item.clone().addClass(conf.clonedClass))):(itemWrap.append(item),next.removeClass("disabled")),fire.trigger("onAddItem",[item]),self},seekTo:function(i,time,fn){if(i.jquery||(i*=1),conf.circular&&0===i&&-1==index&&0!==time)return self;if(!conf.circular&&0>i||i>self.getSize()||-1>i)return self;var item=i;i.jquery?i=self.getItems().index(i):item=self.getItems().eq(i);var e=$.Event("onBeforeSeek");if(!fn&&(fire.trigger(e,[i,time]),e.isDefaultPrevented()||!item.length))return self;var props=vertical?{top:-item.position().top}:{left:-item.position().left};return index=i,current=self,void 0===time&&(time=conf.speed),itemWrap.animate(props,time,conf.easing,fn||function(){fire.trigger("onSeek",[i])}),self}}),$.each(["onBeforeSeek","onSeek","onAddItem"],function(i,name){$.isFunction(conf[name])&&$(self).on(name,conf[name]),self[name]=function(fn){return fn&&$(self).on(name,fn),self}}),conf.circular){var cloned1=self.getItems().slice(-1).clone().prependTo(itemWrap),cloned2=self.getItems().eq(1).clone().appendTo(itemWrap);cloned1.add(cloned2).addClass(conf.clonedClass),self.onBeforeSeek(function(e,i,time){return e.isDefaultPrevented()?void 0:-1==i?(self.seekTo(cloned1,time,function(){self.end(0)}),e.preventDefault()):void(i==self.getSize()&&self.seekTo(cloned2,time,function(){self.begin(0)}))});var hidden_parents=root.parents().add(root).filter(function(){return"none"===$(this).css("display")?!0:void 0});hidden_parents.length?(hidden_parents.show(),self.seekTo(0,0,function(){}),hidden_parents.hide()):self.seekTo(0,0,function(){})}var prev=find(root,conf.prev).click(function(e){e.stopPropagation(),self.prev()}),next=find(root,conf.next).click(function(e){e.stopPropagation(),self.next()});if(conf.circular||(self.onBeforeSeek(function(e,i){setTimeout(function(){e.isDefaultPrevented()||(prev.toggleClass(conf.disabledClass,0>=i),next.toggleClass(conf.disabledClass,i>=self.getSize()-1))},1)}),conf.initialIndex||prev.addClass(conf.disabledClass)),self.getSize()<2&&prev.add(next).addClass(conf.disabledClass),conf.mousewheel&&$.fn.mousewheel&&root.mousewheel(function(e,delta){return conf.mousewheel?(self.move(0>delta?1:-1,conf.wheelSpeed||50),!1):void 0}),conf.touch){var touch={};itemWrap[0].ontouchstart=function(e){var t=e.touches[0];touch.x=t.clientX,touch.y=t.clientY},itemWrap[0].ontouchmove=function(e){if(1==e.touches.length&&!itemWrap.is(":animated")){var t=e.touches[0],deltaX=touch.x-t.clientX,deltaY=touch.y-t.clientY;self[vertical&&deltaY>0||!vertical&&deltaX>0?"next":"prev"](),e.preventDefault()}}}conf.keyboard&&$(document).on("keydown.scrollable",function(evt){if(!(!conf.keyboard||evt.altKey||evt.ctrlKey||evt.metaKey||$(evt.target).is(":input")||"static"!=conf.keyboard&&current!=self)){var key=evt.keyCode;return!vertical||38!=key&&40!=key?vertical||37!=key&&39!=key?void 0:(self.move(37==key?-1:1),evt.preventDefault()):(self.move(38==key?-1:1),evt.preventDefault())}}),conf.initialIndex&&self.seekTo(conf.initialIndex,0,function(){})}$.tools=$.tools||{version:"@VERSION"},$.tools.scrollable={conf:{activeClass:"active",circular:!1,clonedClass:"cloned",disabledClass:"disabled",easing:"swing",initialIndex:0,item:"> *",items:".items",keyboard:!0,mousewheel:!1,next:".next",prev:".prev",size:1,speed:400,vertical:!1,touch:!0,wheelSpeed:0}};var current;$.fn.scrollable=function(conf){var el=this.data("scrollable");return el?el:(conf=$.extend({},$.tools.scrollable.conf,conf),this.each(function(){el=new Scrollable($(this),conf),$(this).data("scrollable",el)}),conf.api?el:this)}}(jQuery),function($){function Tabs(root,paneSelector,conf){var current,self=this,trigger=root.add(this),tabs=root.find(conf.tabs),panes=paneSelector.jquery?paneSelector:root.children(paneSelector);tabs.length||(tabs=root.children()),panes.length||(panes=root.parent().find(paneSelector)),panes.length||(panes=$(paneSelector)),$.extend(this,{click:function(i,e){var tab=tabs.eq(i),firstRender=!root.data("tabs");if("string"==typeof i&&i.replace("#","")&&(tab=tabs.filter('[href*="'+i.replace("#","")+'"]'),i=Math.max(tabs.index(tab),0)),conf.rotate){var last=tabs.length-1;if(0>i)return self.click(last,e);if(i>last)return self.click(0,e)}if(!tab.length){if(current>=0)return self;i=conf.initialIndex,tab=tabs.eq(i)}if(i===current)return self;if(e=e||$.Event(),e.type="onBeforeClick",trigger.trigger(e,[i]),!e.isDefaultPrevented()){var effect=firstRender?conf.initialEffect&&conf.effect||"default":conf.effect;return effects[effect].call(self,i,function(){current=i,e.type="onClick",trigger.trigger(e,[i])}),tabs.removeClass(conf.current),tab.addClass(conf.current),self}},getConf:function(){return conf},getTabs:function(){return tabs},getPanes:function(){return panes},getCurrentPane:function(){return panes.eq(current)},getCurrentTab:function(){return tabs.eq(current)},getIndex:function(){return current},next:function(){return self.click(current+1)},prev:function(){return self.click(current-1)},destroy:function(){return tabs.off(conf.event).removeClass(conf.current),panes.find('a[href^="#"]').off("click.T"),self}}),$.each("onBeforeClick,onClick".split(","),function(i,name){$.isFunction(conf[name])&&$(self).on(name,conf[name]),self[name]=function(fn){return fn&&$(self).on(name,fn),self}}),conf.history&&$.fn.history&&($.tools.history.init(tabs),conf.event="history"),tabs.each(function(i){$(this).on(conf.event,function(e){return self.click(i,e),e.preventDefault()})}),panes.find('a[href^="#"]').on("click.T",function(e){self.click($(this).attr("href"),e)}),location.hash&&"a"==conf.tabs&&root.find('[href="'+location.hash+'"]').length?self.click(location.hash):(0===conf.initialIndex||conf.initialIndex>0)&&self.click(conf.initialIndex)}$.tools=$.tools||{version:"@VERSION"},$.tools.tabs={conf:{tabs:"a",current:"current",onBeforeClick:null,onClick:null,effect:"default",initialEffect:!1,initialIndex:0,event:"click",rotate:!1,slideUpSpeed:400,slideDownSpeed:400,history:!1},addEffect:function(name,fn){effects[name]=fn}};var animating,w,effects={"default":function(i,done){this.getPanes().hide().eq(i).show(),done.call()},fade:function(i,done){var conf=this.getConf(),speed=conf.fadeOutSpeed,panes=this.getPanes();speed?panes.fadeOut(speed):panes.hide(),panes.eq(i).fadeIn(conf.fadeInSpeed,done)},slide:function(i,done){var conf=this.getConf();this.getPanes().slideUp(conf.slideUpSpeed),this.getPanes().eq(i).slideDown(conf.slideDownSpeed,done)},ajax:function(i,done){this.getPanes().eq(0).load(this.getTabs().eq(i).attr("href"),done)}};$.tools.tabs.addEffect("horizontal",function(i,done){if(!animating){var nextPane=this.getPanes().eq(i),currentPane=this.getCurrentPane();w||(w=this.getPanes().eq(0).width()),animating=!0,nextPane.show(),currentPane.animate({width:0},{step:function(now){nextPane.css("width",w-now)},complete:function(){$(this).hide(),done.call(),animating=!1}}),currentPane.length||(done.call(),animating=!1)}}),$.fn.tabs=function(paneSelector,conf){var el=this.data("tabs");return el&&(el.destroy(),this.removeData("tabs")),$.isFunction(conf)&&(conf={onBeforeClick:conf}),conf=$.extend({},$.tools.tabs.conf,conf),this.each(function(){el=new Tabs($(this),paneSelector,conf),$(this).data("tabs",el)}),conf.api?el:this}}(jQuery),function($){function setIframeLocation(h){if(h){var doc=iframe.contentWindow.document;doc.open().close(),doc.location.hash=h}}var hash,iframe,links,inited;$.tools=$.tools||{version:"@VERSION"},$.tools.history={init:function(els){inited||($.browser.msie&&$.browser.version<"8"?iframe||(iframe=$("<iframe/>").attr("src","javascript:false;").hide().get(0),$("body").append(iframe),setInterval(function(){var idoc=iframe.contentWindow.document,h=idoc.location.hash;hash!==h&&$(window).trigger("hash",h)},100),setIframeLocation(location.hash||"#")):setInterval(function(){var h=location.hash;h!==hash&&$(window).trigger("hash",h)},100),links=links?links.add(els):els,els.click(function(e){var href=$(this).attr("href");return iframe&&setIframeLocation(href),"#"!=href.slice(0,1)?(location.href="#"+href,e.preventDefault()):void 0}),inited=!0)}},$(window).on("hash",function(e,h){h?links.filter(function(){var href=$(this).attr("href");return href==h||href==h.replace("#","")}).trigger("history",[h]):links.eq(0).trigger("history",[h]),hash=h}),$.fn.history=function(fn){return $.tools.history.init(this),this.on("history",fn)}}(jQuery),function($){function viewport(){if(/msie/.test(navigator.userAgent.toLowerCase())){var d=$(document).height(),w=$(window).height();return[window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,20>d-w?w:d]}return[$(document).width(),$(document).height()]}function call(fn){return fn?fn.call($.mask):void 0}$.tools=$.tools||{version:"@VERSION"};var tool;tool=$.tools.expose={conf:{maskId:"exposeMask",loadSpeed:"slow",closeSpeed:"fast",closeOnClick:!0,closeOnEsc:!0,zIndex:9998,opacity:.8,startOpacity:0,color:"#fff",onLoad:null,onClose:null}};var mask,exposed,loaded,config,overlayIndex;$.mask={load:function(conf,els){if(loaded)return this;"string"==typeof conf&&(conf={color:conf}),conf=conf||config,config=conf=$.extend($.extend({},tool.conf),conf),mask=$("#"+conf.maskId),mask.length||(mask=$("<div/>").attr("id",conf.maskId),$("body").append(mask));var size=viewport();return mask.css({position:"absolute",top:0,left:0,width:size[0],height:size[1],display:"none",opacity:conf.startOpacity,zIndex:conf.zIndex}),conf.color&&mask.css("backgroundColor",conf.color),call(conf.onBeforeLoad)===!1?this:(conf.closeOnEsc&&$(document).on("keydown.mask",function(e){27==e.keyCode&&$.mask.close(e)}),conf.closeOnClick&&mask.on("click.mask",function(e){$.mask.close(e)}),$(window).on("resize.mask",function(){$.mask.fit()}),els&&els.length&&(overlayIndex=els.eq(0).css("zIndex"),$.each(els,function(){var el=$(this);/relative|absolute|fixed/i.test(el.css("position"))||el.css("position","relative")}),exposed=els.css({zIndex:Math.max(conf.zIndex+1,"auto"==overlayIndex?0:overlayIndex)})),mask.css({display:"block"}).fadeTo(conf.loadSpeed,conf.opacity,function(){$.mask.fit(),call(conf.onLoad),loaded="full"}),loaded=!0,this)},close:function(){if(loaded){if(call(config.onBeforeClose)===!1)return this;mask.fadeOut(config.closeSpeed,function(){exposed&&exposed.css({zIndex:overlayIndex}),loaded=!1,call(config.onClose)}),$(document).off("keydown.mask"),mask.off("click.mask"),$(window).off("resize.mask")}return this},fit:function(){if(loaded){var size=viewport();mask.css({width:size[0],height:size[1]})}},getMask:function(){return mask},isLoaded:function(fully){return fully?"full"==loaded:loaded},getConf:function(){return config},getExposed:function(){return exposed}},$.fn.mask=function(conf){return $.mask.load(conf),this},$.fn.expose=function(conf){return $.mask.load(conf,this),this}}(jQuery),function($){function getPosition(trigger,tip,conf){var top=conf.relative?trigger.position().top:trigger.offset().top,left=conf.relative?trigger.position().left:trigger.offset().left,pos=conf.position[0];top-=tip.outerHeight()-conf.offset[0],left+=trigger.outerWidth()+conf.offset[1],/iPad/i.test(navigator.userAgent)&&(top-=$(window).scrollTop());var height=tip.outerHeight()+trigger.outerHeight();"center"==pos&&(top+=height/2),"bottom"==pos&&(top+=height),pos=conf.position[1];var width=tip.outerWidth()+trigger.outerWidth();return"center"==pos&&(left-=width/2),"left"==pos&&(left-=width),{top:top,left:left}}function Tooltip(trigger,conf){var tip,shown,self=this,fire=trigger.add(self),timer=0,pretimer=0,title=trigger.attr("title"),tipAttr=trigger.attr("data-tooltip"),effect=effects[conf.effect],isInput=trigger.is(":input"),isWidget=isInput&&trigger.is(":checkbox, :radio, select, :button, :submit"),type=trigger.attr("type"),evt=conf.events[type]||conf.events[isInput?isWidget?"widget":"input":"def"];if(!effect)throw'Nonexistent effect "'+conf.effect+'"';if(evt=evt.split(/,\s*/),2!=evt.length)throw"Tooltip: bad events configuration for "+type;trigger.on(evt[0],function(e){clearTimeout(timer),conf.predelay?pretimer=setTimeout(function(){self.show(e)},conf.predelay):self.show(e)}).on(evt[1],function(e){clearTimeout(pretimer),conf.delay?timer=setTimeout(function(){self.hide(e)},conf.delay):self.hide(e)}),title&&conf.cancelDefault&&(trigger.removeAttr("title"),trigger.data("title",title)),$.extend(self,{show:function(e){if(!tip&&(tipAttr?tip=$(tipAttr):conf.tip?tip=$(conf.tip).eq(0):title?tip=$(conf.layout).addClass(conf.tipClass).appendTo(document.body).hide().append(title):(tip=trigger.find("."+conf.tipClass),tip.length||(tip=trigger.next()),tip.length||(tip=trigger.parent().next())),!tip.length))throw"Cannot find tooltip for "+trigger;if(self.isShown())return self;tip.stop(!0,!0);var pos=getPosition(trigger,tip,conf);if(conf.tip&&tip.html(trigger.data("title")),e=$.Event(),e.type="onBeforeShow",fire.trigger(e,[pos]),e.isDefaultPrevented())return self;pos=getPosition(trigger,tip,conf),tip.css({position:"absolute",top:pos.top,left:pos.left}),shown=!0,effect[0].call(self,function(){e.type="onShow",shown="full",fire.trigger(e)});var event=conf.events.tooltip.split(/,\s*/);return tip.data("__set")||(tip.off(event[0]).on(event[0],function(){clearTimeout(timer),clearTimeout(pretimer)}),event[1]&&!trigger.is("input:not(:checkbox, :radio), textarea")&&tip.off(event[1]).on(event[1],function(e){e.relatedTarget!=trigger[0]&&trigger.trigger(evt[1].split(" ")[0])}),conf.tip||tip.data("__set",!0)),self},hide:function(e){return tip&&self.isShown()?(e=$.Event(),e.type="onBeforeHide",fire.trigger(e),e.isDefaultPrevented()?void 0:(shown=!1,effects[conf.effect][1].call(self,function(){e.type="onHide",fire.trigger(e)}),self)):self},isShown:function(fully){return fully?"full"==shown:shown},getConf:function(){return conf},getTip:function(){return tip},getTrigger:function(){return trigger}}),$.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","),function(i,name){$.isFunction(conf[name])&&$(self).on(name,conf[name]),self[name]=function(fn){return fn&&$(self).on(name,fn),self}})}$.tools=$.tools||{version:"@VERSION"},$.tools.tooltip={conf:{effect:"toggle",fadeOutSpeed:"fast",predelay:0,delay:30,opacity:1,tip:0,fadeIE:!1,position:["top","center"],offset:[0,0],relative:!1,cancelDefault:!0,events:{def:"mouseenter,mouseleave",input:"focus,blur",widget:"focus mouseenter,blur mouseleave",tooltip:"mouseenter,mouseleave"},layout:"<div/>",tipClass:"tooltip"},addEffect:function(name,loadFn,hideFn){effects[name]=[loadFn,hideFn]}};var effects={toggle:[function(done){var conf=this.getConf(),tip=this.getTip(),o=conf.opacity;1>o&&tip.css({opacity:o}),tip.show(),done.call()},function(done){this.getTip().hide(),done.call()}],fade:[function(done){var conf=this.getConf();!/msie/.test(navigator.userAgent.toLowerCase())||conf.fadeIE?this.getTip().fadeTo(conf.fadeInSpeed,conf.opacity,done):(this.getTip().show(),done())},function(done){var conf=this.getConf();!/msie/.test(navigator.userAgent.toLowerCase())||conf.fadeIE?this.getTip().fadeOut(conf.fadeOutSpeed,done):(this.getTip().hide(),done())}]};$.fn.tooltip=function(conf){return conf=$.extend(!0,{},$.tools.tooltip.conf,conf),"string"==typeof conf.position&&(conf.position=conf.position.split(/,?\s/)),this.each(function(){null===$(this).data("tooltip")&&(api=new Tooltip($(this),conf),$(this).data("tooltip",api))}),conf.api?api:this}}(jQuery);
\ No newline at end of file
+!function($){function Overlay(trigger,conf){var closers,overlay,opened,self=this,fire=trigger.add(self),w=$(window),maskConf=$.tools.expose&&(conf.mask||conf.expose),uid=Math.random().toString().slice(10);maskConf&&("string"==typeof maskConf&&(maskConf={color:maskConf}),maskConf.closeOnClick=maskConf.closeOnEsc=!1);var jq=conf.target||trigger.attr("rel");if(overlay=jq?$(jq):null||trigger,!overlay.length)throw"Could not find Overlay: "+jq;trigger&&-1==trigger.index(overlay)&&trigger.click(function(e){return self.load(e),e.preventDefault()}),$.extend(self,{load:function(e){if(self.isOpened())return self;var eff=effects[conf.effect];if(!eff)throw'Overlay: cannot find effect : "'+conf.effect+'"';if(conf.oneInstance&&$.each(instances,function(){this.close(e)}),e=e||$.Event(),e.type="onBeforeLoad",fire.trigger(e),e.isDefaultPrevented())return self;opened=!0,maskConf&&$(overlay).expose(maskConf);var top=conf.top,left=conf.left,oWidth=overlay.outerWidth(!0),oHeight=overlay.outerHeight(!0);return"string"==typeof top&&(top="center"==top?Math.max((w.height()-oHeight)/2,0):parseInt(top,10)/100*w.height()),"center"==left&&(left=Math.max((w.width()-oWidth)/2,0)),eff[0].call(self,{top:top,left:left},function(){opened&&(e.type="onLoad",fire.trigger(e))}),maskConf&&conf.closeOnClick&&$.mask.getMask().one("click",self.close),conf.closeOnClick&&$(document).on("click."+uid,function(e){$(e.target).parents(overlay).length||self.close(e)}),conf.closeOnEsc&&$(document).on("keydown."+uid,function(e){27==e.keyCode&&self.close(e)}),self},close:function(e){return self.isOpened()?(e=e||$.Event(),e.type="onBeforeClose",fire.trigger(e),e.isDefaultPrevented()?void 0:(opened=!1,effects[conf.effect][1].call(self,function(){e.type="onClose",fire.trigger(e)}),$(document).off("click."+uid+" keydown."+uid),maskConf&&$.mask.close(),self)):self},getOverlay:function(){return overlay},getTrigger:function(){return trigger},getClosers:function(){return closers},isOpened:function(){return opened},getConf:function(){return conf}}),$.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(i,name){$.isFunction(conf[name])&&$(self).on(name,conf[name]),self[name]=function(fn){return fn&&$(self).on(name,fn),self}}),closers=overlay.find(conf.close||".close"),closers.length||conf.close||(closers=$('<a class="close"></a>'),overlay.prepend(closers)),closers.click(function(e){self.close(e)}),conf.load&&self.load()}$.tools=$.tools||{version:"@VERSION"},$.tools.overlay={addEffect:function(name,loadFn,closeFn){effects[name]=[loadFn,closeFn]},conf:{close:null,closeOnClick:!0,closeOnEsc:!0,closeSpeed:"fast",effect:"default",fixed:!/msie/.test(navigator.userAgent.toLowerCase())||navigator.appVersion>6,left:"center",load:!1,mask:null,oneInstance:!0,speed:"normal",target:null,top:"10%"}};var instances=[],effects={};$.tools.overlay.addEffect("default",function(pos,onLoad){var conf=this.getConf(),w=$(window);conf.fixed||(pos.top+=w.scrollTop(),pos.left+=w.scrollLeft()),pos.position=conf.fixed?"fixed":"absolute",this.getOverlay().css(pos).fadeIn(conf.speed,onLoad)},function(onClose){this.getOverlay().fadeOut(this.getConf().closeSpeed,onClose)}),$.fn.overlay=function(conf){var el=this.data("overlay");return el?el:($.isFunction(conf)&&(conf={onBeforeLoad:conf}),conf=$.extend(!0,{},$.tools.overlay.conf,conf),this.each(function(){el=new Overlay($(this),conf),instances.push(el),$(this).data("overlay",el)}),conf.api?el:this)}}(jQuery),function($){function find(root,query){var el=$(query);return el.length<2?el:root.parent().find(query)}function Scrollable(root,conf){var self=this,fire=root.add(self),itemWrap=root.children(),index=0,vertical=conf.vertical;if(current||(current=self),itemWrap.length>1&&(itemWrap=$(conf.items,root)),conf.size>1&&(conf.circular=!1),$.extend(self,{getConf:function(){return conf},getIndex:function(){return index},getSize:function(){return self.getItems().size()},getNaviButtons:function(){return prev.add(next)},getRoot:function(){return root},getItemWrap:function(){return itemWrap},getItems:function(){return itemWrap.find(conf.item).not("."+conf.clonedClass)},move:function(offset,time){return self.seekTo(index+offset,time)},next:function(time){return self.move(conf.size,time)},prev:function(time){return self.move(-conf.size,time)},begin:function(time){return self.seekTo(0,time)},end:function(time){return self.seekTo(self.getSize()-1,time)},focus:function(){return current=self,self},addItem:function(item){return item=$(item),conf.circular?(itemWrap.children().last().before(item),itemWrap.children().first().replaceWith(item.clone().addClass(conf.clonedClass))):(itemWrap.append(item),next.removeClass("disabled")),fire.trigger("onAddItem",[item]),self},seekTo:function(i,time,fn){if(i.jquery||(i*=1),conf.circular&&0===i&&-1==index&&0!==time)return self;if(!conf.circular&&0>i||i>self.getSize()||-1>i)return self;var item=i;i.jquery?i=self.getItems().index(i):item=self.getItems().eq(i);var e=$.Event("onBeforeSeek");if(!fn&&(fire.trigger(e,[i,time]),e.isDefaultPrevented()||!item.length))return self;var props=vertical?{top:-item.position().top}:{left:-item.position().left};return index=i,current=self,void 0===time&&(time=conf.speed),itemWrap.animate(props,time,conf.easing,fn||function(){fire.trigger("onSeek",[i])}),self}}),$.each(["onBeforeSeek","onSeek","onAddItem"],function(i,name){$.isFunction(conf[name])&&$(self).on(name,conf[name]),self[name]=function(fn){return fn&&$(self).on(name,fn),self}}),conf.circular){var cloned1=self.getItems().slice(-1).clone().prependTo(itemWrap),cloned2=self.getItems().eq(1).clone().appendTo(itemWrap);cloned1.add(cloned2).addClass(conf.clonedClass),self.onBeforeSeek(function(e,i,time){return e.isDefaultPrevented()?void 0:-1==i?(self.seekTo(cloned1,time,function(){self.end(0)}),e.preventDefault()):void(i==self.getSize()&&self.seekTo(cloned2,time,function(){self.begin(0)}))});var hidden_parents=root.parents().add(root).filter(function(){return"none"===$(this).css("display")?!0:void 0});hidden_parents.length?(hidden_parents.show(),self.seekTo(0,0,function(){}),hidden_parents.hide()):self.seekTo(0,0,function(){})}var prev=find(root,conf.prev).click(function(e){e.stopPropagation(),self.prev()}),next=find(root,conf.next).click(function(e){e.stopPropagation(),self.next()});if(conf.circular||(self.onBeforeSeek(function(e,i){setTimeout(function(){e.isDefaultPrevented()||(prev.toggleClass(conf.disabledClass,0>=i),next.toggleClass(conf.disabledClass,i>=self.getSize()-1))},1)}),conf.initialIndex||prev.addClass(conf.disabledClass)),self.getSize()<2&&prev.add(next).addClass(conf.disabledClass),conf.mousewheel&&$.fn.mousewheel&&root.mousewheel(function(e,delta){return conf.mousewheel?(self.move(0>delta?1:-1,conf.wheelSpeed||50),!1):void 0}),conf.touch){var touch={};itemWrap[0].ontouchstart=function(e){var t=e.touches[0];touch.x=t.clientX,touch.y=t.clientY},itemWrap[0].ontouchmove=function(e){if(1==e.touches.length&&!itemWrap.is(":animated")){var t=e.touches[0],deltaX=touch.x-t.clientX,deltaY=touch.y-t.clientY;self[vertical&&deltaY>0||!vertical&&deltaX>0?"next":"prev"](),e.preventDefault()}}}conf.keyboard&&$(document).on("keydown.scrollable",function(evt){if(!(!conf.keyboard||evt.altKey||evt.ctrlKey||evt.metaKey||$(evt.target).is(":input")||"static"!=conf.keyboard&&current!=self)){var key=evt.keyCode;return!vertical||38!=key&&40!=key?vertical||37!=key&&39!=key?void 0:(self.move(37==key?-1:1),evt.preventDefault()):(self.move(38==key?-1:1),evt.preventDefault())}}),conf.initialIndex&&self.seekTo(conf.initialIndex,0,function(){})}$.tools=$.tools||{version:"@VERSION"},$.tools.scrollable={conf:{activeClass:"active",circular:!1,clonedClass:"cloned",disabledClass:"disabled",easing:"swing",initialIndex:0,item:"> *",items:".items",keyboard:!0,mousewheel:!1,next:".next",prev:".prev",size:1,speed:400,vertical:!1,touch:!0,wheelSpeed:0}};var current;$.fn.scrollable=function(conf){var el=this.data("scrollable");return el?el:(conf=$.extend({},$.tools.scrollable.conf,conf),this.each(function(){el=new Scrollable($(this),conf),$(this).data("scrollable",el)}),conf.api?el:this)}}(jQuery),function($){function Tabs(root,paneSelector,conf){var current,self=this,trigger=root.add(this),tabs=root.find(conf.tabs),panes=paneSelector.jquery?paneSelector:root.children(paneSelector);tabs.length||(tabs=root.children()),panes.length||(panes=root.parent().find(paneSelector)),panes.length||(panes=$(paneSelector)),$.extend(this,{click:function(i,e){var tab=tabs.eq(i),firstRender=!root.data("tabs");if("string"==typeof i&&i.replace("#","")&&(tab=tabs.filter('[href*="'+i.replace("#","")+'"]'),i=Math.max(tabs.index(tab),0)),conf.rotate){var last=tabs.length-1;if(0>i)return self.click(last,e);if(i>last)return self.click(0,e)}if(!tab.length){if(current>=0)return self;i=conf.initialIndex,tab=tabs.eq(i)}if(i===current)return self;if(e=e||$.Event(),e.type="onBeforeClick",trigger.trigger(e,[i]),!e.isDefaultPrevented()){var effect=firstRender?conf.initialEffect&&conf.effect||"default":conf.effect;return effects[effect].call(self,i,function(){current=i,e.type="onClick",trigger.trigger(e,[i])}),tabs.removeClass(conf.current),tab.addClass(conf.current),self}},getConf:function(){return conf},getTabs:function(){return tabs},getPanes:function(){return panes},getCurrentPane:function(){return panes.eq(current)},getCurrentTab:function(){return tabs.eq(current)},getIndex:function(){return current},next:function(){return self.click(current+1)},prev:function(){return self.click(current-1)},destroy:function(){return tabs.off(conf.event).removeClass(conf.current),panes.find('a[href^="#"]').off("click.T"),self}}),$.each("onBeforeClick,onClick".split(","),function(i,name){$.isFunction(conf[name])&&$(self).on(name,conf[name]),self[name]=function(fn){return fn&&$(self).on(name,fn),self}}),conf.history&&$.fn.history&&($.tools.history.init(tabs),conf.event="history"),tabs.each(function(i){$(this).on(conf.event,function(e){return self.click(i,e),e.preventDefault()})}),panes.find('a[href^="#"]').on("click.T",function(e){self.click($(this).attr("href"),e)}),location.hash&&"a"==conf.tabs&&root.find('[href="'+location.hash+'"]').length?self.click(location.hash):(0===conf.initialIndex||conf.initialIndex>0)&&self.click(conf.initialIndex)}$.tools=$.tools||{version:"@VERSION"},$.tools.tabs={conf:{tabs:"a",current:"current",onBeforeClick:null,onClick:null,effect:"default",initialEffect:!1,initialIndex:0,event:"click",rotate:!1,slideUpSpeed:400,slideDownSpeed:400,history:!1},addEffect:function(name,fn){effects[name]=fn}};var animating,w,effects={"default":function(i,done){this.getPanes().hide().eq(i).show(),done.call()},fade:function(i,done){var conf=this.getConf(),speed=conf.fadeOutSpeed,panes=this.getPanes();speed?panes.fadeOut(speed):panes.hide(),panes.eq(i).fadeIn(conf.fadeInSpeed,done)},slide:function(i,done){var conf=this.getConf();this.getPanes().slideUp(conf.slideUpSpeed),this.getPanes().eq(i).slideDown(conf.slideDownSpeed,done)},ajax:function(i,done){this.getPanes().eq(0).load(this.getTabs().eq(i).attr("href"),done)}};$.tools.tabs.addEffect("horizontal",function(i,done){if(!animating){var nextPane=this.getPanes().eq(i),currentPane=this.getCurrentPane();w||(w=this.getPanes().eq(0).width()),animating=!0,nextPane.show(),currentPane.animate({width:0},{step:function(now){nextPane.css("width",w-now)},complete:function(){$(this).hide(),done.call(),animating=!1}}),currentPane.length||(done.call(),animating=!1)}}),$.fn.tabs=function(paneSelector,conf){var el=this.data("tabs");return el&&(el.destroy(),this.removeData("tabs")),$.isFunction(conf)&&(conf={onBeforeClick:conf}),conf=$.extend({},$.tools.tabs.conf,conf),this.each(function(){el=new Tabs($(this),paneSelector,conf),$(this).data("tabs",el)}),conf.api?el:this}}(jQuery),function($){function setIframeLocation(h){if(h){var doc=iframe.contentWindow.document;doc.open().close(),doc.location.hash=h}}var hash,iframe,links,inited;$.tools=$.tools||{version:"@VERSION"},$.tools.history={init:function(els){inited||($.browser.msie&&$.browser.version<"8"?iframe||(iframe=$("<iframe/>").attr("src","javascript:false;").hide().get(0),$("body").append(iframe),setInterval(function(){var idoc=iframe.contentWindow.document,h=idoc.location.hash;hash!==h&&$(window).trigger("hash",h)},100),setIframeLocation(location.hash||"#")):setInterval(function(){var h=location.hash;h!==hash&&$(window).trigger("hash",h)},100),links=links?links.add(els):els,els.click(function(e){var href=$(this).attr("href");return iframe&&setIframeLocation(href),"#"!=href.slice(0,1)?(location.href="#"+href,e.preventDefault()):void 0}),inited=!0)}},$(window).on("hash",function(e,h){h?links.filter(function(){var href=$(this).attr("href");return href==h||href==h.replace("#","")}).trigger("history",[h]):links.eq(0).trigger("history",[h]),hash=h}),$.fn.history=function(fn){return $.tools.history.init(this),this.on("history",fn)}}(jQuery),function($){function viewport(){if(/msie/.test(navigator.userAgent.toLowerCase())){var d=$(document).height(),w=$(window).height();return[window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,20>d-w?w:d]}return[$(document).width(),$(document).height()]}function call(fn){return fn?fn.call($.mask):void 0}$.tools=$.tools||{version:"@VERSION"};var tool;tool=$.tools.expose={conf:{maskId:"exposeMask",loadSpeed:"slow",closeSpeed:"fast",closeOnClick:!0,closeOnEsc:!0,zIndex:9998,opacity:.8,startOpacity:0,color:"#fff",onLoad:null,onClose:null}};var mask,exposed,loaded,config,overlayIndex;$.mask={load:function(conf,els){if(loaded)return this;"string"==typeof conf&&(conf={color:conf}),conf=conf||config,config=conf=$.extend($.extend({},tool.conf),conf),mask=$("#"+conf.maskId),mask.length||(mask=$("<div/>").attr("id",conf.maskId),$("body").append(mask));var size=viewport();return mask.css({position:"absolute",top:0,left:0,width:size[0],height:size[1],display:"none",opacity:conf.startOpacity,zIndex:conf.zIndex}),conf.color&&mask.css("backgroundColor",conf.color),call(conf.onBeforeLoad)===!1?this:(conf.closeOnEsc&&$(document).on("keydown.mask",function(e){27==e.keyCode&&$.mask.close(e)}),conf.closeOnClick&&mask.on("click.mask",function(e){$.mask.close(e)}),$(window).on("resize.mask",function(){$.mask.fit()}),els&&els.length&&(overlayIndex=els.eq(0).css("zIndex"),$.each(els,function(){var el=$(this);/relative|absolute|fixed/i.test(el.css("position"))||el.css("position","relative")}),exposed=els.css({zIndex:Math.max(conf.zIndex+1,"auto"==overlayIndex?0:overlayIndex)})),mask.css({display:"block"}).fadeTo(conf.loadSpeed,conf.opacity,function(){$.mask.fit(),call(conf.onLoad),loaded="full"}),loaded=!0,this)},close:function(){if(loaded){if(call(config.onBeforeClose)===!1)return this;mask.fadeOut(config.closeSpeed,function(){exposed&&exposed.css({zIndex:overlayIndex}),loaded=!1,call(config.onClose)}),$(document).off("keydown.mask"),mask.off("click.mask"),$(window).off("resize.mask")}return this},fit:function(){if(loaded){var size=viewport();mask.css({width:size[0],height:size[1]})}},getMask:function(){return mask},isLoaded:function(fully){return fully?"full"==loaded:loaded},getConf:function(){return config},getExposed:function(){return exposed}},$.fn.mask=function(conf){return $.mask.load(conf),this},$.fn.expose=function(conf){return $.mask.load(conf,this),this}}(jQuery),function($){function getPosition(trigger,tip,conf){var top=conf.relative?trigger.position().top:trigger.offset().top,left=conf.relative?trigger.position().left:trigger.offset().left,pos=conf.position[0];top-=tip.outerHeight()-conf.offset[0],left+=trigger.outerWidth()+conf.offset[1],/iPad/i.test(navigator.userAgent)&&(top-=$(window).scrollTop());var height=tip.outerHeight()+trigger.outerHeight();"center"==pos&&(top+=height/2),"bottom"==pos&&(top+=height),pos=conf.position[1];var width=tip.outerWidth()+trigger.outerWidth();return"center"==pos&&(left-=width/2),"left"==pos&&(left-=width),{top:top,left:left}}function Tooltip(trigger,conf){var tip,shown,self=this,fire=trigger.add(self),timer=0,pretimer=0,title=trigger.attr("title"),tipAttr=trigger.attr("data-tooltip"),effect=effects[conf.effect],isInput=trigger.is(":input"),isWidget=isInput&&trigger.is(":checkbox, :radio, select, :button, :submit"),type=trigger.attr("type"),evt=conf.events[type]||conf.events[isInput?isWidget?"widget":"input":"def"];if(!effect)throw'Nonexistent effect "'+conf.effect+'"';if(evt=evt.split(/,\s*/),2!=evt.length)throw"Tooltip: bad events configuration for "+type;trigger.on(evt[0],function(e){clearTimeout(timer),conf.predelay?pretimer=setTimeout(function(){self.show(e)},conf.predelay):self.show(e)}).on(evt[1],function(e){clearTimeout(pretimer),conf.delay?timer=setTimeout(function(){self.hide(e)},conf.delay):self.hide(e)}),title&&conf.cancelDefault&&(trigger.removeAttr("title"),trigger.data("title",title)),$.extend(self,{show:function(e){if(!tip&&(tipAttr?tip=$(tipAttr):conf.tip?tip=$(conf.tip).eq(0):title?tip=$(conf.layout).addClass(conf.tipClass).appendTo(document.body).hide().append(title):(tip=trigger.find("."+conf.tipClass),tip.length||(tip=trigger.next()),tip.length||(tip=trigger.parent().next())),!tip.length))throw"Cannot find tooltip for "+trigger;if(self.isShown())return self;tip.stop(!0,!0);var pos=getPosition(trigger,tip,conf);if(conf.tip&&tip.html(trigger.data("title")),e=$.Event(),e.type="onBeforeShow",fire.trigger(e,[pos]),e.isDefaultPrevented())return self;pos=getPosition(trigger,tip,conf),tip.css({position:"absolute",top:pos.top,left:pos.left}),shown=!0,effect[0].call(self,function(){e.type="onShow",shown="full",fire.trigger(e)});var event=conf.events.tooltip.split(/,\s*/);return tip.data("__set")||(tip.off(event[0]).on(event[0],function(){clearTimeout(timer),clearTimeout(pretimer)}),event[1]&&!trigger.is("input:not(:checkbox, :radio), textarea")&&tip.off(event[1]).on(event[1],function(e){e.relatedTarget!=trigger[0]&&trigger.trigger(evt[1].split(" ")[0])}),conf.tip||tip.data("__set",!0)),self},hide:function(e){return tip&&self.isShown()?(e=$.Event(),e.type="onBeforeHide",fire.trigger(e),e.isDefaultPrevented()?void 0:(shown=!1,effects[conf.effect][1].call(self,function(){e.type="onHide",fire.trigger(e)}),self)):self},isShown:function(fully){return fully?"full"==shown:shown},getConf:function(){return conf},getTip:function(){return tip},getTrigger:function(){return trigger}}),$.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","),function(i,name){$.isFunction(conf[name])&&$(self).on(name,conf[name]),self[name]=function(fn){return fn&&$(self).on(name,fn),self}})}$.tools=$.tools||{version:"@VERSION"},$.tools.tooltip={conf:{effect:"toggle",fadeOutSpeed:"fast",predelay:0,delay:30,opacity:1,tip:0,fadeIE:!1,position:["top","center"],offset:[0,0],relative:!1,cancelDefault:!0,events:{def:"mouseenter,mouseleave",input:"focus,blur",widget:"focus mouseenter,blur mouseleave",tooltip:"mouseenter,mouseleave"},layout:"<div/>",tipClass:"tooltip"},addEffect:function(name,loadFn,hideFn){effects[name]=[loadFn,hideFn]}};var effects={toggle:[function(done){var conf=this.getConf(),tip=this.getTip(),o=conf.opacity;1>o&&tip.css({opacity:o}),tip.show(),done.call()},function(done){this.getTip().hide(),done.call()}],fade:[function(done){var conf=this.getConf();!/msie/.test(navigator.userAgent.toLowerCase())||conf.fadeIE?this.getTip().fadeTo(conf.fadeInSpeed,conf.opacity,done):(this.getTip().show(),done())},function(done){var conf=this.getConf();!/msie/.test(navigator.userAgent.toLowerCase())||conf.fadeIE?this.getTip().fadeOut(conf.fadeOutSpeed,done):(this.getTip().hide(),done())}]};$.fn.tooltip=function(conf){var api=this.data("tooltip");return api?api:(conf=$.extend(!0,{},$.tools.tooltip.conf,conf),"string"==typeof conf.position&&(conf.position=conf.position.split(/,?\s/)),this.each(function(){api=new Tooltip($(this),conf),$(this).data("tooltip",api)}),conf.api?api:this)}}(jQuery);
\ No newline at end of file




-------------------------------------------------------------------------------
-------------- next part --------------
A non-text attachment was scrubbed...
Name: CHANGES.log
Type: application/octet-stream
Size: 85352 bytes
Desc: not available
URL: <http://lists.plone.org/pipermail/plone-testbot/attachments/20141104/be78cba4/attachment-0002.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: build.log
Type: application/octet-stream
Size: 94648 bytes
Desc: not available
URL: <http://lists.plone.org/pipermail/plone-testbot/attachments/20141104/be78cba4/attachment-0003.obj>


More information about the Testbot mailing list