/****** jquery/jquery-1.3.2.min.js ******/

/*
 * jQuery JavaScript Library v1.3.2
 * http://jquery.com/
 *
 * Copyright (c) 2009 John Resig
 * Dual licensed under the MIT and GPL licenses.
 * http://docs.jquery.com/License
 *
 * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
 * Revision: 6246
 */
(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
/*
 * Sizzle CSS Selector Engine - v0.9.3
 *  Copyright 2009, The Dojo Foundation
 *  Released under the MIT, BSD, and GPL Licenses.
 *  More information: http://sizzlejs.com/
 */
(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.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\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML='   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<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>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();

/****** /jquery/jquery.common.js ******/

/*
 * $Id: jquery.common.js 19546 2009-10-09 19:29:19Z ajl $
 * Here go custom or open source functions that extend jquery, common to the site. Only light stuff should be put in here.
 */

jQuery.getScript = function(url, callbackFn, cache)
{
    jQuery.ajax({
        type: 'GET',
        url: url,
        success: callbackFn,
        dataType: 'script',
        cache: !!cache
    });
};

jQuery.preloadImages = function()
{
  for(var i = 0; i<arguments.length; i++)
  {
    jQuery("<img>").attr("src", arguments[i]);
  }
};

jQuery.empty = function(mixed_var) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philippe Baumann
    // +      input by: Onno Marsman
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: LH
    // +   improved by: Onno Marsman
    // +   improved by: Francesco
    // *     example 1: empty(null);
    // *     returns 1: true
    // *     example 2: empty(undefined);
    // *     returns 2: true
    // *     example 3: empty([]);
    // *     returns 3: true
    // *     example 4: empty({});
    // *     returns 4: true
    
    var key;
    
    if (mixed_var === ""
        || mixed_var === 0
        || mixed_var === "0"
        || mixed_var === null
        || mixed_var === false
        || mixed_var === undefined
    ){
        return true;
    }
    if (typeof mixed_var == 'object') {
        for (key in mixed_var) {
            if (typeof mixed_var[key] !== 'function' ) {
              return false;
            }
        }
        return true;
    }
    return false;
}

jQuery.fn.extend({
  scrollTo : function(speed, easing) {
    return this.each(function() {
      var targetOffset = $(this).offset().top;
      $('html,body').animate({scrollTop: targetOffset}, speed, easing);
    });
  }
});

/* ===========================================================================
 *
 * JQuery URL Parser
 * Version 1.0
 * Parses URLs and provides easy access to information within them.
 *
 * Author: Mark Perkins
 * Author email: mark@allmarkedup.com
 *
 * For full documentation and more go to http://projects.allmarkedup.com/jquery_url_parser/
 *
 * ---------------------------------------------------------------------------
 *
 * CREDITS:
 *
 * Parser based on the Regex-based URI parser by Stephen Levithian.
 * For more information (including a detailed explaination of the differences
 * between the 'loose' and 'strict' pasing modes) visit http://blog.stevenlevithan.com/archives/parseuri
 *
 * ---------------------------------------------------------------------------
 *
 * LICENCE:
 *
 * Released under a MIT Licence. See licence.txt that should have been supplied with this file,
 * or visit http://projects.allmarkedup.com/jquery_url_parser/licence.txt
 *
 * ---------------------------------------------------------------------------
 * 
 * EXAMPLES OF USE:
 *
 * Get the domain name (host) from the current page URL
 * jQuery.url.attr("host")
 *
 * Get the query string value for 'item' for the current page
 * jQuery.url.param("item") // null if it doesn't exist
 *
 * Get the second segment of the URI of the current page
 * jQuery.url.segment(2) // null if it doesn't exist
 *
 * Get the protocol of a manually passed in URL
 * jQuery.url.setUrl("http://allmarkedup.com/").attr("protocol") // returns 'http'
 *
 */
jQuery.url=function(){var segments={};var parsed={};var options={url:window.location,strictMode:false,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};var parseUri=function(){str=decodeURI(options.url);var m=options.parser[options.strictMode?"strict":"loose"].exec(str);var uri={};var i=14;while(i--){uri[options.key[i]]=m[i]||"";}uri[options.q.name]={};uri[options.key[12]].replace(options.q.parser,function($0,$1,$2){if($1){uri[options.q.name][$1]=$2;}});return uri;};var key=function(key){if(!parsed.length){setUp();}if(key=="base"){if(parsed.port!==null&&parsed.port!==""){return parsed.protocol+"://"+parsed.host+":"+parsed.port+"/";}else
{return parsed.protocol+"://"+parsed.host+"/";}}return(parsed[key]==="")?null:parsed[key];};var param=function(item){if(!parsed.length){setUp();}return(parsed.queryKey[item]===null)?null:parsed.queryKey[item];};var setUp=function(){parsed=parseUri();getSegments();};var getSegments=function(){var p=parsed.path;segments=[];segments=parsed.path.length==1?{}:(p.charAt(p.length-1)=="/"?p.substring(1,p.length-1):path=p.substring(1)).split("/");};return{setMode:function(mode){strictMode=mode=="strict"?true:false;return this;},setUrl:function(newUri){options.url=newUri===undefined?window.location:newUri;setUp();return this;},segment:function(pos){if(!parsed.length){setUp();}if(pos===undefined){return segments.length;}return(segments[pos]===""||segments[pos]===undefined)?null:segments[pos];},attr:key,param:param};}();

/**
 * jQuery-Plugin "preloadCssImages"
 * by Scott Jehl, scott@filamentgroup.com
 * http://www.filamentgroup.com
 * reference article: http://www.filamentgroup.com/lab/update_automatically_preload_images_from_css_with_jquery/
 * demo page: http://www.filamentgroup.com/examples/preloadImages/index_v2.php
 * 
 * Copyright (c) 2008 Filament Group, Inc
 * Dual licensed under the MIT (filamentgroup.com/examples/mit-license.txt) and GPL (filamentgroup.com/examples/gpl-license.txt) licenses.
 *
 * Version: 5.0, 10.31.2008 / MODIFIED BY ADAM LEVASSEUR @ EXPOTV.COM
 * Changelog:
 *  02.20.2008 initial Version 1.0
 *    06.04.2008 Version 2.0 : removed need for any passed arguments. Images load from any and all directories.
 *    06.21.2008 Version 3.0 : Added options for loading status. Fixed IE abs image path bug (thanks Sam Pohlenz).
 *    07.24.2008 Version 4.0 : Added support for @imported CSS (credit: http://marcarea.com/). Fixed support in Opera as well. 
 *    10.31.2008 Version: 5.0 : Many feature and performance enhancements from trixta
 * --------------------------------------------------------------------
 */

;jQuery.preloadCssImages = function(settings){
    settings = jQuery.extend({
        statusTextEl: null,
        statusBarEl: null,
        errorDelay: 999, // handles 404-Errors in IE
        simultaneousCacheLoading: 2
    }, settings);
    var allImgs = [],
        loaded = 0,
        imgUrls = [],
        thisSheetRules, 
        errorTimer;
    
    function onImgComplete(){
        clearTimeout(errorTimer);
        if (imgUrls && imgUrls.length && imgUrls[loaded]) {
            loaded++;
            if (settings.statusTextEl) {
                var nowloading = (imgUrls[loaded]) ? 
                    'Now Loading: <span>' + imgUrls[loaded].split('/')[imgUrls[loaded].split('/').length - 1] : 
                    'Loading complete'; // wrong status-text bug fixed
                jQuery(settings.statusTextEl).html('<span class="numLoaded">' + loaded + '</span> of <span class="numTotal">' + imgUrls.length + '</span> loaded (<span class="percentLoaded">' + (loaded / imgUrls.length * 100).toFixed(0) + '%</span>) <span class="currentImg">' + nowloading + '</span></span>');
            }
            if (settings.statusBarEl) {
                var barWidth = jQuery(settings.statusBarEl).width();
                jQuery(settings.statusBarEl).css('background-position', -(barWidth - (barWidth * loaded / imgUrls.length).toFixed(0)) + 'px 50%');
            }
            loadImgs();
        }
    }
    
    function loadImgs(){
        //only load 1 image at the same time / most browsers can only handle 2 http requests, 1 should remain for user-interaction (Ajax, other images, normal page requests...)
        // otherwise set simultaneousCacheLoading to a higher number for simultaneous downloads
        if(imgUrls && imgUrls.length && imgUrls[loaded]){
            var img = new Image(); //new img obj
            img.src = imgUrls[loaded];  //set src either absolute or rel to css dir
            if(!img.complete){
                jQuery(img).bind('error load onreadystatechange', onImgComplete);
            } else {
                onImgComplete();
            }
            errorTimer = setTimeout(onImgComplete, settings.errorDelay); // handles 404-Errors in IE
        }
    }
    
    function parseCSS(sheets, urls) {
        var w3cImport = false,
            imported = [],
            importedSrc = [],
            baseURL;
        var sheetIndex = sheets.length;
        while(sheetIndex--){//loop through each stylesheet
            
            var cssPile = '';//create large string of all css rules in sheet
            
            if(urls && urls[sheetIndex]){
                baseURL = urls[sheetIndex];
            } else {
                var csshref = (sheets[sheetIndex].href) ? sheets[sheetIndex].href : 'window.location.href';
                if (csshref.match(/^https?:\/\//)) continue;
                var baseURLarr = csshref.split('/');//split href at / to make array
                baseURLarr.pop();//remove file path from baseURL array
                baseURL = baseURLarr.join('/');//create base url for the images in this sheet (css file's dir)
                if (baseURL) {
                    baseURL += '/'; //tack on a / if needed
                }
            }
            if(sheets[sheetIndex].cssRules || sheets[sheetIndex].rules){
                thisSheetRules = (sheets[sheetIndex].cssRules) ? //->>> http://www.quirksmode.org/dom/w3c_css.html
                    sheets[sheetIndex].cssRules : //w3
                    sheets[sheetIndex].rules; //ie 
                var ruleIndex = thisSheetRules.length;
                while(ruleIndex--){
                    if(thisSheetRules[ruleIndex].style && thisSheetRules[ruleIndex].style.cssText){
                        var text = thisSheetRules[ruleIndex].style.cssText;
                        if(text.toLowerCase().indexOf('url') != -1){ // only add rules to the string if you can assume, to find an image, speed improvement
                            cssPile += text; // thisSheetRules[ruleIndex].style.cssText instead of thisSheetRules[ruleIndex].cssText is a huge speed improvement
                        }
                    } else if(thisSheetRules[ruleIndex].styleSheet) {
                        imported.push(thisSheetRules[ruleIndex].styleSheet);
                        w3cImport = true;
                    }
                    
                }
            }
            //parse cssPile for image urls
            var tmpImage = cssPile.match(/[^\("]+\.(gif|jpg|jpeg|png)/g);//reg ex to get a string of between a "(" and a ".filename" / '"' for opera-bugfix
            if(tmpImage){
                var i = tmpImage.length;
                while(i--){ // handle baseUrl here for multiple stylesheets in different folders bug
                    var imgSrc = (tmpImage[i].charAt(0) == '/' || tmpImage[i].match('://')) ? // protocol-bug fixed
                        tmpImage[i] : 
                        baseURL + tmpImage[i];
                    
                    if(jQuery.inArray(imgSrc, imgUrls) == -1){
                        imgUrls.push(imgSrc);
                    }
                }
            }
            
            if(!w3cImport && sheets[sheetIndex].imports && sheets[sheetIndex].imports.length) {
                for(var iImport = 0, importLen = sheets[sheetIndex].imports.length; iImport < importLen; iImport++){
                    var iHref = sheets[sheetIndex].imports[iImport].href;
                    iHref = iHref.split('/');
                    iHref.pop();
                    iHref = iHref.join('/');
                    if (iHref) {
                        iHref += '/'; //tack on a / if needed
                    }
                    var iSrc = (iHref.charAt(0) == '/' || iHref.match('://')) ? // protocol-bug fixed
                        iHref : 
                        baseURL + iHref;
                    
                    importedSrc.push(iSrc);
                    imported.push(sheets[sheetIndex].imports[iImport]);
                }
                
                
            }
        }//loop
        if(imported.length){
            parseCSS(imported, importedSrc);
            return false;
        }
        var downloads = settings.simultaneousCacheLoading;
        while( downloads--){
            setTimeout(loadImgs, downloads);
        }
    }
    parseCSS(document.styleSheets);
    return imgUrls;
};

/**
 * Cookie plugin
 *
 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *

 * Create a cookie with the given name and value and other optional parameters.
 *
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Set the value of a cookie.
 * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
 * @desc Create a cookie with all available options.
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Create a session cookie.
 * @example $.cookie('the_cookie', null);
 * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
 *       used when the cookie was set.
 *
 * @param String name The name of the cookie.
 * @param String value The value of the cookie.
 * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
 * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
 *                             If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
 *                             If set to null or omitted, the cookie will be a session cookie and will not be retained
 *                             when the the browser exits.
 * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
 * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
 * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
 *                        require a secure protocol (like HTTPS).
 * @type undefined
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 *

 * Get the value of a cookie with the given name.
 *
 * @example $.cookie('the_cookie');
 * @desc Get the value of a cookie.
 *
 * @param String name The name of the cookie.
 * @return The value of the cookie.
 * @type String
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */
jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        // CAUTION: Needed to parenthesize options.path and options.domain
        // in the following expressions, otherwise they evaluate to undefined
        // in the packed version for some reason...
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};

(function($){$.toJSON=function(o)
{if(typeof(JSON)=='object'&&JSON.stringify)
return JSON.stringify(o);var type=typeof(o);if(o===null)
return"null";if(type=="undefined")
return undefined;if(type=="number"||type=="boolean")
return o+"";if(type=="string")
return $.quoteString(o);if(type=='object')
{if(typeof o.toJSON=="function")
return $.toJSON(o.toJSON());if(o.constructor===Date)
{var month=o.getUTCMonth()+1;if(month<10)month='0'+month;var day=o.getUTCDate();if(day<10)day='0'+day;var year=o.getUTCFullYear();var hours=o.getUTCHours();if(hours<10)hours='0'+hours;var minutes=o.getUTCMinutes();if(minutes<10)minutes='0'+minutes;var seconds=o.getUTCSeconds();if(seconds<10)seconds='0'+seconds;var milli=o.getUTCMilliseconds();if(milli<100)milli='0'+milli;if(milli<10)milli='0'+milli;return'"'+year+'-'+month+'-'+day+'T'+
hours+':'+minutes+':'+seconds+'.'+milli+'Z"';}
if(o.constructor===Array)
{var ret=[];for(var i=0;i<o.length;i++)
ret.push($.toJSON(o[i])||"null");return"["+ret.join(",")+"]";}
var pairs=[];for(var k in o){var name;var type=typeof k;if(type=="number")
name='"'+k+'"';else if(type=="string")
name=$.quoteString(k);else
continue;if(typeof o[k]=="function")
continue;var val=$.toJSON(o[k]);pairs.push(name+":"+val);}
return"{"+pairs.join(", ")+"}";}};$.evalJSON=function(src)
{if(typeof(JSON)=='object'&&JSON.parse)
return JSON.parse(src);return eval("("+src+")");};$.secureEvalJSON=function(src)
{if(typeof(JSON)=='object'&&JSON.parse)
return JSON.parse(src);var filtered=src;filtered=filtered.replace(/\\["\\\/bfnrtu]/g,'@');filtered=filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']');filtered=filtered.replace(/(?:^|:|,)(?:\s*\[)+/g,'');if(/^[\],:{}\s]*$/.test(filtered))
return eval("("+src+")");else
throw new SyntaxError("Error parsing JSON, source is not valid.");};$.quoteString=function(string)
{if(string.match(_escapeable))
{return'"'+string.replace(_escapeable,function(a)
{var c=_meta[a];if(typeof c==='string')return c;c=a.charCodeAt();return'\\u00'+Math.floor(c/16).toString(16)+(c%16).toString(16);})+'"';}
return'"'+string+'"';};var _escapeable=/["\\\x00-\x1f\x7f-\x9f]/g;var _meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'};})(jQuery);

/*  
    Watermark plugin for jQuery
    Version: 3.0.1
    http://jquery-watermark.googlecode.com/

    Copyright (c) 2009 Todd Northrop
    http://www.speednet.biz/
    
    September 11, 2009

    Requires:  jQuery 1.2.3+
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version, subject to the following conditions:
    
    The above copyright notice and this permission notice shall be
    included in all copies or substantial portions of the Software.
    
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
------------------------------------------------------*/

(function ($) {

var
    // Will speed up references to undefined
    undefined,

    // String constants for data names
    dataFlag = "watermark",
    dataClass = "watermarkClass",
    dataFocus = "watermarkFocus",
    dataFormSubmit = "watermarkSubmit",
    dataMaxLen = "watermarkMaxLength",
    dataPassword = "watermarkPassword",
    dataText = "watermarkText",
    
    // Includes only elements with watermark defined
    selWatermarkDefined = ":data(" + dataFlag + ")",

    // Includes only elements capable of having watermark
    selWatermarkAble = ":text,:password,:search,textarea";

// Extends jQuery with a custom selector - ":data(...)"
// :data(<name>)  Includes elements that have a specific name defined in the jQuery data collection. (Only the existence of the name is checked; the value is ignored.)
// :data(<name>=<value>)  Includes elements that have a specific jQuery data name defined, with a specific value associated with it.
// :data(<name>!=<value>)  Includes elements that have a specific jQuery data name defined, with a value that is not equal to the value specified.
// :data(<name>^=<value>)  Includes elements that have a specific jQuery data name defined, with a value that starts with the value specified.
// :data(<name>$=<value>)  Includes elements that have a specific jQuery data name defined, with a value that ends with the value specified.
// :data(<name>*=<value>)  Includes elements that have a specific jQuery data name defined, with a value that contains the value specified.
$.extend($.expr[":"], {
    "data": function (element, index, matches, set) {
        var data, parts = /^((?:[^=!^$*]|[!^$*](?!=))+)(?:([!^$*]?=)(.*))?$/.exec(matches[3]);
        if (parts) {
            data = $(element).data(parts[1]);
            
            if (data !== undefined) {

                if (parts[2]) {
                    data = "" + data;
                
                    switch (parts[2]) {
                        case "=":
                            return (data == parts[3]);
                        case "!=":
                            return (data != parts[3]);
                        case "^=":
                            return (data.slice(0, parts[3].length) == parts[3]);
                        case "$=":
                            return (data.slice(-parts[3].length) == parts[3]);
                        case "*=":
                            return (data.indexOf(parts[3]) !== -1);
                    }
                }

                return true;
            }
        }
        
        return false;
    }
});

$.watermark = {

    // Current version number of the plugin
    version: "3.0",

    // Default options used when watermarks are instantiated.
    // Can be changed to affect the default behavior for all
    // new or updated watermarks.
    // BREAKING CHANGE:  The $.watermark.className
    // property that is present in all previous versions must now
    // be referenced as $.watermark.options.className
    options: {
        
        // Default class name for all watermarks
        className: "watermark",
        
        // If true, plugin will detect and use native browser support for
        // watermarks, if available. (e.g., WebKit's placeholder attribute.)
        useNative: true
    },
    
    // Hide one or more watermarks by specifying any selector type
    // i.e., DOM element, string selector, jQuery matched set, etc.
    hide: function (selector) {
        $(selector).filter(selWatermarkDefined).each(
            function () {
                $.watermark._hide($(this));
            }
        );
    },
    
    // Internal use only.
    _hide: function ($input, focus) {
    
        if ($input.val() == $input.data(dataText)) {
            $input.val("");
            
            // Password type?
            if ($input.data(dataPassword)) {
                
                if ($input.attr("type") === "text") {
                    var $pwd = $input.data(dataPassword), 
                        $wrap = $input.parent();
                        
                    $wrap[0].removeChild($input[0]); // Can't use jQuery methods, because they destroy data
                    $wrap[0].appendChild($pwd[0]);
                    $input = $pwd;
                }
            }
            
            if ($input.data(dataMaxLen)) {
                $input.attr("maxLength", $input.data(dataMaxLen));
                $input.removeData(dataMaxLen);
            }
        
            if (focus) {
                $input.attr("autocomplete", "off");  // Avoid NS_ERROR_XPC_JS_THREW_STRING error in Firefox
                window.setTimeout(
                    function () {
                        $input.select();  // Fix missing cursor in IE
                    }
                , 0);
            }
        }
        
        $input.removeClass($input.data(dataClass));
    },
    
    // Display one or more watermarks by specifying any selector type
    // i.e., DOM element, string selector, jQuery matched set, etc.
    // If conditions are not right for displaying a watermark, ensures that watermark is not shown.
    show: function (selector) {
        $(selector).filter(selWatermarkDefined).each(
            function () {
                $.watermark._show($(this));
            }
        );
    },
    
    // Internal use only.
    _show: function ($input) {
        var val = $input.val(), text = $input.data(dataText), type = $input.attr("type");

        if (((val.length == 0) || (val == text)) && (!$input.data(dataFocus))) {
        
            // Password type?
            if ($input.data(dataPassword)) {
                
                if (type === "password") {
                    var $wm = $input.data(dataPassword),
                        $wrap = $input.parent();
                        
                    $wrap[0].removeChild($input[0]); // Can't use jQuery methods, because they destroy data
                    $wrap[0].appendChild($wm[0]);
                    $input = $wm;
                    $input.attr("maxLength", text.length);
                }
            }
        
            // Ensure maxLength big enough to hold watermark (input of type="text" or type="search" only)
            if ((type === "text") || (type === "search")) {
                var maxLen = $input.attr("maxLength");
                
                if ((maxLen > 0) && (text.length > maxLen)) {
                    $input.data(dataMaxLen, maxLen);
                    $input.attr("maxLength", text.length);
                }
            }
            
            $input.addClass($input.data(dataClass));
            $input.val(text);
        }
        else {
            $.watermark._hide($input);
        }
    },
    
    // Hides all watermarks on the current page.
    hideAll: function () {
        $.watermark.hide(selWatermarkAble);
    },
    
    // Displays all watermarks on the current page.
    showAll: function () {
        $.watermark.show(selWatermarkAble);
    }
};


// MODDED: fixed IE7 bug in the override submit function.
$.fn.watermark = function (text, options) {
    /// <summary>
    ///     Set watermark text and class name on all input elements of type="text/password/search" and
    ///     textareas within the matched set. If className is not specified in options, the default is
    ///     "watermark". Within the matched set, only input elements with type="text/password/search"
    ///     and textareas are affected; all other elements are ignored.
    /// </summary>
    /// <returns type="jQuery">
    ///     Returns the original jQuery matched set (not just the input and texarea elements).
    /// </returns>
    /// <param name="text" type="String">
    ///     Text to display as a watermark when the input or textarea element has an empty value and does not
    ///     have focus. The first time watermark() is called on an element, if this argument is empty (or not
    ///     a String type), then the watermark will have the net effect of only changing the class name when
    ///     the input or textarea element's value is empty and it does not have focus.
    /// </param>
    /// <param name="options" type="Object" optional="true">
    ///     Provides the ability to override the default watermark options ($.watermark.options). For backward
    ///     compatibility, if a string value is supplied, it is used as the class name that overrides the class
    ///     name in $.watermark.options.className. Properties include:
    ///         className: When the watermark is visible, the element will be styled using this class name.
    ///         useNative (Boolean or Function): Specifies if native browser support for watermarks will supersede
    ///             plugin functionality. If useNative is a function, the return value from the function will
    ///             determine if native support is used. The function is passed one argument -- a jQuery object
    ///             containing the element being tested as the only element in its matched set -- and the DOM
    ///             element being tested is the object on which the function is invoked (the value of "this").
    /// </param>
    /// <remarks>
    ///     The effect of changing the text and class name on an input element is called a watermark because
    ///     typically light gray text is used to provide a hint as to what type of input is required. However,
    ///     the appearance of the watermark can be something completely different: simply change the CSS style
    ///     pertaining to the supplied class name.
    ///     
    ///     The first time watermark() is called on an element, the watermark text and class name are initialized,
    ///     and the focus and blur events are hooked in order to control the display of the watermark.  Also, as
    ///     of version 3.0, drag and drop events are hooked to guard against dropped text being appended to the
    ///     watermark.  If native watermark support is provided by the browser, it is detected and used, unless
    ///     the useNative option is set to false.
    ///     
    ///     Subsequently, watermark() can be called again on an element in order to change the watermark text
    ///     and/or class name, and it can also be called without any arguments in order to refresh the display.
    ///     
    ///     For example, after changing the value of the input or textarea element programmatically, watermark()
    ///     should be called without any arguments to refresh the display, because the change event is only
    ///     triggered by user actions, not by programmatic changes to an input or textarea element's value.
    ///     
    ///     The one exception to programmatic updates is for password input elements:  you are strongly cautioned
    ///     against changing the value of a password input element programmatically (after the page loads).
    ///     The reason is that some fairly hairy code is required behind the scenes to make the watermarks bypass
    ///     IE security and switch back and forth between clear text (for watermarks) and obscured text (for
    ///     passwords).  It is *possible* to make programmatic changes, but it must be done in a certain way, and
    ///     overall it is not recommended.
    /// </remarks>
    
    var hasText = (typeof(text) === "string"), hasClass;
    
    if (typeof(options) === "object") {
        hasClass = (typeof(options.className) === "string");
        options = $.extend({}, $.watermark.options, options);
    }
    else if (typeof(options) === "string") {
        hasClass = true;
        options = $.extend({}, $.watermark.options, {className: options});
    }
    else {
        options = $.watermark.options;
    }
    
    if (typeof(options.useNative) !== "function") {
        options.useNative = options.useNative? function () { return true; } : function () { return false; };
    }
    
    return this.each(
        function () {
            var $input = $(this);
            
            if (!$input.is(selWatermarkAble)) {
                return;
            }
            
            // Watermark already initialized?
            if ($input.data(dataFlag)) {
            
                // If re-defining text or class, first remove existing watermark, then make changes
                if (hasText || hasClass) {
                    $.watermark._hide($input);
            
                    if (hasText) {
                        $input.data(dataText, text);
                    }
                    
                    if (hasClass) {
                        $input.data(dataClass, options.className);
                    }
                }
            }
            else {
            
                // Detect and use native browser support, if enabled in options
                if (options.useNative.call(this, $input)) {
                    
                    // Placeholder attribute (WebKit)
                    // Big thanks to Opera for the wacky test required
                    if ((("" + $input.css("-webkit-appearance")).replace("undefined", "") !== "") && ($input.attr("tagName") !== "TEXTAREA")) {
                        
                        // className is not set because WebKit doesn't appear to have
                        // a separate class name property for placeholders (watermarks).
                        if (hasText) {
                            $input.attr("placeholder", text);
                        }
                        
                        // Only set data flag for non-native watermarks (purposely commented-out)
                        // $input.data(dataFlag, 1);
                        return;
                    }
                }
                
                $input.data(dataText, hasText? text : "");
                $input.data(dataClass, options.className);
                $input.data(dataFlag, 1); // Flag indicates watermark was initialized
                
                // Special processing for password type
                if ($input.attr("type") === "password") {
                    var $wrap = $input.wrap("<span>").parent();
                    var $wm = $($wrap.html().replace(/type=["']?password["']?/i, 'type="text"'));
                    
                    $wm.data(dataText, $input.data(dataText));
                    $wm.data(dataClass, $input.data(dataClass));
                    $wm.data(dataFlag, 1);
                    $wm.attr("maxLength", text.length);
                    
                    $wm.focus(
                        function () {
                            $.watermark._hide($wm, true);
                        }
                    ).bind("dragenter",
                        function () {
                            $.watermark._hide($wm);
                        }
                    ).bind("dragend",
                        function () {
                            window.setTimeout(function () { $wm.blur(); }, 1);
                        }
                    );
                    $input.blur(
                        function () {
                            $.watermark._show($input);
                        }
                    ).bind("dragleave",
                        function () {
                            $.watermark._show($input);
                        }
                    );
                    
                    $wm.data(dataPassword, $input);
                    $input.data(dataPassword, $wm);
                }
                else {
                    
                    $input.focus(
                        function () {
                            $input.data(dataFocus, 1);
                            $.watermark._hide($input, true);
                        }
                    ).blur(
                        function () {
                            $input.data(dataFocus, 0);
                            $.watermark._show($input);
                        }
                    ).bind("dragenter",
                        function () {
                            $.watermark._hide($input);
                        }
                    ).bind("dragleave",
                        function () {
                            $.watermark._show($input);
                        }
                    ).bind("dragend",
                        function () {
                            window.setTimeout(function () { $.watermark._show($input); }, 1);
                        }
                    ).bind("drop",
                        // Firefox makes this lovely function necessary because the dropped text
                        // is merged with the watermark before the drop event is called.
                        function (evt) {
                            var dropText = evt.originalEvent.dataTransfer.getData("Text");
                            
                            if ($input.val().replace(dropText, "") === $input.data(dataText)) {
                                $input.val(dropText);
                            }
                            
                            $input.focus();
                        }
                    );
                }
                
                // In order to reliably clear all watermarks before form submission,
                // we need to replace the form's submit function with our own
                // function.  Otherwise watermarks won't be cleared when the form
                // is submitted programmatically.
                
                var $form = $(this.form);
                
                if (!$form.data(dataFormSubmit)) {
                    $form.data(dataFormSubmit, this.form.submit);
                    $form.submit($.watermark.hideAll);
                    
                    /*this.form.submit = function () {
                        var nativeSubmit = $form.data(dataFormSubmit);
                        
                        
                        if (nativeSubmit.apply) {
                            nativeSubmit.apply($form[0], arguments);
                        }
                        else {
                            nativeSubmit();
                        }
                    };*/
                    
                    $form.bindIntoStack(0, 'submit', function()
                    {
                        $.watermark.hideAll();
                    });
                    
                }
            }
            
            $.watermark._show($input);
        }
    ).end();
};

})(jQuery);


/*!
 * jStack - jQuery Event Stack Management
 * by Eric Garside (http://eric.garside.name) FROM: http://snipplr.com/view/13515/jstack--jquery-event-stack-management/
 * 
 * Dual licensed under:
 *  MIT: http://www.opensource.org/licenses/mit-license.php
 *  GPLv3: http://www.opensource.org/licenses/gpl-3.0.html
 */
(function($){$.extend($.fn,{cachePosition:function(){return $.data(this[0]);},bindIntoStack:function(pos,type,func){return this.each(function(){var namespaces=type.split("."),evType=namespaces.shift(),el=$(this),position=el.cachePosition();if(!position)return;var cache=$.cache[position];el.bind(type,func);if(!cache||!cache.events||!cache.events[evType])return;var events=cache.events[evType],fromExpando=[],toReplace=null,i=0;$.each(events,function(k){fromExpando.push(k);if(i==pos)toReplace=this;++i;})
if(!toReplace)return;var newPos=fromExpando.pop();$.cache[position].events[evType][fromExpando[pos]]=$.cache[position].events[evType][newPos];$.cache[position].events[evType][newPos]=toReplace;})
return this;}});})(jQuery);;

/****** /utils/common.js ******/

/**
 * $Id: common.js 19967 2009-10-28 22:58:38Z ajl $
 * @author alevasseur-arribas
 */
if (typeof console == "undefined") { var console = {}; console.log = function(){}; } //fail silently in IE         
if (typeof EXPOTV == "undefined") { var EXPOTV = {}; }

$U = EXPOTV.utils = new function()
{
	var self = this;
	
	this.init = function()
	{
		/* IE6 background-image cache fix: force background-image cache*/
		try {
		  document.execCommand("BackgroundImageCache", false, true);
		} catch(err) {}
		
		self.initNavbar();
		self.initSearchBox();
		self.initShrinkByWidth();
		self.initWatermarks();
		$.preloadCssImages();
	};
	
	/*
	 * Pre-init functions:
	 *  These are to be called from the html as soon as that section of the html is loaded.
	 */
	     
    this.preInitQuickLogin = function()
    {
        var $quickLoginWrap = $('.quick-login-wrap');
        var $loginText = $('.login-text');
        
        $quickLoginWrap.find('input[name=username]').watermark('Username');
        $quickLoginWrap.find('input[name=password]').watermark('Password');
            
        $('#loginBar a.loginLink').one('click', function(e)
        {
            e.preventDefault();
            $loginText.css('display', 'none');
            $quickLoginWrap
                .css('display', 'inline')
                .find('input:first').focus();
            
            $(this).click(function(e)
            {
                e.preventDefault();
                $quickLoginWrap.find('form').submit();
            });
        });
    };
    
    this.preInitSearch = function()
    {
    	var $search = $('.search');
    	$search.find('input[name=query]').watermark('Search by product name or brand...');
    }
	
	/////////////////////////
	
	this.initShrinkByWidth = function()
	{
        $(".shrinkByWidth").each(function() {
            var targetWidth = $(this).parent(':first').width();
            
            if (isNaN(parseInt($(this).css("font-size"))))
                $(this).css("font-size", '24px');
    
            while ($(this).width() > targetWidth) 
            {
                $(this).css("font-size", (parseInt($(this).css("font-size")) - 1) + 'px');
            }
        }); 
	};
	
    /* function to insert style sheet directly after title tag
     * the style sheet can then hide those elements that need to have events attached with js
     * Those elements can then be exposed using js after events are attached. */
	this.addHasJSStyleSheet = function(strUrl)
    {
        var strCssUrl = strUrl;
        var tempLink = document.createElement("link");
        tempLink.setAttribute("rel", "stylesheet");
        tempLink.setAttribute("type", "text/css");
        tempLink.setAttribute("href", strCssUrl);
        var titleEl = document.getElementsByTagName("title")[0];
        $('title:first').after(tempLink)
        //YAHOO.util.Dom.insertAfter(tempLink, titleEl);
    };
    
    /* function used for quick selectbox navigation */
    this.selectNavigationHandler = function()
    {
        var selectEl = this;
        var selectValueStr = selectEl.options[selectEl.selectedIndex].value;
        if (selectValueStr !== "null")
        {
            window.location.href = selectValueStr;
            return true;
        }
        return false;
    };
    
    this.rand = function()
    {
    	return Math.ceil(Math.random()*10000000000001);
    };
    
	this.isEventSupported = (function()
	{
		var TAGNAMES = 
		{
		    'select':'input','change':'input',
		    'submit':'form','reset':'form',
		    'error':'img','load':'img','abort':'img'
		}, 
        cache = { };
        
        function isEventSupported(eventName, element) 
        {
		    var canCache = (arguments.length == 1);
		    
		    if (eventName == 'beforeunload')
		    {
		    	element = typeof window.onbeforeunload != 'undefined' ? window : void 0;
		    }
		
		    // only return cached result when no element is given
		    if (canCache && cache[eventName]) {
		        return cache[eventName];
		    }
		
		    element = element || document.createElement(TAGNAMES[eventName] || 'div');
		    eventName = 'on' + eventName;
		
		    // When using `setAttribute`, IE skips "unload", WebKit skips "unload" and "resize"
		    // `in` "catches" those
		    var isSupported = (eventName in element);
		
		    if (!isSupported && element.setAttribute) {
		        element.setAttribute(eventName, 'return;');
		        isSupported = typeof element[eventName] == 'function';
		    }
		
		    element = null;
		    return canCache ? (cache[eventName] = isSupported) : isSupported;
        }
        return isEventSupported;
	})();
    
    this.getFormValues = function(form)
    {
    	var $form = (typeof(form) == 'string') ? $("#" + form) : form;
        var $fields = $form.find("input:not(:checkbox, :radio), input:checkbox:checked, " +
                                 "input:radio:checked, select, textarea");
        var formValuesObj = {};

        $fields.each(function()
        {
            var fieldName =  $(this).attr("name");
            var fieldValue = $(this).val();

            formValuesObj[fieldName] = fieldValue;
        });

        return formValuesObj;
    };
    
    this.getParam = function(param) // for when $.url doesn't work..
    {
        param = param.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
        var regexS = "[\\?&]"+param+"=([^&#]*)";
        var regex = new RegExp( regexS );
        var results = regex.exec( window.location.href );
        
        if( results == null )
          return null;
        else
            return results[1];
    }
    
    this.getPageSizeArray = function()
    {
        var xScroll, yScroll;
        
        if (window.innerHeight && window.scrollMaxY) 
        {  
            xScroll = document.body.scrollWidth;
            yScroll = window.innerHeight + window.scrollMaxY;
        } 
        else if (document.body.scrollHeight > document.body.offsetHeight) // all but Explorer Mac
        { 
            xScroll = document.body.scrollWidth;
            yScroll = document.body.scrollHeight;
        } 
        else // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari 
        { 
            xScroll = document.body.offsetWidth;
            yScroll = document.body.offsetHeight;
        }
        
        var windowWidth, windowHeight;
        if (self.innerHeight) // all except Explorer 
        { 
            windowWidth = self.innerWidth;
            windowHeight = self.innerHeight;
        } 
        else if (document.documentElement && document.documentElement.clientHeight) // Explorer 6 Strict Mode 
        { 
            windowWidth = document.documentElement.clientWidth;
            windowHeight = document.documentElement.clientHeight;
        } 
        else if (document.body) // other Explorers 
        {
            windowWidth = document.body.clientWidth;
            windowHeight = document.body.clientHeight;
        }   
        
        // for small pages with total height less then height of the viewport
        if(yScroll < windowHeight)
        {
            pageHeight = windowHeight;
        } 
        else 
        { 
            pageHeight = yScroll;
        }
    
        // for small pages with total width less then width of the viewport
        if(xScroll < windowWidth)
        {  
            pageWidth = windowWidth;
        }
        else 
        {
            pageWidth = xScroll;
        }
    
        arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
        return arrayPageSize;
    };
    
    this.getPageScrollArray = function()
    {
        var yScroll;
    
        if (self.pageYOffset) 
        {
            yScroll = self.pageYOffset;
        } 
        else if (document.documentElement && document.documentElement.scrollTop) // Explorer 6 Strict
        {  
            yScroll = document.documentElement.scrollTop;
        } 
        else if (document.body) // all other Explorers 
        {
            yScroll = document.body.scrollTop;
        }
    
        arrayPageScroll = new Array('',yScroll);
        return arrayPageScroll;
    };
	
	/* for top navbar dropdowns and selected states */
	this.initNavbar = function()
    {
		/* add rounded corners to first and last tab*/
		$('.menu-wrapper li').each(function(i){
			if($(this).is(':first-child')) $(this).find('a').addClass("top_left_round_5");
			if($(this).is(':last-child')) $(this).find('a').addClass("top_right_round_5");
		});
		
		/* find selected state*/
		var urlString = document.URL.split('.com')[1];
		$('.menu-wrapper li a').each(function(i)
		{
			var linkStr = $(this).attr("href");
			if(urlString.length == 1 && linkStr.length == 1){
				$(this).addClass("selected");
			}
			else if (urlString.match(linkStr) && linkStr.length > 1){
				$(this).addClass("selected");
			}
		});
		
		/* explore tab drop down */
        $(".explore").toggle(function()
        {
        	
        	$('.menu-wrapper').addClass("drop-down-active");
        	//$('.drop-down').css("display", 'block');
        	$(this).addClass('on');
        	$('.drop-down').hide().fadeIn('fast');
            
        },function()
        {
        	$('.menu-wrapper').removeClass("drop-down-active");
        	$('.drop-down').fadeOut('fast');
        	$(this).removeClass('on');
        });

        $(".close-dd").click(function()
		{
        	$('.menu-wrapper').removeClass("drop-down-active");
        	$('.drop-down').fadeOut('fast');
        	$(this).removeClass('on');
		});
        
        /* IE ROUNDED CORNERS HACK */
        DD_roundies.addRule('.round_5', '5px');
        DD_roundies.addRule('.top_right_round_5', '0 10px 0 0');
        DD_roundies.addRule('.top_left_round_5', '10px 0 0 0');
        DD_roundies.addRule('.top_round_5', '10px 10px 0 0');
        DD_roundies.addRule('.top_round_10', '10px 10px 0 0');
        DD_roundies.addRule('.bottom_round_10', '0 0 10px 10px');
        DD_roundies.addRule('.round_15', '15px');
    };
    
    this.initSearchBox = function()
    {
        var $searchBox = $('#txtHeaderSearchBox');
        
        if (!$searchBox.val())
        {
            //$searchBox.focus();
        }
        else
        {
        	$('#txtHeaderSearchBox').one('focus', function()
        	{
        		this.select();
        	});
        }
    };
    
    this.initWatermarks = function()
    {
        $('input.watermark').each(function(i)
        {
            var watermarkStr = $(this).attr('class').match(/watermark:'(.*)'/);
            
            if (watermarkStr && watermarkStr[1])
            {
                $(this).watermark(watermarkStr[1]);
            }
        });
    };
    
    this.showLoading = function()
    {
    	$('#pleaseWait').fadeIn('fast');
    };
    
    this.hideLoading = function()
    {
    	$('#pleaseWait').fadeOut('fast');
    };
    
	$(window).bind('ajaxError', function(ajaxError, xhr, etc)
	{
		self.hideLoading();
		console.log(ajaxError);
		console.log(xhr);
		console.log(etc);
	});
}

// Misc prototypes:
String.prototype.format = function()
{
    var txt = this;
    for (var i=0;i<arguments.length;i++)
    {
        var exp = new RegExp('\\{' + (i) + '\\}','gm');
        txt = txt.replace(exp,arguments[i]);
    }
    return txt;
};

Array.prototype.remove = function(from, to) 
{
    var rest = this.slice((to || from) + 1 || this.length);
    this.length = from < 0 ? this.length + from : from;
    return this.push.apply(this, rest);
};

Array.prototype.removeVal = function(val)
{
    for ( var i = 0, length = this.length; i < length; i++ )
    {
        // Use === because on IE, window == document
        if ( this[ i ] === val )
        {
            this.remove(i);  
            return true;
        }
    }
    
    return false;
};

// Shortcuts:
$E = EXPOTV;
log = console.log;

///////////

$(EXPOTV.utils.init);


// Helpers:

var DD_roundies={ns:'DD_roundies',IE6:false,IE7:false,IE8:false,IEversion:function(){if(document.documentMode!=8&&document.namespaces&&!document.namespaces[this.ns]){this.IE6=true;this.IE7=true;}else if(document.documentMode==8){this.IE8=true;}},querySelector:document.querySelectorAll,selectorsToProcess:[],imgSize:{},createVmlNameSpace:function(){if(this.IE6||this.IE7){document.namespaces.add(this.ns,'urn:schemas-microsoft-com:vml');}if(this.IE8){document.writeln('<?import namespace="'+this.ns+'" implementation="#default#VML" ?>');}},createVmlStyleSheet:function(){var style=document.createElement('style');document.documentElement.firstChild.insertBefore(style,document.documentElement.firstChild.firstChild);if(style.styleSheet){try{var styleSheet=style.styleSheet;styleSheet.addRule(this.ns+'\\:*','{behavior:url(#default#VML)}');this.styleSheet=styleSheet;}catch(err){}}else{this.styleSheet=style;}},addRule:function(selector,rad,standards){if(typeof rad=='undefined'||rad===null){rad=0;}if(rad.constructor.toString().search('Array')==-1){rad=rad.toString().replace(/[^0-9 ]/g,'').split(' ');}for(var i=0;i<4;i++){rad[i]=(!rad[i]&&rad[i]!==0)?rad[Math.max((i-2),0)]:rad[i];}if(this.styleSheet){if(this.styleSheet.addRule){var selectors=selector.split(',');for(var i=0;i<selectors.length;i++){this.styleSheet.addRule(selectors[i],'behavior:expression(DD_roundies.roundify.call(this, ['+rad.join(',')+']))');}}else if(standards){var moz_implementation=rad.join('px ')+'px';this.styleSheet.appendChild(document.createTextNode(selector+' {border-radius:'+moz_implementation+'; -moz-border-radius:'+moz_implementation+';}'));this.styleSheet.appendChild(document.createTextNode(selector+' {-webkit-border-top-left-radius:'+rad[0]+'px '+rad[0]+'px; -webkit-border-top-right-radius:'+rad[1]+'px '+rad[1]+'px; -webkit-border-bottom-right-radius:'+rad[2]+'px '+rad[2]+'px; -webkit-border-bottom-left-radius:'+rad[3]+'px '+rad[3]+'px;}'));}}else if(this.IE8){this.selectorsToProcess.push({'selector':selector,'radii':rad});}},readPropertyChanges:function(el){switch(event.propertyName){case'style.border':case'style.borderWidth':case'style.padding':this.applyVML(el);break;case'style.borderColor':this.vmlStrokeColor(el);break;case'style.backgroundColor':case'style.backgroundPosition':case'style.backgroundRepeat':this.applyVML(el);break;case'style.display':el.vmlBox.style.display=(el.style.display=='none')?'none':'block';break;case'style.filter':this.vmlOpacity(el);break;case'style.zIndex':el.vmlBox.style.zIndex=el.style.zIndex;break;}},applyVML:function(el){el.runtimeStyle.cssText='';this.vmlFill(el);this.vmlStrokeColor(el);this.vmlStrokeWeight(el);this.vmlOffsets(el);this.vmlPath(el);this.nixBorder(el);this.vmlOpacity(el);},vmlOpacity:function(el){if(el.currentStyle.filter.search('lpha')!=-1){var trans=el.currentStyle.filter;trans=parseInt(trans.substring(trans.lastIndexOf('=')+1,trans.lastIndexOf(')')),10)/100;for(var v in el.vml){el.vml[v].filler.opacity=trans;}}},vmlFill:function(el){if(!el.currentStyle){return;}else{var elStyle=el.currentStyle;}el.runtimeStyle.backgroundColor='';el.runtimeStyle.backgroundImage='';var noColor=(elStyle.backgroundColor=='transparent');var noImg=true;if(elStyle.backgroundImage!='none'||el.isImg){if(!el.isImg){el.vmlBg=elStyle.backgroundImage;el.vmlBg=el.vmlBg.substr(5,el.vmlBg.lastIndexOf('")')-5);}else{el.vmlBg=el.src;}var lib=this;if(!lib.imgSize[el.vmlBg]){var img=document.createElement('img');img.attachEvent('onload',function(){this.width=this.offsetWidth;this.height=this.offsetHeight;lib.vmlOffsets(el);});img.className=lib.ns+'_sizeFinder';img.runtimeStyle.cssText='behavior:none; position:absolute; top:-10000px; left:-10000px; border:none;';img.src=el.vmlBg;img.removeAttribute('width');img.removeAttribute('height');document.body.insertBefore(img,document.body.firstChild);lib.imgSize[el.vmlBg]=img;}el.vml.image.filler.src=el.vmlBg;noImg=false;}el.vml.image.filled=!noImg;el.vml.image.fillcolor='none';el.vml.color.filled=!noColor;el.vml.color.fillcolor=elStyle.backgroundColor;el.runtimeStyle.backgroundImage='none';el.runtimeStyle.backgroundColor='transparent';},vmlStrokeColor:function(el){el.vml.stroke.fillcolor=el.currentStyle.borderColor;},vmlStrokeWeight:function(el){var borders=['Top','Right','Bottom','Left'];el.bW={};for(var b=0;b<4;b++){el.bW[borders[b]]=parseInt(el.currentStyle['border'+borders[b]+'Width'],10)||0;}},vmlOffsets:function(el){var dims=['Left','Top','Width','Height'];for(var d=0;d<4;d++){el.dim[dims[d]]=el['offset'+dims[d]];}var assign=function(obj,topLeft){obj.style.left=(topLeft?0:el.dim.Left)+'px';obj.style.top=(topLeft?0:el.dim.Top)+'px';obj.style.width=el.dim.Width+'px';obj.style.height=el.dim.Height+'px';};for(var v in el.vml){var mult=(v=='image')?1:2;el.vml[v].coordsize=(el.dim.Width*mult)+', '+(el.dim.Height*mult);assign(el.vml[v],true);}assign(el.vmlBox,false);if(DD_roundies.IE8){el.vml.stroke.style.margin='-1px';if(typeof el.bW=='undefined'){this.vmlStrokeWeight(el);}el.vml.color.style.margin=(el.bW.Top-1)+'px '+(el.bW.Left-1)+'px';}},vmlPath:function(el){var coords=function(direction,w,h,r,aL,aT,mult){var cmd=direction?['m','qy','l','qx','l','qy','l','qx','l']:['qx','l','qy','l','qx','l','qy','l','m'];aL*=mult;aT*=mult;w*=mult;h*=mult;var R=r.slice();for(var i=0;i<4;i++){R[i]*=mult;R[i]=Math.min(w/2,h/2,R[i]);}var coords=[cmd[0]+Math.floor(0+aL)+','+Math.floor(R[0]+aT),cmd[1]+Math.floor(R[0]+aL)+','+Math.floor(0+aT),cmd[2]+Math.ceil(w-R[1]+aL)+','+Math.floor(0+aT),cmd[3]+Math.ceil(w+aL)+','+Math.floor(R[1]+aT),cmd[4]+Math.ceil(w+aL)+','+Math.ceil(h-R[2]+aT),cmd[5]+Math.ceil(w-R[2]+aL)+','+Math.ceil(h+aT),cmd[6]+Math.floor(R[3]+aL)+','+Math.ceil(h+aT),cmd[7]+Math.floor(0+aL)+','+Math.ceil(h-R[3]+aT),cmd[8]+Math.floor(0+aL)+','+Math.floor(R[0]+aT)];if(!direction){coords.reverse();}var path=coords.join('');return path;};if(typeof el.bW=='undefined'){this.vmlStrokeWeight(el);}var bW=el.bW;var rad=el.DD_radii.slice();var outer=coords(true,el.dim.Width,el.dim.Height,rad,0,0,2);rad[0]-=Math.max(bW.Left,bW.Top);rad[1]-=Math.max(bW.Top,bW.Right);rad[2]-=Math.max(bW.Right,bW.Bottom);rad[3]-=Math.max(bW.Bottom,bW.Left);for(var i=0;i<4;i++){rad[i]=Math.max(rad[i],0);}var inner=coords(false,el.dim.Width-bW.Left-bW.Right,el.dim.Height-bW.Top-bW.Bottom,rad,bW.Left,bW.Top,2);var image=coords(true,el.dim.Width-bW.Left-bW.Right+1,el.dim.Height-bW.Top-bW.Bottom+1,rad,bW.Left,bW.Top,1);el.vml.color.path=inner;el.vml.image.path=image;el.vml.stroke.path=outer+inner;this.clipImage(el);},nixBorder:function(el){var s=el.currentStyle;var sides=['Top','Left','Right','Bottom'];for(var i=0;i<4;i++){el.runtimeStyle['padding'+sides[i]]=(parseInt(s['padding'+sides[i]],10)||0)+(parseInt(s['border'+sides[i]+'Width'],10)||0)+'px';}el.runtimeStyle.border='none';},clipImage:function(el){var lib=DD_roundies;if(!el.vmlBg||!lib.imgSize[el.vmlBg]){return;}var thisStyle=el.currentStyle;var bg={'X':0,'Y':0};var figurePercentage=function(axis,position){var fraction=true;switch(position){case'left':case'top':bg[axis]=0;break;case'center':bg[axis]=0.5;break;case'right':case'bottom':bg[axis]=1;break;default:if(position.search('%')!=-1){bg[axis]=parseInt(position,10)*0.01;}else{fraction=false;}}var horz=(axis=='X');bg[axis]=Math.ceil(fraction?((el.dim[horz?'Width':'Height']-(el.bW[horz?'Left':'Top']+el.bW[horz?'Right':'Bottom']))*bg[axis])-(lib.imgSize[el.vmlBg][horz?'width':'height']*bg[axis]):parseInt(position,10));bg[axis]+=1;};for(var b in bg){figurePercentage(b,thisStyle['backgroundPosition'+b]);}el.vml.image.filler.position=(bg.X/(el.dim.Width-el.bW.Left-el.bW.Right+1))+','+(bg.Y/(el.dim.Height-el.bW.Top-el.bW.Bottom+1));var bgR=thisStyle.backgroundRepeat;var c={'T':1,'R':el.dim.Width+1,'B':el.dim.Height+1,'L':1};var altC={'X':{'b1':'L','b2':'R','d':'Width'},'Y':{'b1':'T','b2':'B','d':'Height'}};if(bgR!='repeat'){c={'T':(bg.Y),'R':(bg.X+lib.imgSize[el.vmlBg].width),'B':(bg.Y+lib.imgSize[el.vmlBg].height),'L':(bg.X)};if(bgR.search('repeat-')!=-1){var v=bgR.split('repeat-')[1].toUpperCase();c[altC[v].b1]=1;c[altC[v].b2]=el.dim[altC[v].d]+1;}if(c.B>el.dim.Height){c.B=el.dim.Height+1;}}el.vml.image.style.clip='rect('+c.T+'px '+c.R+'px '+c.B+'px '+c.L+'px)';},pseudoClass:function(el){var self=this;setTimeout(function(){self.applyVML(el);},1);},reposition:function(el){this.vmlOffsets(el);this.vmlPath(el);},roundify:function(rad){this.style.behavior='none';if(!this.currentStyle){return;}else{var thisStyle=this.currentStyle;}var allowed={BODY:false,TABLE:false,TR:false,TD:false,SELECT:false,OPTION:false,TEXTAREA:false};if(allowed[this.nodeName]===false){return;}var self=this;var lib=DD_roundies;this.DD_radii=rad;this.dim={};var handlers={resize:'reposition',move:'reposition'};if(this.nodeName=='A'){var moreForAs={mouseleave:'pseudoClass',mouseenter:'pseudoClass',focus:'pseudoClass',blur:'pseudoClass'};for(var a in moreForAs){handlers[a]=moreForAs[a];}}for(var h in handlers){this.attachEvent('on'+h,function(){lib[handlers[h]](self);});}this.attachEvent('onpropertychange',function(){lib.readPropertyChanges(self);});var giveLayout=function(el){el.style.zoom=1;if(el.currentStyle.position=='static'){el.style.position='relative';}};giveLayout(this.offsetParent);giveLayout(this);this.vmlBox=document.createElement('ignore');this.vmlBox.runtimeStyle.cssText='behavior:none; position:absolute; margin:0; padding:0; border:0; background:none;';this.vmlBox.style.zIndex=thisStyle.zIndex;this.vml={'color':true,'image':true,'stroke':true};for(var v in this.vml){this.vml[v]=document.createElement(lib.ns+':shape');this.vml[v].filler=document.createElement(lib.ns+':fill');this.vml[v].appendChild(this.vml[v].filler);this.vml[v].stroked=false;this.vml[v].style.position='absolute';this.vml[v].style.zIndex=thisStyle.zIndex;this.vml[v].coordorigin='1,1';this.vmlBox.appendChild(this.vml[v]);}this.vml.image.fillcolor='none';this.vml.image.filler.type='tile';this.parentNode.insertBefore(this.vmlBox,this);this.isImg=false;if(this.nodeName=='IMG'){this.isImg=true;this.style.visibility='hidden';}setTimeout(function(){lib.applyVML(self);},1);}};try{document.execCommand("BackgroundImageCache",false,true);}catch(err){}DD_roundies.IEversion();DD_roundies.createVmlNameSpace();DD_roundies.createVmlStyleSheet();if(DD_roundies.IE8&&document.attachEvent&&DD_roundies.querySelector){document.attachEvent('onreadystatechange',function(){if(document.readyState=='complete'){var selectors=DD_roundies.selectorsToProcess;var length=selectors.length;var delayedCall=function(node,radii,index){setTimeout(function(){DD_roundies.roundify.call(node,radii);},index*100);};for(var i=0;i<length;i++){var results=document.querySelectorAll(selectors[i].selector);var rLength=results.length;for(var r=0;r<rLength;r++){if(results[r].nodeName!='INPUT'){delayedCall(results[r],selectors[i].radii,r);}}}}});};;

/****** /external/Facebook.js ******/

/**
 * $Id: Facebook.js 19969 2009-10-28 23:00:33Z ajl $
 * @author ajl
 */
EXPOTV.Facebook = new function()
{
	var self = this;
	
    this.init = function()
    {
    	self.attachLoginHandlers();
    }
    
    this.attachLoginHandlers = function()
    {
        $('a.facebook-login, a.facebookDoLogin').click(function(e)
        {
            e.preventDefault();
            
            // See if link has special post-FB-login return url options.
            var returnUrlAnchor = $(this).attr('rel').match(/^fb_return_url_anchor=(\w+)$/);
            if (returnUrlAnchor && returnUrlAnchor[1])
                returnUrlAnchor = returnUrlAnchor[1];
            
            FB.Connect.ifUserConnected(function()
            {
				$.cookie('check_fb_login', '1', { path: '/', domain: 'www.expotv.com'});
				window.location.href = window.location.pathname + ((returnUrlAnchor) ? '#' + returnUrlAnchor : '');
				window.location.reload();
            	
            }, function()
            {
	            FB.Connect.requireSession(function()
	            { 
	            	window.location.href = window.location.pathname + ((returnUrlAnchor) ? '#' + returnUrlAnchor : ''); 
					window.location.reload();
	            }, true);
            });
        });    
    }
    
    //
    
    this.parseDomTree = function()
	{
    	FB.XFBML.Host.parseDomTree();
	}
	
	this.showFeedDialog = function(templateBundleId, templateDataObj)
	{
        FB.Connect.showFeedDialog(templateBundleId, templateDataObj/*, null, null, null, FB.RequireConnect.require, callback, user_message_prompt, user_message*/);
	}
}

$(EXPOTV.Facebook.init);;

/****** /jquery/jquery.nyroModal.js ******/

/*
 * nyroModal - jQuery Plugin
 * http://nyromodal.nyrodev.com
 *
 * Copyright (c) 2008 Cedric Nirousset (nyrodev.com)
 * Licensed under the MIT license
 *
 * $Date: 2009-08-14 (Fri, 14 Aug 2009) $
 * $version: 1.5.2
 */
 
// [ajl] DO NOT REPLACE THIS FILE WITH A REGULAR VANILLA NYROMODAL. MANY MODS HAVE BEEN MADE.

jQuery(function($) {

    // -------------------------------------------------------
    // Private Variables
    // -------------------------------------------------------

    var userAgent = navigator.userAgent.toLowerCase();
    var browserVersion = (userAgent.match(/.+(?:rv|webkit|khtml|opera|msie)[\/: ]([\d.]+)/ ) || [0,'0'])[1];

    var isIE6 = (/msie/.test(userAgent) && !/opera/.test(userAgent) && parseInt(browserVersion) < 7 && !window.XMLHttpRequest);
    var body = $('body');

    var currentSettings;

    var shouldResize = false;

    var gallery = {};

    // To know if the fix for the Issue 10 should be applied (or has been applied)
    var fixFF = false;

    // Used for retrieve the content from an hidden div
    var contentElt;
    var contentEltLast;

    // Contains info about nyroModal state and all div references
    var modal = {
        started: false,
        ready: false,
        dataReady: false,
        anim: false,
        animContent: false,
        loadingShown: false,
        transition: false,
        resizing: false,
        closing: false,
        error: false,
        blocker: null,
        blockerVars: null,
        full: null,
        bg: null,
        loading: null,
        tmp: null,
        content: null,
        wrapper: null,
        contentWrapper: null,
        scripts: new Array(),
        scriptsShown: new Array()
    };

    // Indicate of the height or the width was resized, to reinit the currentsettings related to null
    var resized = {
        width: false,
        height: false,
        windowResizing: false
    };

    var initSettingsSize = {
        width: null,
        height: null,
        windowResizing: true
    };

    var windowResizeTimeout;


    // -------------------------------------------------------
    // Public function
    // -------------------------------------------------------

    // jQuery extension function. A paramater object could be used to overwrite the default settings
    $.fn.nyroModal = function(settings) {
        if (!this)
            return false;
        return this.each(function() {
            var me = $(this);
            if (this.nodeName.toLowerCase() == 'form') {
                me
                .unbind('submit.nyroModal')
                .bind('submit.nyroModal', function(e) {
                    if(e.isDefaultPrevented())
                        return false;
                    if (me.data('nyroModalprocessing'))
                        return true;
                    if (this.enctype == 'multipart/form-data') {
                        processModal($.extend(settings, {
                            from: this
                        }));
                        return true;
                    }
                    e.preventDefault();
                    processModal($.extend(settings, {
                        from: this
                    }));
                    return false;
                });
            } else {
                me
                .unbind('click.nyroModal')
                .bind('click.nyroModal', function(e) {
                    if(e.isDefaultPrevented())
                        return false;
                    e.preventDefault();
                    processModal($.extend(settings, {
                        from: this
                    }));
                    return false;
                });
            }
        });
    };

    // jQuery extension function to call manually the modal. A paramater object could be used to overwrite the default settings
    $.fn.nyroModalManual = function(settings) {
        if (!this.length)
            processModal(settings);
        return this.each(function(){
            processModal($.extend(settings, {
                from: this
            }));
        });
    };

    $.nyroModalManual = function(settings) {
        processModal(settings);
    };

    // Update the current settings
    // object settings
    // string deep1 first key where overwrite the settings
    // string deep2 second key where overwrite the settings
    $.nyroModalSettings = function(settings, deep1, deep2) {
        setCurrentSettings(settings, deep1, deep2);
        if (!deep1 && modal.started) {
            if (modal.bg && settings.bgColor)
                currentSettings.updateBgColor(modal, currentSettings, function(){});

            if (modal.contentWrapper && settings.title)
                setTitle();

            if (!modal.error && (settings.windowResizing || (!modal.resizing && (('width' in settings && settings.width == currentSettings.width) || ('height' in settings && settings.height == currentSettings.height))))) {
                modal.resizing = true;
                if (modal.contentWrapper)
                    calculateSize(true);
                if (modal.contentWrapper && modal.contentWrapper.is(':visible') && !modal.animContent) {
                    if (fixFF)
                        modal.content.css({position: ''});
                    currentSettings.resize(modal, currentSettings, function() {
                        currentSettings.windowResizing = false;
                        modal.resizing = false;
                        if (fixFF)
                            modal.content.css({position: 'fixed'});
                        if ($.isFunction(currentSettings.endResize))
                            currentSettings.endResize(modal, currentSettings);
                    });
                }
            }
        }
    };

    // Remove the modal function
    $.nyroModalRemove = function() {
        removeModal();
    };

    // Go to the next image for a gallery
    // return false if nothing was done
    $.nyroModalNext = function() {
        var link = getGalleryLink(1);
        if (link)
            return link.nyroModalManual(getCurrentSettingsNew());
        return false;
    };

    // Go to the previous image for a gallery
    // return false if nothing was done
    $.nyroModalPrev = function() {
        var link = getGalleryLink(-1);
        if (link)
            return link.nyroModalManual(getCurrentSettingsNew());
        return false;
    };


    // -------------------------------------------------------
    // Default Settings
    // -------------------------------------------------------

    $.fn.nyroModal.settings = {
        debug: false, // Show the debug in the background

        blocker: false, // Element which will be blocked by the modal

        modal: false, // Esc key or click backgrdound enabling or not

        type: '', // nyroModal type (form, formData, iframe, image, etc...)
        forceType: null, // Used to force the type
        from: '', // Dom object where the call come from
        hash: '', // Eventual hash in the url

        processHandler: null, // Handler just before the real process

        selIndicator: 'nyroModalSel', // Value added when a form or Ajax is sent with a filter content

        formIndicator: 'nyroModal', // Value added when a form is sent

        content: null, // Raw content if type content is used

        bgColor: '#000000', // Background color

        ajax: {}, // Ajax option (url, data, type, success will be overwritten for a form, url and success only for an ajax call)

        swf: { // Swf player options if swf type is used.
            wmode: 'transparent'
        },

        width: null, // default Width If null, will be calculate automatically
        height: null, // default Height If null, will be calculate automatically

        minWidth: 400, // Minimum width
        minHeight: 300, // Minimum height

        resizable: true, // Indicate if the content is resizable. Will be set to false for swf
        autoSizable: true, // Indicate if the content is auto sizable. If not, the min size will be used

        padding: 25, // padding for the max modal size

        regexImg: '[^\.]\.(jpg|jpeg|png|tiff|gif|bmp)\s*$', // Regex to find images
        addImageDivTitle: false, // Indicate if the div title should be inserted
        defaultImgAlt: 'Image', // Default alt attribute for the images
        setWidthImgTitle: true, // Set the width to the image title
        ltr: true, // Left to Right by default. Put to false for Hebrew or Right to Left language

        gallery: null, // Gallery name if provided
        galleryLinks: '<a href="#" class="nyroModalPrev">Prev</a><a href="#"  class="nyroModalNext">Next</a>', // Use .nyroModalPrev and .nyroModalNext to set the navigation link
        galleryCounts: galleryCounts, // Callback to show the gallery count

        zIndexStart: 100,

        css: { // Default CSS option for the nyroModal Div. Some will be overwritten or updated when using IE6
            bg: {
                position: 'absolute',
                overflow: 'hidden',
                top: 0,
                left: 0,
                height: '100%',
                width: '100%'
            },
            wrapper: {
                position: 'absolute',
                top: '50%',
                left: '50%'
            },
            wrapper2: {
            },
            content: {
                overflow: 'auto'
            },
            loading: {
                position: 'absolute',
                top: '50%',
                left: '50%',
                marginTop: '-50px',
                marginLeft: '-50px'
            }
        },

        wrap: { // Wrapper div used to style the modal regarding the content type
            div: '<div class="wrapper"></div>',
            ajax: '<div class="wrapper"></div>',
            form: '<div class="wrapper"></div>',
            formData: '<div class="wrapper"></div>',
            image: '<div class="wrapperImg"></div>',
            swf: '<div class="wrapperSwf"></div>',
            iframe: '<div class="wrapperIframe"></div>',
            iframeForm: '<div class="wrapperIframe"></div>',
            manual: '<div class="wrapper"></div>'
        },

        closeButton: '<a href="#" class="jsModalClose nyroModalClose" id="closeBut" title="close">Close</a>', // Adding automaticly as the first child of #nyroModalWrapper

        title: null, // Modal title
        titleFromIframe: true, // When using iframe in the same domain, try to get the title from it

        openSelector: '.jsModal', // selector for open a new modal. will be used to parse automaticly at page loading
        closeSelector: '.jsModalClose', // selector to close the modal

        contentLoading: '<a href="#" class="jsModalClose nyroModalClose">Cancel</a>', // Loading div content

        errorClass: 'error', // CSS Error class added to the loading div in case of error
        contentError: 'The requested content cannot be loaded.<br />Please try again later.<br /><a href="#" class="nyroModalClose">Close</a>', // Content placed in the loading div in case of error

        handleError: null, // Callback in case of error

        showBackground: showBackground, // Show background animation function
        hideBackground: hideBackground, // Hide background animation function

        endFillContent: null, // Will be called after filling and wraping the content, before parsing closeSelector and openSelector and showing the content
        showContent: showContent, // Show content animation function
        endShowContent: null, // Will be called once the content is shown
        beforeHideContent: null, // Will be called just before the modal closing
        hideContent: hideContent, // Hide content animation function

        showTransition: showTransition, // Show the transition animation (a modal is already shown and a new one is requested)
        hideTransition: hideTransition, // Hide the transition animation to show the content

        showLoading: showLoading, // show loading animation function
        hideLoading: hideLoading, // hide loading animation function

        resize: resize, // Resize animation function
        endResize: null, // Will be called one the content is resized

        updateBgColor: updateBgColor, // Change background color animation function

        endRemove: null // Will be called once the modal is totally gone
    };

    // -------------------------------------------------------
    // Private function
    // -------------------------------------------------------

    // Main function
    function processModal(settings) {
        if (modal.loadingShown || modal.transition || modal.anim)
            return;
        debug('processModal');
        modal.started = true;
        setDefaultCurrentSettings(settings);
        if (!modal.full)
            modal.blockerVars = modal.blocker = null;
        modal.error = false;
        modal.closing = false;
        modal.dataReady = false;
        modal.scripts = new Array();
        modal.scriptsShown = new Array();

        currentSettings.type = fileType();
        if (currentSettings.forceType) {
            if (!currentSettings.content)
                currentSettings.from = true;
            currentSettings.type = currentSettings.forceType;
            currentSettings.forceType = null;
        }

        if ($.isFunction(currentSettings.processHandler))
            currentSettings.processHandler(currentSettings);

        var from = currentSettings.from;
        var url = currentSettings.url;

        initSettingsSize.width = currentSettings.width;
        initSettingsSize.height = currentSettings.height;

        if (currentSettings.type == 'swf') {
            // Swf is transforming as a raw content
            setCurrentSettings({overflow: 'hidden'}, 'css', 'content');
            currentSettings.content = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+currentSettings.width+'" height="'+currentSettings.height+'"><param name="movie" value="'+url+'"></param>';
            var tmp = '';
            $.each(currentSettings.swf, function(name, val) {
                currentSettings.content+= '<param name="'+name+'" value="'+val+'"></param>';
                tmp+= ' '+name+'="'+val+'"';
            });
            currentSettings.content+= '<embed src="'+url+'" type="application/x-shockwave-flash" width="'+currentSettings.width+'" height="'+currentSettings.height+'"'+tmp+'></embed></object>';
        }

        if (from) {
            var jFrom = $(from).blur();
            if (currentSettings.type == 'form') {
                var data = $(from).serializeArray();
                data.push({name: currentSettings.formIndicator, value: 1});
                if (currentSettings.selector)
                    data.push({name: currentSettings.selIndicator, value: currentSettings.selector.substring(1)});
                $.ajax($.extend({}, currentSettings.ajax, {
                        url: url,
                        data: data,
                        type: jFrom.attr('method') ? jFrom.attr('method') : 'get',
                        success: ajaxLoaded,
                        error: loadingError
                    }));
                debug('Form Ajax Load: '+jFrom.attr('action'));
                showModal();
            } else if (currentSettings.type == 'formData') {
                // Form with data. We're using a hidden iframe
                initModal();
                jFrom.attr('target', 'nyroModalIframe');
                jFrom.attr('action', url);
                jFrom.prepend('<input type="hidden" name="'+currentSettings.formIndicator+'" value="1" />');
                if (currentSettings.selector)
                    jFrom.prepend('<input type="hidden" name="'+currentSettings.selIndicator+'" value="'+currentSettings.selector.substring(1)+'" />');
                modal.tmp.html('<iframe frameborder="0" hspace="0" name="nyroModalIframe" src="javascript:\'\';"></iframe>');
                $('iframe', modal.tmp)
                    .css({
                        width: currentSettings.width,
                        height: currentSettings.height
                    })
                    .error(loadingError)
                    .load(formDataLoaded);
                debug('Form Data Load: '+jFrom.attr('action'));
                showModal();
                showContentOrLoading();
            } else if (currentSettings.type == 'image') {
                debug('Image Load: '+url);
                var title = jFrom.attr('title') || currentSettings.defaultImgAlt;
                initModal();
                modal.tmp.html('<img id="nyroModalImg" />').find('img').attr('alt', title);
                modal.tmp.css({lineHeight: 0});
                $('img', modal.tmp)
                    .error(loadingError)
                    .load(function() {
                        debug('Image Loaded: '+this.src);
                        $(this).unbind('load');
                        var w = modal.tmp.width();
                        var h = modal.tmp.height();
                        modal.tmp.css({lineHeight: ''});
                        resized.width = w;
                        resized.height = h;
                        setCurrentSettings({
                            width: w,
                            height: h,
                            imgWidth: w,
                            imgHeight: h
                        });
                        initSettingsSize.width = w;
                        initSettingsSize.height = h;
                        setCurrentSettings({overflow: 'hidden'}, 'css', 'content');
                        modal.dataReady = true;
                        if (modal.loadingShown || modal.transition)
                            showContentOrLoading();
                    })
                    .attr('src', url);
                showModal();
            } else if (currentSettings.type == 'iframeForm') {
                initModal();
                modal.tmp.html('<iframe frameborder="0" hspace="0" src="javascript:\'\';" name="nyroModalIframe" id="nyroModalIframe"></iframe>');
                debug('Iframe Form Load: '+url);
                $('iframe', modal.tmp).eq(0)
                    .css({
                        width: '100%',
                        height: $.support.boxModel? '99%' : '100%'
                    })
                    .load(iframeLoaded);
                modal.dataReady = true;
                showModal();
            } else if (currentSettings.type == 'iframe') {
                initModal();
                modal.tmp.html('<iframe frameborder="0" hspace="0" src="javascript:\'\';" name="nyroModalIframe" id="nyroModalIframe"></iframe>');
                debug('Iframe Load: '+url);
                $('iframe', modal.tmp).eq(0)
                    .css({
                        width: '100%',
                        height: $.support.boxModel? '100%' : '100%'
                    })
                    .load(iframeLoaded);
                modal.dataReady = true;
                showModal();
            } else if (currentSettings.type) {
                // Could be every other kind of type or a dom selector
                debug('Content: '+currentSettings.type);
                initModal();
                modal.tmp.html(currentSettings.content);
                var w = modal.tmp.width();
                var h = modal.tmp.height();
                var div = $(currentSettings.type);
                if (div.length) {
                    setCurrentSettings({type: 'div'});
                    w = div.width();
                    h = div.height();
                    if (contentElt)
                        contentEltLast = contentElt;
                    contentElt = div;
                    modal.tmp.append(div.contents());
                }
                initSettingsSize.width = w;
                initSettingsSize.height = h;
                setCurrentSettings({
                    width: w,
                    height: h
                });
                if (modal.tmp.html())
                    modal.dataReady = true;
                else
                    loadingError();
                if (!modal.ready)
                    showModal();
                else
                    endHideContent();
            } else {
                debug('Ajax Load: '+url);
                setCurrentSettings({type: 'ajax'});
                var data = currentSettings.ajax.data || {};
                if (currentSettings.selector) {
                    if (typeof data == "string") {
                        data+= '&'+currentSettings.selIndicator+'='+currentSettings.selector.substring(1);
                    } else {
                        data[currentSettings.selIndicator] = currentSettings.selector.substring(1);
                    }
                }
                $.ajax($.extend(true, currentSettings.ajax, {
                    url: url,
                    success: ajaxLoaded,
                    error: loadingError,
                    data: data
                }));
                showModal();
            }
        } else if (currentSettings.content) {
            // Raw content not from a DOM element
            debug('Content: '+currentSettings.type);
            setCurrentSettings({type: 'manual'});
            initModal();
            modal.tmp.html($('<div/>').html(currentSettings.content).contents());
            if (modal.tmp.html())
                modal.dataReady = true;
            else
                loadingError();
            showModal();
        } else {
            // What should we show here? nothing happen
        }
    }

    // Update the current settings
    // object settings
    // string deep1 first key where overwrite the settings
    // string deep2 second key where overwrite the settings
    function setDefaultCurrentSettings(settings) {
        debug('setDefaultCurrentSettings');
        currentSettings = $.extend(true, {}, $.fn.nyroModal.settings, settings);
        currentSettings.selector = '';
        currentSettings.borderW = 0;
        currentSettings.borderH = 0;
        currentSettings.resizable = true;
        setMargin();
    }

    function setCurrentSettings(settings, deep1, deep2) {
        if (modal.started) {
            if (deep1 && deep2) {
                $.extend(true, currentSettings[deep1][deep2], settings);
            } else if (deep1) {
                $.extend(true, currentSettings[deep1], settings);
            } else {
                if (modal.animContent) {
                    if ('width' in settings) {
                        if (!modal.resizing) {
                            settings.setWidth = settings.width;
                            shouldResize = true;
                        }
                        delete settings['width'];
                    }
                    if ('height' in settings) {
                        if (!modal.resizing) {
                            settings.setHeight = settings.height;
                            shouldResize = true;
                        }
                        delete settings['height'];
                    }
                }
                $.extend(true, currentSettings, settings);
            }
        } else {
            if (deep1 && deep2) {
                $.extend(true, $.fn.nyroModal.settings[deep1][deep2], settings);
            } else if (deep1) {
                $.extend(true, $.fn.nyroModal.settings[deep1], settings);
            } else {
                $.extend(true, $.fn.nyroModal.settings, settings);
            }
        }
    }

    // Set the margin for postionning the element. Useful for IE6
    function setMarginScroll() {
        if (isIE6 && !modal.blocker) {
            if (document.documentElement) {
                currentSettings.marginScrollLeft = document.documentElement.scrollLeft;
                currentSettings.marginScrollTop = document.documentElement.scrollTop;
            } else {
                currentSettings.marginScrollLeft = document.body.scrollLeft;
                currentSettings.marginScrollTop = document.body.scrollTop;
            }
        } else {
            currentSettings.marginScrollLeft = 0;
            currentSettings.marginScrollTop = 0;
        }
    }

    // Set the margin for the content
    function setMargin() {
        setMarginScroll();
        currentSettings.marginLeft = -(currentSettings.width+currentSettings.borderW)/2;
        currentSettings.marginTop = -(currentSettings.height+currentSettings.borderH)/2;
        if (!modal.blocker) {
            currentSettings.marginLeft+= currentSettings.marginScrollLeft;
            currentSettings.marginTop+= currentSettings.marginScrollTop;
        }
    }

    // Set the margin for the current loading
    function setMarginLoading() {
        setMarginScroll();
        var outer = getOuter(modal.loading);
        currentSettings.marginTopLoading = -(modal.loading.height() + outer.h.border + outer.h.padding)/2;
        currentSettings.marginLeftLoading = -(modal.loading.width() + outer.w.border + outer.w.padding)/2;
        if (!modal.blocker) {
            currentSettings.marginLefttLoading+= currentSettings.marginScrollLeft;
            currentSettings.marginTopLoading+= currentSettings.marginScrollTop;
        }
    }

    // Set the modal Title
    function setTitle() {
        var title = $('h1#nyroModalTitle', modal.contentWrapper);
        if (title.length)
            title.text(currentSettings.title);
        else
            modal.contentWrapper.prepend('<h1 id="nyroModalTitle">'+currentSettings.title+'</h1>');
    }

    // Init the nyroModal div by settings the CSS elements and hide needed elements
    function initModal() {
        debug('initModal');
        if (!modal.full) {
            if (currentSettings.debug)
                setCurrentSettings({color: 'white'}, 'css', 'bg');

            var full = {
                zIndex: currentSettings.zIndexStart,
                position: 'fixed',
                top: 0,
                left: 0,
                width: '100%',
                height: '100%'
            };

            var contain = body;
            var iframeHideIE = '';
            if (currentSettings.blocker) {
                modal.blocker = contain = $(currentSettings.blocker);
                var pos = modal.blocker.offset();
                var w = modal.blocker.outerWidth();
                var h = modal.blocker.outerHeight();
                if (isIE6) {
                    setCurrentSettings({
                        height: '100%',
                        width: '100%',
                        top: 0,
                        left: 0
                    }, 'css', 'bg');
                }
                modal.blockerVars = {
                    top: pos.top,
                    left: pos.left,
                    width: w,
                    height: h
                };
                var plusTop = (/msie/.test(userAgent) ?0:getCurCSS(body.get(0), 'borderTopWidth'));
                var plusLeft = (/msie/.test(userAgent) ?0:getCurCSS(body.get(0), 'borderLeftWidth'));
                full = {
                    position: 'absolute',
                    top: pos.top + plusTop,
                    left: pos.left + plusLeft,
                    width: w,
                    height: h
                };
            } else if (isIE6) {
                body.css({
                    height: '130%', //body.height()+'px',
                    width: '130%', //body.width()+'px',
                    position: 'static',
                    overflow: 'hidden'
                });
                $('html').css({overflow: 'hidden'});
                setCurrentSettings({
                    css: {
                        bg: {
                            position: 'absolute',
                            zIndex: currentSettings.zIndexStart+1,
                            height: '110%',
                            width: '110%',
                            top: currentSettings.marginScrollTop+'px',
                            left: currentSettings.marginScrollLeft+'px'
                        },
                        wrapper: { zIndex: currentSettings.zIndexStart+2 },
                        loading: { zIndex: currentSettings.zIndexStart+3 }
                    }
                });

                iframeHideIE = $('<iframe id="nyroModalIframeHideIe" src="javascript:\'\';"></iframe>')
                                .css($.extend({},
                                    currentSettings.css.bg, {
                                        opacity: 0,
                                        zIndex: 50,
                                        border: 'none'
                                    }));
            }

            contain.append($('<div id="nyroModalFull"><div id="nyroModalBg"></div><div id="nyroModalWrapper"><div id="nyroModalContent"></div></div><div id="nyrModalTmp"></div><div id="nyroModalLoading"></div></div>').hide());

            modal.full = $('#nyroModalFull')
                .css(full)
                .show();
            modal.bg = $('#nyroModalBg')
                .css($.extend({
                        backgroundColor: currentSettings.bgColor
                    }, currentSettings.css.bg))
                .before(iframeHideIE);
            if (!currentSettings.modal)
                modal.bg.click(removeModal);
            modal.loading = $('#nyroModalLoading')
                .css(currentSettings.css.loading)
                .hide();
            modal.contentWrapper = $('#nyroModalWrapper')
                .css(currentSettings.css.wrapper)
                .hide();
            modal.content = $('#nyroModalContent');
            modal.tmp = $('#nyrModalTmp').hide();

            // To stop the mousewheel if the the plugin is available
            if ($.isFunction($.fn.mousewheel)) {
                modal.content.mousewheel(function(e, d) {
                    var elt = modal.content.get(0);
                    if ((d > 0 && elt.scrollTop == 0) ||
                            (d < 0 && elt.scrollHeight - elt.scrollTop == elt.clientHeight)) {
                        e.preventDefault();
                        e.stopPropagation();
                    }
                });
            }

            $(document).bind('keydown.nyroModal', keyHandler);
            modal.content.css({width: 'auto', height: 'auto'});
            modal.contentWrapper.css({width: 'auto', height: 'auto'});

            if (!currentSettings.blocker) {
                $(window).bind('resize.nyroModal', function() {
                    window.clearTimeout(windowResizeTimeout);
                    windowResizeTimeout = window.setTimeout(windowResizeHandler, 200);
                });
            }
        }
    }

    function windowResizeHandler() {
        $.nyroModalSettings(initSettingsSize);
    }

    // Show the modal (ie: the background and then the loading if needed or the content directly)
    function showModal() {
        debug('showModal');
        if (!modal.ready) {
            initModal();
            modal.anim = true;
            currentSettings.showBackground(modal, currentSettings, endBackground);
        } else {
            modal.anim = true;
            modal.transition = true;
            currentSettings.showTransition(modal, currentSettings, function(){endHideContent();modal.anim=false;showContentOrLoading();});
        }
    }

    // Used for the escape key or the arrow in the gallery type
    function keyHandler(e) {
        if (e.keyCode == 27) {
            if (!currentSettings.modal)
                removeModal();
        } else if (currentSettings.gallery && modal.ready && modal.dataReady && !modal.anim && !modal.transition) {
            if (e.keyCode == 39 || e.keyCode == 40) {
                e.preventDefault();
                $.nyroModalNext();
                return false;
            } else if (e.keyCode == 37 || e.keyCode == 38) {
                e.preventDefault();
                $.nyroModalPrev();
                return false;
            }
        }
    }

    // Determine the filetype regarding the link DOM element
    function fileType() {
        var from = currentSettings.from;

        var url;

        if (from && from.nodeName) {
            var jFrom = $(from);

            url = jFrom.attr(from.nodeName.toLowerCase() == 'form' ? 'action' : 'open'); // AJL: modifed this from href to link
            if (!url)
                url = location.href.substring(window.location.host.length+7);
            currentSettings.url = url;

            if (jFrom.attr('rev') == 'modal')
                currentSettings.modal = true;

            currentSettings.title = jFrom.attr('title');

            if (from && from.rel && from.rel.toLowerCase() != 'nofollow') {
                var indexSpace = from.rel.indexOf(' ');
                currentSettings.gallery = indexSpace > 0 ? from.rel.substr(0, indexSpace) : from.rel;
            }

            var imgType = imageType(url, from);
            if (imgType)
                return imgType;

            if (isSwf(url))
                return 'swf';

            var iframe = false;
            if (from.target && from.target.toLowerCase() == '_blank' /*|| (from.hostname && from.hostname.replace(/:\d*$/,'') != window.location.hostname.replace(/:\d*$/,''))*/) {
                iframe = true;
            }
            if (from.nodeName.toLowerCase() == 'form') {
                if (iframe)
                    return 'iframeForm';
                setCurrentSettings(extractUrlSel(url));
                if (jFrom.attr('enctype') == 'multipart/form-data')
                    return 'formData';
                return 'form';
            }
            if (iframe)
                return 'iframe';
        } else {
            url = currentSettings.url;
            if (!currentSettings.content)
                currentSettings.from = true;

            if (!url)
                return null;

            if (isSwf(url))
                return 'swf';

            var reg1 = new RegExp("^http://|https://", "g");
            if (url.match(reg1))
                return 'iframe';
        }

        var imgType = imageType(url, from);
        if (imgType)
            return imgType;

        var tmp = extractUrlSel(url);
        setCurrentSettings(tmp);

        if (!tmp.url)
            return tmp.selector;
    }

    function imageType(url, from) {
        var image = new RegExp(currentSettings.regexImg, 'i');
        if (image.test(url)) {
            return 'image';
        }
    }

    function isSwf(url) {
        var swf = new RegExp('[^\.]\.(swf)\s*$', 'i');
        return swf.test(url);
    }

    function extractUrlSel(url) {
        var ret = {
            url: null,
            selector: null
        };

        if (url) {
            var hash = getHash(url);
            var hashLoc = getHash(window.location.href);
            var curLoc = window.location.href.substring(0, window.location.href.length - hashLoc.length);
            var req = url.substring(0, url.length - hash.length);

            if (req == curLoc || req == $('base').attr('href')) {
                ret.selector = hash;
            } else {
                ret.url = req;
                ret.selector = hash;
            }
        }
        return ret;
    }

    // Called when the content cannot be loaded or tiemout reached
    function loadingError() {
        debug('loadingError');

        modal.error = true;

        if (!modal.ready)
            return;

        if ($.isFunction(currentSettings.handleError))
            currentSettings.handleError(modal, currentSettings);

        modal.loading
            .addClass(currentSettings.errorClass)
            .html(currentSettings.contentError);
        $(currentSettings.closeSelector, modal.loading)
            .unbind('click.nyroModal')
            .bind('click.nyroModal', removeModal);
        setMarginLoading();
        modal.loading
            .css({
                marginTop: currentSettings.marginTopLoading+'px',
                marginLeft: currentSettings.marginLeftLoading+'px'
            });
    }

    // Put the content from modal.tmp to modal.content
    function fillContent() {
        debug('fillContent');
        if (!modal.tmp.html())
            return;

        modal.content.html(modal.tmp.contents());
        modal.tmp.empty();
        wrapContent();

        if (currentSettings.type == 'iframeForm') {
            $(currentSettings.from)
                .attr('target', 'nyroModalIframe')
                .data('nyroModalprocessing', 1)
                .submit()
                .attr('target', '_blank')
                .removeData('nyroModalprocessing');
        }

        if (!currentSettings.modal)
            modal.wrapper.prepend(currentSettings.closeButton);

        if ($.isFunction(currentSettings.endFillContent))
            currentSettings.endFillContent(modal, currentSettings);

        modal.content.append(modal.scripts);

        $(currentSettings.closeSelector, modal.contentWrapper)
            .unbind('click.nyroModal')
            .bind('click.nyroModal', removeModal);
        $(currentSettings.openSelector, modal.contentWrapper).nyroModal(getCurrentSettingsNew());
    }

    // Get the current settings to be used in new links
    function getCurrentSettingsNew() {
        var currentSettingsNew = $.extend(true, {}, currentSettings);
        if (resized.width)
            currentSettingsNew.width = null;
        else
            currentSettingsNew.width = initSettingsSize.width;
        if (resized.height)
            currentSettingsNew.height = null;
        else
            currentSettingsNew.height = initSettingsSize.height;
        currentSettingsNew.css.content.overflow = 'auto';
        return currentSettingsNew;
    }

    // Wrap the content and update the modal size if needed
    function wrapContent() {
        debug('wrapContent');

        var wrap = $(currentSettings.wrap[currentSettings.type]);
        modal.content.append(wrap.children().remove());
        modal.contentWrapper.wrapInner(wrap);

        if (currentSettings.gallery) {
            // Set the action for the next and prev button (or remove them)
            modal.content.append(currentSettings.galleryLinks);

            gallery.links = $('[rel="'+currentSettings.gallery+'"], [rel^="'+currentSettings.gallery+' "]');
            gallery.index = gallery.links.index(currentSettings.from);

            if (currentSettings.galleryCounts && $.isFunction(currentSettings.galleryCounts))
                currentSettings.galleryCounts(gallery.index + 1, gallery.links.length, modal, currentSettings);

            var currentSettingsNew = getCurrentSettingsNew();

            var linkPrev = getGalleryLink(-1);
            if (linkPrev) {
                var prev = $('.nyroModalPrev', modal.contentWrapper)
                    .attr('href', linkPrev.attr('href'))
                    .click(function(e) {
                        e.preventDefault();
                        $.nyroModalPrev();
                        return false;
                    });
                if (isIE6 && currentSettings.type == 'swf') {
                    prev.before($('<iframe id="nyroModalIframeHideIeGalleryPrev" src="javascript:\'\';"></iframe>').css({
                                            position: prev.css('position'),
                                            top: prev.css('top'),
                                            left: prev.css('left'),
                                            width: prev.width(),
                                            height: prev.height(),
                                            opacity: 0,
                                            border: 'none'
                                        }));
                }
            } else {
                $('.nyroModalPrev', modal.contentWrapper).remove();
            }
            var linkNext = getGalleryLink(1);
            if (linkNext) {
                var next = $('.nyroModalNext', modal.contentWrapper)
                    .attr('href', linkNext.attr('href'))
                    .click(function(e) {
                        e.preventDefault();
                        $.nyroModalNext();
                        return false;
                    });
                if (isIE6 && currentSettings.type == 'swf') {
                    next.before($('<iframe id="nyroModalIframeHideIeGalleryNext" src="javascript:\'\';"></iframe>')
                                    .css($.extend({}, {
                                            position: next.css('position'),
                                            top: next.css('top'),
                                            left: next.css('left'),
                                            width: next.width(),
                                            height: next.height(),
                                            opacity: 0,
                                            border: 'none'
                                        })));
                }
            } else {
                $('.nyroModalNext', modal.contentWrapper).remove();
            }
        }

        calculateSize();
    }

    function getGalleryLink(dir) {
        if (currentSettings.gallery) {
            if (!currentSettings.ltr)
                dir *= -1;
            var index = gallery.index + dir;
            if (index >= 0 && index < gallery.links.length)
                return gallery.links.eq(index);
        }
        return false;
    }

    // Calculate the size for the contentWrapper
    function calculateSize(resizing) {
        debug('calculateSize');

        modal.wrapper = modal.contentWrapper.children('div:first');

        resized.width = false;
        resized.height = false;
        if (false && !currentSettings.windowResizing) {
            initSettingsSize.width = currentSettings.width;
            initSettingsSize.height = currentSettings.height;
        }

        if (currentSettings.autoSizable && (!currentSettings.width || !currentSettings.height)) {
            modal.contentWrapper
                .css({
                    opacity: 0,
                    width: 'auto',
                    height: 'auto'
                })
                .show();
            var tmp = {
                width: 'auto',
                height: 'auto'
            };
            if (currentSettings.width) {
                tmp.width = currentSettings.width;
            } else if (currentSettings.type == 'iframe') {
                tmp.width = currentSettings.minWidth;
            }

            if (currentSettings.height) {
                tmp.height = currentSettings.height;
            } else if (currentSettings.type == 'iframe') {
                tmp.height = currentSettings.minHeight;
            }

            modal.content.css(tmp);
            if (!currentSettings.width) {
                currentSettings.width = modal.content.outerWidth(true);
                resized.width = true;
            }
            if (!currentSettings.height) {
                currentSettings.height = modal.content.outerHeight(true);
                resized.height = true;
            }
            modal.contentWrapper.css({opacity: 1});
            if (!resizing)
                modal.contentWrapper.hide();
        }

        if (currentSettings.type != 'image' && currentSettings.type != 'swf') {
            currentSettings.width = Math.max(currentSettings.width, currentSettings.minWidth);
            currentSettings.height = Math.max(currentSettings.height, currentSettings.minHeight);
        }

        var outerWrapper = getOuter(modal.contentWrapper);
        var outerWrapper2 = getOuter(modal.wrapper);
        var outerContent = getOuter(modal.content);

        var tmp = {
            content: {
                width: currentSettings.width,
                height: currentSettings.height
            },
            wrapper2: {
                width: currentSettings.width + outerContent.w.total,
                height: currentSettings.height + outerContent.h.total
            },
            wrapper: {
                width: currentSettings.width + outerContent.w.total + outerWrapper2.w.total,
                height: currentSettings.height + outerContent.h.total + outerWrapper2.h.total
            }
        };

        if (currentSettings.resizable) {
            var maxHeight = modal.blockerVars? modal.blockerVars.height : $(window).height()
                                - outerWrapper.h.border
                                - (tmp.wrapper.height - currentSettings.height);
            var maxWidth = modal.blockerVars? modal.blockerVars.width : $(window).width()
                                - outerWrapper.w.border
                                - (tmp.wrapper.width - currentSettings.width);
            maxHeight-= currentSettings.padding*2;
            maxWidth-= currentSettings.padding*2;

            if (tmp.content.height > maxHeight || tmp.content.width > maxWidth) {
                // We're gonna resize the modal as it will goes outside the view port
                if (currentSettings.type == 'image' || currentSettings.type == 'swf') {
                    // An image is resized proportionnaly
                    var useW = currentSettings.imgWidth?currentSettings.imgWidth : currentSettings.width;
                    var useH = currentSettings.imgHeight?currentSettings.imgHeight : currentSettings.height;
                    var diffW = tmp.content.width - useW;
                    var diffH = tmp.content.height - useH;
                        if (diffH < 0) diffH = 0;
                        if (diffW < 0) diffW = 0;
                    var calcH = maxHeight - diffH;
                    var calcW = maxWidth - diffW;
                    var ratio = Math.min(calcH/useH, calcW/useW);
                    calcW = Math.floor(useW*ratio);
                    calcH = Math.floor(useH*ratio);
                    tmp.content.height = calcH + diffH;
                    tmp.content.width = calcW + diffW;
                } else {
                    // For an HTML content, we simply decrease the size
                    tmp.content.height = Math.min(tmp.content.height, maxHeight);
                    tmp.content.width = Math.min(tmp.content.width, maxWidth);
                }
                tmp.wrapper2 = {
                        width: tmp.content.width + outerContent.w.total,
                        height: tmp.content.height + outerContent.h.total
                    };
                tmp.wrapper = {
                        width: tmp.content.width + outerContent.w.total + outerWrapper2.w.total,
                        height: tmp.content.height + outerContent.h.total + outerWrapper2.h.total
                    };
            }
        }

        if (currentSettings.type == 'swf') {
            $('object, embed', modal.content)
                .attr('width', tmp.content.width)
                .attr('height', tmp.content.height);
        } else if (currentSettings.type == 'image') {
            $('img', modal.content).css({
                width: tmp.content.width,
                height: tmp.content.height
            });
        }

        modal.content.css($.extend({}, tmp.content, currentSettings.css.content));
        modal.wrapper.css($.extend({}, tmp.wrapper2, currentSettings.css.wrapper2));

        if (!resizing)
            modal.contentWrapper.css($.extend({}, tmp.wrapper, currentSettings.css.wrapper));

        if (currentSettings.type == 'image' && currentSettings.addImageDivTitle) {
            // Adding the title for the image
            $('img', modal.content).removeAttr('alt');
            var divTitle = $('div', modal.content);
            if (currentSettings.title != currentSettings.defaultImgAlt && currentSettings.title) {
                if (divTitle.length == 0) {
                    divTitle = $('<div>'+currentSettings.title+'</div>');
                    modal.content.append(divTitle);
                }
                if (currentSettings.setWidthImgTitle) {
                    var outerDivTitle = getOuter(divTitle);
                    divTitle.css({width: (tmp.content.width + outerContent.w.padding - outerDivTitle.w.total)+'px'});
                }
            } else if (divTitle.length = 0) {
                divTitle.remove();
            }
        }

        if (currentSettings.title)
            setTitle();

        tmp.wrapper.borderW = outerWrapper.w.border;
        tmp.wrapper.borderH = outerWrapper.h.border;

        setCurrentSettings(tmp.wrapper);
        setMargin();
    }

    function removeModal(e) {
        debug('removeModal');
        if (e)
            e.preventDefault();
        if (modal.full && modal.ready) {
            $(document).unbind('keydown.nyroModal');
            if (!currentSettings.blocker)
                $(window).unbind('resize.nyroModal');
            modal.ready = false;
            modal.anim = true;
            modal.closing = true;
            if (modal.loadingShown || modal.transition) {
                currentSettings.hideLoading(modal, currentSettings, function() {
                        modal.loading.hide();
                        modal.loadingShown = false;
                        modal.transition = false;
                        currentSettings.hideBackground(modal, currentSettings, endRemove);
                    });
            } else {
                if (fixFF)
                    modal.content.css({position: ''}); // Fix Issue #10, remove the attribute
                modal.wrapper.css({overflow: 'hidden'}); // Used to fix a visual issue when hiding
                modal.content.css({overflow: 'hidden'}); // Used to fix a visual issue when hiding
                if ($.isFunction(currentSettings.beforeHideContent)) {
                    currentSettings.beforeHideContent(modal, currentSettings, function() {
                        currentSettings.hideContent(modal, currentSettings, function() {
                            endHideContent();
                            currentSettings.hideBackground(modal, currentSettings, endRemove);
                        });
                    });
                } else {
                    currentSettings.hideContent(modal, currentSettings, function() {
                            endHideContent();
                            currentSettings.hideBackground(modal, currentSettings, endRemove);
                        });
                }
            }
        }
        if (e)
            return false;
    }

    function showContentOrLoading() {
        debug('showContentOrLoading');
        if (modal.ready && !modal.anim) {
            if (modal.dataReady) {
                if (modal.tmp.html()) {
                    modal.anim = true;
                    if (modal.transition) {
                        fillContent();
                        modal.animContent = true;
                        currentSettings.hideTransition(modal, currentSettings, function() {
                            modal.loading.hide();
                            modal.transition = false;
                            modal.loadingShown = false;
                            endShowContent();
                        });
                    } else {
                        currentSettings.hideLoading(modal, currentSettings, function() {
                                modal.loading.hide();
                                modal.loadingShown = false;
                                fillContent();
                                setMarginLoading();
                                setMargin();
                                modal.animContent = true;
                                currentSettings.showContent(modal, currentSettings, endShowContent);
                            });
                    }
                }
            } else if (!modal.loadingShown && !modal.transition) {
                modal.anim = true;
                modal.loadingShown = true;
                if (modal.error)
                    loadingError();
                else
                    modal.loading.html(currentSettings.contentLoading);
                $(currentSettings.closeSelector, modal.loading)
                    .unbind('click.nyroModal')
                    .bind('click.nyroModal', removeModal);
                setMarginLoading();
                currentSettings.showLoading(modal, currentSettings, function(){modal.anim=false;showContentOrLoading();});
            }
        }
    }


    // -------------------------------------------------------
    // Private Data Loaded callback
    // -------------------------------------------------------

    function ajaxLoaded(data) {
        debug('AjaxLoaded: '+this.url);
        modal.tmp.html(currentSettings.selector
            ?filterScripts($('<div>'+data+'</div>').find(currentSettings.selector).contents())
            :filterScripts(data));
        if (modal.tmp.html()) {
            modal.dataReady = true;
            showContentOrLoading();
        } else
            loadingError();
    }

    function formDataLoaded() {
        debug('formDataLoaded');
        var jFrom = $(currentSettings.from);
        jFrom.attr('action', jFrom.attr('action')+currentSettings.selector);
        jFrom.attr('target', '');
        $('input[name='+currentSettings.formIndicator+']', currentSettings.from).remove();
        var iframe = modal.tmp.children('iframe');
        var iframeContent = iframe.unbind('load').contents().find(currentSettings.selector || 'body').not('script[src]');
        iframe.attr('src', 'about:blank'); // Used to stop the loading in FF
        modal.tmp.html(iframeContent.html());
        if (modal.tmp.html()) {
            modal.dataReady = true;
            showContentOrLoading();
        } else
            loadingError();
    }
    
    function iframeLoaded() {
        if ((window.location.hostname && currentSettings.url.indexOf(window.location.hostname) > -1)
                ||  currentSettings.url.indexOf('http://')) {
            var iframe = $('iframe', modal.full).contents();
            var tmp = {};
            if (currentSettings.titleFromIframe)
                tmp.title = iframe.find('title').text();
            if (currentSettings.titleFromIframe && !tmp.title) {
                // for IE
                try {
                    tmp.title = iframe.find('title').html();
                } catch(err) {}
            }
            var body = iframe.find('body');
            if (!currentSettings.height && body.height())
                tmp.height = body.height();
            if (!currentSettings.width && body.width())
                tmp.width = body.width();
            $.extend(initSettingsSize, tmp);
            $.nyroModalSettings(tmp);
        }
    }

    function galleryCounts(nb, total, elts, settings) {
        if (total > 1)
            settings.title+= (settings.title?' - ':'') +nb+'/'+total;
    }


    // -------------------------------------------------------
    // Private Animation callback
    // -------------------------------------------------------

    function endHideContent() {
        debug('endHideContent');
        modal.anim = false;
        if (contentEltLast) {
            contentEltLast.append(modal.content.contents());
            contentEltLast = null;
        } else if (contentElt) {
            contentElt.append(modal.content.contents());
            contentElt= null;
        }
        modal.content.empty();

        gallery = {};

        modal.contentWrapper.hide().children().remove().empty().attr('style', '').hide();

        if (modal.closing || modal.transition)
            modal.contentWrapper.hide();

        modal.contentWrapper
            .css(currentSettings.css.wrapper)
            .append(modal.content);
        showContentOrLoading();
    }

    function endRemove() {
        debug('endRemove');
        $(document).unbind('keydown', keyHandler);
        modal.anim = false;
        modal.full.remove();
        modal.full = null;
        if (isIE6) {
            body.css({height: '', width: '', position: '', overflow: ''});
            $('html').css({overflow: ''});
        }
        if ($.isFunction(currentSettings.endRemove))
            currentSettings.endRemove(modal, currentSettings);
    }

    function endBackground() {
        debug('endBackground');
        modal.ready = true;
        modal.anim = false;
        showContentOrLoading();
    }

    function endShowContent() {
        debug('endShowContent');
        modal.anim = false;
        modal.animContent = false;
        modal.contentWrapper.css({opacity: ''}); // for the close button in IE
        fixFF = /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent) && parseFloat(browserVersion) < 1.9 && currentSettings.type != 'image';

        if (fixFF)
            modal.content.css({position: 'fixed'}); // Fix Issue #10
        modal.content.append(modal.scriptsShown);

        if(currentSettings.type == 'iframe')
            modal.content.find('iframe').attr('src', currentSettings.url);

        if ($.isFunction(currentSettings.endShowContent))
            currentSettings.endShowContent(modal, currentSettings);

        if (shouldResize) {
            shouldResize = false;
            $.nyroModalSettings({width: currentSettings.setWidth, height: currentSettings.setHeight});
            delete currentSettings['setWidth'];
            delete currentSettings['setHeight'];
        }
        if (resized.width)
            setCurrentSettings({width: null});
        if (resized.height)
            setCurrentSettings({height: null});
    }


    // -------------------------------------------------------
    // Utilities
    // -------------------------------------------------------

    // Get the selector from an url (as string)
    function getHash(url) {
        if (typeof url == 'string') {
            var hashPos = url.indexOf('#');
            if (hashPos > -1)
                return url.substring(hashPos);
        }
        return '';
    }

    // Filter an html content to remove the script[src]
    function filterScripts(data) {
        // Removing the body, head and html tag
        if (typeof data == 'string')
            data = data.replace(/<\/?(html|head|body)([^>]*)>/gi, '');
        var tmp = new Array();
        $.each($.clean({0:data}, this.ownerDocument), function() {
            if ($.nodeName(this, "script")) {
                if (!this.src || $(this).attr('rel') == 'forceLoad') {
                    if ($(this).attr('rev') == 'shown')
                        modal.scriptsShown.push(this);
                    else
                        modal.scripts.push(this);
                }
            } else
                tmp.push(this);
        });
        return tmp;
    }

    // Get the vertical and horizontal margin, padding and border dimension
    function getOuter(elm) {
        elm = elm.get(0);
        var ret = {
            h: {
                margin: getCurCSS(elm, 'marginTop') + getCurCSS(elm, 'marginBottom'),
                border: getCurCSS(elm, 'borderTopWidth') + getCurCSS(elm, 'borderBottomWidth'),
                padding: getCurCSS(elm, 'paddingTop') + getCurCSS(elm, 'paddingBottom')
            },
            w: {
                margin: getCurCSS(elm, 'marginLeft') + getCurCSS(elm, 'marginRight'),
                border: getCurCSS(elm, 'borderLeftWidth') + getCurCSS(elm, 'borderRightWidth'),
                padding: getCurCSS(elm, 'paddingLeft') + getCurCSS(elm, 'paddingRight')
            }
        };

        ret.h.outer = ret.h.margin + ret.h.border;
        ret.w.outer = ret.w.margin + ret.w.border;

        ret.h.inner = ret.h.padding + ret.h.border;
        ret.w.inner = ret.w.padding + ret.w.border;

        ret.h.total = ret.h.outer + ret.h.padding;
        ret.w.total = ret.w.outer + ret.w.padding;

        return ret;
    }

    function getCurCSS(elm, name) {
        var ret = parseInt($.curCSS(elm, name, true));
        if (isNaN(ret))
            ret = 0;
        return ret;
    }

    // Proxy Debug function
    function debug(msg) {
        if ($.fn.nyroModal.settings.debug || currentSettings && currentSettings.debug)
            nyroModalDebug(msg, modal, currentSettings || {});
    }

    // -------------------------------------------------------
    // Default animation function
    // -------------------------------------------------------

    function showBackground(elts, settings, callback) {
        elts.bg.css({opacity:0}).fadeTo(500, 0.75, callback);
    }

    function hideBackground(elts, settings, callback) {
        elts.bg.fadeOut(300, callback);
    }

    function showLoading(elts, settings, callback) {
        elts.loading
            .css({
                marginTop: settings.marginTopLoading+'px',
                marginLeft: settings.marginLeftLoading+'px',
                opacity: 0
            })
            .show()
            .animate({
                opacity: 1
            }, {complete: callback, duration: 400});
    }

    function hideLoading(elts, settings, callback) {
        callback();
    }

    function showContent(elts, settings, callback) {
        elts.loading
            .css({
                marginTop: settings.marginTopLoading+'px',
                marginLeft: settings.marginLeftLoading+'px'
            })
            .show()
            .animate({
                width: settings.width+'px',
                height: settings.height+'px',
                marginTop: settings.marginTop+'px',
                marginLeft: settings.marginLeft+'px'
            }, {duration: 350, complete: function() {
                elts.contentWrapper
                    .css({
                        width: settings.width+'px',
                        height: settings.height+'px',
                        marginTop: settings.marginTop+'px',
                        marginLeft: settings.marginLeft+'px'
                    })
                    .show();
                    elts.loading.fadeOut(200, callback);
                }
            });
    }

    function hideContent(elts, settings, callback) {
        elts.contentWrapper
            .animate({
                height: '50px',
                width: '50px',
                marginTop: (-(25+settings.borderH)/2 + settings.marginScrollTop)+'px',
                marginLeft: (-(25+settings.borderW)/2 + settings.marginScrollLeft)+'px'
            }, {duration: 350, complete: function() {
                elts.contentWrapper.hide();
                callback();
            }});
    }

    function showTransition(elts, settings, callback) {
        // Put the loading with the same dimensions of the current content
        elts.loading
            .css({
                marginTop: elts.contentWrapper.css('marginTop'),
                marginLeft: elts.contentWrapper.css('marginLeft'),
                height: elts.contentWrapper.css('height'),
                width: elts.contentWrapper.css('width'),
                opacity: 0
            })
            .show()
            .fadeTo(400, 1, function() {
                    elts.contentWrapper.hide();
                    callback();
                });
    }

    function hideTransition(elts, settings, callback) {
        // Place the content wrapper underneath the the loading with the right dimensions
        elts.contentWrapper
            .hide()
            .css({
                width: settings.width+'px',
                height: settings.height+'px',
                marginLeft: settings.marginLeft+'px',
                marginTop: settings.marginTop+'px',
                opacity: 1
            });
        elts.loading
            .animate({
                width: settings.width+'px',
                height: settings.height+'px',
                marginLeft: settings.marginLeft+'px',
                marginTop: settings.marginTop+'px'
            }, {complete: function() {
                    elts.contentWrapper.show();
                    elts.loading.fadeOut(400, function() {
                        elts.loading.hide();
                        callback();
                    });
                }, duration: 350});
    }

    function resize(elts, settings, callback) {
        elts.contentWrapper
            .animate({
                width: settings.width+'px',
                height: settings.height+'px',
                marginLeft: settings.marginLeft+'px',
                marginTop: settings.marginTop+'px'
            }, {complete: callback, duration: 400});
    }

    function updateBgColor(elts, settings, callback) {
        if (!$.fx.step.backgroundColor) {
            elts.bg.css({backgroundColor: settings.bgColor});
            callback();
        } else
            elts.bg
                .animate({
                    backgroundColor: settings.bgColor
                }, {complete: callback, duration: 400});
    }

    // -------------------------------------------------------
    // Default initialization
    // -------------------------------------------------------

    $($.fn.nyroModal.settings.openSelector).nyroModal();

});

// Default debug function, to be overwritten if needed
//      Be aware that the settings parameter could be empty
function nyroModalDebug(msg, elts, settings) {
    if (elts.full)
        elts.bg.prepend(msg+'<br />');
};

/****** /jquery/jquery.blockUI.js ******/

/*
 * jQuery blockUI plugin
 * Version 2.23 (21-JUN-2009)
 * @requires jQuery v1.2.3 or later
 *
 * Examples at: http://malsup.com/jquery/block/
 * Copyright (c) 2007-2008 M. Alsup
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 * Thanks to Amir-Hossein Sobhi for some excellent contributions!
 */

/*
 * $Id: jquery.blockUI.js 18595 2009-09-23 18:16:12Z ajl $
 *   
 * NOTE: MODIFIED! Don't replace. -ajl
 */

;(function($) {

if (/1\.(0|1|2)\.(0|1|2)/.test($.fn.jquery) || /^1.1/.test($.fn.jquery)) {
    alert('blockUI requires jQuery v1.2.3 or later!  You are using v' + $.fn.jquery);
    return;
}

$.fn._fadeIn = $.fn.fadeIn;

// this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle
// retarded userAgent strings on Vista)
var mode = document.documentMode || 0;
var setExpr = $.browser.msie && (($.browser.version < 8 && !mode) || mode < 8);
var ie6 = $.browser.msie && /MSIE 6.0/.test(navigator.userAgent) && !mode;

// global $ methods for blocking/unblocking the entire page
$.blockUI   = function(opts) { install(window, opts); };
$.unblockUI = function(opts) { remove(window, opts); };

// convenience method for quick growl-like notifications  (http://www.google.com/search?q=growl)
$.growlUI = function(title, message, timeout, onClose) {
    var $m = $('<div class="growlUI"></div>');
    if (title) $m.append('<h1>'+title+'</h1>');
    if (message) $m.append('<h2>'+message+'</h2>');
    if (timeout == undefined) timeout = 3000;
    $.blockUI({
        message: $m, fadeIn: 700, fadeOut: 1000, centerY: false,
        timeout: timeout, showOverlay: false,
        onUnblock: onClose, 
        css: $.blockUI.defaults.growlCSS
    });
};

// plugin method for blocking element content
$.fn.block = function(opts) {
    return this.unblock({ fadeOut: 0 }).each(function() {
        if ($.css(this,'position') == 'static')
            this.style.position = 'relative';
        if ($.browser.msie)
            this.style.zoom = 1; // force 'hasLayout'
        install(this, opts);
    });
};

// plugin method for unblocking element content
$.fn.unblock = function(opts) {
    return this.each(function() {
        remove(this, opts);
    });
};

$.blockUI.version = 2.23; // 2nd generation blocking at no extra cost!

// override these in your code to change the default behavior and style
$.blockUI.defaults = {
	// AJL CUSTOM
	cssClass: '',
    // message displayed when blocking (use null for no message)
    message:  '<h1>Please wait...</h1>',

    // styles for the message when blocking; if you wish to disable
    // these and use an external stylesheet then do this in your code:
    // $.blockUI.defaults.css = {};
    css: {
        padding:        0,
        margin:         0,
        width:          '30%',
        top:            '40%',
        left:           '35%',
        textAlign:      'center',
        color:          '#000',
        border:         '3px solid #aaa',
        backgroundColor:'#fff',
        cursor:         'wait'
    },

    // styles for the overlay
    overlayCSS:  {
        backgroundColor: '#000',
        opacity:          0.6,
        cursor:          'wait'
    },

    // styles applied when using $.growlUI
    growlCSS: {
        width:    '350px',
        top:      '10px',
        left:     '',
        right:    '10px',
        border:   'none',
        padding:  '5px',
        opacity:   0.6,
        cursor:    null,
        color:    '#fff',
        backgroundColor: '#000',
        '-webkit-border-radius': '10px',
        '-moz-border-radius':    '10px'
    },
    
    // IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w
    // (hat tip to Jorge H. N. de Vasconcelos)
    iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',

    // force usage of iframe in non-IE browsers (handy for blocking applets)
    forceIframe: false,

    // z-index for the blocking overlay
    baseZ: 1000,

    // set these to true to have the message automatically centered
    centerX: true, // <-- only effects element blocking (page block controlled via css above)
    centerY: true,

    // allow body element to be stetched in ie6; this makes blocking look better
    // on "short" pages.  disable if you wish to prevent changes to the body height
    allowBodyStretch: true,

    // enable if you want key and mouse events to be disabled for content that is blocked
    bindEvents: true,

    // be default blockUI will supress tab navigation from leaving blocking content
    // (if bindEvents is true)
    constrainTabKey: true,

    // fadeIn time in millis; set to 0 to disable fadeIn on block
    fadeIn:  200,

    // fadeOut time in millis; set to 0 to disable fadeOut on unblock
    fadeOut:  400,

    // time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock
    timeout: 0,

    // disable if you don't want to show the overlay
    showOverlay: true,

    // if true, focus will be placed in the first available input field when
    // page blocking
    focusInput: true,

    // suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)
    applyPlatformOpacityRules: true,

    // callback method invoked when unblocking has completed; the callback is
    // passed the element that has been unblocked (which is the window object for page
    // blocks) and the options that were passed to the unblock call:
    //     onUnblock(element, options)
    onUnblock: null,

    // don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493
    quirksmodeOffsetHack: 4
};

// private data and functions follow...

var pageBlock = null;
var pageBlockEls = [];

function install(el, opts) {
    var full = (el == window);
    var msg = opts && opts.message !== undefined ? opts.message : undefined;
    opts = $.extend({}, $.blockUI.defaults, opts || {});
    opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});
    var css = $.extend({}, $.blockUI.defaults.css, opts.css || {});
    msg = msg === undefined ? opts.message : msg;
    
    // remove the current block (if there is one)
    if (full && pageBlock)
        remove(window, {fadeOut:0});

    // if an existing element is being used as the blocking content then we capture
    // its current place in the DOM (and current display style) so we can restore
    // it when we unblock
    if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {
        var node = msg.jquery ? msg[0] : msg;
        var data = {};
        $(el).data('blockUI.history', data);
        data.el = node;
        data.parent = node.parentNode;
        data.display = node.style.display;
        data.position = node.style.position;
        if (data.parent)
            data.parent.removeChild(node);
    }

    var z = opts.baseZ;

    // blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;
    // layer1 is the iframe layer which is used to supress bleed through of underlying content
    // layer2 is the overlay layer which has opacity and a wait cursor (by default)
    // layer3 is the message content that is displayed while blocking

    var lyr1 = ($.browser.msie || opts.forceIframe) 
        ? $('<iframe class="blockUI" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="'+opts.iframeSrc+'"></iframe>')
        : $('<div class="blockUI" style="display:none"></div>');
    var lyr2 = $('<div class="blockUI blockOverlay" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>');
    var lyr3 = full ? $('<div class="blockUI blockMsg blockPage '+ opts.cssClass+'" style="z-index:'+z+';display:none;position:fixed"></div>')
                    : $('<div class="blockUI blockMsg blockElement '+ opts.cssClass+'" style="z-index:'+z+';display:none;position:absolute"></div>');

    // if we have a message, style it
    if (msg)
        lyr3.css(css);

    // style the overlay
    if (!opts.applyPlatformOpacityRules || !($.browser.mozilla && /Linux/.test(navigator.platform)))
        lyr2.css(opts.overlayCSS);
    lyr2.css('position', full ? 'fixed' : 'absolute');

    // make iframe layer transparent in IE
    if ($.browser.msie || opts.forceIframe)
        lyr1.css('opacity',0.0);

    $([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);

    // ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)
    var expr = setExpr && (!$.boxModel || $('object,embed', full ? null : el).length > 0);
    if (ie6 || expr) {
        // give body 100% height
        if (full && opts.allowBodyStretch && $.boxModel)
            $('html,body').css('height','100%');

        // fix ie6 issue when blocked element has a border width
        if ((ie6 || !$.boxModel) && !full) {
            var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');
            var fixT = t ? '(0 - '+t+')' : 0;
            var fixL = l ? '(0 - '+l+')' : 0;
        }

        // simulate fixed position
        $.each([lyr1,lyr2,lyr3], function(i,o) {
            var s = o[0].style;
            s.position = 'absolute';
            if (i < 2) {
                full ? s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.boxModel?0:'+opts.quirksmodeOffsetHack+') + "px"')
                     : s.setExpression('height','this.parentNode.offsetHeight + "px"');
                full ? s.setExpression('width','jQuery.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"')
                     : s.setExpression('width','this.parentNode.offsetWidth + "px"');
                if (fixL) s.setExpression('left', fixL);
                if (fixT) s.setExpression('top', fixT);
            }
            else if (opts.centerY) {
                if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');
                s.marginTop = 0;
            }
            else if (!opts.centerY && full) {
                var top = (opts.css && opts.css.top) ? parseInt(opts.css.top) : 0;
                var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + "px"';
                s.setExpression('top',expression);
            }
        });
    }

    // show the message
    if (msg) {
        lyr3.append(msg);
        if (msg.jquery || msg.nodeType)
            $(msg).show();
    }

    if (($.browser.msie || opts.forceIframe) && opts.showOverlay)
        lyr1.show(); // opacity is zero
    if (opts.fadeIn) {
        if (opts.showOverlay)
            lyr2._fadeIn(opts.fadeIn);
        if (msg)
            lyr3.fadeIn(opts.fadeIn);
    }
    else {
        if (opts.showOverlay)
            lyr2.show();
        if (msg)
            lyr3.show();
    }

    // bind key and mouse events
    bind(1, el, opts);

    if (full) {
        pageBlock = lyr3[0];
        pageBlockEls = $(':input:enabled:visible',pageBlock);
        if (opts.focusInput)
            setTimeout(focus, 20);
    }
    else
        center(lyr3[0], opts.centerX, opts.centerY);

    if (opts.timeout) {
        // auto-unblock
        var to = setTimeout(function() {
            full ? $.unblockUI(opts) : $(el).unblock(opts);
        }, opts.timeout);
        $(el).data('blockUI.timeout', to);
    }
};

// remove the block
function remove(el, opts) {
    var full = el == window;
    var $el = $(el);
    var data = $el.data('blockUI.history');
    var to = $el.data('blockUI.timeout');
    if (to) {
        clearTimeout(to);
        $el.removeData('blockUI.timeout');
    }
    opts = $.extend({}, $.blockUI.defaults, opts || {});
    bind(0, el, opts); // unbind events
    var els = full ? $('body').children().filter('.blockUI') : $('.blockUI', el);

    if (full)
        pageBlock = pageBlockEls = null;

    if (opts.fadeOut) {
        els.fadeOut(opts.fadeOut);
        setTimeout(function() { reset(els,data,opts,el); }, opts.fadeOut);
    }
    else
        reset(els, data, opts, el);
};

// move blocking element back into the DOM where it started
function reset(els,data,opts,el) {
    els.each(function(i,o) {
        // remove via DOM calls so we don't lose event handlers
        if (this.parentNode)
            this.parentNode.removeChild(this);
    });

    if (data && data.el) {
        data.el.style.display = data.display;
        data.el.style.position = data.position;
        if (data.parent)
            data.parent.appendChild(data.el);
        $(data.el).removeData('blockUI.history');
    }

    if (typeof opts.onUnblock == 'function')
        opts.onUnblock(el,opts);
};

// bind/unbind the handler
function bind(b, el, opts) {
    var full = el == window, $el = $(el);

    // don't bother unbinding if there is nothing to unbind
    if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))
        return;
    if (!full)
        $el.data('blockUI.isBlocked', b);

    // don't bind events when overlay is not in use or if bindEvents is false
    if (!opts.bindEvents || (b && !opts.showOverlay)) 
        return;

    // bind anchors and inputs for mouse and key events
    var events = 'mousedown mouseup keydown keypress';
    b ? $(document).bind(events, opts, handler) : $(document).unbind(events, handler);

// former impl...
//    var $e = $('a,:input');
//    b ? $e.bind(events, opts, handler) : $e.unbind(events, handler);
};

// event handler to suppress keyboard/mouse events when blocking
function handler(e) {
    // allow tab navigation (conditionally)
    if (e.keyCode && e.keyCode == 9) {
        if (pageBlock && e.data.constrainTabKey) {
            var els = pageBlockEls;
            var fwd = !e.shiftKey && e.target == els[els.length-1];
            var back = e.shiftKey && e.target == els[0];
            if (fwd || back) {
                setTimeout(function(){focus(back)},10);
                return false;
            }
        }
    }
    // allow events within the message content
    if ($(e.target).parents('div.blockMsg').length > 0)
        return true;

    // allow events for content that is not being blocked
    return $(e.target).parents().children().filter('div.blockUI').length == 0;
};

function focus(back) {
    if (!pageBlockEls)
        return;
    var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];
    if (e)
        e.focus();
};

function center(el, x, y) {
    var p = el.parentNode, s = el.style;
    var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');
    var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');
    if (x) s.left = l > 0 ? (l+'px') : '0';
    if (y) s.top  = t > 0 ? (t+'px') : '0';
};

function sz(el, p) {
    return parseInt($.css(el,p))||0;
};

})(jQuery);;

/****** /jquery/jquery.metadata.js ******/

/*
 * Metadata - jQuery plugin for parsing metadata from elements
 *
 * Copyright (c) 2006 John Resig, Yehuda Katz, J�örn Zaefferer, Paul McLanahan
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Revision: $Id: jquery.metadata.js 4187 2007-12-16 17:15:27Z joern.zaefferer $
 *
 */

/**
 * Sets the type of metadata to use. Metadata is encoded in JSON, and each property
 * in the JSON will become a property of the element itself.
 *
 * There are three supported types of metadata storage:
 *
 *   attr:  Inside an attribute. The name parameter indicates *which* attribute.
 *          
 *   class: Inside the class attribute, wrapped in curly braces: { }
 *   
 *   elem:  Inside a child element (e.g. a script tag). The
 *          name parameter indicates *which* element.
 *          
 * The metadata for an element is loaded the first time the element is accessed via jQuery.
 *
 * As a result, you can define the metadata type, use $(expr) to load the metadata into the elements
 * matched by expr, then redefine the metadata type and run another $(expr) for other elements.
 * 
 * @name $.metadata.setType
 *
 * @example <p id="one" class="some_class {item_id: 1, item_label: 'Label'}">This is a p</p>
 * @before $.metadata.setType("class")
 * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
 * @desc Reads metadata from the class attribute
 * 
 * @example <p id="one" class="some_class" data="{item_id: 1, item_label: 'Label'}">This is a p</p>
 * @before $.metadata.setType("attr", "data")
 * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
 * @desc Reads metadata from a "data" attribute
 * 
 * @example <p id="one" class="some_class"><script>{item_id: 1, item_label: 'Label'}</script>This is a p</p>
 * @before $.metadata.setType("elem", "script")
 * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
 * @desc Reads metadata from a nested script element
 * 
 * @param String type The encoding type
 * @param String name The name of the attribute to be used to get metadata (optional)
 * @cat Plugins/Metadata
 * @descr Sets the type of encoding to be used when loading metadata for the first time
 * @type undefined
 * @see metadata()
 */

(function($) {

$.extend({
	metadata : {
		defaults : {
			type: 'class',
			name: 'metadata',
			cre: /({.*})/,
			single: 'metadata'
		},
		setType: function( type, name ){
			this.defaults.type = type;
			this.defaults.name = name;
		},
		get: function( elem, opts ){
			var settings = $.extend({},this.defaults,opts);
			// check for empty string in single property
			if ( !settings.single.length ) settings.single = 'metadata';
			
			var data = $.data(elem, settings.single);
			// returned cached data if it already exists
			if ( data ) return data;
			
			data = "{}";
			
			if ( settings.type == "class" ) {
				var m = settings.cre.exec( elem.className );
				if ( m )
					data = m[1];
			} else if ( settings.type == "elem" ) {
				if( !elem.getElementsByTagName )
					return undefined;
				var e = elem.getElementsByTagName(settings.name);
				if ( e.length )
					data = $.trim(e[0].innerHTML);
			} else if ( elem.getAttribute != undefined ) {
				var attr = elem.getAttribute( settings.name );
				if ( attr )
					data = attr;
			}
			
			if ( data.indexOf( '{' ) <0 )
			data = "{" + data + "}";
			
			data = eval("(" + data + ")");
			
			$.data( elem, settings.single, data );
			return data;
		}
	}
});

/**
 * Returns the metadata object for the first member of the jQuery object.
 *
 * @name metadata
 * @descr Returns element's metadata object
 * @param Object opts An object contianing settings to override the defaults
 * @type jQuery
 * @cat Plugins/Metadata
 */
$.fn.metadata = function( opts ){
	return $.metadata.get( this[0], opts );
};

})(jQuery);;

/****** /jquery/jquery.validate.js ******/

/*
 * jQuery validation plug-in 1.5.2
 *
 * http://bassistance.de/jquery-plugins/jquery-plugin-validation/
 * http://docs.jquery.com/Plugins/Validation
 *
 * Copyright (c) 2006 - 2008 Jörn Zaefferer
 *
 * $Id: jquery.validate.js 6243 2009-02-19 11:40:49Z joern.zaefferer $
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */
(function($){$.extend($.fn,{validate:function(options){if(!this.length){options&&options.debug&&window.console&&console.warn("nothing selected, can't validate, returning nothing");return;}var validator=$.data(this[0],'validator');if(validator){return validator;}validator=new $.validator(options,this[0]);$.data(this[0],'validator',validator);if(validator.settings.onsubmit){this.find("input, button").filter(".cancel").click(function(){validator.cancelSubmit=true;});this.submit(function(event){if(validator.settings.debug)event.preventDefault();function handle(){if(validator.settings.submitHandler){validator.settings.submitHandler.call(validator,validator.currentForm);return false;}return true;}if(validator.cancelSubmit){validator.cancelSubmit=false;return handle();}if(validator.form()){if(validator.pendingRequest){validator.formSubmitted=true;return false;}return handle();}else{validator.focusInvalid();return false;}});}return validator;},valid:function(){if($(this[0]).is('form')){return this.validate().form();}else{var valid=false;var validator=$(this[0].form).validate();this.each(function(){valid|=validator.element(this);});return valid;}},removeAttrs:function(attributes){var result={},$element=this;$.each(attributes.split(/\s/),function(index,value){result[value]=$element.attr(value);$element.removeAttr(value);});return result;},rules:function(command,argument){var element=this[0];if(command){var settings=$.data(element.form,'validator').settings;var staticRules=settings.rules;var existingRules=$.validator.staticRules(element);switch(command){case"add":$.extend(existingRules,$.validator.normalizeRule(argument));staticRules[element.name]=existingRules;if(argument.messages)settings.messages[element.name]=$.extend(settings.messages[element.name],argument.messages);break;case"remove":if(!argument){delete staticRules[element.name];return existingRules;}var filtered={};$.each(argument.split(/\s/),function(index,method){filtered[method]=existingRules[method];delete existingRules[method];});return filtered;}}var data=$.validator.normalizeRules($.extend({},$.validator.metadataRules(element),$.validator.classRules(element),$.validator.attributeRules(element),$.validator.staticRules(element)),element);if(data.required){var param=data.required;delete data.required;data=$.extend({required:param},data);}return data;}});$.extend($.expr[":"],{blank:function(a){return!$.trim(a.value);},filled:function(a){return!!$.trim(a.value);},unchecked:function(a){return!a.checked;}});$.format=function(source,params){if(arguments.length==1)return function(){var args=$.makeArray(arguments);args.unshift(source);return $.format.apply(this,args);};if(arguments.length>2&&params.constructor!=Array){params=$.makeArray(arguments).slice(1);}if(params.constructor!=Array){params=[params];}$.each(params,function(i,n){source=source.replace(new RegExp("\\{"+i+"\\}","g"),n);});return source;};$.validator=function(options,form){this.settings=$.extend({},$.validator.defaults,options);this.currentForm=form;this.init();};$.extend($.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",errorElement:"label",focusInvalid:true,errorContainer:$([]),errorLabelContainer:$([]),onsubmit:true,ignore:[],ignoreTitle:false,onfocusin:function(element){this.lastActive=element;if(this.settings.focusCleanup&&!this.blockFocusCleanup){this.settings.unhighlight&&this.settings.unhighlight.call(this,element,this.settings.errorClass);this.errorsFor(element).hide();}},onfocusout:function(element){if(!this.checkable(element)&&(element.name in this.submitted||!this.optional(element))){this.element(element);}},onkeyup:function(element){if(element.name in this.submitted||element==this.lastElement){this.element(element);}},onclick:function(element){if(element.name in this.submitted)this.element(element);},highlight:function(element,errorClass){$(element).addClass(errorClass);},unhighlight:function(element,errorClass){$(element).removeClass(errorClass);}},setDefaults:function(settings){$.extend($.validator.defaults,settings);},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",dateDE:"Bitte geben Sie ein gültiges Datum ein.",number:"Please enter a valid number.",numberDE:"Bitte geben Sie eine Nummer ein.",digits:"Please enter only digits",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",accept:"Please enter a value with a valid extension.",maxlength:$.format("Please enter no more than {0} characters."),minlength:$.format("Please enter at least {0} characters."),rangelength:$.format("Please enter a value between {0} and {1} characters long."),range:$.format("Please enter a value between {0} and {1}."),max:$.format("Please enter a value less than or equal to {0}."),min:$.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:false,prototype:{init:function(){this.labelContainer=$(this.settings.errorLabelContainer);this.errorContext=this.labelContainer.length&&this.labelContainer||$(this.currentForm);this.containers=$(this.settings.errorContainer).add(this.settings.errorLabelContainer);this.submitted={};this.valueCache={};this.pendingRequest=0;this.pending={};this.invalid={};this.reset();var groups=(this.groups={});$.each(this.settings.groups,function(key,value){$.each(value.split(/\s/),function(index,name){groups[name]=key;});});var rules=this.settings.rules;$.each(rules,function(key,value){rules[key]=$.validator.normalizeRule(value);});function delegate(event){var validator=$.data(this[0].form,"validator");validator.settings["on"+event.type]&&validator.settings["on"+event.type].call(validator,this[0]);}$(this.currentForm).delegate("focusin focusout keyup",":text, :password, :file, select, textarea",delegate).delegate("click",":radio, :checkbox",delegate);if(this.settings.invalidHandler)$(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler);},form:function(){this.checkForm();$.extend(this.submitted,this.errorMap);this.invalid=$.extend({},this.errorMap);if(!this.valid())$(this.currentForm).triggerHandler("invalid-form",[this]);this.showErrors();return this.valid();},checkForm:function(){this.prepareForm();for(var i=0,elements=(this.currentElements=this.elements());elements[i];i++){this.check(elements[i]);}return this.valid();},element:function(element){element=this.clean(element);this.lastElement=element;this.prepareElement(element);this.currentElements=$(element);var result=this.check(element);if(result){delete this.invalid[element.name];}else{this.invalid[element.name]=true;}if(!this.numberOfInvalids()){this.toHide=this.toHide.add(this.containers);}this.showErrors();return result;},showErrors:function(errors){if(errors){$.extend(this.errorMap,errors);this.errorList=[];for(var name in errors){this.errorList.push({message:errors[name],element:this.findByName(name)[0]});}this.successList=$.grep(this.successList,function(element){return!(element.name in errors);});}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors();},resetForm:function(){if($.fn.resetForm)$(this.currentForm).resetForm();this.submitted={};this.prepareForm();this.hideErrors();this.elements().removeClass(this.settings.errorClass);},numberOfInvalids:function(){return this.objectLength(this.invalid);},objectLength:function(obj){var count=0;for(var i in obj)count++;return count;},hideErrors:function(){this.addWrapper(this.toHide).hide();},valid:function(){return this.size()==0;},size:function(){return this.errorList.length;},focusInvalid:function(){if(this.settings.focusInvalid){try{$(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus();}catch(e){}}},findLastActive:function(){var lastActive=this.lastActive;return lastActive&&$.grep(this.errorList,function(n){return n.element.name==lastActive.name;}).length==1&&lastActive;},elements:function(){var validator=this,rulesCache={};return $([]).add(this.currentForm.elements).filter(":input").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){!this.name&&validator.settings.debug&&window.console&&console.error("%o has no name assigned",this);if(this.name in rulesCache||!validator.objectLength($(this).rules()))return false;rulesCache[this.name]=true;return true;});},clean:function(selector){return $(selector)[0];},errors:function(){return $(this.settings.errorElement+"."+this.settings.errorClass,this.errorContext);},reset:function(){this.successList=[];this.errorList=[];this.errorMap={};this.toShow=$([]);this.toHide=$([]);this.formSubmitted=false;this.currentElements=$([]);},prepareForm:function(){this.reset();this.toHide=this.errors().add(this.containers);},prepareElement:function(element){this.reset();this.toHide=this.errorsFor(element);},check:function(element){element=this.clean(element);if(this.checkable(element)){element=this.findByName(element.name)[0];}var rules=$(element).rules();var dependencyMismatch=false;for(method in rules){var rule={method:method,parameters:rules[method]};try{var result=$.validator.methods[method].call(this,element.value.replace(/\r/g,""),element,rule.parameters);if(result=="dependency-mismatch"){dependencyMismatch=true;continue;}dependencyMismatch=false;if(result=="pending"){this.toHide=this.toHide.not(this.errorsFor(element));return;}if(!result){this.formatAndAdd(element,rule);return false;}}catch(e){this.settings.debug&&window.console&&console.log("exception occured when checking element "+element.id
+", check the '"+rule.method+"' method");throw e;}}if(dependencyMismatch)return;if(this.objectLength(rules))this.successList.push(element);return true;},customMetaMessage:function(element,method){if(!$.metadata)return;var meta=this.settings.meta?$(element).metadata()[this.settings.meta]:$(element).metadata();return meta&&meta.messages&&meta.messages[method];},customMessage:function(name,method){var m=this.settings.messages[name];return m&&(m.constructor==String?m:m[method]);},findDefined:function(){for(var i=0;i<arguments.length;i++){if(arguments[i]!==undefined)return arguments[i];}return undefined;},defaultMessage:function(element,method){return this.findDefined(this.customMessage(element.name,method),this.customMetaMessage(element,method),!this.settings.ignoreTitle&&element.title||undefined,$.validator.messages[method],"<strong>Warning: No message defined for "+element.name+"</strong>");},formatAndAdd:function(element,rule){var message=this.defaultMessage(element,rule.method);if(typeof message=="function")message=message.call(this,rule.parameters,element);this.errorList.push({message:message,element:element});this.errorMap[element.name]=message;this.submitted[element.name]=message;},addWrapper:function(toToggle){if(this.settings.wrapper)toToggle=toToggle.add(toToggle.parents(this.settings.wrapper));return toToggle;},defaultShowErrors:function(){for(var i=0;this.errorList[i];i++){var error=this.errorList[i];this.settings.highlight&&this.settings.highlight.call(this,error.element,this.settings.errorClass);this.showLabel(error.element,error.message);}if(this.errorList.length){this.toShow=this.toShow.add(this.containers);}if(this.settings.success){for(var i=0;this.successList[i];i++){this.showLabel(this.successList[i]);}}if(this.settings.unhighlight){for(var i=0,elements=this.validElements();elements[i];i++){this.settings.unhighlight.call(this,elements[i],this.settings.errorClass);}}this.toHide=this.toHide.not(this.toShow);this.hideErrors();this.addWrapper(this.toShow).show();},validElements:function(){return this.currentElements.not(this.invalidElements());},invalidElements:function(){return $(this.errorList).map(function(){return this.element;});},showLabel:function(element,message){var label=this.errorsFor(element);if(label.length){label.removeClass().addClass(this.settings.errorClass);label.attr("generated")&&label.html(message);}else{label=$("<"+this.settings.errorElement+"/>").attr({"for":this.idOrName(element),generated:true}).addClass(this.settings.errorClass).html(message||"");if(this.settings.wrapper){label=label.hide().show().wrap("<"+this.settings.wrapper+"/>").parent();}if(!this.labelContainer.append(label).length)this.settings.errorPlacement?this.settings.errorPlacement(label,$(element)):label.insertAfter(element);}if(!message&&this.settings.success){label.text("");typeof this.settings.success=="string"?label.addClass(this.settings.success):this.settings.success(label);}this.toShow=this.toShow.add(label);},errorsFor:function(element){return this.errors().filter("[for='"+this.idOrName(element)+"']");},idOrName:function(element){return this.groups[element.name]||(this.checkable(element)?element.name:element.id||element.name);},checkable:function(element){return/radio|checkbox/i.test(element.type);},findByName:function(name){var form=this.currentForm;return $(document.getElementsByName(name)).map(function(index,element){return element.form==form&&element.name==name&&element||null;});},getLength:function(value,element){switch(element.nodeName.toLowerCase()){case'select':return $("option:selected",element).length;case'input':if(this.checkable(element))return this.findByName(element.name).filter(':checked').length;}return value.length;},depend:function(param,element){return this.dependTypes[typeof param]?this.dependTypes[typeof param](param,element):true;},dependTypes:{"boolean":function(param,element){return param;},"string":function(param,element){return!!$(param,element.form).length;},"function":function(param,element){return param(element);}},optional:function(element){return!$.validator.methods.required.call(this,$.trim(element.value),element)&&"dependency-mismatch";},startRequest:function(element){if(!this.pending[element.name]){this.pendingRequest++;this.pending[element.name]=true;}},stopRequest:function(element,valid){this.pendingRequest--;if(this.pendingRequest<0)this.pendingRequest=0;delete this.pending[element.name];if(valid&&this.pendingRequest==0&&this.formSubmitted&&this.form()){$(this.currentForm).submit();}else if(!valid&&this.pendingRequest==0&&this.formSubmitted){$(this.currentForm).triggerHandler("invalid-form",[this]);}},previousValue:function(element){return $.data(element,"previousValue")||$.data(element,"previousValue",previous={old:null,valid:true,message:this.defaultMessage(element,"remote")});}},classRuleSettings:{required:{required:true},email:{email:true},url:{url:true},date:{date:true},dateISO:{dateISO:true},dateDE:{dateDE:true},number:{number:true},numberDE:{numberDE:true},digits:{digits:true},creditcard:{creditcard:true}},addClassRules:function(className,rules){className.constructor==String?this.classRuleSettings[className]=rules:$.extend(this.classRuleSettings,className);},classRules:function(element){var rules={};var classes=$(element).attr('class');classes&&$.each(classes.split(' '),function(){if(this in $.validator.classRuleSettings){$.extend(rules,$.validator.classRuleSettings[this]);}});return rules;},attributeRules:function(element){var rules={};var $element=$(element);for(method in $.validator.methods){var value=$element.attr(method);if(value){rules[method]=value;}}if(rules.maxlength&&/-1|2147483647|524288/.test(rules.maxlength)){delete rules.maxlength;}return rules;},metadataRules:function(element){if(!$.metadata)return{};var meta=$.data(element.form,'validator').settings.meta;return meta?$(element).metadata()[meta]:$(element).metadata();},staticRules:function(element){var rules={};var validator=$.data(element.form,'validator');if(validator.settings.rules){rules=$.validator.normalizeRule(validator.settings.rules[element.name])||{};}return rules;},normalizeRules:function(rules,element){$.each(rules,function(prop,val){if(val===false){delete rules[prop];return;}if(val.param||val.depends){var keepRule=true;switch(typeof val.depends){case"string":keepRule=!!$(val.depends,element.form).length;break;case"function":keepRule=val.depends.call(element,element);break;}if(keepRule){rules[prop]=val.param!==undefined?val.param:true;}else{delete rules[prop];}}});$.each(rules,function(rule,parameter){rules[rule]=$.isFunction(parameter)?parameter(element):parameter;});$.each(['minlength','maxlength','min','max'],function(){if(rules[this]){rules[this]=Number(rules[this]);}});$.each(['rangelength','range'],function(){if(rules[this]){rules[this]=[Number(rules[this][0]),Number(rules[this][1])];}});if($.validator.autoCreateRanges){if(rules.min&&rules.max){rules.range=[rules.min,rules.max];delete rules.min;delete rules.max;}if(rules.minlength&&rules.maxlength){rules.rangelength=[rules.minlength,rules.maxlength];delete rules.minlength;delete rules.maxlength;}}if(rules.messages){delete rules.messages}return rules;},normalizeRule:function(data){if(typeof data=="string"){var transformed={};$.each(data.split(/\s/),function(){transformed[this]=true;});data=transformed;}return data;},addMethod:function(name,method,message){$.validator.methods[name]=method;$.validator.messages[name]=message;if(method.length<3){$.validator.addClassRules(name,$.validator.normalizeRule(name));}},methods:{required:function(value,element,param){if(!this.depend(param,element))return"dependency-mismatch";switch(element.nodeName.toLowerCase()){case'select':var options=$("option:selected",element);return options.length>0&&(element.type=="select-multiple"||($.browser.msie&&!(options[0].attributes['value'].specified)?options[0].text:options[0].value).length>0);case'input':if(this.checkable(element))return this.getLength(value,element)>0;default:return $.trim(value).length>0;}},remote:function(value,element,param){if(this.optional(element))return"dependency-mismatch";var previous=this.previousValue(element);if(!this.settings.messages[element.name])this.settings.messages[element.name]={};this.settings.messages[element.name].remote=typeof previous.message=="function"?previous.message(value):previous.message;param=typeof param=="string"&&{url:param}||param;if(previous.old!==value){previous.old=value;var validator=this;this.startRequest(element);var data={};data[element.name]=value;$.ajax($.extend(true,{url:param,mode:"abort",port:"validate"+element.name,dataType:"json",data:data,success:function(response){if(response){var submitted=validator.formSubmitted;validator.prepareElement(element);validator.formSubmitted=submitted;validator.successList.push(element);validator.showErrors();}else{var errors={};errors[element.name]=response||validator.defaultMessage(element,"remote");validator.showErrors(errors);}previous.valid=response;validator.stopRequest(element,response);}},param));return"pending";}else if(this.pending[element.name]){return"pending";}return previous.valid;},minlength:function(value,element,param){return this.optional(element)||this.getLength($.trim(value),element)>=param;},maxlength:function(value,element,param){return this.optional(element)||this.getLength($.trim(value),element)<=param;},rangelength:function(value,element,param){var length=this.getLength($.trim(value),element);return this.optional(element)||(length>=param[0]&&length<=param[1]);},min:function(value,element,param){return this.optional(element)||value>=param;},max:function(value,element,param){return this.optional(element)||value<=param;},range:function(value,element,param){return this.optional(element)||(value>=param[0]&&value<=param[1]);},email:function(value,element){return this.optional(element)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);},url:function(value,element){return this.optional(element)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);},date:function(value,element){return this.optional(element)||!/Invalid|NaN/.test(new Date(value));},dateISO:function(value,element){return this.optional(element)||/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);},dateDE:function(value,element){return this.optional(element)||/^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value);},number:function(value,element){return this.optional(element)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);},numberDE:function(value,element){return this.optional(element)||/^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);},digits:function(value,element){return this.optional(element)||/^\d+$/.test(value);},creditcard:function(value,element){if(this.optional(element))return"dependency-mismatch";if(/[^0-9-]+/.test(value))return false;var nCheck=0,nDigit=0,bEven=false;value=value.replace(/\D/g,"");for(n=value.length-1;n>=0;n--){var cDigit=value.charAt(n);var nDigit=parseInt(cDigit,10);if(bEven){if((nDigit*=2)>9)nDigit-=9;}nCheck+=nDigit;bEven=!bEven;}return(nCheck%10)==0;},accept:function(value,element,param){param=typeof param=="string"?param:"png|jpe?g|gif";return this.optional(element)||value.match(new RegExp(".("+param+")$","i"));},equalTo:function(value,element,param){return value==$(param).val();}}});})(jQuery);;(function($){var ajax=$.ajax;var pendingRequests={};$.ajax=function(settings){settings=$.extend(settings,$.extend({},$.ajaxSettings,settings));var port=settings.port;if(settings.mode=="abort"){if(pendingRequests[port]){pendingRequests[port].abort();}return(pendingRequests[port]=ajax.apply(this,arguments));}return ajax.apply(this,arguments);};})(jQuery);;(function($){$.each({focus:'focusin',blur:'focusout'},function(original,fix){$.event.special[fix]={setup:function(){if($.browser.msie)return false;this.addEventListener(original,$.event.special[fix].handler,true);},teardown:function(){if($.browser.msie)return false;this.removeEventListener(original,$.event.special[fix].handler,true);},handler:function(e){arguments[0]=$.event.fix(e);arguments[0].type=fix;return $.event.handle.apply(this,arguments);}};});$.extend($.fn,{delegate:function(type,delegate,handler){return this.bind(type,function(event){var target=$(event.target);if(target.is(delegate)){return handler.apply(target,arguments);}});},triggerEvent:function(type,target){return this.triggerHandler(type,[$.event.fix({type:type,target:target})]);}})})(jQuery);;

