

/** File: jquery.pack.js **/

/*
 * jQuery JavaScript Library v1.3.1
 * http://jquery.com/
 *
 * Copyright (c) 2009 John Resig
 * Dual licensed under the MIT and GPL licenses.
 * http://docs.jquery.com/License
 *
 * Date: 2009-01-21 20:42:16 -0500 (Wed, 21 Jan 2009)
 * Revision: 6158
 */
(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.makeArray(E))},selector:"",jquery:"1.3.1",size:function(){return this.length},get:function(E){return E===g?o.makeArray(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,find:function(E){if(this.length===1&&!/,/.test(E)){var G=this.pushStack([],"find",E);G.length=0;o.find(E,this[0],G);return G}else{var F=o.map(this,function(H){return o.find(E,H)});return this.pushStack(/[^+>] [^+>]/.test(E)?o.unique(F):F,"find",E)}},clone:function(F){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.cloneNode(true),H=document.createElement("div");H.appendChild(I);return o.clean([H.innerHTML])[0]}else{return this.cloneNode(true)}});var G=E.find("*").andSelf().each(function(){if(this[h]!==g){this[h]=null}});if(F===true){this.find("*").andSelf().each(function(I){if(this.nodeType==3){return}var H=o.data(this,"events");for(var K in H){for(var J in H[K]){o.event.add(G[I],K,H[K][J],H[K][J].data)}}})}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 F=o.expr.match.POS.test(E)?o(E):null;return this.map(function(){var G=this;while(G&&G.ownerDocument){if(F?F.index(G)>-1:o(G).is(E)){return G}G=G.parentNode}})},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: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(K,N,M){if(this[0]){var J=(this[0].ownerDocument||this[0]).createDocumentFragment(),G=o.clean(K,(this[0].ownerDocument||this[0]),J),I=J.firstChild,E=this.length>1?J.cloneNode(true):J;if(I){for(var H=0,F=this.length;H<F;H++){M.call(L(this[H],I),H>0?E.cloneNode(true):J)}}if(G){o.each(G,z)}}return this;function L(O,P){return N&&o.nodeName(O,"table")&&o.nodeName(P,"tr")?(O.getElementsByTagName("tbody")[0]||O.appendChild(O.ownerDocument.createElement("tbody"))):O}}};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){G=o.trim(G);if(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(G,E,I){if(E=="width"||E=="height"){var K,F={position:"absolute",visibility:"hidden",display:"block"},J=E=="width"?["Left","Right"]:["Top","Bottom"];function H(){K=E=="width"?G.offsetWidth:G.offsetHeight;var M=0,L=0;o.each(J,function(){M+=parseFloat(o.curCSS(G,"padding"+this,true))||0;L+=parseFloat(o.curCSS(G,"border"+this+"Width",true))||0});K-=Math.round(M+L)}if(o(G).is(":visible")){H()}else{o.swap(G,F,H)}return Math.max(0,K)}return o.curCSS(G,E,I)},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,R){if(typeof R==="number"){R+=""}if(!R){return}if(typeof R==="string"){R=R.replace(/(<(\w+)[^>]*?)\/>/g,function(T,U,S){return S.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?T:U+"></"+S+">"});var O=o.trim(R).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]+R+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var N=!O.indexOf("<table")&&O.indexOf("<tbody")<0?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&O.indexOf("<tbody")<0?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(R)){L.insertBefore(K.createTextNode(R.match(/^\s*/)[0]),L.firstChild)}R=o.makeArray(L.childNodes)}if(R.nodeType){G.push(R)}else{G=o.merge(G,R)}});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(){var G=arguments;return this.each(function(){for(var H=0,I=G.length;H<I;H++){o(G[H])[F](this)}})}});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).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 Q=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]+['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g,K=0,G=Object.prototype.toString;var F=function(X,T,aa,ab){aa=aa||[];T=T||document;if(T.nodeType!==1&&T.nodeType!==9){return[]}if(!X||typeof X!=="string"){return aa}var Y=[],V,ae,ah,S,ac,U,W=true;Q.lastIndex=0;while((V=Q.exec(X))!==null){Y.push(V[1]);if(V[2]){U=RegExp.rightContext;break}}if(Y.length>1&&L.exec(X)){if(Y.length===2&&H.relative[Y[0]]){ae=I(Y[0]+Y[1],T)}else{ae=H.relative[Y[0]]?[T]:F(Y.shift(),T);while(Y.length){X=Y.shift();if(H.relative[X]){X+=Y.shift()}ae=I(X,ae)}}}else{var ad=ab?{expr:Y.pop(),set:E(ab)}:F.find(Y.pop(),Y.length===1&&T.parentNode?T.parentNode:T,P(T));ae=F.filter(ad.expr,ad.set);if(Y.length>0){ah=E(ae)}else{W=false}while(Y.length){var ag=Y.pop(),af=ag;if(!H.relative[ag]){ag=""}else{af=Y.pop()}if(af==null){af=T}H.relative[ag](ah,af,P(T))}}if(!ah){ah=ae}if(!ah){throw"Syntax error, unrecognized expression: "+(ag||X)}if(G.call(ah)==="[object Array]"){if(!W){aa.push.apply(aa,ah)}else{if(T.nodeType===1){for(var Z=0;ah[Z]!=null;Z++){if(ah[Z]&&(ah[Z]===true||ah[Z].nodeType===1&&J(T,ah[Z]))){aa.push(ae[Z])}}}else{for(var Z=0;ah[Z]!=null;Z++){if(ah[Z]&&ah[Z].nodeType===1){aa.push(ae[Z])}}}}}else{E(ah,aa)}if(U){F(U,T,aa,ab)}return aa};F.matches=function(S,T){return F(S,null,null,T)};F.find=function(Z,S,aa){var Y,W;if(!Z){return[]}for(var V=0,U=H.order.length;V<U;V++){var X=H.order[V],W;if((W=H.match[X].exec(Z))){var T=RegExp.leftContext;if(T.substr(T.length-1)!=="\\"){W[1]=(W[1]||"").replace(/\\/g,"");Y=H.find[X](W,S,aa);if(Y!=null){Z=Z.replace(H.match[X],"");break}}}}if(!Y){Y=S.getElementsByTagName("*")}return{set:Y,expr:Z}};F.filter=function(ab,aa,ae,V){var U=ab,ag=[],Y=aa,X,S;while(ab&&aa.length){for(var Z in H.filter){if((X=H.match[Z].exec(ab))!=null){var T=H.filter[Z],af,ad;S=false;if(Y==ag){ag=[]}if(H.preFilter[Z]){X=H.preFilter[Z](X,Y,ae,ag,V);if(!X){S=af=true}else{if(X===true){continue}}}if(X){for(var W=0;(ad=Y[W])!=null;W++){if(ad){af=T(ad,X,W,Y);var ac=V^!!af;if(ae&&af!=null){if(ac){S=true}else{Y[W]=false}}else{if(ac){ag.push(ad);S=true}}}}}if(af!==g){if(!ae){Y=ag}ab=ab.replace(H.match[Z],"");if(!S){return[]}break}}}ab=ab.replace(/\s*,\s*/,"");if(ab==U){if(S==null){throw"Syntax error, unrecognized expression: "+ab}else{break}}U=ab}return Y};var H=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(S){return S.getAttribute("href")}},relative:{"+":function(W,T){for(var U=0,S=W.length;U<S;U++){var V=W[U];if(V){var X=V.previousSibling;while(X&&X.nodeType!==1){X=X.previousSibling}W[U]=typeof T==="string"?X||false:X===T}}if(typeof T==="string"){F.filter(T,W,true)}},">":function(X,T,Y){if(typeof T==="string"&&!/\W/.test(T)){T=Y?T:T.toUpperCase();for(var U=0,S=X.length;U<S;U++){var W=X[U];if(W){var V=W.parentNode;X[U]=V.nodeName===T?V:false}}}else{for(var U=0,S=X.length;U<S;U++){var W=X[U];if(W){X[U]=typeof T==="string"?W.parentNode:W.parentNode===T}}if(typeof T==="string"){F.filter(T,X,true)}}},"":function(V,T,X){var U="done"+(K++),S=R;if(!T.match(/\W/)){var W=T=X?T:T.toUpperCase();S=O}S("parentNode",T,U,V,W,X)},"~":function(V,T,X){var U="done"+(K++),S=R;if(typeof T==="string"&&!T.match(/\W/)){var W=T=X?T:T.toUpperCase();S=O}S("previousSibling",T,U,V,W,X)}},find:{ID:function(T,U,V){if(typeof U.getElementById!=="undefined"&&!V){var S=U.getElementById(T[1]);return S?[S]:[]}},NAME:function(S,T,U){if(typeof T.getElementsByName!=="undefined"&&!U){return T.getElementsByName(S[1])}},TAG:function(S,T){return T.getElementsByTagName(S[1])}},preFilter:{CLASS:function(V,T,U,S,Y){V=" "+V[1].replace(/\\/g,"")+" ";var X;for(var W=0;(X=T[W])!=null;W++){if(X){if(Y^(" "+X.className+" ").indexOf(V)>=0){if(!U){S.push(X)}}else{if(U){T[W]=false}}}}return false},ID:function(S){return S[1].replace(/\\/g,"")},TAG:function(T,S){for(var U=0;S[U]===false;U++){}return S[U]&&P(S[U])?T[1]:T[1].toUpperCase()},CHILD:function(S){if(S[1]=="nth"){var T=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(S[2]=="even"&&"2n"||S[2]=="odd"&&"2n+1"||!/\D/.test(S[2])&&"0n+"+S[2]||S[2]);S[2]=(T[1]+(T[2]||1))-0;S[3]=T[3]-0}S[0]="done"+(K++);return S},ATTR:function(T){var S=T[1].replace(/\\/g,"");if(H.attrMap[S]){T[1]=H.attrMap[S]}if(T[2]==="~="){T[4]=" "+T[4]+" "}return T},PSEUDO:function(W,T,U,S,X){if(W[1]==="not"){if(W[3].match(Q).length>1){W[3]=F(W[3],null,null,T)}else{var V=F.filter(W[3],T,U,true^X);if(!U){S.push.apply(S,V)}return false}}else{if(H.match.POS.test(W[0])){return true}}return W},POS:function(S){S.unshift(true);return S}},filters:{enabled:function(S){return S.disabled===false&&S.type!=="hidden"},disabled:function(S){return S.disabled===true},checked:function(S){return S.checked===true},selected:function(S){S.parentNode.selectedIndex;return S.selected===true},parent:function(S){return !!S.firstChild},empty:function(S){return !S.firstChild},has:function(U,T,S){return !!F(S[3],U).length},header:function(S){return/h\d/i.test(S.nodeName)},text:function(S){return"text"===S.type},radio:function(S){return"radio"===S.type},checkbox:function(S){return"checkbox"===S.type},file:function(S){return"file"===S.type},password:function(S){return"password"===S.type},submit:function(S){return"submit"===S.type},image:function(S){return"image"===S.type},reset:function(S){return"reset"===S.type},button:function(S){return"button"===S.type||S.nodeName.toUpperCase()==="BUTTON"},input:function(S){return/input|select|textarea|button/i.test(S.nodeName)}},setFilters:{first:function(T,S){return S===0},last:function(U,T,S,V){return T===V.length-1},even:function(T,S){return S%2===0},odd:function(T,S){return S%2===1},lt:function(U,T,S){return T<S[3]-0},gt:function(U,T,S){return T>S[3]-0},nth:function(U,T,S){return S[3]-0==T},eq:function(U,T,S){return S[3]-0==T}},filter:{CHILD:function(S,V){var Y=V[1],Z=S.parentNode;var X=V[0];if(Z&&(!Z[X]||!S.nodeIndex)){var W=1;for(var T=Z.firstChild;T;T=T.nextSibling){if(T.nodeType==1){T.nodeIndex=W++}}Z[X]=W-1}if(Y=="first"){return S.nodeIndex==1}else{if(Y=="last"){return S.nodeIndex==Z[X]}else{if(Y=="only"){return Z[X]==1}else{if(Y=="nth"){var ab=false,U=V[2],aa=V[3];if(U==1&&aa==0){return true}if(U==0){if(S.nodeIndex==aa){ab=true}}else{if((S.nodeIndex-aa)%U==0&&(S.nodeIndex-aa)/U>=0){ab=true}}return ab}}}}},PSEUDO:function(Y,U,V,Z){var T=U[1],W=H.filters[T];if(W){return W(Y,V,U,Z)}else{if(T==="contains"){return(Y.textContent||Y.innerText||"").indexOf(U[3])>=0}else{if(T==="not"){var X=U[3];for(var V=0,S=X.length;V<S;V++){if(X[V]===Y){return false}}return true}}}},ID:function(T,S){return T.nodeType===1&&T.getAttribute("id")===S},TAG:function(T,S){return(S==="*"&&T.nodeType===1)||T.nodeName===S},CLASS:function(T,S){return S.test(T.className)},ATTR:function(W,U){var S=H.attrHandle[U[1]]?H.attrHandle[U[1]](W):W[U[1]]||W.getAttribute(U[1]),X=S+"",V=U[2],T=U[4];return S==null?V==="!=":V==="="?X===T:V==="*="?X.indexOf(T)>=0:V==="~="?(" "+X+" ").indexOf(T)>=0:!U[4]?S:V==="!="?X!=T:V==="^="?X.indexOf(T)===0:V==="$="?X.substr(X.length-T.length)===T:V==="|="?X===T||X.substr(0,T.length+1)===T+"-":false},POS:function(W,T,U,X){var S=T[2],V=H.setFilters[S];if(V){return V(W,U,T,X)}}}};var L=H.match.POS;for(var N in H.match){H.match[N]=RegExp(H.match[N].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(T,S){T=Array.prototype.slice.call(T);if(S){S.push.apply(S,T);return S}return T};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(M){E=function(W,V){var T=V||[];if(G.call(W)==="[object Array]"){Array.prototype.push.apply(T,W)}else{if(typeof W.length==="number"){for(var U=0,S=W.length;U<S;U++){T.push(W[U])}}else{for(var U=0;W[U];U++){T.push(W[U])}}}return T}}(function(){var T=document.createElement("form"),U="script"+(new Date).getTime();T.innerHTML="<input name='"+U+"'/>";var S=document.documentElement;S.insertBefore(T,S.firstChild);if(!!document.getElementById(U)){H.find.ID=function(W,X,Y){if(typeof X.getElementById!=="undefined"&&!Y){var V=X.getElementById(W[1]);return V?V.id===W[1]||typeof V.getAttributeNode!=="undefined"&&V.getAttributeNode("id").nodeValue===W[1]?[V]:g:[]}};H.filter.ID=function(X,V){var W=typeof X.getAttributeNode!=="undefined"&&X.getAttributeNode("id");return X.nodeType===1&&W&&W.nodeValue===V}}S.removeChild(T)})();(function(){var S=document.createElement("div");S.appendChild(document.createComment(""));if(S.getElementsByTagName("*").length>0){H.find.TAG=function(T,X){var W=X.getElementsByTagName(T[1]);if(T[1]==="*"){var V=[];for(var U=0;W[U];U++){if(W[U].nodeType===1){V.push(W[U])}}W=V}return W}}S.innerHTML="<a href='#'></a>";if(S.firstChild&&S.firstChild.getAttribute("href")!=="#"){H.attrHandle.href=function(T){return T.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var S=F,T=document.createElement("div");T.innerHTML="<p class='TEST'></p>";if(T.querySelectorAll&&T.querySelectorAll(".TEST").length===0){return}F=function(X,W,U,V){W=W||document;if(!V&&W.nodeType===9&&!P(W)){try{return E(W.querySelectorAll(X),U)}catch(Y){}}return S(X,W,U,V)};F.find=S.find;F.filter=S.filter;F.selectors=S.selectors;F.matches=S.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){H.order.splice(1,0,"CLASS");H.find.CLASS=function(S,T){return T.getElementsByClassName(S[1])}}function O(T,Z,Y,ac,aa,ab){for(var W=0,U=ac.length;W<U;W++){var S=ac[W];if(S){S=S[T];var X=false;while(S&&S.nodeType){var V=S[Y];if(V){X=ac[V];break}if(S.nodeType===1&&!ab){S[Y]=W}if(S.nodeName===Z){X=S;break}S=S[T]}ac[W]=X}}}function R(T,Y,X,ab,Z,aa){for(var V=0,U=ab.length;V<U;V++){var S=ab[V];if(S){S=S[T];var W=false;while(S&&S.nodeType){if(S[X]){W=ab[S[X]];break}if(S.nodeType===1){if(!aa){S[X]=V}if(typeof Y!=="string"){if(S===Y){W=true;break}}else{if(F.filter(Y,[S]).length>0){W=S;break}}}S=S[T]}ab[V]=W}}}var J=document.compareDocumentPosition?function(T,S){return T.compareDocumentPosition(S)&16}:function(T,S){return T!==S&&(T.contains?T.contains(S):true)};var P=function(S){return S.nodeType===9&&S.documentElement.nodeName!=="HTML"||!!S.ownerDocument&&P(S.ownerDocument)};var I=function(S,Z){var V=[],W="",X,U=Z.nodeType?[Z]:Z;while((X=H.match.PSEUDO.exec(S))){W+=X[0];S=S.replace(H.match.PSEUDO,"")}S=H.relative[S]?S+"*":S;for(var Y=0,T=U.length;Y<T;Y++){F(S,U[Y],V)}return F.filter(W,V)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(S){return"hidden"===S.type||o.css(S,"display")==="none"||o.css(S,"visibility")==="hidden"};F.selectors.filters.visible=function(S){return"hidden"!==S.type&&o.css(S,"display")!=="none"&&o.css(S,"visibility")!=="hidden"};F.selectors.filters.animated=function(S){return o.grep(o.timers,function(T){return S===T.elem}).length};o.multiFilter=function(U,S,T){if(T){U=":not("+U+")"}return F.matches(U,S)};o.dir=function(U,T){var S=[],V=U[T];while(V&&V!=document){if(V.nodeType==1){S.push(V)}V=V[T]}return S};o.nth=function(W,S,U,V){S=S||1;var T=0;for(;W;W=W[U]){if(W.nodeType==1&&++T==S){break}}return W};o.sibling=function(U,T){var S=[];for(;U;U=U.nextSibling){if(U.nodeType==1&&U!=T){S.push(U)}}return S};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);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})}}});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){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&&typeof l.frameElement==="undefined"){(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="1px";L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L)})})();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/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();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}this[H].style.display=o.data(this[H],"olddisplay",K)}}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"))}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)==1){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)}},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(H,F){var E=H?"Left":"Top",G=H?"Right":"Bottom";o.fn["inner"+F]=function(){return this[F.toLowerCase()]()+j(this,"padding"+E)+j(this,"padding"+G)};o.fn["outer"+F]=function(J){return this["inner"+F]()+j(this,"border"+E+"Width")+j(this,"border"+G+"Width")+(J?j(this,"margin"+E)+j(this,"margin"+G):0)};var I=F.toLowerCase();o.fn[I]=function(J){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+F]||document.body["client"+F]:this[0]==document?Math.max(document.documentElement["client"+F],document.body["scroll"+F],document.documentElement["scroll"+F],document.body["offset"+F],document.documentElement["offset"+F]):J===g?(this.length?o.css(this[0],I):null):this.css(I,typeof J==="string"?J:J+"px")}})})();


/** File: jquery.tools.min.js **/

/*
 * jquery.tools 1.0.2 - The missing UI library
 * 
 * [tools.tooltip-1.0.2, tools.overlay-1.0.4, tools.expose-1.0.3]
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 * 
 * -----
 * 
 * Build: Fri Jun 12 13:06:01 GMT+00:00 2009
 */
(function(c){c.tools=c.tools||{version:{}};c.tools.version.tooltip="1.0.2";var b={toggle:[function(){this.getTip().show()},function(){this.getTip().hide()}],fade:[function(){this.getTip().fadeIn(this.getConf().fadeInSpeed)},function(){this.getTip().fadeOut(this.getConf().fadeOutSpeed)}]};c.tools.addTipEffect=function(d,f,e){b[d]=[f,e]};c.tools.addTipEffect("slideup",function(){var d=this.getConf();var e=d.slideOffset||10;this.getTip().css({opacity:0}).animate({top:"-="+e,opacity:d.opacity},d.slideInSpeed||200).show()},function(){var d=this.getConf();var e=d.slideOffset||10;this.getTip().animate({top:"-="+e,opacity:0},d.slideOutSpeed||200,function(){c(this).hide().animate({top:"+="+(e*2)},0)})});function a(f,e){var d=this;var h=f.next();if(e.tip){if(e.tip.indexOf("#")!=-1){h=c(e.tip)}else{h=f.nextAll(e.tip).eq(0);if(!h.length){h=f.parent().nextAll(e.tip).eq(0)}}}function j(k,l){c(d).bind(k,function(n,m){if(l&&l.call(this)===false&&m){m.proceed=false}});return d}c.each(e,function(k,l){if(c.isFunction(l)){j(k,l)}});var g=f.is("input, textarea");f.bind(g?"focus":"mouseover",function(k){k.target=this;d.show(k);h.hover(function(){d.show()},function(){d.hide()})});f.bind(g?"blur":"mouseout",function(){d.hide()});h.css("opacity",e.opacity);var i=0;c.extend(d,{show:function(q){if(q){f=c(q.target)}clearTimeout(i);if(h.is(":animated")||h.is(":visible")){return d}var o={proceed:true};c(d).trigger("onBeforeShow",o);if(!o.proceed){return d}var n=f.position().top-h.outerHeight();var k=h.outerHeight()+f.outerHeight();var r=e.position[0];if(r=="center"){n+=k/2}if(r=="bottom"){n+=k}var l=f.outerWidth()+h.outerWidth();var m=f.position().left+f.outerWidth();r=e.position[1];if(r=="center"){m-=l/2}if(r=="left"){m-=l}n+=e.offset[0];m+=e.offset[1];h.css({position:"absolute",top:n,left:m});b[e.effect][0].call(d);c(d).trigger("onShow");return d},hide:function(){clearTimeout(i);i=setTimeout(function(){if(!h.is(":visible")){return d}var k={proceed:true};c(d).trigger("onBeforeHide",k);if(!k.proceed){return d}b[e.effect][1].call(d);c(d).trigger("onHide")},e.delay||1);return d},isShown:function(){return h.is(":visible, :animated")},getConf:function(){return e},getTip:function(){return h},getTrigger:function(){return f},onBeforeShow:function(k){return j("onBeforeShow",k)},onShow:function(k){return j("onShow",k)},onBeforeHide:function(k){return j("onBeforeHide",k)},onHide:function(k){return j("onHide",k)}})}c.prototype.tooltip=function(d){var e=this.eq(typeof d=="number"?d:0).data("tooltip");if(e){return e}var f={tip:null,effect:"slideup",delay:30,opacity:1,position:["top","center"],offset:[0,0],api:false};if(c.isFunction(d)){d={onBeforeShow:d}}c.extend(f,d);this.each(function(){e=new a(c(this),f);c(this).data("tooltip",e)});return f.api?e:this}})(jQuery);
(function(b){b.tools=b.tools||{version:{}};b.tools.version.overlay="1.0.4";var c=[];function a(h,d){var r=this,q=b(window),f,n,s,i,k,m,l;var e=d.expose&&b.tools.version.expose;function p(o,t){b(r).bind(o,function(v,u){if(t&&t.call(this)===false&&u){u.proceed=false}});return r}b.each(d,function(o,t){if(b.isFunction(t)){p(o,t)}});var j=d.target||h.attr("rel");var g=j?b(j):null;if(!g){g=h}else{k=h}q.load(function(){m=g.attr("overlay");if(!m){m=g.css("backgroundImage");if(!m){throw"background-image CSS property not set for overlay element: "+j}m=m.substring(m.indexOf("(")+1,m.indexOf(")")).replace(/\"/g,"");g.css("backgroundImage","none");g.attr("overlay",m)}s=g.outerWidth({margin:true});i=g.outerHeight({margin:true});n=b('<img src="'+m+'"/>');n.css({border:0,position:"absolute",display:"none"}).width(s).attr("overlay",true);b("body").append(n);if(k){k.bind("click.overlay",function(o){r.load(o.pageY-q.scrollTop(),o.pageX-q.scrollLeft());return o.preventDefault()})}d.close=d.close||".close";if(!g.find(d.close).length){g.prepend('<div class="close"></div>')}f=g.find(d.close);f.bind("click.overlay",function(){r.close()});if(d.preload){setTimeout(function(){var o=new Image();o.src=m},2000)}});b.extend(r,{load:function(w,v){if(!n){q.load(function(){r.load(w,v)});return r}if(r.isOpened()){return r}if(d.oneInstance){b.each(c,function(){this.close()})}var u={proceed:true};b(r).trigger("onBeforeLoad",u);if(!u.proceed){return r}if(e){n.expose(d.expose);l=n.expose().load()}w=w||d.start.top;v=v||d.start.left;var o=d.finish.top;var t=d.finish.left;if(o=="center"){o=Math.max((q.height()-i)/2,0)}if(t=="center"){t=Math.max((q.width()-s)/2,0)}if(!d.start.absolute){w+=q.scrollTop();v+=q.scrollLeft()}if(!d.finish.absolute){o+=q.scrollTop();t+=q.scrollLeft()}n.css({top:w,left:v,width:d.start.width,zIndex:d.zIndex}).show();n.animate({top:o,left:t,width:s},d.speed,function(){g.css({position:"absolute",top:o,left:t});var x=n.css("zIndex");f.add(g).css("zIndex",++x);g.fadeIn(d.fadeInSpeed,function(){b(r).trigger("onLoad")})});return r},close:function(){if(!r.isOpened()){return r}var u={proceed:true};b(r).trigger("onBeforeClose",u);if(!u.proceed){return r}if(l){l.close()}if(n.is(":visible")){g.hide();var t=d.start.top;var o=d.start.left;if(k){u=k.offset();t=u.top+k.height()/2;o=u.left+k.width()/2}n.animate({top:t,left:o,width:0},d.closeSpeed,function(){b(r).trigger("onClose",u)})}return r},getBackgroundImage:function(){return n},getContent:function(){return g},getTrigger:function(){return k},isOpened:function(){return g.is(":visible")},getConf:function(){return d},onBeforeLoad:function(o){return p("onBeforeLoad",o)},onLoad:function(o){return p("onLoad",o)},onBeforeClose:function(o){return p("onBeforeClose",o)},onClose:function(o){return p("onClose",o)}});b(document).keydown(function(o){if(o.keyCode==27){r.close()}});if(d.closeOnClick){b(document).bind("click.overlay",function(o){if(!g.is(":visible, :animated")){return}var t=b(o.target);if(t.attr("overlay")){return}if(t.parents("[overlay]").length){return}r.close()})}}b.fn.overlay=function(e){var f=this.eq(typeof e=="number"?e:0).data("overlay");if(f){return f}var d=b(window);var g={start:{top:Math.round(d.height()/2),left:Math.round(d.width()/2),width:0,absolute:false},finish:{top:80,left:"center",absolute:false},speed:"normal",fadeInSpeed:"fast",closeSpeed:"fast",close:null,oneInstance:true,closeOnClick:true,preload:true,zIndex:9999,api:false,expose:null,target:null};if(b.isFunction(e)){e={onBeforeLoad:e}}b.extend(true,g,e);this.each(function(){f=new a(b(this),g);c.push(f);b(this).data("overlay",f)});return g.api?f:this}})(jQuery);
(function(b){b.tools=b.tools||{version:{}};b.tools.version.expose="1.0.3";function a(){var e=b(window).width();if(b.browser.mozilla){return e}var d;if(window.innerHeight&&window.scrollMaxY){d=window.innerWidth+window.scrollMaxX}else{if(document.body.scrollHeight>document.body.offsetHeight){d=document.body.scrollWidth}else{d=document.body.offsetWidth}}return d<e?d+20:e}function c(g,h){var e=this,d=null,f=false,i=0;function j(k,l){b(e).bind(k,function(n,m){if(l&&l.call(this)===false&&m){m.proceed=false}});return e}b.each(h,function(k,l){if(b.isFunction(l)){j(k,l)}});b(window).bind("resize.expose",function(){if(d){d.css({width:a(),height:b(document).height()})}});b.extend(this,{getMask:function(){return d},getExposed:function(){return g},getConf:function(){return h},isLoaded:function(){return f},load:function(){if(f){return e}i=g.eq(0).css("zIndex");if(h.maskId){d=b("#"+h.maskId)}if(!d||!d.length){d=b("<div/>").css({position:"absolute",top:0,left:0,width:a(),height:b(document).height(),display:"none",opacity:0,zIndex:h.zIndex});if(h.maskId){d.attr("id",h.maskId)}b("body").append(d);var k=d.css("backgroundColor");if(!k||k=="transparent"||k=="rgba(0, 0, 0, 0)"){d.css("backgroundColor",h.color)}if(h.closeOnEsc){b(document).bind("keydown.unexpose",function(n){if(n.keyCode==27){e.close()}})}if(h.closeOnClick){d.bind("click.unexpose",function(){e.close()})}}var m={proceed:true};b(e).trigger("onBeforeLoad",m);if(!m.proceed){return e}b.each(g,function(){var n=b(this);if(!/relative|absolute|fixed/i.test(n.css("position"))){n.css("position","relative")}});g.css({zIndex:h.zIndex+1});var l=d.height();if(!this.isLoaded()){d.css({opacity:0,display:"block"}).fadeTo(h.loadSpeed,h.opacity,function(){if(d.height()!=l){d.css("height",l)}b(e).trigger("onLoad")})}f=true;return e},close:function(){if(!f){return e}var k={proceed:true};b(e).trigger("onBeforeClose",k);if(k.proceed===false){return e}d.fadeOut(h.closeSpeed,function(){b(e).trigger("onClose");g.css({zIndex:b.browser.msie?i:null})});f=false;return e},onBeforeLoad:function(k){return j("onBeforeLoad",k)},onLoad:function(k){return j("onLoad",k)},onBeforeClose:function(k){return j("onBeforeClose",k)},onClose:function(k){return j("onClose",k)}})}b.fn.expose=function(d){var e=this.eq(typeof d=="number"?d:0).data("expose");if(e){return e}var f={maskId:null,loadSpeed:"slow",closeSpeed:"fast",closeOnClick:true,closeOnEsc:true,zIndex:9998,opacity:0.8,color:"#456",api:false};if(typeof d=="string"){d={color:d}}b.extend(f,d);this.each(function(){e=new c(b(this),f);b(this).data("expose",e)});return f.api?e:this}})(jQuery);



/** File: AjaxHandler.class.js **/

/**
 * AjaxHandler.class.js file
 *
 * @author Aaron <aaron@doc-net.com>
 * @copyright Doctor Net Ltd &copy; 2008
 * @package SprintToolv3.default
 */
/**
 * AjaxHandler class
 *
 * Processes AJAX requests using jQuery
 *
 * @static
 */
function AjaxHandler() {}
AjaxHandler.str_url = '';
AjaxHandler.arr_data = new Array();
AjaxHandler.str_custom_xml = false;
AjaxHandler.bol_busy = false;
AjaxHandler.bol_async = false;

/**
 * Reset
 */
AjaxHandler.reset = function(str_url) {
   AjaxHandler.str_url = '';
   if(str_url) {
      AjaxHandler.str_url = str_url;
   }
   AjaxHandler.arr_data = new Array();
   AjaxHandler.str_custom_xml = false;
   AjaxHandler.bol_async = false;
};
/**
 * Set the URL
 *
 * @param String str_url
 */
AjaxHandler.set_url = function(str_url) {
   AjaxHandler.str_url = str_url;
};

/**
 * Add some data
 *
 * @param String str_field Field name
 * @param Mix mix_val Field value
 */
AjaxHandler.add_data = function(str_field, mix_val) {
   // See if we need to encode it first
   if (String(mix_val).match(/[^a-zA-Z0-9\.\-_]/) && !String(mix_val).match(/%[A-Z0-9]{2}/)) {
      mix_val = encodeURIComponent(mix_val);
   }
   AjaxHandler.arr_data[str_field] = mix_val;
};

/**
 * Set the custom XML
 *
 * To be used instead of add_data to specify
 * bespoke XML
 */
AjaxHandler.set_custom_xml = function(str_xml) {
   AjaxHandler.str_custom_xml = str_xml;
};

/**
 * Build up the XML document to send over AJAX
 *
 * @return String
 */
AjaxHandler.build_xml = function() {
   // Allow use of custom XML if set
   if (AjaxHandler.str_custom_xml) {
      return AjaxHandler.str_custom_xml;
   }
   var str_xml = '<'+'?xml version="1.0"?><root><fields>';
   for (str_field in AjaxHandler.arr_data) {
      // This will try to include the functions attached to AjaxHandler.arr_data
      if ((typeof AjaxHandler.arr_data[str_field]) != 'function') {
         str_xml += '<'+str_field+'><![CDATA['+AjaxHandler.arr_data[str_field]+']]></'+str_field+'>';
      }
   }
   str_xml += '</fields></root>';
   return str_xml;
}

/**
 * Set up a "busy" icon before dispatching the AjaxRequest
 *
 * Refer to do_dispatch() for parameters
 */
AjaxHandler.dispatch = function(fnc_success, fnc_failure) {
   $('#busy-wait-icon').show();
   if (AjaxHandler.bol_busy) {
      var int_timeout = 1000;
   } else {
      var int_timeout = 1;
   }
   setTimeout(function() {AjaxHandler.do_dispatch(fnc_success, fnc_failure)}, int_timeout);
}

/**
 * Perform the AJAX request
 *
 * Pass in the response object from the ajax call as a parameter to the callback(s).
 *
 * @param Function fnc_success (Optional) Function to be called on success
 * @param Function fnc_failure (Optional) Function to be called on failure
 */
AjaxHandler.do_dispatch = function(fnc_success, fnc_failure) {
   AjaxHandler.bol_busy = true;
   $.ajax({
      async: AjaxHandler.bol_async,
      type: "POST",
      url: AjaxHandler.str_url,
      data: 'str_xml='+escape(AjaxHandler.build_xml()),
      // If the AJAX call completed successfully
      success: function(obj_response) {
         AjaxHandler.bol_busy = false;
         // if the server-side script returned success
         if($('response', obj_response).attr('success') == 'true') {
             // If we've passed in an anonymous function into do_dispatch(), call it,
             // passing in the response object as a parameter.
            if (fnc_success) {
               fnc_success(obj_response);
            }
         } else if($('response', obj_response).attr('success') == 'logged_out') {
            // user has been logged out, so tell them this is the case, wait for them to hit OK and then forward to the login screen
            AjaxHandler.ajax_failure('You have been logged out, possibly due to a period of inactivity.  Please click OK to be forwarded to the login screen.');
            window.location = '/auth/login';
         // server-side didn't return success
         } else {
            // If we've passed in an anonymous function into do_dispatch(), call it,
            // passing in the response object as a parameter.
            if (fnc_failure) {
               fnc_failure(obj_response);
            } else {
               AjaxHandler.ajax_failure($('message', obj_response).text());
            }
         }
         $('#busy-wait-icon').hide();
      },
      // AJAX call didn't complete successfully
      error: function(obj_xmlhttp, str_error) {
         AjaxHandler.bol_busy = false;
         $('#busy-wait-icon').hide();
         // If the request was interrupted by page navigation there will be no response
         if (obj_xmlhttp.responseText) {
            AjaxHandler.ajax_failure('Sorry, there was a problem\n\n(Error code: AJAX-002)');
         }
      }
   });


};

/**
 * Alert user that the AJAX request failed
 *
 * @param String str_msg (Optional) Error message to display
 */
AjaxHandler.ajax_failure = function(str_msg) {
   if (!str_msg) {
      str_msg = 'Sorry, there was a problem';
   }
   alert(str_msg);
};

/**
 * Process the fields of a form ready for AJAX submission
 *
 * @param DOMElement|jQuery The form to process
 */
AjaxHandler.process_form = function(obj_form) {
   // Determine the parameter type
   if (obj_form instanceof jQuery) {
      obj_form = obj_form.get(0);
   }
   // Set the URL if appropriate
   if ($(obj_form).attr('action') && !AjaxHandler.str_url) {
      AjaxHandler.set_url($(obj_form).attr('action'));
   }
   // Process the form's data
   var arr_data = $(obj_form).formToArray();
   for (int_count in arr_data) {
      if (typeof(arr_data[int_count]) != 'function') {
         AjaxHandler.add_data(arr_data[int_count]['name'], arr_data[int_count]['value']);
      }
   }
};

/**
 * The following code is taken directly from the jQuery form plugin from http://malsup.com/jquery/form/
 */

/**
 * jQuery Form Plugin
 * version: 2.25 (08-APR-2009)
 * @requires jQuery v1.2.2 or later
 *
 * Examples and documentation at: http://malsup.com/jquery/form/
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * formToArray() gathers form element data into an array of objects that can
 * be passed to any of the following ajax functions: $.get, $.post, or load.
 * Each object in the array has both a 'name' and 'value' property.  An example of
 * an array for a simple login form might be:
 *
 * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
 *
 * It is this array that is passed to pre-submit callback functions provided to the
 * ajaxSubmit() and ajaxForm() methods.
 */

$.fn.formToArray = function(semantic) {
    var a = [];
    if (this.length == 0) return a;

    var form = this[0];
    var els = semantic ? form.getElementsByTagName('*') : form.elements;
    if (!els) return a;
    for(var i=0, max=els.length; i < max; i++) {
        var el = els[i];
        var n = el.name;
        if (!n) continue;

        if (semantic && form.clk && el.type == "image") {
            // handle image inputs on the fly when semantic == true
            if(!el.disabled && form.clk == el)
                a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
            continue;
        }

        var v = $.fieldValue(el, true);
        if (v && v.constructor == Array) {
            for(var j=0, jmax=v.length; j < jmax; j++)
                a.push({name: n, value: v[j]});
        }
        else if (v !== null && typeof v != 'undefined')
            a.push({name: n, value: v});
    }

    if (!semantic && form.clk) {
        // input type=='image' are not found in elements array! handle them here
        var inputs = form.getElementsByTagName("input");
        for(var i=0, max=inputs.length; i < max; i++) {
            var input = inputs[i];
            var n = input.name;
            if(n && !input.disabled && input.type == "image" && form.clk == input)
                a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
        }
    }
    return a;
};
/**
 * Returns the value of the field element.
 */
$.fieldValue = function(el, successful) {
    var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
    if (typeof successful == 'undefined') successful = true;

    if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
        (t == 'checkbox' || t == 'radio') && !el.checked ||
        (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
        tag == 'select' && el.selectedIndex == -1))
            return null;

    if (tag == 'select') {
        var index = el.selectedIndex;
        if (index < 0) return null;
        var a = [], ops = el.options;
        var one = (t == 'select-one');
        var max = (one ? index+1 : ops.length);
        for(var i=(one ? index : 0); i < max; i++) {
            var op = ops[i];
            if (op.selected) {
				var v = op.value;
				if (!v) // extra pain for IE...
                	v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
                if (one) return v;
                a.push(v);
            }
        }
        return a;
    }
    return el.value;
};


/** File: global.js **/

/**
 * SprintEcommerce - Global
 *
 * @copyright Copyright &copy; 2010, Doctor Net Limited
 * @package SprintEcommerce Website
 */

// Global namespace
var Sprint = {};

// Module stack
Sprint.modules = (function () {
   // Queued modules
	var arr_modules = [];

	// Public methods
	return {
	   // Add module
		add: function (obj_module_initialise) {
			arr_modules[arr_modules.length] = obj_module_initialise;
		},

		// Run modules
		run: function () {
			for (var int_index in arr_modules) {
            arr_modules[int_index]();
         }
		}
	};
}());

// JQuery DOM ready
$(document).ready(function() {
   // Run modules
   Sprint.modules.run();
});


/** File: overlay.js **/

/**
 * SprintEcommerce - Overlay

 * Display content in a styled popup

 * Usage:
 * 1. Ensure the html has the correct elements str_overlay_div and str_content_source (see *** for an example)
 * 2. In js call Sprint.overlay.show('foo') where 'str_content_source #foo_content' is to be shown in the popup
 *
 * @copyright Copyright &copy; 2010, Doctor Net Limited
 * @package SprintEcommerce Website
 */

Sprint.overlay = (function () {
   // overlay id - hidden by default
   var str_overlay_div = '#sprint_overlay',
   // parent id of overlay source
   str_content_source = '#overlay_source',
   // id of (selected) overlay content
   str_content_id = '',
   // jQueryTOOLS Overlay
   obj_overlay,
   obj_overlay_options = {
      color: '#999',
      loadSpeed: 'fast',
      closeSpeed: 'fast',
      onBeforeClose: function(){ on_before_close(); },
      onLoad: function(){ on_load(); }
   },
   // Construct
   initialise = function() {
      // Is the overlay div (skeleton html) in the page?
      if($(str_overlay_div).length) {
         obj_overlay = $(str_overlay_div).expose(obj_overlay_options);
         $(str_overlay_div + ' .close').click(close);
      }
   },
   //  jQueryTOOLS Overlay Event Handler
   on_load = function() {
      $(str_overlay_div).show();
   },
   // jQueryTOOLS Overlay Event Handler
   on_before_close = function () {
      unload_content();
      $(str_overlay_div).hide();
   },
   // Show Overlay
   render = function() {
      load_content();
      position_window();

      if (obj_overlay) {
         obj_overlay.expose().load();
      }
   },
   // Load content into Overlay
   load_content = function() {
      if ($(str_content_id).length) {
         $(str_overlay_div + ' .body .inner').empty();
         $(str_overlay_div + ' .body .inner').append($(str_content_id));
         // Add class to main overlay div with the same name as the id of the loaded content. Useful for theming.
         $(str_overlay_div).addClass(str_content_id.substring(1));
      } else {
         // Silently Fail - Show an empty overlay
      }
   },
   // Unload content from Overlay
   unload_content = function() {
      if($(str_content_id).length) {
         $(str_content_source).append($(str_content_id));
      } else {
         $(str_content_id).empty();
      }

      $(str_overlay_div).removeClass(str_content_id.substring(1));

      str_content_id = '';
   },
   // Position Overlay window in the center of the screen
   position_window = function() {
      var int_top = $(window).scrollTop() + (($(window).height() - $(str_overlay_div).outerHeight()) / 2);
      var int_left = $(window).scrollLeft() + (($(window).width() - $(str_overlay_div).outerWidth()) / 2);
      $(str_overlay_div).css('top', int_top).css('left', int_left);
   },
   // Close overlay
   close = function () {
      obj_overlay.expose().close();
   };

   // Go
   Sprint.modules.add(initialise);

   // Public Methods
   var obj_public = {
      // Show overlay
	   show: function(str_id) {
	      str_content_id = '#' + str_id;
	      render();
		},
		// Hide overlay
		hide: function() {
		   close();
		},
		// Resizes the window via animation
		resize: function(int_width, int_height, int_speed) {
         var int_chosen_speed = 750;
         if (int_speed && int_speed > 0) {
            int_chosen_speed = int_speed;
         }

         $('#Sprint_overlay').animate({
            height: (int_height + 40) + "px",
            width: (int_width + 20) + "px"
         }, int_chosen_speed, 'linear', function () {
            var int_top = $(window).scrollTop() + (($(window).height() - $(str_overlay_div).outerHeight()) / 2);
            var int_left = $(window).scrollLeft() + (($(window).width() - $(str_overlay_div).outerWidth()) / 2);
            $(str_overlay_div).animate({
               top: int_top,
               left: int_left
            }, int_chosen_speed);
         });
		},
		// Set overlay options
		set_options: function(obj_options) {
         $.extend(obj_overlay_options, obj_options);
		},
		// Add class to main overlay div. Useful for theming.
		add_class: function(str_class) {
         $(str_overlay_div).addClass(str_class);
		}
   };
	return obj_public;
}());

/**
 * Sprint Modal Window
 *
 * Extension for Sprint overlay that links anchor tags to overlay content.
 *
 * Usage:
 *  <a href="#" id="foo" class="modal_window">foo</a> will display an overlay containing content from
 *  a div with id="foo_content"
 *  Adding a class resize will transition the overlay
 *
 */
Sprint.modal_window = (function () {
   // anchor for overlay - auto overlay
   var str_trigger_selector = 'a.modal_window',
   // Construct
   initialise = function () {
      $(str_trigger_selector).click(open);
   },
   // Overlay requested by link click
   open = function () {
      str_content_id = $(this).attr('id') + '_content';
      Sprint.overlay.show(str_content_id);

      if($(this).hasClass('resize')) {
         Sprint.overlay.resize(600, 200);
      }
      return false;
   };

   // Go
   Sprint.modules.add(initialise);

   return {};
})();


/** File: slik_form.js **/

/**
 * SprintEcommerce - Slik Form
 *
 * Slik form enhancement
 *
 * @copyright Copyright &copy; 2010, Doctor Net Limited
 * @package SprintEcommerce Website
 */

/**
 * Slik form namespace
 */
Sprint.slik_form = Sprint.slik_form ? Sprint.slik_form : {};

/**
 * Setup slik form
 */
Sprint.slik_form.initialise = function() {
   Sprint.slik_form.icon_hover();
   Sprint.slik_form.show_help_icon();
};

/**
 * Help & Exclamation hover
 */
Sprint.slik_form.icon_hover = function() {
   $('span.form_icon a').hover(function(){
      var obj_input = $(this).parent().prevAll('input, select, textarea, checkbox');

      // Adrian - 2011-07-18 - changing this to get the offset relative the the closest parent element
      // 'with positon'. Don't understand why this was done relative to the document previously - it 
      // breaks the positioning if you have a position:relative div higher up the DOM.
      // If you don't, then both methods should work.
      var offset = obj_input.position();
      //var offset = obj_input.offsetParent(); // relative to document

      var int_top = offset.top;
      var int_left = offset.left;
      var int_width = obj_input.width()+6;
      
      if (int_width < 150) {
         int_width = 150;
      }

      // There are a couple of special cases
      switch (obj_input.attr('id')) {
         case 'issue_number':
            int_left += 130;
            int_width = 140;
            break;
         case 'cv2':
            int_top  = $('#expiry_year').position().top;
            int_left += 130;
            int_width = 150;
            break;
      }

      $('#form_help_floater').css({'top' : int_top, 'left' : int_left, 'width' : int_width}).show();

      if($(this).parent().hasClass('error')) {
         $('#form_help_floater').html('<p align="center">'+obj_input.attr('err')+'</p>');
      } else {
         $('#form_help_floater').html('<p align="center">'+obj_input.attr('help')+'</p>');
      }
   }, function (){
      $('#form_help_floater').hide();
   });
};

/**
 * Show any field help
 */
Sprint.slik_form.show_help_icon = function() {
   $('form input.has_help').each(function(){
      obj_input = $(this);
      if(obj_input.attr('help') != '') {
         obj_input.nextAll('span.form_icon.help').show();
      }
   });
};

/**
 * Show a field error
 *
 * @param jQuery obj_input
 * @param String str_message
 */
Sprint.slik_form.field_error = function (obj_input, str_message) {
   obj_input.parents('p').addClass('err');
   obj_input.attr('err', str_message);
};

/**
 * Clear a field error
 *
 * @param jQuery obj_input
 */
Sprint.slik_form.field_ok = function (obj_input) {
   obj_input.parents('p').removeClass('err');
};

/**
 * Validate required fields of a form
 *
 * @param jQuery obj_form
 * @return Bool All fields valid?
 */
Sprint.slik_form.validate_required_fields = function (obj_form) {
   var bol_success = true;
   $('input.required, textarea.required', obj_form).each(function(){
      obj_input = $(this);
      if(obj_input.val() == '') {
         Sprint.slik_form.field_error(obj_input, 'This is a required field and cannot be blank - please fill it in.');
         bol_success = false;
      } else {
         Sprint.slik_form.field_ok(obj_input);
      }
   });

   return bol_success;
};

/**
 * Validate postcode
 *
 * str_postcode_id - id of the postcode input
 * str_country_id - id of the country select
 *
 * returns false if postcode is invalid (respective to the country), true otherwise
 */
Sprint.slik_form.validate_postcode = function(str_postcode_id, str_country_id) {
   var bol_valid_postcode = true;
   var str_error_message = '';

   var str_postcode = $(str_postcode_id).val();

   var int_selected_country_id = $(str_country_id).val();
   // :assume: arr_fips_country_map is in global scope
   var str_selected_country_fips_code = arr_fips_country_map[int_selected_country_id];

   if (str_postcode.match(/(GIR 0AA)|((([A-Z^Q^V^X][0-9][0-9]?)|(([A-Z^Q^V^X][A-Z^I^J^Z][0-9][0-9]?)|(([A-Z^Q^V^X][0-9][A-HJKSTUW])|([A-Z^Q^V^X][A-Z^I^J^Z][0-9][ABEHMNPRVWXY]))))?[0-9][A-Z]{2})/i)) {
      if(str_postcode.match(/^\s*(JE|GY)/i)) {
         // Matched a UK postcode
         if(str_postcode.match(/^\s*JE/i) && str_selected_country_fips_code != 'JE') {
            str_error_message = "You've entered a Jersey Postcode but not selected it as your Country";
            bol_valid_postcode = false;
         } else if(str_postcode.match(/^\s*GY/i) && str_selected_country_fips_code != 'GK') {
            str_error_message = "You've entered a Guernsey Postcode but not selected it as your Country";
            bol_valid_postcode = false;
         }
      } else {
         if(str_selected_country_fips_code != 'UK') {
            str_error_message = "You've entered a valid United Kingdom postcode but not selected it as your Country";
            bol_valid_postcode = false;
         }
      }
   } else if(str_selected_country_fips_code == 'UK' || str_selected_country_fips_code == 'JE' || str_selected_country_fips_code == 'GK') {
      str_error_message = "Please enter a valid postcode";
      bol_valid_postcode = false;
   }

   if(!bol_valid_postcode) {
      Sprint.slik_form.field_error($(str_postcode_id), str_error_message);
   }

   return bol_valid_postcode;
};

/**
 * Basic check for email address format correctness.
 *
 * string str_email
 * 
 * return boolean
 */
Sprint.slik_form.validate_email = function(str_email) {
   var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
   return reg.test(str_email);
}


/** File: web_menu_page.js **/

/**
 * SprintEcommerce - Web Menu
 *
 * @copyright Copyright &copy; 2010, Doctor Net Limited
 * @package SprintEcommerce Website
 */

/**
 * Highlight web menu node
 */
Sprint.wmp = (function () {
   var int_current_wmn,
   initialise = function () {},
   _highligh_active_wmn = function () {
      $('#wmn_' + int_current_wmn).addClass('wmn_active');
   };

   Sprint.modules.add(initialise);

   var obj_public = {
	   select_wmn: function(int_wmn_id) {
	      int_current_wmn = int_wmn_id;
	      _highligh_active_wmn();
		}
   };

	return obj_public;
})();

/**
 * Inventory filtering
 */
Sprint.inventory_filtering = (function () {
   arr_filters_active = [],
   arr_filter_types = [], //= ['brand','life-stage','price-range', 'page-number','order-by'],
   arr_filter_types_multi = [], //= ['price-range', 'page-number','order-by'],
   initialise = function () {
      if ($('#wmp_filter_price').length == 0) {
         return false;
      }

      // filter types passed via controller to template to here
      arr_filter_types = available_filters;
      arr_filter_types_multi = available_multi_filters;
      detect_active_filters();
      replace_filtering_links();
      replace_pagination_links();
      initialise_sort_dropdown();
      initialise_slider();
      $('.close').click(function() {
         var str_id = $(this).attr('id');
         if (str_id.substr(0,14)=='remove_filter_') {
            arr_filters_active[str_id.substr(14)] = null;
            refresh_results();
         }
      });
      $('.clearall').click(function() {
         arr_filters_active = [];
         refresh_results();
         return false;
      });

      return {};
   },
   initialise_slider = function() {
      // choose the 'step' value of slider based on precision of flt min value passed
      var str_price_filter_min = $('#flt_price_filter_min').html();
      var flt_step = 1;
      if (str_price_filter_min.indexOf('.') > -1 ) {
         int_decimal_places = str_price_filter_min.length - (str_price_filter_min.indexOf('.') + 1);
         if (int_decimal_places == 1){
            flt_step = 0.1;
         } else {
            flt_step = 0.01;
         }
      } else if (eval(str_price_filter_min) != 0) {
         var int_loop_count = 0;
         while (str_price_filter_min.substring(eval(str_price_filter_min.length) - int_loop_count , eval(str_price_filter_min.length) - (1+int_loop_count)) == 0) {
            flt_step = flt_step*10;
            int_loop_count ++;
         }
      }
      var flt_price_filter_min = eval(str_price_filter_min);
      var flt_price_filter_max = eval($('#flt_price_filter_max').html());
      var flt_price_filter_min_inital = eval($('#flt_price_filter_min_initial').html());
      var flt_price_filter_max_inital = eval($('#flt_price_filter_max_initial').html());

      $('#wmp_filter_price').slider({
         animate: true,
         min: flt_price_filter_min,
         max: flt_price_filter_max,
         range: true,
         step: flt_step,
         values: [flt_price_filter_min_inital, flt_price_filter_max_inital],
         change: function (obj_event, obj_ui) {
            var arr_values = obj_ui.values;
            update_price_filter(arr_values);
            update_price_filter_array(arr_values);
            refresh_results();
         },
         slide: function (obj_event, obj_ui) {
            var arr_values = obj_ui.values;
            update_price_filter(arr_values);
         }
      });
      return {};
   },
   initialise_sort_dropdown = function() {
      $('#inventory_listing_orderer').change(function() {
         if (add_filter_to_array('order-by',$(this).val())) {
            refresh_results();
         }
      });
   },
   update_price_filter = function (arr_values) {
      $('#flt_price_filter_min').html(+arr_values[0]);
      $('#flt_price_filter_max').html(arr_values[1]);
      $('#str_price_filter_min').html('&pound;'+arr_values[0].toFixed(2));
      $('#str_price_filter_max').html('&pound;'+arr_values[1].toFixed(2));
   },
   update_price_filter_array = function (arr_values) {
      if (arr_filters_active['price-range'] == undefined) {
         arr_filters_active['price-range'] = [];
         arr_filters_active['price-range'].push(arr_values[0]+':'+arr_values[1]);
      } else {
         arr_filters_active['price-range'][0]=arr_values[0]+':'+arr_values[1];
      }
   },
   detect_active_filters = function () {
      var arr_filter_strings = window.location.search.substring(1).split('&');
      for(int_i=0;int_i<arr_filter_strings.length;int_i++) {
         arr_filter_elements = arr_filter_strings[int_i].split('=',2);
         arr_filter_elements[0] = arr_filter_elements[0].replace('[]','');
         add_filter_to_array(arr_filter_elements[0],arr_filter_elements[1]);
      }
   },
   replace_filtering_links = function() {
      $('#sidebar .listing_filter').each(function() {
         var str_href = $(this).attr('href');
         str_href = str_href.substring(str_href.indexOf('?')+1);
         var arr_new_filter_elements = str_href.split('=');
         if(arr_new_filter_elements && 2 == arr_new_filter_elements.length) {
            $(this).click(function(){
               return filter_click(arr_new_filter_elements)
            })
            $(this).attr('href', '#');
         }
      })
      return false;
   },
   replace_pagination_links = function() {
      $('.page_links > a').each(function() {
         var str_href = $(this).attr('href');
         str_href = str_href.substring(str_href.indexOf('page-number'));
         if (str_href.indexOf('&') != -1) {
            str_href = str_href.substring(0,str_href.indexOf('&'));
         }
         var arr_new_filter_elements = str_href.split('=');
         if(arr_new_filter_elements && 2 == arr_new_filter_elements.length) {
            $(this).click(function(){
               return filter_click(arr_new_filter_elements)
            })
            $(this).attr('href', '/#');
         }
      })
      return false;
   },
   filter_click = function (arr_filter_elements) {
      if (add_filter_to_array(arr_filter_elements[0],arr_filter_elements[1])) {
         refresh_results();
      }
      return false;
   },
   add_filter_to_array = function(str_filter_type,str_filter_value) {
      if (arr_filters_active[str_filter_type] == undefined) {
         arr_filters_active[str_filter_type] = [];
         arr_filters_active[str_filter_type].push(str_filter_value);
         return true;
      } else {
         if (multiple_values_allowed(str_filter_type)) {
            if (arr_filters_active[str_filter_type].indexOf(str_filter_value)==-1){
               arr_filters_active[str_filter_type].push(str_filter_value);
               return true;
            } else {
               return false;
            }
         } else {
            if (arr_filters_active[str_filter_type][0]==str_filter_value){
               return false;
            } else {
               arr_filters_active[str_filter_type][0]=str_filter_value;
               return true;
            }
         }
      }
   },
   refresh_results = function () {
      var str_url = '';
      for (var int_i=0;int_i<arr_filter_types.length;int_i++) {
         if (arr_filters_active[arr_filter_types[int_i]] != undefined) {
            for (var int_j=0;int_j<arr_filters_active[arr_filter_types[int_i]].length;int_j++) {
               if (str_url == '') {
                  str_url = '?';
               } else {
                  str_url = str_url + '&';
               }
               str_url = str_url+arr_filter_types[int_i];
               if (arr_filters_active[arr_filter_types[int_i]].length > 1) {
                  str_url = str_url+'[]';
               }
               str_url = str_url+'='+arr_filters_active[arr_filter_types[int_i]][int_j];
            }
         }
      }
      window.location = 'http://'+window.location.host+window.location.pathname+str_url;
   },
   multiple_values_allowed = function (str_filter_type) {
      var bol_return = false;
      for(var int_i=0;int_i<arr_filter_types_multi.length;int_i++) {
         if (arr_filter_types_multi[int_i] == str_filter_type) {
            bol_return = true;
            break;
         }
      }
      return bol_return;
   };
   Sprint.modules.add(initialise);
   return {};
}());


/** File: newsletter.js **/

/**
 * SprintEcommerce - Newsletter Signup
 *
 * SprintEMC signup widgets
 *
 * @copyright Copyright &copy; 2010, Doctor Net Limited
 * @package SprintEcommerce Website
 */

/**
 * Newsletter namespace
 */
Sprint.newsletter = Sprint.newsletter ? Sprint.newsletter : {};

/**
 * Single List
 */
Sprint.emc_single = (function () {
   // Ajax Signup URL
   var str_url = '/ajax-newsletter/subscribe',
   // Widget ID
   str_widget_id = '#emc_signup_single',
   // Widget Form Element
   str_form_selector = str_widget_id + ' form',
   // ID of subscriber email
   str_email_id  = '#emc_signup_single_email',
   // ID of subscribe button
   str_submit_id  = '#emc_signup_single_submit',
   // In Widget messaging area
   str_messaging_area_selector = str_widget_id + ' .messaging',
   // Map of SprintEMC error codes
   obj_error_codes = {
      'already_subscribed' : -11,
      'unknown' : -100
   },
   // List description - Can be overridden for Sprint installations
   str_emc_list_description = 'the Sprint Newsletter',
   // Error messages - Can be overridden for Sprint installations
   obj_messages = {
      str_success_message: 'You have successfully been signed up to %%EMC_LIST_DESCRIPTION%%.',
      str_unknown_error_message: 'You could not be signed up to %%EMC_LIST_DESCRIPTION%% at this time.  Please try again.',
      str_already_subscribed_message: 'You are already signed up to %%EMC_LIST_DESCRIPTION%%.'
   },
   // Construct
   initialise = function() {
      // Sanity check
      if($(str_widget_id).length === 0) {
         return;
      }

      // Message setup
      set_list_description_in_messages();

      // Event Handlers
      $(str_submit_id).click(subscribe);
   },
   // Set list name in error messages
   set_list_description_in_messages = function() {
      obj_messages.str_success_message = replace_list_description(obj_messages.str_success_message );
      obj_messages.str_unknown_error_message = replace_list_description(obj_messages.str_unknown_error_message);
      obj_messages.str_already_subscribed_message = replace_list_description(obj_messages.str_already_subscribed_message);
   },
   // List text replacement
   replace_list_description = function(str_message) {
      return str_message.replace(/%%EMC_LIST_DESCRIPTION%%/gi, str_emc_list_description);
   },
   // Subscribe
   subscribe = function() {
      var str_email = $(str_email_id).val();
      // :todo: email validation

      AjaxHandler.set_url(str_url);
      AjaxHandler.process_form($(str_form_selector).get(0));

      AjaxHandler.dispatch(
         function (obj_response) { success(obj_response); },
         function (obj_response) { failure(obj_response); }
      );
      return false;
   },
   // Success handler
   success = function(obj_response) {
      if(is_form_messaging_enabled()) {
         $(str_messaging_area_selector).empty().html('<p>' + obj_messages.str_success_message + '</p>').show();
         $(str_form_selector).hide();
      } else {
         alert(obj_messages.str_success_message);
      }
   },
   // Failure handler
   failure = function(obj_response) {
      var str_code_field = 'code';

      var int_response_code = obj_error_codes.unknown;
      if($(str_code_field, obj_response).length) {
         int_response_code =  parseInt($(str_code_field, obj_response).text());
      }

      var str_message = obj_messages.str_unknown_error_message;
      if(int_response_code === obj_error_codes.already_subscribed) {
         str_message = obj_messages.str_already_subscribed_message;
      }

      if(is_form_messaging_enabled()) {
         $(str_messaging_area_selector).empty().html('<p class="error">' + str_message + '</p>').show();
      } else {
         alert(str_message);
      }
   },
   // Is in form message enabled ?
   is_form_messaging_enabled = function() {
      return $(str_messaging_area_selector).length;
   };

   // Go
   Sprint.modules.add(initialise);

   // Public methods
	var obj_public = {
	   // Set custom EMC codes
	   set_error_codes: function(int_already_subscribed, int_unknown) {
	      obj_error_codes.already_subscribed = int_already_subscribed;
	      obj_error_codes.unknown = int_unknown;
		},
		// Set list description
		set_emc_list_description: function(str) {
         str_emc_list_description = str;
		},
		// Set messages
		set_messages: function(obj) {
         $.extend(obj_messages, obj);
		}
   };

	return obj_public;
}());

/**
 * Multiple Lists
 */
Sprint.emc_signup_multi = (function () {
   // Ajax Signup URL
   var str_url = '/ajax-newsletter/subscribe',
   // Widget ID
   str_widget_id = '#emc_signup_multi',
   // Widget Form Element
   str_form_selector = str_widget_id + ' form',
   // ID of subscriber email
   str_email_id  = '',
   // ID of subscriber firstname
   str_firstname_id = '',
   // ID of subscriber lastname
   str_lastname_id = '',
   // ID of submit button (radio)
   str_radio_submit_id  = '#emc_signup_multi_submit',
   // Class of submit buttons (input)
   str_input_submit_class  = '.emc_signup_multi_submit',
   // List definitions.  List hash and list description (for messaging). The key here is important as it corresponds to the form controls.
   obj_lists = {
      men: {hash:'Sprint_demo_mens', description: 'the Sprint Mens Newsletter'},
      women: {hash:'Sprint_demo_womens', description: 'the Sprint Womens Newsletter'}
   },
   // Requests Queue.
   arr_request_queue = [],
   // User messages
   arr_messages = [],
   // Class of messaging area
   str_messaging_area_selector = str_widget_id + ' .messaging',
   // Key of list being currently dealt with (subscribed to)
   str_current_key = '',
   // Map of SprintEMC error codes
   obj_error_codes = {
      'already_subscribed' : -11,
      'unknown' : -100
   },
   // Error messages
   obj_messages = {
      str_success_message: 'You have successfully been signed up to %%EMC_LIST_DESCRIPTION%%.',
      str_unknown_error_message: 'You could not be signed up to %%EMC_LIST_DESCRIPTION%% at this time.  Please try again.',
      str_already_subscribed_message: 'You are already signed up to %%EMC_LIST_DESCRIPTION%%.'
   },
   // Subscriber details. Email is mandatory, others optional
   obj_subscriber = {
      str_email: '',
      str_firstname: '',
      str_lastname: ''
   },
   // Construct
   initialise = function() {
      // Sanity check
      if($(str_widget_id).length === 0) {
         return;
      }

      // If there are hash definitions in the form use them. These have the highest priority.
      for(str_key in obj_lists) {
         var str_selector = str_widget_id + ' input[name="hash[' +  str_key + ']"]';
         if($(str_selector).length) {
            obj_lists[str_key].hash = $(str_selector).val();
         }
      }

      // Event Handlers
      $(str_radio_submit_id).click(radio_submit);
      $(str_input_submit_class).click(input_submit);
   },
   // Handle list radio control subscribe request
   radio_submit = function() {
      var str_list_keys = $(str_widget_id + ' :radio[name=multi]:checked').val();
      if(str_list_keys == undefined) {
         // :todo: Error Message
      } else {
         queue_requests(str_list_keys);
         set_subscriber();
         subscribe();
      }

      return false;
   },
   // Handle list input control subscribe request
   input_submit = function() {
      var str_list_keys = $(this).attr('name');
      queue_requests(str_list_keys);
      set_subscriber();
      subscribe();
      return false;
   },
   // Setup request queue
   queue_requests = function(str_list_keys) {
      arr_request_queue = [];

      var str_delimiter = '-';
      if(str_list_keys.indexOf(str_delimiter) == -1) {
         arr_request_queue.push(str_list_keys);
      } else {
         var arr_list_keys = str_list_keys.split(str_delimiter);
         for(int_index in arr_list_keys) {
            arr_request_queue.push(arr_list_keys[int_index]);
         }
      }
   },
   // Set subscriber details
   set_subscriber = function() {
      obj_subscriber.str_email = $('#emc_signup_multi_email').val();
      // :todo: email validation

      if($('#emc_signup_multi_firstname').length) {
         obj_subscriber.str_firstname = $('#emc_signup_multi_firstname').val();
      }

      if($('#emc_signup_multi_lastname').length) {
         obj_subscriber.str_lastname = $('#emc_signup_multi_lastname').val();
      }
   },
   // Subscribe to list
   subscribe = function() {
      str_current_key = arr_request_queue.pop();

      AjaxHandler.set_url(str_url);

      // Personal Details
      AjaxHandler.add_data('email', obj_subscriber.str_email);

      if(obj_subscriber.str_firstname != '') {
         AjaxHandler.add_data('firstname', obj_subscriber.str_firstname);
      }

      if(obj_subscriber.str_lastname != '') {
         AjaxHandler.add_data('lastname', obj_subscriber.str_lastname);
      }

      AjaxHandler.add_data('mailing_list_hash', obj_lists[str_current_key].hash);

      AjaxHandler.dispatch(
         function (obj_response) { success(obj_response); },
         function (obj_response) { failure(obj_response); }
      );
      return false;
   },
   // Success response handler
   success = function(obj_response) {
      var str_list_description = obj_lists[str_current_key].description;
      var str_message = replace_list_description(obj_messages.str_success_message, str_list_description);
      var obj_message = {text: str_message, css_class: 'success'};
      arr_messages.push(obj_message);

      // More requests?
      if(arr_request_queue.length) {
         subscribe();
      } else {
         display_messages();
      }
   },
   // Failure response handler
   failure = function(obj_response) {
      var str_code_field = 'code';

      var int_response_code = obj_error_codes.unknown;
      if($(str_code_field, obj_response).length) {
         int_response_code =  parseInt($(str_code_field, obj_response).text());
      }

      var str_message = obj_messages.str_unknown_error_message;
      if(int_response_code === obj_error_codes.already_subscribed) {
         str_message = obj_messages.str_already_subscribed_message;
      }

      var str_list_description = obj_lists[str_current_key].description;
      str_message = replace_list_description(str_message, str_list_description);
      var obj_message = {text: str_message, css_class: 'error'};
      arr_messages.push(obj_message);

      // More requests?
      if(arr_request_queue.length) {
         subscribe();
      } else {
         display_messages();
      }
   },
   // Allow a custom list name to be used.
   replace_list_description = function(str_message, str_list_description) {
      return str_message.replace(/%%EMC_LIST_DESCRIPTION%%/gi, str_list_description);
   },
   // Display message to user
   display_messages = function() {
      if(is_form_messaging_enabled()) {
         var str_lis = '';
         while(arr_messages.length){
            var obj_message = arr_messages.pop();
            str_lis += '<li class="' + obj_message.css_class + '">' + obj_message.text + '</li>';
         }

         $(str_widget_id + ' .messaging').empty();
         $(str_widget_id + ' .messaging').html('<ul>' + str_lis + '</ul>');
      } else {
         var str_message = '';
         while(arr_messages.length){
            str_message += arr_messages.pop().text + "\n";
         }
         alert(str_message);
      }
   },
   // Is there facility for embedding messages in this widget?
   is_form_messaging_enabled = function() {
      return $(str_messaging_area_selector).length;
   };

   // Go
   Sprint.modules.add(initialise);

   // Public Methods
	var obj_public = {
	   // Set error message codes
	   set_error_codes: function(int_already_subscribed, int_unknown) {
	      obj_error_codes.already_subscribed = int_already_subscribed;
	      obj_error_codes.unknown = int_unknown;
		},
		// Set List details. Allow customisation (hash and description) of default lists, or addition of new ones.
		set_list_details: function(str_key, obj_details) {
		   if(obj_lists[str_key] == undefined) {
		      obj_lists[str_key] = obj_details;
		   } else {
            $.extend(obj_lists[str_key], obj_details);
		   }
		}
   };

	return obj_public;
}());


/** File: customer.js **/

/**
 * SprintEcommerce - Customer
 *
 * Script for customer related pages.  Login, register, my account.
 *
 * @copyright Copyright &copy; 2011, Doctor Net Limited
 * @package SprintEcommerce Website
 */

/**
 * Customer namespace
 */
Sprint.customer = Sprint.customer ? Sprint.customer : {};

/**
 * Specify which form is showing on the login register page
 */
Sprint.customer.login_register = {
   str_active_form: '',
   set_active_form: function(str) {
      Sprint.customer.login_register.str_active_form = str;
   }
};

/**
 * Initialise customer script
 */
Sprint.customer.login_register.initialise = function() {
   Sprint.slik_form.initialise();
   Sprint.customer.login_register.reset_focus();
   Sprint.customer.login_register.form_toggle();
   Sprint.customer.login_register.delivery_address_toggle();
   Sprint.customer.login_register.login_submit();
   Sprint.customer.login_register.registration_submit();
};

/**
 * Reset focus to the first element of the visible form
 */
Sprint.customer.login_register.reset_focus = function() {
   var obj_form_handle_id_map = {
      'LOGIN': '#login_form',
      'REGISTER': '#register_form'
   };

   var str_handle = Sprint.customer.login_register.str_active_form;

   var str_form_id = obj_form_handle_id_map[str_handle];
   var str_elements_selector = str_form_id + ' select:visible, ' + str_form_id + ' input:visible';

   $(str_elements_selector).eq(0).focus();
};

/**
 * Customer form switcher
 * Swaps between login/register forms
 */
Sprint.customer.login_register.form_toggle = function() {
   $('#returning_customer').click(function(){
      $('#register_form').hide();
      $('#login_form').show();
      $('#flag_returning_customer').show();
      $('#flag_new_customer').hide();
      Sprint.customer.login_register.set_active_form('LOGIN');
      Sprint.customer.login_register.reset_focus();
   });
   $('#new_customer').click(function(){
      $('#login_form').hide();
      $('#register_form').show();
      $('#flag_new_customer').show();
      $('#flag_returning_customer').hide();
      Sprint.customer.login_register.set_active_form('REGISTER');
      Sprint.customer.login_register.reset_focus();
   });
};

/**
 * Toggle the delivery address section on the registration form
 */
Sprint.customer.login_register.delivery_address_toggle = function() {
  $('#alt_del_address').click(function(){
      if($(this).attr('checked') == true) {
         $('#del_address').show();
      } else {
         $('#del_address').hide();
      }
   });
};

/**
 * Validate login form
 */
Sprint.customer.login_register.login_submit = function() {
   /** Logn submission **/
   $('#login_form').submit(function(){
      // Validate
      var bol_success = true;

      if($('#login_email').val() == '') {
         Sprint.slik_form.field_error($('#login_email'), 'This is a required field and cannot be blank - please fill it in.');
         bol_success = false;
      } else {
         Sprint.slik_form.field_ok($('#login_email'));
      }

      if($('#login_password').val() == '') {
         Sprint.slik_form.field_error($('#login_password'), 'This is a required field and cannot be blank - please fill it in.');
         bol_success = false;
      } else {
         Sprint.slik_form.field_ok($('#login_password'));
      }

      return bol_success;
   });
};

/**
 * Validate registration form
 */
Sprint.customer.login_register.registration_submit = function() {
   var int_minimum_password_length = 6;

   /** Register Form submission */
   // Note: dont listen to submit() as we need to call it at the end and we'd get stuck in an infinite loop
   $('#form_proceed').click(function() {
   	var bol_success = true;

   	// Required field checks
   	if($('#alt_del_address').attr('checked') == true) {
      	arr_inputs = $('#register_form input.required');
   	} else {
      	arr_inputs = $('#register_form input.required:not(#del_address input)');
   	}
      arr_inputs.each(function(){
         obj_input = $(this);
         if(obj_input.val() == '') {
            Sprint.slik_form.field_error(obj_input, 'This is a required field and cannot be blank - please fill it in.');
            bol_success = false;
         } else {
            Sprint.slik_form.field_ok(obj_input);
         }
      });

      // Gender
      str_gender_field = '#gender';
      if($(str_gender_field).length) {
         var $obj_gender = $(str_gender_field);
         if ($obj_gender.val() == -1) {
            Sprint.slik_form.field_error($obj_gender, 'Please choose a gender');
            bol_success = false;
         } else {
            Sprint.slik_form.field_ok($obj_gender);
         }
      }

      // Password length
      var int_password_length = String($('#password').val()).length;
      var bol_password_required = Boolean($('#password').hasClass('required'));
      // If its not required and empty then ignore, else validate it
      if((bol_password_required || int_password_length > 0) && int_password_length < int_minimum_password_length) {
         Sprint.slik_form.field_error($('#password'), 'Password must be at least ' + int_minimum_password_length + ' characters long');
         bol_success = false;
      } else {
         Sprint.slik_form.field_ok($('#password'));
      }

      // Password comparison
      if($('#password').val() != $('#confirm_password').val()) {
         Sprint.slik_form.field_error($('#confirm_password'), 'Passwords must match - please make sure they are the same');
         bol_success = false;
      } else {
         Sprint.slik_form.field_ok($('#confirm_password'));
      }

      // Email comparison
      if($('#email').val() != $('#confirm_email').val()) {
         Sprint.slik_form.field_error($('#confirm_email'), 'Email addresses must match - please make sure they are the same');
         bol_success = false;
      }

      // Telephone format
      // Leave for now

      // Postcode format
      if(!Sprint.slik_form.validate_postcode('#postcode', '#country')) {
         bol_success = false;
      }

      if($('#alt_del_address').attr('checked') == true) {
         if(!Sprint.slik_form.validate_postcode('#delivery_postcode', '#delivery_country')) {
            bol_success = false;
         }
      }

      // Allow for client-specific validation.
      if ($.isFunction(Sprint.customer.login_register.custom_validation)) {
         bol_success = Sprint.customer.login_register.custom_validation(bol_success);
      }

      if (bol_success) {
         // AJAX email address check
         AjaxHandler.reset();
         AjaxHandler.set_url('/ajax-customer/search-email-address');
         AjaxHandler.add_data('email', $('#email').val());
         AjaxHandler.dispatch(function(obj_response) {
            // If we already have this email tell them to login
            if (parseInt($('customers_found', obj_response).text()) !== 0) {
               bol_success = false;
               $('#returning_customer').click();
               $('#login_failure_message').text('That email address has already been used to register an account. Please login using the form below.');
               // Fill in the email address and reset the rest of the form
               $('#login_email').val($('#email').val());
               $('#login_password').val('');
               Sprint.slik_form.field_ok($('#login_email'));
               Sprint.slik_form.field_ok($('#login_password'));
               $('#login_password').focus();
            }

            // Actually register the customer & continue
            if(bol_success) {
            	$('#register_form').submit();
            }
         });
      }
      return false;
   });
};

/**
 * Allow for client-specific validation of registration form.
 */
Sprint.customer.login_register.custom_validation = function(bol_success) {
   // do nothing.
   return bol_success;
};

/**
 * Password request functionality
 */
Sprint.customer.password_request = {};
Sprint.customer.password_request.initialise = function() {
   Sprint.slik_form.initialise();
   $('#password_request_form_id').focus();
   Sprint.customer.password_request.submit();
};
Sprint.customer.password_request.submit = function() {
   /** Password request **/
   $('#password_request_form').submit(function() {
      // Validate
      var bol_success = true;

      if($('#password_request_acct_code_or_email').val() == '') {
         Sprint.slik_form.field_error($('#password_request_acct_code_or_email'), 'This is a required field and cannot be blank - please fill it in.');
         bol_success = false;
      } else {
         Sprint.slik_form.field_ok($('#password_request_acct_code_or_email'));
      }

      return bol_success;
   });
};

/**
 * Change Password functionality - My account
 */
Sprint.customer.change_password = {};
Sprint.customer.change_password.initialise = function() {
   Sprint.slik_form.initialise();
   $('#str_current_password').focus();
   Sprint.customer.change_password.submit();
};
Sprint.customer.change_password.submit = function() {
   $('#change_password_form').submit(function() {
      var bol_success = Sprint.slik_form.validate_required_fields($('#change_password_form'));

      // Password comparison
      if($('#password').val() != $('#change_password').val()) {
         Sprint.slik_form.field_error($('#change_password'), 'Passwords must match - please make sure they are the same');
         bol_success = false;
      }

      return bol_success;
   });
};

/**
 * Change Email Address
 */
Sprint.customer.change_email_address = {};
Sprint.customer.change_email_address.initialise = function() {
   Sprint.slik_form.initialise();
   $('#new_email_address').focus();
   $('#change_email_address_submit').click(function() {
      var bol_success = Sprint.slik_form.validate_required_fields($('#change_email_address_form'));

      // check email addresses match
      if (bol_success) {
         if ($('#new_email_address').val() != $('#new_email_address_confirm').val()) {
            bol_success = false;
            Sprint.slik_form.field_error($("#new_email_address"), "Email addresses must match - please make sure they are the same");
         }
      }
      
      if (bol_success) {
         // check email format
         if (!Sprint.slik_form.validate_email($("#new_email_address").val())) {
            bol_success = false;
            Sprint.slik_form.field_error($("#new_email_address"), "Invalid format - please check you typed your email address correctly");
         }
      }
      
      if (bol_success) {
         // check email is not in use already.
         AjaxHandler.reset();
         AjaxHandler.set_url('/ajax-my-account/search-email-address');
         AjaxHandler.add_data('email', $('#new_email_address').val());
         AjaxHandler.dispatch(function(obj_response) {
            // If we already have this email tell them to login
            if (parseInt($('customers_found', obj_response).text()) !== 0) {
               Sprint.slik_form.field_error($("#new_email_address"), "This email address is not available for use.");
            } else {
               $('#change_email_address_form').submit();
            }
         });
      }
   });
};

/**
 * Update personal details
 */
Sprint.customer.update_details = {};
Sprint.customer.update_details.initialise = function() {
   Sprint.slik_form.initialise();
   Sprint.customer.update_details.submit();
};
Sprint.customer.update_details.submit = function() {
   $('#update_personal_details_form').submit(function() {
      var bol_success = Sprint.slik_form.validate_required_fields($('#update_personal_details_form'));

      if(!Sprint.slik_form.validate_postcode('#str_postal_code', '#int_country_id')) {
         bol_success = false;
      }

      return bol_success;
   });
};

/**
 * Update delivery address
 */
Sprint.customer.update_delivery_address = {};
Sprint.customer.update_delivery_address.initialise = function() {
   Sprint.slik_form.initialise();
   Sprint.customer.update_delivery_address.submit();
};
Sprint.customer.update_delivery_address.submit  = function () {
   var str_form_id = '#update_delivery_address_form';

   $(str_form_id).submit(function() {
      var bol_success = Sprint.slik_form.validate_required_fields($(str_form_id));

      if(!Sprint.slik_form.validate_postcode('#str_postal_code', '#int_country_id')) {
         bol_success = false;
      }

      return bol_success;
   });
};


/** File: basket.js **/

/**
 * SprintEcommerce - Basket
 *
 * @copyright Copyright &copy; 2010, Doctor Net Limited
 * @package Website
 */
Sprint.basket = Sprint.basket ? Sprint.basket : {};

// Configure overlay
Sprint.overlay.set_options({loadSpeed: 0, closeSpeed: 0});

/**
 *
 */
Sprint.basket.initialise = function() {
   Sprint.basket.change_delivery();
   Sprint.basket.update_quantity();
};

/**
 * Change Delivery
 *
 * If this user changes the delivery option, update the basket
 */
Sprint.basket.change_delivery = function () {
   // Dropdown id
   var str_select = '#int_service_category_id',
   // url the updated date will be sent to
   str_ajax_url = '/basket/set-service-category/',
   // flag to stop multiple updates
   bol_updating = false,
   // Init
   initialise = function () {
      $(str_select).change(change_delivery);
   },
   // Handle select change event
   change_delivery = function() {
      // Guard against multiple updates
      // :future: do this once for the whole basket
      if(bol_updating === true) {
         return false;
      }
      bol_updating = true;

      Sprint.overlay.show('update_basket_overlay_content');

      // Update
      var str_service_category_parameter = 'int_service_category_id/' + $(this).val();
      window.location =  str_ajax_url + str_service_category_parameter;
   };

   initialise();
	return {};
};

/**
 * Update Quantity
 *
 * If the user updates the basket line quantity, update the basket
 */
Sprint.basket.update_quantity = function () {
   // Basket Line Row
   var str_basket_row_selector = '.basket_line_row',
   // Quantity Input
   str_quantity_selector = 'input.quantity',
   // Each row has an id, this is the length of the text before the id
   int_basket_row_id_prefix_length = '16',
   // flag to stop multiple updates
   bol_updating = false,
   // Init
   initialise = function () {
       // Add event handlers to the quantity box in each row
      $(str_basket_row_selector).each(function() {
         var str_basket_line_id = $(this).attr('id').substr(int_basket_row_id_prefix_length);

         var $obj_quantity_input = $(str_quantity_selector, this);
         var obj_line_data = {
            "str_basket_line_id": str_basket_line_id,
            "int_original_quantity": $obj_quantity_input.val()
         };
         $obj_quantity_input.bind('blur', obj_line_data, update_line);
      });
   },
   // Handle quantity blur event
   update_line = function(obj_event) {
      var int_quantity = $(this).val();

      // If there's no change, do nothing
      if(int_quantity == obj_event.data.int_original_quantity) {
         return false;
      }

      // Guard against multiple updates
      if(bol_updating === true) {
         return false;
      }
      bol_updating = true;

      Sprint.overlay.show('update_basket_overlay_content');

      // Send quantity change ajax event
      AjaxHandler.reset('/ajax-basket/update-line');
      AjaxHandler.add_data('str_basket_line_id', obj_event.data.str_basket_line_id);
      AjaxHandler.add_data('int_quantity', int_quantity);

      AjaxHandler.dispatch(function(obj_response) {
         bol_updating = false;
         window.location.href = '/basket/view';
      }, function(obj_response) {
         bol_updating = false;
         alert($('message', obj_response).text());
         window.location.href = '/basket/view';
      });
   };

   initialise();
	return {};
};

// If user has requested change in display currency, fire off ajax request update pricing context.
Sprint.basket.context = (function () {
   var bol_updating = false,
   initialise = function () {},
   success = function(obj_response) {
      bol_updating = false;
      location.reload();
   },
   failure = function(obj_response) {
      bol_updating = false;
   },
   set_context = function(str_context) {
      // Guard against multiple updates
      if(bol_updating === true) {
         return false;
      }
      bol_updating = true;

	   AjaxHandler.reset('/ajax-basket/set-context');
      AjaxHandler.add_data('str_pricing_context', str_context);

      AjaxHandler.dispatch(
         function (obj_response) { success(obj_response); },
         function (obj_response) { failure(obj_response); }
      );
      return false;
   };

   Sprint.modules.add(initialise);

   var obj_public = {
      // Default is GBP
      set_gbp: function() {
         return set_context('DefaultPricingContext');
      },
      set_eur: function() {
         return set_context('EuroPricingContext');
      },
      set_usd: function() {
         return set_context('USAPricingContext');
      }
   };
   return obj_public;
}());


/** File: checkout.js **/

/**
 * SprintEcommerce - Checkout
 *
 * Checkout page functionality
 *
 * @copyright Copyright &copy; 2010, Doctor Net Limited
 * @package SprintEcommerce Website
 */

/**
 * Checkout namespace
 */
Sprint.checkout = Sprint.checkout ? Sprint.checkout : {};

/**
 * Initialise checkout script
 */
Sprint.checkout.initialise = function() {
   Sprint.slik_form.initialise();
   Sprint.checkout.reset_focus();
   Sprint.checkout.delivery_address.overlay();
   Sprint.checkout.delivery_address.change();
   Sprint.checkout.delivery_address.save();
   Sprint.checkout.change_service_category();
   Sprint.checkout.validation.attach();
};

/**
 * Reset form focus
 */
Sprint.checkout.reset_focus = function() {
   $('#card_number').focus();
};

/**
 * Checkout - Payment Page - Enable Add Delivery Address Popup
 */
Sprint.checkout.delivery_address = Sprint.checkout.delivery_address ? Sprint.checkout.delivery_address : {};
Sprint.checkout.delivery_address.overlay = function () {
   var initialise = function () {
      if($('#add_delivery_address').length == 0) {
         return;
      };

      $('#add_delivery_address').click(function(){
         Sprint.overlay.show('add_delivery_address_content');
         return false;
      });
   };

   initialise();
	return {};
};

/**
 * Change delivery address
 */
Sprint.checkout.delivery_address.change = function () {
    $('input[name="int_delivery_address_id"]').click(function() {
      var int_del_addr_id = $(this).val();
      AjaxHandler.reset();
      AjaxHandler.set_url('/ajax-basket/change-delivery-address');
      AjaxHandler.add_data('int_delivery_address_id', int_del_addr_id);
      AjaxHandler.dispatch(function(obj_response) {
         // Update ServiceCategories
         if ($('service_categories service_category', obj_response).length > 0) {
            $('#service_category_select').empty();
            $('service_categories service_category', obj_response).each(function() {
               $('#service_category_select').append('<option value="'+$('id', this).text()+'">'+$('description', this).text()+'</option>');
            });
         }

         // If the Basket details were sent back assume something's changed
         if ($('basket', obj_response).length > 0) {
            // Update ServiceCategory
            $('#service_category_select').val($('basket int_service_category_id', obj_response).text());

            // Update prices
            $('#delivery_total_price').html($('basket str_delivery', obj_response).text());
            $('#basket_total_price').html($('basket str_display_price', obj_response).text());
         }
      });
   });
};

/**
 * Save delivery address
 */
Sprint.checkout.delivery_address.save  = function () {
   $('#update_delivery_address_form').submit(function() {
      var bol_success = Sprint.slik_form.validate_required_fields($('#update_delivery_address_form'));

      if(!Sprint.slik_form.validate_postcode('#str_postal_code', '#int_country_id')) {
         bol_success = false;
      }

      // If the form's good, submit it and reload the page
      if(bol_success) {
         AjaxHandler.reset();

         AjaxHandler.process_form($('#update_delivery_address_form'));
         AjaxHandler.set_url('/ajax-my-account/add-delivery-address');
         AjaxHandler.dispatch(function(obj_response) {
            window.location.reload();
            return false;
         });
         return false;
      } else {
         return bol_success;
      }
   });
};

/**
 * Change service category
 */
Sprint.checkout.change_service_category = function() {
   /**
    * Change ServiceCategory
    */
   $('#service_category_select').change(function() {
//      Sprint.overlay.show('update_basket_overlay_content');

      var int_sc_id = $(this).val();
      AjaxHandler.reset();
      AjaxHandler.set_url('/ajax-basket/change-service-category');
      AjaxHandler.add_data('int_service_category_id', int_sc_id);
      AjaxHandler.dispatch(function(obj_response) {
         // Update prices
         $('#delivery_total_price').html($('str_delivery', obj_response).text());
         $('#basket_total_price').html($('str_display_price', obj_response).text());

//         Sprint.overlay.hide();
      });
   });
};

/**
 * Payment Validation
 */
Sprint.checkout.validation = {
   obj_payment_types: {},
   /**
    * Add payment type, to enable validation
    */
   add_payment_type: function(str_payment_type_id, str_payment_type_handle) {
      Sprint.checkout.validation.obj_payment_types[str_payment_type_id] = str_payment_type_handle;
   }
};

/**
 * Hook up payment validation to the proceed button
 */
Sprint.checkout.validation.attach = function() {
   var obj_payment_type_validation_function_map,
   initialise = function() {
      // Map payment type to validation function
      obj_payment_type_validation_function_map = {
         'WEB_CARD': validate_web_card,
         'PAYPAL': validate_paypal,
         'PURCHASE_ORDER': validate_purchase_order
      };

      $('#payment_form').submit(validate);
   },
   // Validate payment form
   validate = function() {
      var int_payment_type_id = get_payment_type_id();
      if(int_payment_type_id == -1) {
         alert('Please select a payment type');
         return false;
      }

      var str_handle = Sprint.checkout.validation.obj_payment_types[int_payment_type_id];

      return obj_payment_type_validation_function_map[str_handle]();
   },
   // Get payment type id.  Either from hidden input or selected radio choice
   get_payment_type_id = function() {
      var int_payment_type_id = -1;
      var obj_payment_choice = $('#payment_form .payment_choice');
      if(obj_payment_choice.length == 1) {
         // There's only one valid payment method
         int_payment_type_id = obj_payment_choice.val();
      } else {
         // More than one choice, get selected radio
         var obj_selected_radio = $('#payment_form input[name="int_payment_type_id"]:checked');
         if(obj_selected_radio.length) {
            int_payment_type_id = obj_selected_radio.val();
         }
      }
      return int_payment_type_id;
   },
   //
   validate_web_card = function() {
     var bol_success = Sprint.slik_form.validate_required_fields($('#payment_form'));

      // Terms and Conditions agreement
      var str_terms_and_conditions_id = '#terms_and_conditions';
      if($(str_terms_and_conditions_id).length && $(str_terms_and_conditions_id).attr('type') == 'checkbox') {
         if($(str_terms_and_conditions_id).is(':checked') == false) {
            Sprint.slik_form.field_error($(str_terms_and_conditions_id), 'Please tick this box to agree to our terms and conditions.');
            bol_success = false;
         }
      }

      return bol_success;
   },
   //
   validate_paypal = function() {
      return true;
   },
   //
   validate_purchase_order = function() {
      return true;
   };

   initialise();
};



/** File: site.js **/

/**
 * GeminiWoman site enhancement
 *
 * @author docnet
 * @copyright Copyright &copy; 2009, Doctor Net Limited
 * @package Gemini
 */

// Global namespace
var Gemini = {};

// Module stack
Gemini.modules = (function() {
   // Queued modules
   var arr_modules = [];

   // Public methods
   return {
      // Add module
      add: function (obj_module_initialise) {
         arr_modules[arr_modules.length] = obj_module_initialise;
      },

      // Run modules
      run: function() {
         for (var int_index in arr_modules) {
            arr_modules[int_index]();
         }
      }
   };
}());

// Content panes
Gemini.contentpanes = (function(){
	initialise = function(){
		$('#main .cms > .content > p').remove();
		select_instore();
	},
	select_online = function(){
		$('#main .cms .content > div').hide();
		$('#main .cms .content > div.online').show();
	},
	select_instore = function(){
		$('#main .cms .content > div').hide();
		$('#main .cms .content > div.instore').show();
	};
	var obj_public = {
			online: function() {
		    	select_online();
			},
			instore: function() {
				select_instore();
			}
	   }

	Gemini.modules.add(initialise);
	
	return obj_public;
}());
// Basket
Gemini.basket = (function () {
   initialise = function() {
      $('#inventory_detail_add_to_basket_form').attr('action', '');
      $('#inventory_detail_add_to_basket_form').submit(function () {
         add_to_basket();
         return false;
      });
   },
   add_to_basket = function() {
      var int_inventory_id = $('#size_selection').val();
      if (int_inventory_id == -1) {
         alert('Please choose your size first!');
         return;
      }
      document.location = '/basket/add/int_inventory_id/' + int_inventory_id;
      return false;
   }

   Gemini.modules.add(initialise);

   var obj_public = {
	   add: function() {
	      add_to_basket();
		}
   }

	return obj_public;
}());

// Main menu hover
Gemini.menu = Gemini.menu  ? Gemini.menu : {};
Gemini.menu.brand = (function () {
   var str_menu_items = '#main_menu > li',
   str_li_replacement = '.li_replacement',
   str_hoverlay = '.hoverlay',
   int_fade_in_speed = 250,
   int_upper_shift = 0,
   initialise = function() {
      // Determine how much higher the overlay is than the selected menu item
      int_upper_shift = parseFloat($(str_menu_items + ' ' + str_li_replacement).css('padding-top'));

      $(str_menu_items).hover(show_sub_menu, hide_sub_menu);
   },
   show_sub_menu = function() {
      var obj_menu_item_pos = $(this).offset();

      var obj_hoverlay = $(this).children(str_hoverlay);

      // Close menu when hovering over the menu item to the right.
      var int_x_limit = obj_menu_item_pos.left + $(this).outerWidth(true);
      var int_y_limit = obj_menu_item_pos.top + $(this).outerHeight(true);
      $(this).mousemove(function(obj_event) {
         if(obj_event.pageY < int_y_limit && obj_event.pageX > int_x_limit) {
            obj_hoverlay.hide();
         }
      });

      // Overlay the selected item with the same text, but a bit higher
      var str_menu_item_text = $(this).children('a').text();
      obj_hoverlay.children(str_li_replacement).text(str_menu_item_text);

      // Position the overlay and display
      obj_hoverlay.css({'left': (obj_menu_item_pos.left) + 'px', 'top': (obj_menu_item_pos.top - int_upper_shift)  + 'px' });

      // IE can't anti-alias fonts in overlays correctly, so they miss out.
      if($.browser.msie) {
         obj_hoverlay.show();
      } else {
         obj_hoverlay.fadeIn(int_fade_in_speed);
      }
   },
   hide_sub_menu = function() {
      $(this).children(str_hoverlay).hide();
   };

   Gemini.modules.add(initialise);
   return {};
}());

// Header helper functions
Gemini.header = (function () {
   var str_search_text_id = '#quick_search_text',
   str_email_signup_id = '#emc_subscribe_email',
   str_default_email_signup_text = '',
   str_default_search_text = '',
   initialise = function () {
      str_default_search_text = $(str_search_text_id).val();
      $(str_search_text_id).focus(search_focus);
      $(str_search_text_id).blur(search_blur);

      str_default_email_signup_text = $(str_email_signup_id).val();
      $(str_email_signup_id).focus(email_signup_focus);
      $(str_email_signup_id).blur(email_signup_blur);

      $('#emc_subscribe_submit').click(email_signup);
   },
   // clear search box text on click
   search_focus = function () {
      if(str_default_search_text === this.value) {
         this.value = '';
      }
   },
   // clear email campaigner box text on click
   email_signup_focus = function () {
      if(str_default_email_signup_text === this.value) {
         this.value = '';
      }
   },
   search_blur = function () {
      if(this.value == '') {
         this.value = str_default_search_text;
      }
   },
   email_signup_blur = function () {
      if(this.value == '') {
         this.value = str_default_email_signup_text;
      }
   },
   email_signup = function () {
      AjaxHandler.process_form($('#offer_signup').get(0));
      AjaxHandler.dispatch(function () {
         alert('You have successfully been signed up to the Gemini Newsletter.');
      });
      return false;
   };

   Gemini.modules.add(initialise);
   return {};
}());

// Inventory Detail Page
Gemini.zoom = (function () {
   var str_main_image_id = '#main_image',
   str_zoom_anchor_id = '#jqzoom',
   obj_zoom_options = {
      zoomWidth: 573,
      zoomHeight: 400,
      zoomType: 'reverse',
      position: 'right',
      xOffset: 47,
      title: false
   },
   initialise = function () {
      // Only use on inventory detail page
      if($('#inventory_detail').length == 0) {
         return;
      }

// Move this elsewhere
$("ul.inventory_tabs").tabs("div.inventory_panes > div");

      $('.jqzoom_1').jqzoom(obj_zoom_options);
      $('#image_widget .thumbs li').click(swap);

      $('#image_widget .thumbs li').hover(thumb_hover_on, thumb_hover_off);
   },
   swap = function() {
      var arr_matches = $('img', this).attr('src').match(/\/product-media\/([^\/]*)/);
      var str_selected = arr_matches[1];

      var str_main_image_src = $(str_main_image_id).attr('src');
      var str_main_image_src = str_main_image_src.replace(/\/product-media\/[^\/]*/, '/product-media/' + str_selected);
      $(str_main_image_id).attr('src', str_main_image_src);

      var str_zoom_src = $(str_zoom_anchor_id).attr('href');
      var str_zoom_src = str_zoom_src.replace(/\/product-media\/[^\/]*/, '/product-media/' + str_selected);
      $(str_zoom_anchor_id).attr('href', str_zoom_src);

      $('#image_widget .thumbs li').removeClass('active');
      $(this).addClass('active');

      return false;
   },
   thumb_hover_on = function() {
      $(this).addClass('hover');
   },
   thumb_hover_off = function() {
      $(this).removeClass('hover');
   };

   Gemini.modules.add(initialise);
   return {};
}());

// JQuery DOM ready
$(document).ready(function() {
   // Run modules
   Gemini.modules.run();

});

