Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Nuevo capitulo sobre funciones diferidas. Contenidos actualizados has…

…ta jquery 1.7
  • Loading branch information...
commit ad03a4e8d53e417e38569d85c53d5b8589f4e536 1 parent e543887
@leandono authored
Showing with 4,738 additions and 17,376 deletions.
  1. +4 −4 Makefile
  2. +1 −1  demos/custom-events/custom-events.html
  3. +4 −4 demos/custom-events/js/custom-events.js
  4. +1 −1  ejercicios/ajax.html
  5. +1 −1  ejercicios/index.html
  6. +1 −1  ejercicios/js101.html
  7. +0 −6,240 ejercicios/libs/jquery-1.4.2.js
  8. +0 −154 ejercicios/libs/jquery-1.4.2.min.js
  9. +0 −8,176 ejercicios/libs/jquery-1.5.0.js
  10. +3,588 −2,500 ejercicios/libs/{jquery-1.5.1.js → jquery-1.7.2.js}
  11. +2 −2 ejercicios/menu.html
  12. +2 −2 ejercicios/portlets.html
  13. +1 −1  ejercicios/sandbox.html
  14. +1 −1  ejercicios/slideshow.html
  15. +2 −2 { → ejercicios}/soluciones/ajax.js
  16. 0  { → ejercicios}/soluciones/blog.js
  17. 0  { → ejercicios}/soluciones/hoverClass.js
  18. +2 −2 { → ejercicios}/soluciones/inputHint.js
  19. 0  { → ejercicios}/soluciones/js101.js
  20. 0  { → ejercicios}/soluciones/load.js
  21. 0  { → ejercicios}/soluciones/modal.js
  22. 0  { → ejercicios}/soluciones/navigation.js
  23. 0  soluciones/portlet.js → ejercicios/soluciones/portlets.js
  24. 0  { → ejercicios}/soluciones/sandbox.js
  25. 0  { → ejercicios}/soluciones/slideshow-modulePattern.js
  26. 0  { → ejercicios}/soluciones/slideshow-objectLiteral.js
  27. 0  { → ejercicios}/soluciones/slideshow-plugin.js
  28. 0  { → ejercicios}/soluciones/slideshow.js
  29. 0  { → ejercicios}/soluciones/specials-object-literal.js
  30. +1 −1  { → ejercicios}/soluciones/specials.js
  31. 0  { → ejercicios}/soluciones/staff.js
  32. 0  { → ejercicios}/soluciones/stripe.js
  33. 0  { → ejercicios}/soluciones/tabs.js
  34. 0  { → ejercicios}/soluciones/testing/portlet-test.js
  35. 0  { → ejercicios}/soluciones/testing/test.html
  36. +3 −3 ejercicios/staff.html
  37. +1 −1  ejercicios/testing-qunit.html
  38. BIN  libro/epub/Fundamentos_de_jQuery.epub
  39. +102 −0 libro/html/css/markdown.css
  40. +20 −64 libro/html/css/style.css
  41. +448 −95 libro/html/index.html
  42. +1 −1  libro/markdown/cap01-bienvenido.markdown
  43. +14 −2 libro/markdown/cap03-conceptos-basicos-jquery.markdown
  44. +34 −3 libro/markdown/cap04-nucleo-jquery.markdown
  45. +31 −38 libro/markdown/cap05-eventos.markdown
  46. +28 −14 libro/markdown/cap07-ajax.markdown
  47. +1 −1  libro/markdown/cap08-extensiones.markdown
  48. +13 −13 libro/markdown/cap11-eventos-personalizados.markdown
  49. +381 −0 libro/markdown/cap12-funciones-diferidas.markdown
  50. +13 −13 libro/markdown/todo.markdown
  51. BIN  libro/pdf/Fundamentos_de_jQuery.pdf
  52. +37 −35 pandoc/html.template