/****** /jquery/jquery.confirm.js ******/

/**
 * Confirm plugin 1.2
 *
 * Copyright (c) 2007 Nadia Alramli (http://nadiana.com/)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 */

/**
 * For more docs and examples visit:
 * http://nadiana.com/jquery-confirm-plugin
 * For comments, suggestions or bug reporting,
 * email me at: http://nadiana.com/contact/
 */

jQuery.fn.confirm = function(options) {
  options = jQuery.extend({
    msg: 'Are you sure?',
    stopAfter: 'never',
    wrapper: '<span class="confirmYesNo"></span>',
    eventType: 'click',
    dialogShow: 'show',
    dialogSpeed: '',
    timeout: 0
  }, options);
  options.stopAfter = options.stopAfter.toLowerCase();
  if (!options.stopAfter in ['never', 'once', 'ok', 'cancel']) {
    options.stopAfter = 'never';
  }
  options.buttons = jQuery.extend({
    ok: 'Yes',
    cancel: 'No',
    wrapper:'<a href="#"></a>',
    separator: '/'
  }, options.buttons);

  // Shortcut to eventType.
  var type = options.eventType;

  return this.each(function() {
    var target = this;
    var $target = jQuery(target);
    var timer;
    var saveHandlers = function() {
      var events = jQuery.data(target, 'events');
      if (!events) {
        // There are no handlers to save.
        return;
      }
      target._handlers = new Array();
      for (var i in events[type]) {
        target._handlers.push(events[type][i]);
      }
    }
    
    // Create ok button, and bind in to a click handler.
    var $ok = jQuery(options.buttons.wrapper)
      .append(options.buttons.ok)
      .click(function() {
      // Check if timeout is set.
      if (options.timeout != 0) {
        clearTimeout(timer);
      }
      $target.unbind(type, handler);
      $target.show();
      $dialog.hide();
      // Rebind the saved handlers.
      if (target._handlers != undefined) {
        jQuery.each(target._handlers, function() {
          $target.click(this);
        });
      }
      // Trigger click event.
      $target.click();
      if (options.stopAfter != 'ok' && options.stopAfter != 'once') {
        $target.unbind(type);
        // Rebind the confirmation handler.
        $target.one(type, handler);
      }
      return false;
    })

    var $cancel = jQuery(options.buttons.wrapper).append(options.buttons.cancel).click(function() {
      // Check if timeout is set.
      if (options.timeout != 0) {
        clearTimeout(timer);
      }
      if (options.stopAfter != 'cancel' && options.stopAfter != 'once') {
        $target.one(type, handler);
      }
      $target.show();
      $dialog.hide();
      return false;
    });

    if (options.buttons.cls) {
      $ok.addClass(options.buttons.cls);
      $cancel.addClass(options.buttons.cls);
    }

    var $dialog = jQuery(options.wrapper)
    .append(options.msg)
    .append($ok)
    .append(options.buttons.separator)
    .append($cancel);

    var handler = function() {
      jQuery(this).hide();

      // Do this check because of a jQuery bug
      if (options.dialogShow != 'show') {
        $dialog.hide();
      }

      $dialog.insertBefore(this);
      // Display the dialog.
      $dialog[options.dialogShow](options.dialogSpeed);
      if (options.timeout != 0) {
        // Set timeout
        clearTimeout(timer);
        timer = setTimeout(function() {$cancel.click(); $target.one(type, handler);}, options.timeout);
      }
      return false;
    };

    saveHandlers();
    $target.unbind(type);
    target._confirm = handler
    target._confirmEvent = type;
    $target.one(type, handler);
  });
};

/****** /jquery/jquery.printIt.js ******/

/**
 *  $Id: jquery.printIt.js 19779 2009-10-21 16:00:52Z ajl $
 *  @version 1.0
 *  @author Adam LeVasseur-Arribas / agncy.com / expotv.com
 */ 
(function ($) {
    $.fn.printIt = function (options) {
        
        var settings = $.extend(
        {
            width: 540,
            height: 600,
            title: $('title:first').text() || '',
            cssFiles: [] // If nothing passed in, will get the CSS files from the calling page. If null, no CSS will be added.
            
        }, options || {});
        
        ///
        
        var cssFilesStr = (function()
        {
            var tempStr = '';
            var paths = [];
            
            if (settings.cssFiles.length)
            {
                paths = settings.cssFiles;
            }
            else if (settings.cssFiles == null)
            {
                // no CSS wanted
            }
            else
            {
                $('link[rel=stylesheet]').each(function()
                {
                    paths.push($(this).attr('href'));
                });
            }
            
            $.each(paths, function(i, val)
            {
                tempStr += '<link rel="stylesheet" type="text/css" href="'+val+'" />';
            });
            
            return tempStr;    
        })();
        
        with (window.open('', 'Print', 'scrollbars=1,left=100,top=100,width='+settings.width+',height='+settings.height))
        {
            document.write('<html>' +
                             '<head>' +
                               '<title>Print this</title>' +
                               cssFilesStr +
                               '<script>' +
                                 'function closeHandler() {' +
                                    'if(document.readyState=="complete") {' +
                                        'window.close()' +
                                    '} else {' +
                                        'setTimeout("closeHandler()",1000)' +
                                    '}' +
                                 '}' +
                               '</script>' +
                             '</head>' +
                             '<body onload="window.print();closeHandler();">' +
                             $(this).wrap('<div></div>').parent().html() +
                             '</body>' +
                           '</html>');
            document.close();
        }
        
    };
})(jQuery);;