View
8 Makefile
@@ -1,4 +1,4 @@
-DATE = 'Abril 2012'
+DATE = 'Mayo 2012'
EPUB_TITLE = 'Fundamentos de jQuery'
HTML_TITLE = 'Libro gratuito de jQuery en español - Fundamentos de jQuery'
@@ -7,17 +7,17 @@ all:
@@echo "Copiando figuras en la carpeta html"
@@cp -a ./libro/markdown/figuras ./libro/html
@@echo "Generando HTML"
- @@pandoc -s -S -N --toc --section-divs --highlight-style=tango --template ./pandoc/html.template -T ${HTML_TITLE} --variable=date:${DATE} ./libro/markdown/cap01-bienvenido.markdown ./libro/markdown/cap02-conceptos-basicos-javascript.markdown ./libro/markdown/cap03-conceptos-basicos-jquery.markdown ./libro/markdown/cap04-nucleo-jquery.markdown ./libro/markdown/cap05-eventos.markdown ./libro/markdown/cap06-efectos.markdown ./libro/markdown/cap07-ajax.markdown ./libro/markdown/cap08-extensiones.markdown ./libro/markdown/cap09-mejoras-rendimiento.markdown ./libro/markdown/cap10-organizacion-codigo.markdown ./libro/markdown/cap11-eventos-personalizados.markdown ./libro/markdown/licencia.markdown -o ./libro/html/index.html
+ @@pandoc -s -S -N --toc --section-divs --highlight-style=tango --template ./pandoc/html.template -T ${HTML_TITLE} --variable=date:${DATE} ./libro/markdown/cap01-bienvenido.markdown ./libro/markdown/cap02-conceptos-basicos-javascript.markdown ./libro/markdown/cap03-conceptos-basicos-jquery.markdown ./libro/markdown/cap04-nucleo-jquery.markdown ./libro/markdown/cap05-eventos.markdown ./libro/markdown/cap06-efectos.markdown ./libro/markdown/cap07-ajax.markdown ./libro/markdown/cap08-extensiones.markdown ./libro/markdown/cap09-mejoras-rendimiento.markdown ./libro/markdown/cap10-organizacion-codigo.markdown ./libro/markdown/cap11-eventos-personalizados.markdown ./libro/markdown/cap12-funciones-diferidas.markdown ./libro/markdown/licencia.markdown -o ./libro/html/index.html
@@echo "HTML generado"
@@echo "Generando EPUB"
- @@pandoc -S --epub-metadata=./pandoc/epub.metadata.xml --epub-stylesheet=./pandoc/epub.styles.css --variable=title:${EPUB_TITLE} ./libro/markdown/cap01-bienvenido.markdown ./libro/markdown/cap02-conceptos-basicos-javascript.markdown ./libro/markdown/cap03-conceptos-basicos-jquery.markdown ./libro/markdown/cap04-nucleo-jquery.markdown ./libro/markdown/cap05-eventos.markdown ./libro/markdown/cap06-efectos.markdown ./libro/markdown/cap07-ajax.markdown ./libro/markdown/cap08-extensiones.markdown ./libro/markdown/cap09-mejoras-rendimiento.markdown ./libro/markdown/cap10-organizacion-codigo.markdown ./libro/markdown/cap11-eventos-personalizados.markdown ./libro/markdown/licencia.markdown -o ./libro/epub/Fundamentos_de_jQuery.epub
+ @@pandoc -S --epub-metadata=./pandoc/epub.metadata.xml --epub-stylesheet=./pandoc/epub.styles.css --variable=title:${EPUB_TITLE} ./libro/markdown/cap01-bienvenido.markdown ./libro/markdown/cap02-conceptos-basicos-javascript.markdown ./libro/markdown/cap03-conceptos-basicos-jquery.markdown ./libro/markdown/cap04-nucleo-jquery.markdown ./libro/markdown/cap05-eventos.markdown ./libro/markdown/cap06-efectos.markdown ./libro/markdown/cap07-ajax.markdown ./libro/markdown/cap08-extensiones.markdown ./libro/markdown/cap09-mejoras-rendimiento.markdown ./libro/markdown/cap10-organizacion-codigo.markdown ./libro/markdown/cap11-eventos-personalizados.markdown ./libro/markdown/cap12-funciones-diferidas.markdown ./libro/markdown/licencia.markdown -o ./libro/epub/Fundamentos_de_jQuery.epub
@@echo "EPUB generado"
@@echo "Copiando figuras para generar PDF"
@@cp -a ./libro/markdown/figuras ./
@@echo "Generando PDF"
- @@pandoc -N --toc --latex-engine=xelatex --no-highlight --template ./pandoc/latex.template --variable=date:${DATE} ./libro/markdown/cap01-bienvenido.markdown ./libro/markdown/cap02-conceptos-basicos-javascript.markdown ./libro/markdown/cap03-conceptos-basicos-jquery.markdown ./libro/markdown/cap04-nucleo-jquery.markdown ./libro/markdown/cap05-eventos.markdown ./libro/markdown/cap06-efectos.markdown ./libro/markdown/cap07-ajax.markdown ./libro/markdown/cap08-extensiones.markdown ./libro/markdown/cap09-mejoras-rendimiento.markdown ./libro/markdown/cap10-organizacion-codigo.markdown ./libro/markdown/cap11-eventos-personalizados.markdown -o ./libro/pdf/Fundamentos_de_jQuery.pdf
+ @@pandoc -N --toc --latex-engine=xelatex --no-highlight --template ./pandoc/latex.template --variable=date:${DATE} ./libro/markdown/cap01-bienvenido.markdown ./libro/markdown/cap02-conceptos-basicos-javascript.markdown ./libro/markdown/cap03-conceptos-basicos-jquery.markdown ./libro/markdown/cap04-nucleo-jquery.markdown ./libro/markdown/cap05-eventos.markdown ./libro/markdown/cap06-efectos.markdown ./libro/markdown/cap07-ajax.markdown ./libro/markdown/cap08-extensiones.markdown ./libro/markdown/cap09-mejoras-rendimiento.markdown ./libro/markdown/cap10-organizacion-codigo.markdown ./libro/markdown/cap11-eventos-personalizados.markdown ./libro/markdown/cap12-funciones-diferidas.markdown -o ./libro/pdf/Fundamentos_de_jQuery.pdf
@@echo "PDF generado"
@@echo "Eliminando figuras"
@@rm -r ./figuras
View
2  demos/custom-events/custom-events.html
@@ -26,7 +26,7 @@
</div>
</div>
- <script src="../../exercises/libs/jquery-1.4.2.min.js"></script>
+ <script src="../../ejercicios/libs/jquery-1.7.2.js"></script>
<script src="js/custom-events.js"></script>
</body>
</html>
View
8 demos/custom-events/js/custom-events.js
@@ -117,7 +117,7 @@ var search_terms = {};
$(document).ready(function() {
$('#twitter')
- .bind('getResults', function(e, term) {
+ .on('getResults', function(e, term) {
// make sure we don't have a box for this term already
if (!search_terms[term]) {
var $this = $(this);
@@ -138,10 +138,10 @@ $(document).ready(function() {
search_terms[term] = 1;
}
})
- .bind('getTrends', function(e) {
+ .on('getTrends', function(e) {
var $this = $(this);
- $.getJSON('http://search.twitter.com/trends.json?callback=?', function(json) {
- var trends = json.trends;
+ $.getJSON('http://api.twitter.com/1/trends/1.json?callback=?', function(json) {
+ var trends = json[0].trends;
$.each(trends, function(i, trend) {
$this.trigger('getResults', [ trend.name ]);
});
View
2  ejercicios/ajax.html
@@ -16,7 +16,7 @@
<div id="info"></div>
- <script src="libs/jquery-1.5.0.js"></script>
+ <script src="libs/jquery-1.7.2.js"></script>
<script src="js/ajax.js"></script>
</body>
</html>
View
2  ejercicios/index.html
@@ -147,7 +147,7 @@ <h2 rel="yummy fruit!">Fruit</h2>
</div>
-<script src="libs/jquery-1.5.0.js"></script>
+<script src="libs/jquery-1.7.2.js"></script>
<!--
<script src="js/sandbox.js"></script>
<script src="js/hoverClass.js"></script>
View
2  ejercicios/js101.html
@@ -11,7 +11,7 @@
<div id="myDiv">a convenient target div</div>
- <script src="libs/jquery-1.5.0.js"></script>
+ <script src="libs/jquery-1.7.2.js"></script>
<script src="js/js101.js"></script>
</body>
</html>
View
6,240 ejercicios/libs/jquery-1.4.2.js
0 additions, 6,240 deletions not shown
View
154 ejercicios/libs/jquery-1.4.2.min.js
@@ -1,154 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.4.2
- * http://jquery.com/
- *
- * Copyright 2010, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2010, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Sat Feb 13 22:33:48 2010 -0500
- */
-(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
-e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
-j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
-"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
-true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
-Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
-(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
-a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
-"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
-function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
-c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
-L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
-"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
-a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
-d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
-a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
-!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
-true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
-parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
-false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
-s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
-applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
-else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
-a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
-w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
-cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
-i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
-" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
-this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
-e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
-c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
-a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
-function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
-k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
-C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
-null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
-e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
-f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
-if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
-d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
-"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
-a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
-isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
-{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
-if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
-e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
-"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
-d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
-!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
-toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
-u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
-function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
-if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
-e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
-t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
-g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
-for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
-1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
-CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
-relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
-l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
-h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
-CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
-g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
-text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
-setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
-h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
-m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
-"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
-h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
-!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
-h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
-q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
-if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
-(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
-function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
-gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
-c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
-{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
-"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
-d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
-a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
-1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
-a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
-c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
-wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
-prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
-this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
-return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
-""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
-this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
-u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
-1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
-return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
-""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
-c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
-c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
-function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
-Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
-"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
-a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
-a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
-"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
-serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
-function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
-global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
-e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
-"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
-false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
-false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
-c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
-d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
-g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
-1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
-"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
-if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
-this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
-"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
-animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
-j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
-this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
-"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
-c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
-this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
-this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
-e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
-c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
-function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
-this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
-k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
-f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
-a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
-c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
-d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
-f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
-"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
-e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
View
8,176 ejercicios/libs/jquery-1.5.0.js
0 additions, 8,176 deletions not shown
View
6,088 ejercicios/libs/jquery-1.5.1.js → ejercicios/libs/jquery-1.7.2.js
3,588 additions, 2,500 deletions not shown
View
4 ejercicios/menu.html
@@ -71,8 +71,8 @@
<div id="sidebar">
</div>
- <script src="js/jquery-1.3.2.min.js"></script>
- <!-- <script src="js/solutions/menus.js"></script> -->
+ <script src="libs/jquery-1.7.2.js"></script>
+ <!-- <script src="soluciones/menus.js"></script> -->
</body>
</html>
View
4 ejercicios/portlets.html
@@ -41,7 +41,7 @@
<body>
-<script src="libs/jquery-1.5.1.js"></script>
-<script src="js/portlet.js"></script>
+<script src="libs/jquery-1.7.2.js"></script>
+<script src="js/portlets.js"></script>
</body>
</html>
View
2  ejercicios/sandbox.html
@@ -88,7 +88,7 @@
</tbody>
</table>
- <script src="libs/jquery-1.4.2.min.js"></script>
+ <script src="libs/jquery-1.7.2.js"></script>
<script src="js/sandbox.js"></script>
</body>
View
2  ejercicios/slideshow.html
@@ -26,7 +26,7 @@
</li>
</ul>
- <script src="libs/jquery-1.5.0.js"></script>
+ <script src="libs/jquery-1.7.2.js"></script>
<script>
</script>
View
4 soluciones/ajax.js → ejercicios/soluciones/ajax.js
@@ -32,13 +32,13 @@ $.ajax('data/people.json', {
}).appendTo($select);
});
- $select.bind('change', function(e) {
+ $select.on('change', function(e) {
var personId = $(this).val();
if (!personId) { return; }
getPersonData(personId, showPerson);
});
- $info.bind('mouseenter', function() {
+ $info.on('mouseenter', function() {
var $this = $(this);
if ($this.children('div').length) { return; }
View
0  soluciones/blog.js → ejercicios/soluciones/blog.js
File renamed without changes
View
0  soluciones/hoverClass.js → ejercicios/soluciones/hoverClass.js
File renamed without changes
View
4 soluciones/inputHint.js → ejercicios/soluciones/inputHint.js
@@ -6,10 +6,10 @@ $(document).ready(function() {
$input
.val(hint)
.addClass('hint')
- .bind('focus', function() {
+ .on('focus', function() {
$input.val('').removeClass('hint');
})
- .bind('blur', function() {
+ .on('blur', function() {
if (!$.trim($input.val())) {
$input.val(hint).addClass('hint');
}
View
0  soluciones/js101.js → ejercicios/soluciones/js101.js
File renamed without changes
View
0  soluciones/load.js → ejercicios/soluciones/load.js
File renamed without changes
View
0  soluciones/modal.js → ejercicios/soluciones/modal.js
File renamed without changes
View
0  soluciones/navigation.js → ejercicios/soluciones/navigation.js
File renamed without changes
View
0  soluciones/portlet.js → ejercicios/soluciones/portlets.js
File renamed without changes
View
0  soluciones/sandbox.js → ejercicios/soluciones/sandbox.js
File renamed without changes
View
0  soluciones/slideshow-modulePattern.js → ejercicios/soluciones/slideshow-modulePattern.js
File renamed without changes
View
0  soluciones/slideshow-objectLiteral.js → ejercicios/soluciones/slideshow-objectLiteral.js
File renamed without changes
View
0  soluciones/slideshow-plugin.js → ejercicios/soluciones/slideshow-plugin.js
File renamed without changes
View
0  soluciones/slideshow.js → ejercicios/soluciones/slideshow.js
File renamed without changes
View
0  soluciones/specials-object-literal.js → ejercicios/soluciones/specials-object-literal.js
File renamed without changes
View
2  soluciones/specials.js → ejercicios/soluciones/specials.js
@@ -34,7 +34,7 @@ $(document).ready(function() {
$.ajax({
type : 'get',
dataType : 'json',
- url : 'json/specials.json',
+ url : 'data/specials.json',
success : function(specials) {
cachedResponse = specials;
handleResponse(specials, val);
View
0  soluciones/staff.js → ejercicios/soluciones/staff.js
File renamed without changes
View
0  soluciones/stripe.js → ejercicios/soluciones/stripe.js
File renamed without changes
View
0  soluciones/tabs.js → ejercicios/soluciones/tabs.js
File renamed without changes
View
0  soluciones/testing/portlet-test.js → ejercicios/soluciones/testing/portlet-test.js
File renamed without changes
View
0  soluciones/testing/test.html → ejercicios/soluciones/testing/test.html
File renamed without changes
View
6 ejercicios/staff.html
@@ -1,4 +1,4 @@
-4<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
@@ -83,7 +83,7 @@
</li>
</ul>
</div>
- <script src="js/jquery-1.3.2.min.js"></script>
- <script src="js/solutions/staff.js"></script>
+ <script src="libs/jquery-1.7.2.js"></script>
+ <script src="soluciones/staff.js"></script>
</body>
</html>
View
2  ejercicios/testing-qunit.html
@@ -4,7 +4,7 @@
<title>QUnit Test Suite</title>
<link rel="stylesheet" href="libs/qunit/qunit.css" type="text/css" media="screen">
- <script src="libs/jquery-1.5.1.js"></script>
+ <script src="libs/jquery-1.7.2.js"></script>
<script src="libs/qunit/qunit.js"></script>
<!-- add the files you want to test here -->
View
BIN  libro/epub/Fundamentos_de_jQuery.epub
Binary file not shown
View
102 libro/html/css/markdown.css
@@ -0,0 +1,102 @@
+html { font-size: 100%; overflow-y: scroll; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
+
+body{
+color:#444;
+font-family:Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif;
+font-size:12px;
+line-height:1.5em;
+padding:1em;
+margin:auto;
+max-width:42em;
+background:#fefefe;
+}
+
+a{ color: #0645ad; text-decoration:none;}
+a:visited{ color: #0b0080; }
+a:hover{ color: #06e; }
+a:active{ color:#faa700; }
+a:focus{ outline: thin dotted; }
+a:hover, a:active{ outline: 0; }
+
+::-moz-selection{background:rgba(255,255,0,0.3);color:#000}
+::selection{background:rgba(255,255,0,0.3);color:#000}
+
+a::-moz-selection{background:rgba(255,255,0,0.3);color:#0645ad}
+a::selection{background:rgba(255,255,0,0.3);color:#0645ad}
+
+p{
+margin:1em 0;
+}
+
+img{
+max-width:100%;
+}
+
+h1,h2,h3,h4,h5,h6{
+font-weight:normal;
+color:#111;
+line-height:1em;
+}
+h4,h5,h6{ font-weight: bold; }
+h1{ font-size:2.5em; }
+h2{ font-size:2em; }
+h3{ font-size:1.5em; }
+h4{ font-size:1.2em; }
+h5{ font-size:1em; }
+h6{ font-size:0.9em; }
+
+blockquote{
+color:#666666;
+margin:0;
+padding-left: 3em;
+border-left: 0.5em #EEE solid;
+}
+hr { display: block; height: 2px; border: 0; border-top: 1px solid #aaa;border-bottom: 1px solid #eee; margin: 1em 0; padding: 0; }
+pre, code, kbd, samp { color: #000; font-family: monospace, monospace; _font-family: 'courier new', monospace; font-size: 0.98em; }
+pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; }
+
+b, strong { font-weight: bold; }
+
+dfn { font-style: italic; }
+
+ins { background: #ff9; color: #000; text-decoration: none; }
+
+mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }
+
+sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
+sup { top: -0.5em; }
+sub { bottom: -0.25em; }
+
+ul, ol { margin: 1em 0; padding: 0 0 0 2em; }
+li p:last-child { margin:0 }
+dd { margin: 0 0 0 2em; }
+
+img { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; }
+
+table { border-collapse: collapse; border-spacing: 0; }
+td { vertical-align: top; }
+
+@media only screen and (min-width: 480px) {
+body{font-size:14px;}
+}
+
+@media only screen and (min-width: 768px) {
+body{font-size:16px;}
+}
+
+@media print {
+ * { background: transparent !important; color: black !important; filter:none !important; -ms-filter: none !important; }
+ body{font-size:12pt; max-width:100%;}
+ a, a:visited { text-decoration: underline; }
+ hr { height: 1px; border:0; border-bottom:1px solid black; }
+ a[href]:after { content: " (" attr(href) ")"; }
+ abbr[title]:after { content: " (" attr(title) ")"; }
+ .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }
+ pre, blockquote { border: 1px solid #999; padding-right: 1em; page-break-inside: avoid; }
+ tr, img { page-break-inside: avoid; }
+ img { max-width: 100% !important; }
+ @page :left { margin: 15mm 20mm 15mm 10mm; }
+ @page :right { margin: 15mm 10mm 15mm 20mm; }
+ p, h2, h3 { orphans: 3; widows: 3; }
+ h2, h3 { page-break-after: avoid; }
+}
View
84 libro/html/css/style.css
@@ -1,39 +1,5 @@
body {
- width: 60%;
- font-family: Georgia, serif;
- margin: 20px auto;
-}
-
-a {
- color: #ce242a;
- -webkit-transition: color 0.3s ease-out;
- -moz-transition: color 0.3s ease-out;
- -ms-transition: color 0.3s ease-out;
- -o-transition: color 0.3s ease-out;
- transition: color 0.3s ease-out;
-}
-
-a:visited {
- color: #9f2826;
-}
-
-a:hover {
- color: #570100;
-}
-
-h1, h2, h3, h4 {
- font-family: Helvetica, Arial, sans-serif;
-}
-
-hr {
- color: #ccc;
- margin: 50px 0;
- border-bottom: 1px solid #CCC;
- border-top: 0;
-}
-
-p {
- line-height: 1.4em;
+ max-width:50em;
}
#titlepage {
@@ -42,22 +8,18 @@ p {
padding-bottom: 15px;
}
-h1.title {
+.title {
font-size: 210%;
}
-h1.maintitle {
+.maintitle {
float: left;
}
-h1.maintitle a {
+.maintitle a {
color: #000;
}
-h2, h3{
- margin: 30px 0 19px 0;
-}
-
.social {
float: right;
margin-top: 15px;
@@ -68,14 +30,11 @@ h2, h3{
list-style: none;
}
-dt {
- font-family: Helvetica, Arial, sans-serif;
- font-weight: 700;
-}
-
-#TOC li {
- color: #ce242a;
- padding: 2px 0;
+.translators{
+ background-color:#D9EDF7;
+ border-color: #BCE8F1;
+ padding: 15px;
+ border-radius: 4px;
}
.translators .translator {
@@ -92,28 +51,25 @@ dt {
clear:both;
}
-.translators, blockquote {
- background-color:#FE6;
- padding: 15px;
-}
-
pre {
- background:none repeat scroll 0 0 #F1F1F1;
- border: 1px solid #DDD;
- color:#000;
- font-size: 12px;
- overflow:auto;
- width: 100%;
- margin: 20px 0;
- padding: 10px 0;
+ padding: 15px 0;
}
pre code {
font: 13px Monaco,"Courier New", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", monospace;
- padding: 0 0 0 25px;
+ padding: 0 0 0 31px;
}
+hr {
+ color: #ccc;
+ margin: 50px 0;
+ border-bottom: 1px solid #CCC;
+ border-top: 0;
+}
+blockquote{
+ margin: 30px 0;
+}
/* Syntax Highlight styles */
View
543 libro/html/index.html
@@ -12,6 +12,7 @@
<meta property="og:title" content="Libro gratuito de jQuery en espa&ntilde;ol - Fundamentos de jQuery"/>
<meta property="og:image" content="http://librojquery.com/img/jquery_logo.png"/>
<title>Libro gratuito de jQuery en espa&ntilde;ol - Fundamentos de jQuery</title>
+ <link rel="stylesheet" type="text/css" href="css/markdown.css" media="screen, projection, print">
<link rel="stylesheet" type="text/css" href="css/style.css" media="screen, projection, print">
<link rel="stylesheet" type="text/css" href="css/stylePrint.css" media="print">
<link rel="canonical" href="http://librojquery.com/" />
@@ -59,7 +60,7 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
</p>
<p>
- <strong>Última actualización del libro:</strong> Abril 2012 (<a href="https://github.com/dzignus/librojquery/commits/master" rel="_blank">ver cambios</a>).
+ <strong>Última actualización del libro:</strong> Mayo 2012 (<a href="https://github.com/dzignus/librojquery/commits/master" rel="_blank">ver cambios</a>).
</p>
</div>
@@ -277,6 +278,16 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
</ul></li>
</ul></li>
</ul></li>
+ <li><a href="#funciones-y-ejecuciones-diferidas-a-través-del-objeto-.deferred"><span class="toc-section-number">12</span> Funciones y ejecuciones diferidas a través del objeto <code>$.Deferred</code></a><ul>
+ <li><a href="#introducción-5"><span class="toc-section-number">12.1</span> Introducción</a></li>
+ <li><a href="#el-objeto-diferido-y-ajax"><span class="toc-section-number">12.2</span> El objeto diferido y Ajax</a><ul>
+ <li><a href="#deferred.then"><span class="toc-section-number">12.2.1</span> <code>deferred.then</code></a></li>
+ </ul></li>
+ <li><a href="#creación-de-objetos-diferidos-con-.deferred"><span class="toc-section-number">12.3</span> Creación de objetos diferidos con <code>$.Deferred</code></a><ul>
+ <li><a href="#deferred.pipe"><span class="toc-section-number">12.3.1</span> <code>deferred.pipe</code></a></li>
+ <li><a href="#when"><span class="toc-section-number">12.3.2</span> <code>$.when</code></a></li>
+ </ul></li>
+ </ul></li>
</ul>
</div>
@@ -341,7 +352,7 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
<li><p>Finalmente, averigüe qué necesita hacer con esos elementos para resolver el problema. Puede ser útil, antes de comenzar, escribir comentarios explicando lo que va a realizar.</p></li>
</ul>
<p>No tenga miedo de cometer errores. Tampoco trate en el primer intento escribir de forma perfecta su código. Cometer errores y experimentar con soluciones es parte del proceso de aprendizaje y lo ayudará a que sea un mejor desarrollador.</p>
- <p>Podrá encontrar en la carpeta <code>/soluciones</code> ejemplos de soluciones a los ejercicios del libro.</p>
+ <p>Podrá encontrar en la carpeta <code>/ejercicios/soluciones</code> ejemplos de soluciones a los ejercicios del libro.</p>
</div>
<div class="section level2" id="convenciones-utilizadas-en-el-libro">
<h2><a href="#TOC"><span class="header-section-number">1.6</span> Convenciones Utilizadas en el Libro</a></h2>
@@ -1323,9 +1334,17 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
$(<span class="ch">&#39;h1&#39;</span>).<span class="fu">css</span>(<span class="ch">&#39;font-size&#39;</span>); <span class="co">// también funciona</span></code></pre>
<p><strong>Establecer propiedades CSS</strong></p>
<pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;h1&#39;</span>).<span class="fu">css</span>(<span class="ch">&#39;fontSize&#39;</span>, <span class="ch">&#39;100px&#39;</span>); <span class="co">// establece una propiedad individual CSS</span>
- $(<span class="ch">&#39;h1&#39;</span>).<span class="fu">css</span>({ <span class="ch">&#39;fontSize&#39;</span> : <span class="ch">&#39;100px&#39;</span>, <span class="ch">&#39;color&#39;</span> : <span class="ch">&#39;red&#39;</span> }); <span class="co">// establece múltiples</span>
- <span class="co">// propiedades CSS</span></code></pre>
+ $(<span class="ch">&#39;h1&#39;</span>).<span class="fu">css</span>({
+ <span class="ch">&#39;fontSize&#39;</span> : <span class="ch">&#39;100px&#39;</span>,
+ <span class="ch">&#39;color&#39;</span> : <span class="ch">&#39;red&#39;</span>
+ }); <span class="co">// establece múltiples propiedades CSS</span></code></pre>
<p><em>Notar que el estilo del argumento utilizado en la segunda línea del ejemplo — es un objeto que contiene múltiples propiedades. Esta es una forma común de pasar múltiples argumentos a una función, y muchos métodos establecedores de la biblioteca aceptan objetos para fijar varias propiedades de una sola vez.</em></p>
+ <p>A partir de la versión 1.6 de la biblioteca, utilizando <code>$.fn.css</code> también es posible establecer valores relativos en las propiedades CSS de un elemento determinado:</p>
+ <p><strong>Establecer valores CSS relativos</strong></p>
+ <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;h1&#39;</span>).<span class="fu">css</span>({
+ <span class="ch">&#39;fontSize&#39;</span> : <span class="ch">&#39;+=15px&#39;</span>, <span class="co">// suma 15px al tamaño original del elemento</span>
+ <span class="ch">&#39;paddingTop&#39;</span> : <span class="ch">&#39;+=20px&#39;</span> <span class="co">// suma 20px al padding superior original del elemento</span>
+ });</code></pre>
<div class="section level3" id="utilizar-clases-para-aplicar-estilos-css">
<h3><a href="#TOC"><span class="header-section-number">3.4.1</span> Utilizar Clases para Aplicar Estilos CSS</a></h3>
<p>Para obtener valores de los estilos aplicados a un elemento, el método <code>$.fn.css</code> es muy útil, sin embargo, su utilización como método establecedor se debe evitar (ya que, para aplicar estilos a un elemento, se puede hacer directamente desde CSS). En su lugar, lo ideal, es escribir reglas CSS que se apliquen a clases que describan los diferentes estados visuales de los elementos y luego cambiar la clase del elemento para aplicar el estilo que se desea mostrar.</p>
@@ -1692,7 +1711,8 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
<span class="co">// Utilizar los métodos jQuery para comprobar tipos no primitivos</span>
<span class="kw">jQuery</span>.<span class="fu">isFunction</span>(myValue); <span class="co">// falso (false)</span>
<span class="kw">jQuery</span>.<span class="fu">isPlainObject</span>(myValue); <span class="co">// falso (false)</span>
- <span class="kw">jQuery</span>.<span class="fu">isArray</span>(myValue); <span class="co">// verdadero (true)</span></code></pre>
+ <span class="kw">jQuery</span>.<span class="fu">isArray</span>(myValue); <span class="co">// verdadero (true)</span>
+ <span class="kw">jQuery</span>.<span class="fu">isNumeric</span>(<span class="dv">16</span>); <span class="co">// verdadero (true). No disponible en versiones inferiores a jQuery 1.7</span></code></pre>
</div>
<div class="section level2" id="el-método-data">
<h2><a href="#TOC"><span class="header-section-number">4.4</span> El Método Data</a></h2>
@@ -1700,7 +1720,7 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
<p><strong>Guardar y recuperar información relacionada a un elemento</strong></p>
<pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;#myDiv&#39;</span>).<span class="fu">data</span>(<span class="ch">&#39;keyName&#39;</span>, { <span class="dt">foo </span>: <span class="ch">&#39;bar&#39;</span> });
$(<span class="ch">&#39;#myDiv&#39;</span>).<span class="fu">data</span>(<span class="ch">&#39;keyName&#39;</span>); <span class="co">// { foo : &#39;bar&#39; }</span></code></pre>
- <p>A través del método <code>$.fn.data</code> es posible guardar cualquier tipo de información sobre un elemento, y es difícil exagerar la importancia de este concepto cuando se está desarrollando una aplicación compleja.</p>
+ <p>A través del método <code>$.fn.data</code> es posible guardar cualquier tipo de información sobre un elemento. Es difícil exagerar la importancia de este concepto cuando se está desarrollando una aplicación compleja.</p>
<p>Por ejemplo, si desea establecer una relación entre el ítem de una lista y el div que hay dentro de este ítem, es posible hacerlo cada vez que se interactúa con el ítem, pero una mejor solución es hacerlo una sola vez, guardando un puntero al div utilizando el método <code>$.fn.data</code>:</p>
<p><strong>Establecer una relación entre elementos utilizando el método <code>$.fn.data</code></strong></p>
<pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;#myList li&#39;</span>).<span class="fu">each</span>(<span class="kw">function</span>() {
@@ -1713,6 +1733,26 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
<span class="kw">var</span> $firstLi = $(<span class="ch">&#39;#myList li:first&#39;</span>);
$<span class="kw">firstLi</span>.<span class="fu">data</span>(<span class="ch">&#39;contentDiv&#39;</span>).<span class="fu">html</span>(<span class="ch">&#39;nuevo contenido&#39;</span>);</code></pre>
<p>Además es posible pasarle al método un objeto conteniendo uno o más pares de conjuntos palabra clave-valor.</p>
+ <p>A partir de la versión 1.5 de la biblioteca, jQuery permite utilizar al método <code>$.fn.data</code> para obtener la información asociada a un elemento que posea el atributo HTML5 <code>data-*</code>:</p>
+ <p><strong>Elementos con el atributo <code>data-*</code></strong></p>
+ <pre class="sourceCode html"><code class="sourceCode html"><span class="kw">&lt;a</span><span class="ot"> id=</span><span class="st">&#39;foo&#39;</span><span class="ot"> data-foo=</span><span class="st">&#39;baz&#39;</span><span class="ot"> href=</span><span class="st">&#39;#&#39;</span><span class="kw">&gt;</span>Foo<span class="kw">&lt;/a&gt;</span>
+
+ <span class="kw">&lt;a</span><span class="ot"> id=</span><span class="st">&#39;foobar&#39;</span><span class="ot"> data-foo-bar=</span><span class="st">&#39;fol&#39;</span><span class="ot"> href=</span><span class="st">&#39;#&#39;</span><span class="kw">&gt;</span>Foo Bar<span class="kw">&lt;/a&gt;</span></code></pre>
+ <p><strong>Obtener los valores asociados a los atributos <code>data-*</code> con <code>$.fn.data</code></strong></p>
+ <pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="co">// obtiene el valor del atributo data-foo</span>
+ <span class="co">// utilizando el método $.fn.data</span>
+ <span class="kw">console</span>.<span class="fu">log</span>($(<span class="ch">&#39;#foo&#39;</span>).<span class="fu">data</span>(<span class="ch">&#39;foo&#39;</span>)); <span class="co">// registra &#39;baz&#39;</span>
+
+ <span class="co">// obtiene el valor del segundo elemento</span>
+ <span class="kw">console</span>.<span class="fu">log</span>($(<span class="ch">&#39;#foobar&#39;</span>).<span class="fu">data</span>(<span class="ch">&#39;fooBar&#39;</span>)); <span class="co">// registra &#39;fol&#39;</span></code></pre>
+ <blockquote>
+ <p><strong>Nota</strong></p>
+ <p>A partir de la versión 1.6 de la biblioteca, para obtener el valor del atributo <code>data-foo-bar</code> del segundo elemento, el argumento en <code>$.fn.data</code> se debe pasar en estilo <em>CamelCase</em>.</p>
+ </blockquote>
+ <blockquote>
+ <p><strong>Nota</strong></p>
+ <p>Para más información sobre el atributo HTML5 <code>data-*</code> visite <a href="http://www.w3.org/TR/html5/global-attributes.html#embedding-custom-non-visible-data-with-the-data-attributes">http://www.w3.org/TR/html5/global-attributes.html#embedding-custom-non-visible-data-with-the-data-attributes</a>.</p>
+ </blockquote>
</div>
<div class="section level2" id="detección-de-navegadores-y-características">
<h2><a href="#TOC"><span class="header-section-number">4.5</span> Detección de Navegadores y Características</a></h2>
@@ -1749,24 +1789,24 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
<h1><a href="#TOC"><span class="header-section-number">5</span> Eventos</a></h1>
<div class="section level2" id="introducción-1">
<h2><a href="#TOC"><span class="header-section-number">5.1</span> Introducción</a></h2>
- <p>jQuery provee métodos para asociar controladores de eventos (en inglés <em>event handlers</em>) a selectores. Cuando un evento ocurre, la función provista es ejecutada. Dentro de la función, la palabra clave this hace referencia al elemento en que el evento ocurre.</p>
+ <p>jQuery provee métodos para asociar controladores de eventos (en inglés <em>event handlers</em>) a selectores. Cuando un evento ocurre, la función provista es ejecutada. Dentro de la función, la palabra clave <code>this</code> hace referencia al elemento en que el evento ocurre.</p>
<p>Para más detalles sobre los eventos en jQuery, puede consultar <a href="http://api.jquery.com/category/events/">http://api.jquery.com/category/events/</a>.</p>
<p>La función del controlador de eventos puede recibir un objeto. Este objeto puede ser utilizado para determinar la naturaleza del evento o, por ejemplo, prevenir el comportamiento predeterminado de éste. Para más detalles sobre el objeto del evento, visite <a href="http://api.jquery.com/category/events/event-object/">http://api.jquery.com/category/events/event-object/</a>.</p>
</div>
<div class="section level2" id="vincular-eventos-a-elementos">
<h2><a href="#TOC"><span class="header-section-number">5.2</span> Vincular Eventos a Elementos</a></h2>
- <p>jQuery ofrece métodos para la mayoría de los eventos — entre ellos <code>$.fn.click</code>, <code class="code">$.fn.focus</code>, <code class="code">$.fn.blur</code>, <code class="code">$.fn.change</code>, etc. Estos últimos son formas reducidas del método <code>$.fn.bind</code> de jQuery. El método bind es útil para vincular (en inglés <em>binding</em>) la misma función de controlador a múltiples eventos, para cuando se desea proveer información al controlador de evento, cuando se está trabajando con eventos personalizados o cuando se desea pasar un objeto a múltiples eventos y controladores.</p>
+ <p>jQuery ofrece métodos para la mayoría de los eventos — entre ellos <code>$.fn.click</code>, <code>$.fn.focus</code>, <code>$.fn.blur</code>, <code>$.fn.change</code>, etc. Estos últimos son formas reducidas del método <code>$.fn.on</code> de jQuery (<code>$.fn.bind</code> en versiones anteriores a jQuery 1.7). El método <code>$.fn.on</code> es útil para vincular (en inglés <em>binding</em>) la misma función de controlador a múltiples eventos, para cuando se desea proveer información al controlador de evento, cuando se está trabajando con eventos personalizados o cuando se desea pasar un objeto a múltiples eventos y controladores.</p>
<p><strong>Vincular un evento utilizando un método reducido</strong></p>
<pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;p&#39;</span>).<span class="fu">click</span>(<span class="kw">function</span>() {
<span class="kw">console</span>.<span class="fu">log</span>(<span class="ch">&#39;click&#39;</span>);
});</code></pre>
- <p><strong>Vincular un evento utilizando el método <code>$.fn.bind</code> method</strong></p>
- <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;p&#39;</span>).<span class="fu">bind</span>(<span class="ch">&#39;click&#39;</span>, <span class="kw">function</span>() {
+ <p><strong>Vincular un evento utilizando el método <code>$.fn.on</code></strong></p>
+ <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;p&#39;</span>).<span class="fu">on</span>(<span class="ch">&#39;click&#39;</span>, <span class="kw">function</span>() {
<span class="kw">console</span>.<span class="fu">log</span>(<span class="ch">&#39;click&#39;</span>);
});</code></pre>
- <p><strong>Vincular un evento utilizando el método <code>$.fn.bind</code> con información asociada</strong></p>
- <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;input&#39;</span>).<span class="fu">bind</span>(
- <span class="ch">&#39;click change&#39;</span>, <span class="co">// es posible incular múltiples eventos al elemento</span>
+ <p><strong>Vincular un evento utilizando el método <code>$.fn.on</code> con información asociada</strong></p>
+ <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;input&#39;</span>).<span class="fu">on</span>(
+ <span class="ch">&#39;click blur&#39;</span>, <span class="co">// es posible vincular múltiples eventos al elemento</span>
{ <span class="dt">foo </span>: <span class="ch">&#39;bar&#39;</span> }, <span class="co">// se debe pasar la información asociada como argumento</span>
<span class="kw">function</span>(eventObject) {
@@ -1786,37 +1826,37 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
</div>
<div class="section level3" id="desvincular-eventos">
<h3><a href="#TOC"><span class="header-section-number">5.2.2</span> Desvincular Eventos</a></h3>
- <p>Para desvincular (en ingles <em>unbind</em>) un controlador de evento, puede utilizar el método <code>$.fn.unbind</code> pasándole el tipo de evento a desconectar. Si se pasó como adjunto al evento una función nombrada, es posible aislar la desconexión de dicha función pasándola como segundo argumento.</p>
+ <p>Para desvincular (en ingles <em>unbind</em>) un controlador de evento, puede utilizar el método <code>$.fn.off</code> pasándole el tipo de evento a desconectar. Si se pasó como adjunto al evento una función nombrada, es posible aislar la desconexión de dicha función pasándola como segundo argumento.</p>
<p><strong>Desvincular todos los controladores del evento click en una selección</strong></p>
- <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;p&#39;</span>).<span class="fu">unbind</span>(<span class="ch">&#39;click&#39;</span>);</code></pre>
+ <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;p&#39;</span>).<span class="fu">off</span>(<span class="ch">&#39;click&#39;</span>);</code></pre>
<p><strong>Desvincular un controlador particular del evento click</strong></p>
<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">var</span> foo = <span class="kw">function</span>() { <span class="kw">console</span>.<span class="fu">log</span>(<span class="ch">&#39;foo&#39;</span>); };
<span class="kw">var</span> bar = <span class="kw">function</span>() { <span class="kw">console</span>.<span class="fu">log</span>(<span class="ch">&#39;bar&#39;</span>); };
- $(<span class="ch">&#39;p&#39;</span>).<span class="fu">bind</span>(<span class="ch">&#39;click&#39;</span>, foo).<span class="fu">bind</span>(<span class="ch">&#39;click&#39;</span>, bar);
- $(<span class="ch">&#39;p&#39;</span>).<span class="fu">unbind</span>(<span class="ch">&#39;click&#39;</span>, bar); <span class="co">// foo esta atado aún al evento click</span></code></pre>
+ $(<span class="ch">&#39;p&#39;</span>).<span class="fu">on</span>(<span class="ch">&#39;click&#39;</span>, foo).<span class="fu">on</span>(<span class="ch">&#39;click&#39;</span>, bar);
+ $(<span class="ch">&#39;p&#39;</span>).<span class="fu">off</span>(<span class="ch">&#39;click&#39;</span>, bar); <span class="co">// foo esta atado aún al evento click</span></code></pre>
</div>
<div class="section level3" id="espacios-de-nombres-para-eventos">
<h3><a href="#TOC"><span class="header-section-number">5.2.3</span> Espacios de Nombres para Eventos</a></h3>
<p>Cuando se esta desarrollando aplicaciones complejas o extensiones de jQuery, puede ser útil utilizar espacios de nombres para los eventos, y de esta forma evitar que se desvinculen eventos cuando no lo desea.</p>
<p><strong>Asignar espacios de nombres a eventos</strong></p>
- <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;p&#39;</span>).<span class="fu">bind</span>(<span class="ch">&#39;click.myNamespace&#39;</span>, <span class="kw">function</span>() { <span class="co">/* ... */</span> });
- $(<span class="ch">&#39;p&#39;</span>).<span class="fu">unbind</span>(<span class="ch">&#39;click.myNamespace&#39;</span>);
- $(<span class="ch">&#39;p&#39;</span>).<span class="fu">unbind</span>(<span class="ch">&#39;.myNamespace&#39;</span>); <span class="co">// desvincula todos los eventos con</span>
- <span class="co">// el espacio de nombre &#39;myNamespace&#39;</span></code></pre>
+ <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;p&#39;</span>).<span class="fu">on</span>(<span class="ch">&#39;click.myNamespace&#39;</span>, <span class="kw">function</span>() { <span class="co">/* ... */</span> });
+ $(<span class="ch">&#39;p&#39;</span>).<span class="fu">off</span>(<span class="ch">&#39;click.myNamespace&#39;</span>);
+ $(<span class="ch">&#39;p&#39;</span>).<span class="fu">off</span>(<span class="ch">&#39;.myNamespace&#39;</span>); <span class="co">// desvincula todos los eventos con</span>
+ <span class="co">// el espacio de nombre &#39;myNamespace&#39;</span></code></pre>
</div>
<div class="section level3" id="vinculación-de-múltiples-eventos">
<h3><a href="#TOC"><span class="header-section-number">5.2.4</span> Vinculación de Múltiples Eventos</a></h3>
- <p>Muy a menudo, elementos en una aplicación estarán vinculados a múltiples eventos, cada uno con una función diferente. En estos casos, es posible pasar un objeto dentro de <code>$.fn.bind</code> con uno o más pares de nombres claves/valores. Cada nombre clave será el nombre del evento mientras que cada valor será la función a ejecutar cuando ocurra el evento.</p>
+ <p>Muy a menudo, elementos en una aplicación estarán vinculados a múltiples eventos, cada uno con una función diferente. En estos casos, es posible pasar un objeto dentro de <code>$.fn.on</code> con uno o más pares de nombres claves/valores. Cada clave será el nombre del evento mientras que cada valor será la función a ejecutar cuando ocurra el evento.</p>
<p><strong>Vincular múltiples eventos a un elemento</strong></p>
- <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;p&#39;</span>).<span class="fu">bind</span>({
- <span class="ch">&#39;click&#39;</span>: <span class="kw">function</span>() { <span class="kw">console</span>.<span class="fu">log</span>(<span class="ch">&#39;clickeado&#39;</span>); },
- <span class="ch">&#39;mouseover&#39;</span>: <span class="kw">function</span>() { <span class="kw">console</span>.<span class="fu">log</span>(<span class="ch">&#39;sobrepasado&#39;</span>); }
+ <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;p&#39;</span>).<span class="fu">on</span>({
+ <span class="ch">&#39;click&#39;</span>: <span class="kw">function</span>() {
+ <span class="kw">console</span>.<span class="fu">log</span>(<span class="ch">&#39;clickeado&#39;</span>);
+ },
+ <span class="ch">&#39;mouseover&#39;</span>: <span class="kw">function</span>() {
+ <span class="kw">console</span>.<span class="fu">log</span>(<span class="ch">&#39;sobrepasado&#39;</span>);
+ }
});</code></pre>
- <blockquote>
- <p><strong>Nota</strong></p>
- <p>La opción de pasar un objeto con múltiples eventos y funciones a <code>$.fn.bind</code> fue introducido en jQuery 1.4.4.</p>
- </blockquote>
</div>
</div>
<div class="section level2" id="el-objeto-del-evento">
@@ -1875,28 +1915,28 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
</div>
<div class="section level2" id="incrementar-el-rendimiento-con-la-delegación-de-eventos">
<h2><a href="#TOC"><span class="header-section-number">5.5</span> Incrementar el Rendimiento con la Delegación de Eventos</a></h2>
- <p>Cuando trabaje con jQuery, frecuentemente añadirá nuevos elementos a la página, y cuando lo haga, necesitará vincular eventos a dichos elementos — eventos que ya estaban vinculados a elementos en la página. En lugar de repetir la tarea cada vez que se añade un elemento, es posible utilizar la delegación de eventos para hacerlo. Con ella, podrá enlazar un evento a un elemento contenedor, y luego, cuando el evento ocurra, podrá ver en que elemento sucede. Si todo esto suena complicado, afortunadamente jQuery lo hace fácil a través de los métodos <code>$.fn.live</code> y <code>$.fn.delegate</code>.</p>
+ <p>Cuando trabaje con jQuery, frecuentemente añadirá nuevos elementos a la página, y cuando lo haga, necesitará vincular eventos a dichos elementos. En lugar de repetir la tarea cada vez que se añade un elemento, es posible utilizar la delegación de eventos para hacerlo. Con ella, podrá enlazar un evento a un elemento contenedor, y luego, cuando el evento ocurra, podrá ver en que elemento sucede.</p>
<p>La delegación de eventos posee algunos beneficios, incluso si no se tiene pensando añadir más elementos a la página. El tiempo requerido para enlazar controladores de eventos a cientos de elementos no es un trabajo trivial; si posee un gran conjunto de elementos, debería considerar utilizar la delegación de eventos a un elemento contenedor.</p>
<blockquote>
<p><strong>Nota</strong></p>
- <p>El método <code>$.fn.live</code> fue introducido a partir de la versión 1.3 de la biblioteca y en ese momento, solo ciertos tipos de eventos eran soportados. A partir de la versión 1.4.2, se introdujo <code>$.fn.delegate</code> el cual es preferido a $.fn.live .</p>
+ <p>A partir de la versión 1.4.2, se introdujo <code>$.fn.delegate</code>, sin embargo a partir de la versión 1.7 es preferible utilizar el evento <code>$.fn.on</code> para la delegación de eventos.</p>
</blockquote>
- <p><strong>Delegar un evento utilizando <code>$.fn.delegate</code></strong></p>
- <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;#myUnorderedList&#39;</span>).<span class="fu">delegate</span>(<span class="ch">&#39;li&#39;</span>, <span class="ch">&#39;click&#39;</span>, <span class="kw">function</span>(e) {
+ <p><strong>Delegar un evento utilizando <code>$.fn.on</code></strong></p>
+ <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;#myUnorderedList&#39;</span>).<span class="fu">on</span>(<span class="ch">&#39;click&#39;</span>, <span class="ch">&#39;li&#39;</span>, <span class="kw">function</span>(e) {
<span class="kw">var</span> $myListItem = $(<span class="kw">this</span>);
<span class="co">// ...</span>
});</code></pre>
- <p><strong>Delegar un Evento utilizando <code>$.fn.live</code></strong></p>
- <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;#myUnorderedList li&#39;</span>).<span class="fu">live</span>(<span class="ch">&#39;click&#39;</span>, <span class="kw">function</span>(e) {
+ <p><strong>Delegar un evento utilizando <code>$.fn.delegate</code></strong></p>
+ <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;#myUnorderedList&#39;</span>).<span class="fu">delegate</span>(<span class="ch">&#39;li&#39;</span>, <span class="ch">&#39;click&#39;</span>, <span class="kw">function</span>(e) {
<span class="kw">var</span> $myListItem = $(<span class="kw">this</span>);
<span class="co">// ...</span>
});</code></pre>
<div class="section level3" id="desvincular-eventos-delegados">
<h3><a href="#TOC"><span class="header-section-number">5.5.1</span> Desvincular Eventos Delegados</a></h3>
- <p>Si necesita remover eventos delegados, no puede hacerlo simplemente desvinculándolos. Para eso, utilice el método <code>$.fn.undelegate</code> para eventos conectados con <code>$.fn.delegate</code>, y <code>$.fn.die</code> para eventos conectados con <code>$.fn.live</code>. Al igual que cuando se realiza un vinculo, opcionalmente, se puede pasar el nombre de una función vinculada.</p>
+ <p>Si necesita remover eventos delegados, no puede hacerlo simplemente desvinculándolos. Para eso, utilice el método <code>$.fn.off</code> para eventos conectados con <code>$.fn.on</code>, y <code>$.fn.undelegate</code> para eventos conectados con <code>$.fn.delegate</code>. Al igual que cuando se realiza un vinculo, opcionalmente, se puede pasar el nombre de una función vinculada.</p>
<p><strong>Desvincular eventos delegados</strong></p>
- <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;#myUnorderedList&#39;</span>).<span class="fu">undelegate</span>(<span class="ch">&#39;li&#39;</span>, <span class="ch">&#39;click&#39;</span>);
- $(<span class="ch">&#39;#myUnorderedList li&#39;</span>).<span class="fu">die</span>(<span class="ch">&#39;click&#39;</span>);</code></pre>
+ <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;#myUnorderedList&#39;</span>).<span class="fu">off</span>(<span class="ch">&#39;click&#39;</span>, <span class="ch">&#39;li&#39;</span>);
+ $(<span class="ch">&#39;#myUnorderedList&#39;</span>).<span class="fu">undelegate</span>(<span class="ch">&#39;li&#39;</span>, <span class="ch">&#39;click&#39;</span>);</code></pre>
</div>
</div>
<div class="section level2" id="funciones-auxiliares-de-eventos">
@@ -2133,7 +2173,7 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
<h3><a href="#TOC"><span class="header-section-number">7.2.1</span> GET vs. POST</a></h3>
<p>Los dos métodos HTTP más comunes para enviar una petición a un servidor son GET y POST. Es importante entender la utilización de cada uno.</p>
<p>El método GET debe ser utilizado para operaciones no-destructivas — es decir, operaciones en donde se esta “obteniendo” datos del servidor, pero no modificando. Por ejemplo, una consulta a un servicio de búsqueda podría ser una petición GET. Por otro lado, las solicitudes GET pueden ser almacenadas en la cache del navegador, pudiendo conducir a un comportamiento impredecible si no se lo espera. Generalmente, la información enviada al servidor, es enviada en una cadena de datos (en inglés <em>query string</em>).</p>
- <p>El método POST debe ser utilizado para operaciones destructivas — es decir, operaciones en donde se está incorporando información al servidor. Por ejemplo, cuando un usuario guarda un artículo en un blog, esta acción debería utilizar POST. Por otro lado, este tipo de método no se guarda en la cache del navegador. Además, una cadena de consulta puede ser parte de la URL, pero la información tiende a ser enviada de forma separada.</p>
+ <p>El método POST debe ser utilizado para operaciones destructivas — es decir, operaciones en donde se está incorporando información al servidor. Por ejemplo, cuando un usuario guarda un artículo en un blog, esta acción debería utilizar POST. Por otro lado, este tipo de método no se guarda en la cache del navegador. Además, una cadena de datos puede ser parte de la URL, pero la información tiende a ser enviada de forma separada.</p>
</div>
<div class="section level3" id="tipos-de-datos">
<h3><a href="#TOC"><span class="header-section-number">7.2.2</span> Tipos de Datos</a></h3>
@@ -2156,7 +2196,7 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
<p><strong>Nota</strong></p>
<p>A partir de la versión 1.4 de la biblioteca, si la información JSON no está correctamente formateada, la petición podría fallar. Visite <a href="http://json.org">http://json.org</a> para obtener detalles sobre un correcto formateo de datos en JSON.</p>
</blockquote>
- <p>Es recomendable utilizar los mecanismos que posea el lenguaje del lado de servidor para la generación de información en JSON.</p>
+ <p>Es recomendable utilizar los mecanismos que posea el lenguaje del lado de servidor para la generación de información en formato JSON.</p>
<dl>
<dt>jsonp</dt>
<dd><p>Para transportar información JSON de un dominio a otro.</p>
@@ -2165,7 +2205,7 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
<dd><p>Para transportar información en formato XML.</p>
</dd>
</dl>
- <p><em>A pesar de los diferentes tipos de datos de que se puede utilizar, es recomendable utilizar el formato JSON, ya que éste es muy flexible, permitiendo por ejemplo, enviar al mismo tiempo información plana y HTML.</em></p>
+ <p><em>A pesar de los diferentes tipos de datos de que se puede utilizar, es recomendable utilizar el formato JSON, ya que es muy flexible, permitiendo por ejemplo, enviar al mismo tiempo información plana y HTML.</em></p>
</div>
<div class="section level3" id="asincronismo">
<h3><a href="#TOC"><span class="header-section-number">7.2.3</span> Asincronismo</a></h3>
@@ -2218,16 +2258,17 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
<span class="co">// código a ejecutar si la petición falla;</span>
<span class="co">// son pasados como argumentos a la función</span>
- <span class="co">// el objeto de la petición en crudo y código de estatus de la petición</span>
- <span class="dt">error </span>: <span class="kw">function</span>(xhr, status) {
+ <span class="co">// el objeto jqXHR (extensión de XMLHttpRequest), un texto con el estatus</span>
+ <span class="co">// de la petición y un texto con la descripción del error que haya dado el servidor</span>
+ <span class="dt">error </span>: <span class="kw">function</span>(jqXHR, status, error) {
alert(<span class="ch">&#39;Disculpe, existió un problema&#39;</span>);
},
<span class="co">// código a ejecutar sin importar si la petición falló o no</span>
- <span class="dt">complete </span>: <span class="kw">function</span>(xhr, status) {
+ <span class="dt">complete </span>: <span class="kw">function</span>(jqXHR, status) {
alert(<span class="ch">&#39;Petición realizada&#39;</span>);
}
- });</code></pre>
+ }); </code></pre>
<blockquote>
<p><strong>Nota</strong></p>
<p>Una aclaración sobre el parámetro <code>dataType</code>: Si el servidor devuelve información que es diferente al formato especificado, el código fallará, y la razón de porque lo hace no siempre quedará clara debido a que la respuesta HTTP no mostrará ningún tipo de error. Cuando esté trabajando con peticiones Ajax, debe estar seguro que el servidor esta enviando el tipo de información que esta solicitando y verifique que la cabecera <code>Content-type</code> es exacta al tipo de dato. Por ejemplo, para información en formato JSON, la cabecera <code>Content-type</code> debería ser <code>application/json</code>.</p>
@@ -2243,7 +2284,7 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
<dd><p>Establece si la petición será guardada en la cache del navegador. De forma predeterminada es <code>true</code> para todos los <em>dataType</em> excepto para “<em>script</em>” y “<em>jsonp</em>”. Cuando posee el valor <code>false</code>, se agrega una cadena de caracteres anti-cache al final de la URL de la petición.</p>
</dd>
<dt>complete</dt>
- <dd><p>Establece una función de devolución de llamada que se ejecuta cuando la petición esta completa, aunque haya fallado o no. La función recibe como argumentos el objeto de la petición en crudo y el código de estatus de la misma petición.</p>
+ <dd><p>Establece una función de devolución de llamada que se ejecuta cuando la petición esta completa, aunque haya fallado o no. La función recibe como argumentos el objeto jqXHR (en versiones anteriores o iguales a jQuery 1.4, recibe en su lugar el objeto de la petición en crudo <code>XMLHTTPRequest</code>) y un texto especificando el estatus de la misma petición (<code>success</code>, <code>notmodified</code>, <code>error</code>, <code>timeout</code>, <code>abort</code>, o <code>parsererror</code>).</p>
</dd>
<dt>context</dt>
<dd><p>Establece el alcance en que la/las funciones de devolución de llamada se ejecutaran (por ejemplo, define el significado de <code>this</code> dentro de las funciones). De manera predeterminada <code>this</code> hace referencia al objeto originalmente pasado al método <code>$.ajax</code>.</p>
@@ -2255,13 +2296,13 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
<dd><p>Establece el tipo de información que se espera recibir como respuesta del servidor. Si no se especifica ningún valor, de forma predeterminada, jQuery revisa el tipo de <em>MIME</em> que posee la respuesta.</p>
</dd>
<dt>error</dt>
- <dd><p>Establece una función de devolución de llamada a ejecutar si resulta algún error en la petición. Dicha función recibe como argumentos el objeto de la petición en crudo y el código de estatus de la misma petición.</p>
+ <dd><p>Establece una función de devolución de llamada a ejecutar si resulta algún error en la petición. Dicha función recibe como argumentos el objeto jqXHR (en versiones anteriores o iguales a jQuery 1.4, recibe en su lugar el objeto de la petición en crudo <code>XMLHTTPRequest</code>), un texto especificando el estatus de la misma petición (<code>timeout</code>, <code>error</code>, <code>abort</code>, o <code>parsererror</code>) y un texto con la descripción del error que haya enviado el servidor (por ejemplo <code>Not Found</code> o <code>Internal Server Error</code>).</p>
</dd>
<dt>jsonp</dt>
<dd><p>Establece el nombre de la función de devolución de llamada a enviar cuando se realiza una petición <em>JSONP</em>. De forma predeterminada el nombre es &quot;<em>callback</em></p>
</dd>
<dt>success</dt>
- <dd><p>Establece una función a ejecutar si la petición a sido satisfactoria. Dicha función recibe como argumentos la información de la petición (convertida a objeto JavaScript en el caso que <em>dataType</em> sea <em>JSON</em>), el estatus de la misma y el objeto de la petición en crudo.</p>
+ <dd><p>Establece una función a ejecutar si la petición a sido satisfactoria. Dicha función recibe como argumentos el objeto jqXHR (en versiones anteriores o iguales a jQuery 1.4, recibe en su lugar el objeto de la petición en crudo <code>XMLHTTPRequest</code>), un texto especificando el estatus de la misma petición y la información de la petición (convertida a objeto JavaScript en el caso que <em>dataType</em> sea <em>JSON</em>), el estatus de la misma.</p>
</dd>
<dt>timeout</dt>
<dd><p>Establece un tiempo en milisegundos para considerar a una petición como fallada.</p>
@@ -2277,6 +2318,15 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
</dd>
</dl>
<p>La opción <code>url</code> es obligatoria para el método <code>$.ajax</code>;</p>
+ <p>Como se comentó anteriormente, para una lista completa de las opciones disponibles, puede consultar <a href="http://api.jquery.com/jQuery.ajax/">http://api.jquery.com/jQuery.ajax/</a>.</p>
+ <blockquote>
+ <p><strong>Nota</strong></p>
+ <p>A partir de la versión 1.5 de jQuery, las opciones <code>beforeSend</code>, <code>success</code>, <code>error</code> y <code>complete</code> reciben como uno de sus argumentos el objeto <code>jqXHR</code> siendo este una extensión del objeto nativo <code>XMLHTTPRequest</code>. El objeto <code>jqXHR</code> posee una serie de métodos y propiedades que permiten modificar u obtener información particular de la petición a realizar, como por ejemplo sobreescribir el tipo de <em>MIME</em> que posee la respuesta que se espera por parte del servidor. Para información sobre el objeto <code>jqXHR</code> puede consultar <a href="http://api.jquery.com/jQuery.ajax/#jqXHR">http://api.jquery.com/jQuery.ajax/#jqXHR</a>.</p>
+ </blockquote>
+ <blockquote>
+ <p><strong>Nota</strong></p>
+ <p>A partir de la versión 1.5 de jQuery, las opciones <code>success</code>, <code>error</code> y <code>complete</code> pueden recibir un arreglo con varias funciones de devolución, las cuales serán ejecutadas en turnos.</p>
+ </blockquote>
</div>
</div>
<div class="section level3" id="métodos-convenientes">
@@ -2761,7 +2811,7 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
alert( <span class="st">&quot;Función de devolución&quot;</span> );
}
})
- .<span class="fu">bind</span>(<span class="st">&quot;progressbarcomplete&quot;</span>, <span class="kw">function</span>(event, data) {
+ .<span class="fu">on</span>(<span class="st">&quot;progressbarcomplete&quot;</span>, <span class="kw">function</span>(event, data) {
alert(<span class="st">&quot;El valor de la barra de progreso es &quot;</span> + <span class="kw">data</span>.<span class="fu">value</span>);
});
@@ -3477,7 +3527,7 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
}
});</code></pre>
<p>Por otro lado, utilizando eventos personalizados, el código queda así:</p>
- <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;.lightbulb&#39;</span>).<span class="fu">bind</span>(<span class="ch">&#39;changeState&#39;</span>, <span class="kw">function</span>(e) {
+ <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;.lightbulb&#39;</span>).<span class="fu">on</span>(<span class="ch">&#39;changeState&#39;</span>, <span class="kw">function</span>(e) {
<span class="kw">var</span> $light = $(<span class="kw">this</span>);
<span class="kw">if</span> ($<span class="kw">light</span>.<span class="fu">hasClass</span>(<span class="ch">&#39;on&#39;</span>)) {
$<span class="kw">light</span>.<span class="fu">removeClass</span>(<span class="ch">&#39;on&#39;</span>).<span class="fu">addClass</span>(<span class="ch">&#39;off&#39;</span>);
@@ -3506,7 +3556,7 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
&lt;div id=<span class="st">&quot;master_switch&quot;</span>&gt;&lt;/div&gt;</code></pre>
<p>Si existe alguna lámpara prendida en la casa, es posible apagarlas a través del interruptor general, de igual forma si existen luces apagadas, es posible prenderlas con dicho interruptor. Para realizar esta tarea, se agregan dos eventos personalizados más a la lámpara: <code>turnOn</code> y <code>turnOff</code>. A través de una lógica en el evento <code>changeState</code> se decide qué evento personalizado utilizar:</p>
<pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;.lightbulb&#39;</span>)
- .<span class="fu">bind</span>(<span class="ch">&#39;changeState&#39;</span>, <span class="kw">function</span>(e) {
+ .<span class="fu">on</span>(<span class="ch">&#39;changeState&#39;</span>, <span class="kw">function</span>(e) {
<span class="kw">var</span> $light = $(<span class="kw">this</span>);
<span class="kw">if</span> ($<span class="kw">light</span>.<span class="fu">hasClass</span>(<span class="ch">&#39;on&#39;</span>)) {
$<span class="kw">light</span>.<span class="fu">trigger</span>(<span class="ch">&#39;turnOff&#39;</span>);
@@ -3514,10 +3564,10 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
$<span class="kw">light</span>.<span class="fu">trigger</span>(<span class="ch">&#39;turnOn&#39;</span>);
}
})
- .<span class="fu">bind</span>(<span class="ch">&#39;turnOn&#39;</span>, <span class="kw">function</span>(e) {
+ .<span class="fu">on</span>(<span class="ch">&#39;turnOn&#39;</span>, <span class="kw">function</span>(e) {
$(<span class="kw">this</span>).<span class="fu">removeClass</span>(<span class="ch">&#39;off&#39;</span>).<span class="fu">addClass</span>(<span class="ch">&#39;on&#39;</span>);
})
- .<span class="fu">bind</span>(<span class="ch">&#39;turnOff&#39;</span>, <span class="kw">function</span>(e) {
+ .<span class="fu">on</span>(<span class="ch">&#39;turnOff&#39;</span>, <span class="kw">function</span>(e) {
$(<span class="kw">this</span>).<span class="fu">removeClass</span>(<span class="ch">&#39;off&#39;</span>).<span class="fu">addClass</span>(<span class="ch">&#39;on&#39;</span>);
});
@@ -3537,14 +3587,14 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
<p><strong>Nota</strong></p>
<p>Si esta acostumbrado a la programación orientada a objetos, puede resultar útil pensar de los eventos personalizados como métodos de objetos. En términos generales, el objeto al que pertenece el método se crea a partir del selector jQuery. Vincular el evento personalizado <code>changeState</code> a todos los elementos <code>$(‘.light’)</code> es similar a tener una clase llamada <code>Light</code> con un método <code>changeState</code>, y luego instanciar nuevos objetos <code>Light</code> por cada elemento.</p>
</blockquote>
- <p><strong>Recapitulación: $.fn.bind y $.fn.trigger</strong></p>
- <p>En el mundo de los eventos personalizados, existen dos métodos importantes de jQuery: <code>$.fn.bind</code> y <code>$.fn.trigger</code>. En el capítulo dedicado a eventos se explicó la utilización de estos dos métodos para trabajar con eventos del usuario; en este capítulo es importante recordar 2 puntos:</p>
+ <p><strong>Recapitulación: $.fn.on y $.fn.trigger</strong></p>
+ <p>En el mundo de los eventos personalizados, existen dos métodos importantes de jQuery: <code>$.fn.on</code> y <code>$.fn.trigger</code>. En el capítulo dedicado a eventos se explicó la utilización de estos dos métodos para trabajar con eventos del usuario; en este capítulo es importante recordar 2 puntos:</p>
<ul>
- <li>El método <code>$.fn.bind</code> toma como argumentos un tipo de evento y una función controladora de evento. Opcionalmente, puede recibir información asociada al evento como segundo argumento, desplazando como tercer argumento a la función controladora de evento. Cualquier información pasada estará disponible a la función controladora a través de la propiedad <code>data</code> del objeto del evento. A su vez, la función controladora recibe el objeto del evento como primer argumento.</li>
+ <li>El método <code>$.fn.on</code> toma como argumentos un tipo de evento y una función controladora de evento. Opcionalmente, puede recibir información asociada al evento como segundo argumento, desplazando como tercer argumento a la función controladora de evento. Cualquier información pasada estará disponible a la función controladora a través de la propiedad <code>data</code> del objeto del evento. A su vez, la función controladora recibe el objeto del evento como primer argumento.</li>
<li>El método <code>$.fn.trigger</code> toma como argumentos el tipo de evento y opcionalmente, puede tomar un arreglo con valores. Estos valores serán pasados a la función controladora de eventos como argumentos luego del objeto del evento.</li>
</ul>
- <p>A continuación se muestra un ejemplo de utilización de <code>$.fn.bind</code> y <code>$.fn.trigger</code> en donde se utiliza información personalizada en ambos casos:</p>
- <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="kw">document</span>).<span class="fu">bind</span>(<span class="ch">&#39;myCustomEvent&#39;</span>, { <span class="dt">foo </span>: <span class="ch">&#39;bar&#39;</span> }, <span class="kw">function</span>(e, arg1, arg2) {
+ <p>A continuación se muestra un ejemplo de utilización de <code>$.fn.on</code> y <code>$.fn.trigger</code> en donde se utiliza información personalizada en ambos casos:</p>
+ <pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="kw">document</span>).<span class="fu">on</span>(<span class="ch">&#39;myCustomEvent&#39;</span>, { <span class="dt">foo </span>: <span class="ch">&#39;bar&#39;</span> }, <span class="kw">function</span>(e, arg1, arg2) {
<span class="kw">console</span>.<span class="fu">log</span>(<span class="kw">e.data</span>.<span class="fu">foo</span>); <span class="co">// &#39;bar&#39;</span>
<span class="kw">console</span>.<span class="fu">log</span>(arg1); <span class="co">// &#39;bim&#39;</span>
<span class="kw">console</span>.<span class="fu">log</span>(arg2); <span class="co">// &#39;baz&#39;</span>
@@ -3724,7 +3774,7 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
</dl>
<p>Vinculaciones en el contenedor <em>Twitter</em>:</p>
<pre class="sourceCode javascript"><code class="sourceCode javascript">$(<span class="ch">&#39;#twitter&#39;</span>)
- .<span class="fu">bind</span>(<span class="ch">&#39;getResults&#39;</span>, <span class="kw">function</span>(e, term) {
+ .<span class="fu">on</span>(<span class="ch">&#39;getResults&#39;</span>, <span class="kw">function</span>(e, term) {
<span class="co">// se comprueba que ya no exista una caja para el término</span>
<span class="kw">if</span> (!search_terms[term]) {
<span class="kw">var</span> $this = $(<span class="kw">this</span>);
@@ -3745,10 +3795,10 @@ <h3 class="corrections">Correcciones por <a href="http://ar.linkedin.com/in/gust
search_terms[term] = <span class="dv">1</span>;
}
})
- .<span class="fu">bind</span>(<span class="ch">&#39;getTrends&#39;</span>, <span class="kw">function</span>(e) {
+ .<span class=