/****** /user/ProfileHome.js ******/

/**
 * $Id: ProfileHome.js 19913 2009-10-28 16:57:44Z kip $
 * @author ajl / Adam LeVasseur-Arribas
 */
EXPOTV.ProfileHome = new function()
{
    var self = this;
    
    this.init = function()
    {
        self.attachAddFriendHandlers();
        self.attachSendAMessageHandlers();
        self.attachHideModuleHandlers();
    };
    
    this.attachAddFriendHandlers = function()
    {
        $('div.info_block').find('a.addFriendLink, a.sendMsgLink').bindIntoStack(0, 'click', function(e)
        {
            if (!'')
            {
                e.preventDefault();
                $.cookie('ref', document.location.href, {path: "/", domain: "www.expotv.com"});
                document.location = '/login';
            }
        });
        
        $('div.sendFriendInvite input.yes').live('click', function(e)
        {
            e.preventDefault();
            $U.showLoading();
            
            $.getJSON($(this).closest('form').attr('action'), {yes: 'yes'}, function(data)
            {
            	if (data.status == 'success')
            	{
            		$.nyroModalRemove();
            		$.growlUI('Friend request sent!');
            	}
            	else
            	{
            		console.log(data);
            		alert(data.errors.toString());
            	}
            	
	            $U.hideLoading();
            });
        });
    };
    
    this.attachSendAMessageHandlers = function() // This hander is not 'live' because jQuery doesnt support live 'submit' events
    {
    	$('div.sendAMessage form').submit(function(e)
    	{
            e.preventDefault();
            $U.showLoading();
            
            $.post($(this).attr('action'), $U.getFormValues($(this)), function(data)
            {
                if (data.status == 'success')
                {
                    $.nyroModalRemove();
                    $.growlUI('Message sent!');
                }
                else
                {
                    console.log(data);
                    alert(data.errors.toString());
                }
                
            	$U.hideLoading();
            	
            }, 'json');
    	});
    };
    
    this.attachHideModuleHandlers = function()
    {
        var $blocks = $('.welcomeBlock, .uploadFirstVideoBlock, .facebookMergeBlock');
        
        $blocks.each(function(i)
        {
            var $thisBlock = $(this);
            
            $thisBlock.find('a.hideThis').click(function(e)
            {
                e.preventDefault();
    
                $.getJSON($(this).attr('open'), { c: $U.rand() });
                $thisBlock.slideUp(function()
                {
                    $thisBlock.remove();
                });
            });
        });
    };
}

$(EXPOTV.ProfileHome.init);;

/****** /user/Invites.js ******/

/**
 * $Id: Invites.js 19780 2009-10-21 16:00:57Z ajl $
 * @author Adam LeVasseur-Arribas / adam @ expotv.com
 */
if (typeof EXPOTV.User == "undefined") EXPOTV.User = {};

EXPOTV.User.Invites = new function()
{
    var self = this;
    
    this.init = function()
    {
        self.attachInvitesHandlers();
        self.attachPrintHandlers();
    };
    
    this.attachPrintHandlers = function()
    {
        $('.inviteModal a.printThisAss').live('click', function(e)
        {
            e.preventDefault();
            $('#nyroModalContent').clone().attr('style', '').printIt();
       });
    };
    
    this.attachInvitesHandlers = function()
    {
        var $inviteActionLinks = $('.inviteModal').find('a.accept_assignment, a.accept_survey, a.reject');
        
        $inviteActionLinks.live('click', function(e)
        {
            var assId = $(this).attr('href').match(/\/(\d+)$/)[1];

            if ($(this).is('.accept_survey'))
            {
               //self.removeInviteEntry(assId);
               $.nyroModalRemove();
               return true;
            }
            else if ($(this).is('.accept_assignment'))
            {
                e.preventDefault();
                $.metadata.setType("attr", "validate");
                
                var $shippingAddressFrm = $('.inviteModal form#shippingAddressFrm');
                
                if ($shippingAddressFrm.length > 0) // If shipping form is there
                {
                    $shippingAddressFrm.attr('action', $(this).attr('href'));
                    
                    $shippingAddressFrm.validate(
                    {
                        errorPlacement: function($error, $el) 
                        {
                            if ($el.is(':checkbox'))
                                $error.appendTo($el.closest('label'));
                        },
                        submitHandler: function(form)
                        {
                            $U.showLoading();
                            
                            $.post($(form).attr('action'), $U.getFormValues('shippingAddressFrm'), function(data)
                            {
                                if (data.status == 'success')
                                {
                                    self.removeInviteEntry(assId);
                                    $.nyroModalRemove();
                                    $.growlUI('Assignment accepted!');                          
                                }
                                else
                                {
                                    console.log(data);
                                    alert(data.errors.toString());
                                }
                                
                                $U.hideLoading();
                                
                            }, 'json');
                            
                            return false;
                        }
                    });
                    
                    $shippingAddressFrm.submit();
                }
                else // No shipping form
                {
                    $U.showLoading();
                    
                    $.getJSON($(this).attr('href'), { c: $U.rand() }, function(data)
                    {
                        if (data.status == 'success')
                        {
                            self.removeInviteEntry(assId);
                            $.nyroModalRemove();
                            $.growlUI('Assignment accepted!');                           
                        }
                        else
                        {
                            console.log(data);
                            alert(data.errors.toString());
                        }
                        
                        $U.hideLoading();
                    });
                }
            }
            else if ($(this).is('.reject'))
            {
                e.preventDefault();
                $U.showLoading();
                
                $.getJSON($(this).attr('href'), { c: $U.rand() }, function(data)
                {
                    if (data.status == 'success')
                    {
                        self.removeInviteEntry(assId);
                        $.nyroModalRemove();
                        $.growlUI('Invitation declined');                           
                    }
                    else
                    {
                        console.log(data);
                        alert(data.errors.toString());
                    }
                    
                    $U.hideLoading();
                });
                
            }
        });
    };
    
    this.removeInviteEntry = function(assId)
    {
        var $inviteBlock = $('#inviteBlock');
        var $entries = $inviteBlock.find('.inviteEntry');
        
        $entries.each(function(i)
        {
            var parsedId = $(this).attr('class').match(/inviteEntry\[(\d+)\]/)[1];
            
            if (parsedId == assId)
            {
                $(this).remove();
                return false;                
            }   
        });
        
    };
}

$(EXPOTV.User.Invites.init);;

/****** /user/VideoComments.js ******/

/**
 * $Id: VideoComments.js 19337 2009-10-01 16:27:42Z ajl $
 * @author ajl / Adam LeVasseur-Arribas
 */
if (typeof EXPOTV.User == "undefined") EXPOTV.User = {};
EXPOTV.User.VideoComments = new function()
{
    var self = this;
    
    this.init = function()
    {
    	self.attachRemoveVideoCommentsComfirmationHandlers();
    }
    
    this.attachRemoveVideoCommentsComfirmationHandlers = function()
    {
        $('a.removeVideoCommentLink').click(function(e)
        {
            $.get($(this).attr('open'), { c: $U.rand() });
            
            $(this).closest('.videoCommentEntry').animate({opacity: 'hide', height: 'hide'}, function()
            {
                $(this).remove();
            });
            
        }).confirm(
        {
            timeout: 3000
        });
        
        
	    /*$('a.remove-comment').click(function(e)
	    {
	        e.preventDefault();
	        $.blockUI({ message: $('#removeCommentComfirmDialog'), css: {} });
	        
	        var removeCommentUrl = $(this).attr('href');
	        
	        $('#removeCommentComfirmDialog a.yes').unbind('click').click(function(e)
	        {
	            e.preventDefault();
	            location.href = removeCommentUrl;
	        });
	        
	        $('#removeCommentComfirmDialog a.no').unbind('click').click(function(e)
	        {
	            e.preventDefault();
	            $.unblockUI();
	        });
	    });*/
    }

};

$(EXPOTV.User.VideoComments.init);;

