function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}
function disableEnterKey(e) {
  var key;

  if (window.event)
    key = window.event.keyCode;
  else
    key = e.which;
alert(key);
  if (key == 13)
    return false;
  else
    return true;
}
function miniPop(url, title, width, height, scrollbars) {
// IE8 can not contain any space in the window title, or the pop will cause a script error
  if (width) {
  	var width = width;
  } else {
  	var width = 400;
  }
  if (height) {
    var height = height;
  } else {
    var height = 250;
  }
  if (scrollbars) {
    var scrollbars = scrollbars;
  } else {
    var scrollbars = 'no';
  }
  window.open(url,title,'toolbar=no,menubar=no,location=no,resizable=no,status=no,width='+width+',height='+height+',scrollbars='+scrollbars+',left=300,top=200');
}
function doOnUnload(url) {
    if (submitted == 0) {
        pop = window.open(url);
        pop.blur();
        window.focus();
    }
}
function getRadioValue(radio) {
  for (var i=0; i < radio.length; i++) {
    if (radio[i].checked) {
      return radio[i].value;
    }
  }
  return false;
}
/*
 * jQuery JavaScript Library v1.3.2
 * http://jquery.com/
 *
 * Copyright (c) 2009 John Resig
 * Dual licensed under the MIT and GPL licenses.
 * http://docs.jquery.com/License
 *
 * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
 * Revision: 6246
 */
(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
/*
 * Sizzle CSS Selector Engine - v0.9.3
 *  Copyright 2009, The Dojo Foundation
 *  Released under the MIT, BSD, and GPL Licenses.
 *  More information: http://sizzlejs.com/
 */
(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML='   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();/*
 * SimpleModal 1.1.1 - jQuery Plugin
 * http://www.ericmmartin.com/projects/simplemodal/
 * http://plugins.jquery.com/project/SimpleModal
 * http://code.google.com/p/simplemodal/
 *
 * Copyright (c) 2007 Eric Martin - http://ericmmartin.com
 *
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * Revision: $Id: jquery.simplemodal.js 93 2008-01-15 16:14:20Z emartin24 $
 *
 */
(function($){$.modal=function(data,options){return $.modal.impl.init(data,options);};$.modal.close=function(){$.modal.impl.close(true);};$.fn.modal=function(options){return $.modal.impl.init(this,options);};$.modal.defaults={overlay:50,overlayId:'modalOverlay',overlayCss:{},containerId:'modalContainer',containerCss:{},close:true,closeTitle:'Close',closeClass:'modalClose',persist:false,onOpen:null,onShow:null,onClose:null};$.modal.impl={opts:null,dialog:{},init:function(data,options){if(this.dialog.data){return false;}this.opts=$.extend({},$.modal.defaults,options);if(typeof data=='object'){data=data instanceof jQuery?data:$(data);if(data.parent().parent().size()>0){this.dialog.parentNode=data.parent();if(!this.opts.persist){this.dialog.original=data.clone(true);}}}else if(typeof data=='string'||typeof data=='number'){data=$('<div>').html(data);}else{if(console){console.log('SimpleModal Error: Unsupported data type: '+typeof data);}return false;}this.dialog.data=data.addClass('modalData');data=null;this.create();this.open();if($.isFunction(this.opts.onShow)){this.opts.onShow.apply(this,[this.dialog]);}return this;},create:function(){this.dialog.overlay=$('<div>').attr('id',this.opts.overlayId).addClass('modalOverlay').css($.extend(this.opts.overlayCss,{opacity:this.opts.overlay/100,height:'100%',width:'100%',position:'fixed',left:0,top:0,zIndex:3000})).hide().appendTo('body');this.dialog.container=$('<div>').attr('id',this.opts.containerId).addClass('modalContainer').css($.extend(this.opts.containerCss,{position:'fixed',zIndex:3100})).append(this.opts.close?'<a class="modalCloseImg '+this.opts.closeClass
+'" title="'+this.opts.closeTitle+'"></a>':'').hide().appendTo('body');if($.browser.msie&&($.browser.version<7)){this.fixIE();}this.dialog.container.append(this.dialog.data.hide());},bindEvents:function(){var modal=this;$('.'+this.opts.closeClass).click(function(e){e.preventDefault();modal.close();});},unbindEvents:function(){$('.'+this.opts.closeClass).unbind('click');},fixIE:function(){var wHeight=$(document.body).height()+'px';var wWidth=$(document.body).width()+'px';this.dialog.overlay.css({position:'absolute',height:wHeight,width:wWidth});this.dialog.container.css({position:'absolute'});this.dialog.iframe=$('<iframe src="javascript:false;">').css($.extend(this.opts.iframeCss,{opacity:0,position:'absolute',height:wHeight,width:wWidth,zIndex:1000,width:'100%',top:0,left:0})).hide().appendTo('body');},open:function(){if(this.dialog.iframe){this.dialog.iframe.show();}if($.isFunction(this.opts.onOpen)){this.opts.onOpen.apply(this,[this.dialog]);}else{this.dialog.overlay.show();this.dialog.container.show();this.dialog.data.show();}this.bindEvents();},close:function(external){if(!this.dialog.data){return false;}if($.isFunction(this.opts.onClose)&&!external){this.opts.onClose.apply(this,[this.dialog]);}else{if(this.dialog.parentNode){if(this.opts.persist){this.dialog.data.hide().appendTo(this.dialog.parentNode);}else{this.dialog.data.remove();this.dialog.original.appendTo(this.dialog.parentNode);}}else{this.dialog.data.remove();}this.dialog.container.remove();this.dialog.overlay.remove();if(this.dialog.iframe){this.dialog.iframe.remove();}this.dialog={};}this.unbindEvents();}};})(jQuery);var validTLDs = ['com', 'net', 'org', 'edu', 'int', 'mil', 'gov', 'arpa', 'biz', 'aero', 'name', 'coop', 'info', 'pro', 'museum'];
var validTLDs_UK = ['uk'];
var validTLDs_Canada = ['ca'];
var validTLDs_US = [];
var hiddenValueText = '******';
var countryCode = 'uk'; // valid country codes - uk, us, can

function setCountryCode(newCode) {
	countryCode = newCode;
}

function isUkDateFormat() {
	  if ((countryCode == 'uk') || (countryCode == 'can')) {
		  return true;
	  }
	  return false;
}

function validateTLD(addy) {
  var trimmed = trim(addy);
  if (trimmed == null || trimmed.length == 0) {
    return false;
  }
  var suffix = trimmed.substring(trimmed.lastIndexOf('.') + 1);
  suffix = suffix.toLowerCase();
  if (validTLDs.indexOf(suffix) > -1) {
	  return true;
  }
  if (countryCode == 'uk') {
	  if (validTLDs_UK.indexOf(suffix) > -1) {
		  return true;
	  }  
  } else if (countryCode == 'can') {
	  if (validTLDs_Canada.indexOf(suffix) > -1) {
		  return true;
	  }  
  } else if (countryCode == 'us') {
	  if (validTLDs_US.indexOf(suffix) > -1) {
		  return true;
	  }  
  }

  
  return false;
}

function validateEmail(addy) {
  var trimmed = trim(addy);
  if (trimmed == null || trimmed.length == 0) {
    return false;
  }
  var state=0;
  var lastWasDot=false;
  var lastWasAt=false;
  var lastWasDash=false;
  var sectionHasAlpha=false;
  var sectionHasDash=false;
  var sectionCount=0;
  var domainHasDot=false;
  var domainDots=0;
  var i=0;
  while (i < trimmed.length) {
    cur = trimmed.charAt(i);
    switch (state) {
      case 0:
        if (!isRestrictedLocal(cur)) {
          return false;
        }
        state = 1;
        break;
      case 1:
        if (!isRestrictedLocal(cur)) {
          if (cur == '.') {
            lastWasDot = true;
          } else if (cur == '@') {
            if (lastWasDot) {
              return false;
            }
            lastWasDot = false;
            lastWasAt = true;
            state = 2;
          } else {
            return false;
          }
        } else {
          lastWasDot = false;
        }
        break;
      case 2:
        if (isDigit(cur)) {
          // ok...
        } else if (isAlpha(cur)) {
          sectionHasAlpha = true;
        } else {
          return false;
        }
        lastWasDash = false;
        lastWasDot = false;
        lastWasAt = false;
        sectionHasDash = false;
        sectionCount = 1;
        state = 3;
        break;
      case 3:
        if (isDigit(cur)) {
          lastWasDash = false;
        } else if (!isAlpha(cur)) {
          if (cur == '-') {
            lastWasDash = true;
            sectionHasDash = true;
          } else if (cur == '.') {
            if (lastWasDash) {
              return false;
            }
            lastWasDash = false;
            lastWasDot = true;
            domainHasDot = true;
            domainDots++;
            state = 2;
          } else {
            return false;
          }
        } else {
          lastWasDash = false;
          sectionHasAlpha = true;
        }
        sectionCount++;
        break;
    }
    i++;
  }

  if (state == 2) {
    if (sectionCount < 2) {
      // TLD must be 2+ chars
      return false;
    }
    if (sectionHasDash) {
      // TLD can't have a dash
      return false;
    }
    if (!lastWasDot || domainDots <= 1) {
      // Ended with "root" but no domain.TLD preceeding
      return false;
    }
  } else if (state == 3) {
    if (sectionCount < 2) {
      // TLD must be 2+ chars
      return false;
    }
    if (!sectionHasAlpha || sectionHasDash) {
      // TLD must contain an alpha, and no dash
      return false;
    }
    if (domainDots < 1) {
      // must have a .TLD
      return false;
    }
  } else {
    return false;
  }
  
  if (!validateTLD(addy)) {
  	return false;
  }

  return true;
}

function validateGBPValue(val) {
    if (getGBPValue(val) == -1) {
        return false;
    }
    return true;
}

function getGBPValue(val) {
	return getMonetaryValue(val);
}

function validateMonetaryValue(val) {
    if (getMonetaryValue(val) == -1) {
        return false;
    }
    return true;
}

function getMonetaryValue(val) {
    var seenDollar = false;
    var seenPound = false;
    var seenDigit = false;
    var seenDot = false;
    var retVal = "";

    for (i=0; i<val.length; i++) {
        var chr = val.charAt(i);
        if (chr == ' ') {
            continue;
        }
        if (chr == ',') {
            if (seenDigit) {
                continue;
            }
            return -1;
        }

        // Check for Pounds Sterling symbol
        if (chr.charCodeAt(chr) == 163) {
            if (seenDigit || seenPound || seenDot) {
                return -1;
            }
            seenPound = true;
            continue;
        }
        
        // Check for Dollar symbol
        if (chr.charCodeAt(chr) == 36) {
            if (seenDigit || seenDollar || seenDot) {
                return -1;
            }
            seenDollar = true;
            continue;
        }

        // Check for .
        if (chr == '.') {
            if (seenDot || !seenDigit) {
                return -1;
            }

            seenDot = true;
            continue;
        }

        if (!isDigit(chr)) {
            return -1;
        } else {
            seenDigit = true;
        }

        if (!seenDot) {
            retVal += chr;
        }
    }

    return retVal;
}

function validatePositiveInt(num) {
  var trimmed = trim(num);
    var i=0;
    if (trimmed == null || trimmed.length == 0) {
      return false;
    }

    while (i < trimmed.length) {
        cur = trimmed.charAt(i);
        if (!isDigit(cur)) {
            return false;
        }
        i++;
    }
    return true;
}

/**
 * @param num A string to be checked for integer-ness
 * @return true if num contains an integer, false if not
 */
function isAnInteger(num) {
    var i=0;
    if (num == null || num.length == 0) {
      return false;
    }

    while (i < num.length) {
        cur = num.charAt(i);
        if (!isDigit(cur)) {
          // Allow for negative
          if (i != 0 || cur != '-') { 
              return false;
            }
        }
        i++;
    }
    return true;
}

function validateInteger(num, allowNegative, allowZero) {
  var trimmed = trim(num);
  
  if (!isAnInteger(trimmed)) {
    return false;
  }
  
  var val = parseInt(trimmed);
  
  if (isNaN(val)
    || (val == 0 && trimmed != '0')
    || (!allowNegative && val < 0)
    || (!allowZero && val == 0)) {
    
    return false;
  }

  return true;
}

function validateZipCode(zip) {
    var zipLocal = removeChars(zip, "- "); // remove dashes, spaces
    zipLocalLen = zipLocal.length;
    if ((zipLocalLen < 5) || (zipLocalLen > 9)) {
    	return false;
    }

    return validatePositiveInt(zipLocal);
}

function isAlpha(c) {
  return (((c >= 'A') && (c <= 'Z'))
    || ((c >= 'a') && (c <= 'z')));
}

function isLowerCase(c) {
    return ((c >= 'a') && (c <= 'z'));
}

function isDigit(c) {
  return ((c >= '0') && (c <= '9'));
}

function isRestrictedLocal(c) {
  if (isAlpha(c) || isDigit(c)
    || (c == '!') || (c == '#') || (c == '$') || (c == '%')
    || (c == '&') || (c == '\'') || (c == '*') || (c == '+')
    || (c == '-') || (c == '/') || (c == '=') || (c == '?')
    || (c == '^') || (c == '_') || (c == '`') || (c == '{')
    || (c == '|') || (c == '}') || (c == '~')) {
    return true;
  }
  return false;
}

function validateSplitPhoneNumber(a, b, c) {
  if (!validatePositiveInt(a)
      || !validatePositiveInt(b)
      || !validatePositiveInt(c)
      || parseInt(trim(a)) < 201
      || parseInt(trim(b)) < 200
      || trim(c).length != 4) {
      return false;
  }
  return true;
}

function startsWith(str, prefix) {
    if (str.length < prefix.length) {
        return false;
    }

    for (i = 0; i<prefix.length; i++) {
        if (str.charAt(i) != prefix.charAt(i)) {
            return false;
        }
    }
    
    return true;
}

function removeChars(s, charsToRemove) {
    // charsToRemove should just be a string like '-, '
    var result = "";
    var charsToRemoveLength = charsToRemove.length;
    for (var i = 0; i < s.length; i++) {
        removeChar = false;
        var currentChar = s.charAt(i); 
        for (var j = 0; j < charsToRemoveLength; j++) {
            if (currentChar == charsToRemove.charAt(j)) {
                removeChar = true;
                break;
            }
        }
        // alert(currentChar +": " + removeChar);
        if (!removeChar) {
            result = result + currentChar; 
        }
    }
    return result;
}

function getBankAccount(acct, min, max) {
	if (isHiddenFromUser(acct)) {
		// special case - return hidden value text
		return hiddenValueText;
	}
	
    acct = removeChars(acct, "- "); // remove dashes, spaces 

    if (acct.length < min || acct.length > max) {
	return -1;
    }

    var i;
    for (i = 0; i<acct.length; i++) {
        if (!isDigit(acct.charAt(i))) {
            return -1;
        }
    }
	
	// If pattern below exists anywhere in the number it will fail
	if (acct.match(/123456789/)) {
		return -1;
	}
    
    return acct;
}

function validateBankAccount(acct, min, max) {
	if (isHiddenFromUser(acct)) {
		// special case - no validation
		return true;
	}
	
    acct = getBankAccount(acct, min, max); 
    if (acct == -1) {
        return false;
    }
    
    return true;   
}

function getSortCodeUK(sort) {
	if (isHiddenFromUser(sort)) {
		// special case - return hidden value text
		return hiddenValueText;
	}
	
    sort = removeChars(sort, "- "); // remove dashes, spaces 

    if (sort.length != 6) {
        return -1;
    }

    var i;
    for (i = 0; i<sort.length; i++) {
        if (!isDigit(sort.charAt(i))) {
            return -1;
        }
    }
    
    return sort;   
}

function validateSortCodeUK(sort) {
	if (isHiddenFromUser(sort)) {
		// special case - no validation
		return true;
	}
	
    sort = getSortCodeUK(sort); 
    if (sort == -1) {
        return false;
    }
    
    return true;   
}

function getPhone(phone){
       	if (countryCode == 'can') {
		return getPhoneCAN(phone);
	} else {
		return getPhoneUK(phone);		
	} 

}


function getPhoneUK(phone) {
	phone = phone.replace(/\+44/ig, '0');
    phone = removeChars(phone, "- +()"); // remove dashes, spaces, parens and plus

    if (phone.length != 11) {
        // 016977 is allowed to have 10 or 11 numbers 
        if (phone.length != 10 || !startsWith(phone, '016977')) {
            return -1;
        }
    }

    var i;
    for (i = 0; i<phone.length; i++) {
        if (!isDigit(phone.charAt(i))) {
            return -1;
        }
    }
    
    return phone;   
}

function getPhoneCAN(phone){
    	return removeChars(phone, "- +()"); // remove dashes, spaces, parens and plus
}

function isLandLineUK(phone) {
	if (startsWith(phone, '07')) {
		return false;
	}
	return true;
}

function validatePhoneUK(phone, prefix, denyPrefix) {
    phone = getPhoneUK(phone); 
    if (phone == -1) {
        return false;
    }
    if ((prefix != '' && !startsWith(phone, prefix)) || (denyPrefix != '' && startsWith(phone, denyPrefix))) {
        return false;
    }
    
    return true;   
}

function validatePhone(phone) {
  if (phone.length != 12) {
        return false;
  }
  var i = 0;
  while (i < phone.length) {
        var c = phone.charAt(i);
        if (i == 3 || i == 7) {
            if (c != '-') {
                return false;
            }
        } else {
            if (!isDigit(c)) {
                return false;
            }
        }
        i++;
  }
  return true;
}

function validateName(name) {
  return validateName(name, false);
}

function validateName(name, allowSpaces) {
  return validateName(name, allowSpaces, false);
}

function validateName(name, allowSpaces, strict) {
  return validateName(name, allowSpaces, strict, false);
}

function validateName(name, allowSpaces, strict, allowNumbers) {
  var trimmed = trim(name);
    var i=0;
    var hasAlpha = false;
    
    if (trimmed == null || trimmed.length == 0) {
      return false;
    }
    
    while (i < trimmed.length) {
        cur = trimmed.charAt(i);
        if (!isAlpha(cur)) {
          if (cur != '-') {
            if (cur == ' ') {
              if (!allowSpaces) {
                return false;
              }
            } else if (cur == '.') {
              if (strict) {
                return false;
              }
            } else if (cur == "'") {
              if (strict) {
                return false;
              }
            } else {
              if (!isDigit(cur) || !allowNumbers) {
                  return false;
                }
        }
      }            
        } else {
          hasAlpha = true;
        }
        i++;
    }
    
    return hasAlpha;
}

function validateFirstAndLastName(name) {
    var trimmed = trim(name);
    var i=0;
    var hasSpace = false;
    var hasAlphaBeforeSpace = false;
    var hasAlphaAfterSpace = false;
    
    if (trimmed == null || trimmed.length == 0) {
        return false;
    }
    
    while (i < trimmed.length) {
        cur = trimmed.charAt(i);
        if (!isAlpha(cur)) {
            if (cur == ' ') {
                hasSpace = true;
            } else if (cur != '-' || !isDigit(cur) || cur != '.') {
                return false;
            }            
        } else {
            if (hasSpace) {
                hasAlphaAfterSpace = true;
            } else {
                hasAlphaBeforeSpace = true;
            }
        }
        i++;
    }
    
    return hasAlphaBeforeSpace && hasSpace && hasAlphaAfterSpace;
}

function validateUserName(name) {
    var trimmed = trim(name);
    var i=0;
    var hasAlpha = false;
    
    if (trimmed == null || trimmed.length == 0) {
        return false;
    }
    
    while (i < trimmed.length) {
        cur = trimmed.charAt(i);
        if (!isLowerCase(cur)) {
            if (!isDigit(cur)) {
                return false;
            }
        } else {
            hasAlpha = true;
        }
        i++;
    }
    
    return hasAlpha;
}

function validatePassword(pwd) {
    var trimmed = trim(pwd);
    
    var i=0;
    var hasAlpha = false;
    var hasDigit = false;

    if (trimmed == null || trimmed.length < 8) {
        return false;
    }

    while (i < trimmed.length) {
        cur = trimmed.charAt(i);
        if (!isLowerCase(cur)) {
            if (!isDigit(cur)) {
                if (cur != '-') {
                    return false;
                }
            } else {
                hasDigit = true;
            }
        } else {
            hasAlpha = true;
        }
        i++;
    }
    
    return (hasAlpha && hasDigit);
}

function validateAddress(addy) {
  return validateAddress(addy, false);
}

function validateAddress(addy, strict) {
  var trimmed = trim(addy);
    var i=0;
    var hasAlpha = false;
    var hasDigit = false;
    var hasSpace = false;
    
    if (trimmed == null || trimmed.length == 0) {
      return false;
    }
    
    while (i < trimmed.length) {
        cur = trimmed.charAt(i);
        if (!isAlpha(cur)) {
          if (!isDigit(cur)) {
            if (cur == ' ') {
              hasSpace = true;
            } else if (cur != '-') {
              // Check for special characters
              if (cur == '#' || cur == '.' || cur == ',') {
                if (strict) {
                  // Strict checking doesn't allow these either
                    return false;
                  }
                } else {
                  // Not on the list of allowed special characters
                  return false;
                }
              }
            } else {
              hasDigit = true;
            }
        } else {
          hasAlpha = true;
        }
        i++;
    }
    if (strict) {
      return hasAlpha && hasDigit && hasSpace;
    }
    return true;
}

// Strict, for non-strict use validateAddress(unit, false)
function validateUnit(addy) {
    var trimmed = trim(addy);
    var i=0;
    
    if (trimmed == null || trimmed.length == 0) {
      return false;
    }
    
    while (i < trimmed.length) {
        cur = trimmed.charAt(i);
        if (!isAlpha(cur) && !isDigit(cur) && cur != ' ' && cur != '-') {
      return false;
        }
        i++;
    }
    return true;
}

function validateSplitSSN(a, b, c) {
  return validateSplitSSN(a, b, c, false);
}

function validateSplitSSN(a, b, c, strict) {
  if (!validatePositiveInt(a)
      || !validatePositiveInt(b)
      || !validatePositiveInt(c)
      || trim(a).length != 3
      || trim(b).length != 2
      || trim(c).length != 4) {
      return false;
  }
  
  var foo = a.toString() + b.toString() + c.toString();
  var pass = false;
  var x;
  
  // Can't all be the same number
  for (x=1; x < foo.toString().length; x++) {
    if (foo.charAt(x-1) != foo.charAt(x)) {
      pass = true;
      break;
    }
  } 
  
  if (!pass) {
    return false;
  }
  
  pass = true;
  
  if (foo.toString() == "123456789") {
    return false;
  }

  if (a.toString() == "000") {
    return false;
  }
  
    if (b.toString() == "00") {
        return false;
    }
    
    if (c.toString() == "0000") {
        return false;
    }
    
    // Can't be a full set of 1-increment numbers like:
  // 123456789
//  for (x=1; x < foo.length; x++) {
//    var diff = ord(foo.charAt(x-1)) - ord(foo.charAt(x)); 
//    if (diff != -1 && diff != 1) {
//      pass = true;
//      break;
//    }
//  } 

  return pass;
}
 
function ofAge(ageLimit, month, day, year) {
    var now = new Date();
    var age = now.getFullYear() - year;
    
    if (age < ageLimit) {
        return false;
    } else if (age > ageLimit) {
        return true;
    }
    
    // ageLimit years diff, check month
    var monthDiff = (now.getMonth() + 1) - month;
    
    if (monthDiff < 0) {
        return false;
    } else if (monthDiff > 0) {
        return true;
    }
    
    // Same month, check day
    var dayDiff = now.getDate() - day;
    
    return dayDiff >= 0;
}

function isFutureDate(month, day, year) {
    return isFutureDate(month, day, year, -1);
}

function isFutureDate(month, day, year, limit) {
    var now = new Date();
    var yearDiff = year - now.getFullYear();

    if (yearDiff < 0) {
        return false;
    } else if (yearDiff > 0) {
        if (limit < 0) {
            return true;
        }
    }    
    // years diff, check month
    var monthDiff = month - (now.getMonth() + 1);
    
    if (monthDiff < 0) {
        return false;
    } else if (monthDiff > 0) {
        if (limit < 0) {
            return true;
        }
    }
    
    // Same month, check day
    var dayDiff = day - now.getDate();
    
    if (limit < 0) {
        return dayDiff >= 0;
    } else {
        var totalDayDiff = (dayDiff + (monthDiff * 30) + (yearDiff * 365));
        return ((totalDayDiff >= 0) && (totalDayDiff <= limit));
    }
}

// Format: MM/YYYY or MM-YYYY
function validateMonthAndYear(dateStr, future) {
  var i = 0;
  var state = 0;
  var count = 0;
  var d = new Array(2);
  d[0] = '';
  d[1] = '';

  var trimmed = trim(dateStr);
  if (trimmed == null || trimmed.length == 0) {
    return false;
  }
  
  while (i < trimmed.length) {
    cur = trimmed.charAt(i);
    isDig = isDigit(cur);
    if (!isDig && cur != '/' && cur != '-') {
      return false;
    }
    switch (state) {
      case 0:
        if ((count == 0 && !isDig) || (count == 2 && isDig)) {
          return false;
        } else if (!isDig) {
          state++;
          count = 0;
        } else {
          count++;
          d[state] = d[state] + cur; 
        }
        break;
      case 1:
        if (!isDig || count == 4) {
          return false;
        } else {
          count++;
          d[state] = d[state] + cur;
        }
        break;
    }
    i++;
  }
  
  if (state != 1 || count != 4) {
     return false;
  }

  var month = parseInt(d[0], 10);
  var year = parseInt(d[1], 10);
  
  if ((month > 12) || (month < 1)) {
      return false;
  }
  if (year < 1900) {
      return false;
  }
  
  if (future) {
    return isFutureDate(month, 99, year, -1);
  } 
  
  return true;
}

var MONTH = 0;
var DAY = 1;
var YEAR = 2;

function getDateArray(dateStr) {
	  uk = isUkDateFormat();
	  var trimmed = trim(dateStr);
	  if (trimmed == null || trimmed.length == 0) {
	    return false;
	  }
	  
	  var i = 0;
	  var state = 0;
	  var count = 0;
	  var d = new Array(3);
	  d[0] = '';
	  d[1] = '';
	  d[2] = '';
	  
	  while (i < trimmed.length) {
	    cur = trimmed.charAt(i);
	    isDig = isDigit(cur);
	    if (!isDig && cur != '/') {
	      return null;
	    }
	    switch (state) {
	      case 0:
	      case 1:
	        if ((count == 0 && !isDig) || (count == 2 && isDig)) {
	          return null;
	        } else if (!isDig) {
	          state++;
	          count = 0;
	          if (state > 2) {
	             return null;
	          }
	        } else {
	          count++;
	          d[state] = d[state] + cur; 
	        }
	        break;
	      case 2:
	        if (!isDig || count == 4) {
	          return null;
	        } else {
	          count++;
	          d[state] = d[state] + cur;
	        }
	        break;
	    }
	    i++;
	  }
	  
	  if (state != 2 || count != 4) {
	     return null;
	  }

	  if (uk == true) {
		  // month and day need to be swapped
		  var temp = d[0];
		  d[0] = d[1];
		  d[1] = temp;
	  }
	  
	  return d;
}


function validateDate(dateStr, age, uk, futureDays) {
  var i = 0;
  var state = 0;
  var count = 0;
  var d = new Array(3);
  d[0] = '';
  d[1] = '';
  d[2] = '';
  
  var trimmed = trim(dateStr);
  if (trimmed == null || trimmed.length == 0) {
    return false;
  }
  while (i < trimmed.length) {
    cur = trimmed.charAt(i);
    isDig = isDigit(cur);
    if (!isDig && cur != '/') {
      return false;
    }
    switch (state) {
      case 0:
      case 1:
        if ((count == 0 && !isDig) || (count == 2 && isDig)) {
          return false;
        } else if (!isDig) {
          state++;
          count = 0;
          if (state > 2) {
             return false;
          }
        } else {
          count++;
          d[state] = d[state] + cur; 
        }
        break;
      case 2:
        if (!isDig || count == 4) {
          return false;
        } else {
          count++;
          d[state] = d[state] + cur;
        }
        break;
    }
    i++;
  }
  
  if (state != 2 || count != 4) {
     return false;
  }

  var day = parseInt(d[1], 10);
  var month = parseInt(d[0], 10);
  var year = parseInt(d[2], 10);
  
  if (uk == true) {
    var temp = day;
    day = month;
    month = temp;
  }
  
  if ((day > 31) || (day < 1)) {
      return false;
  }
  if ((month > 12) || (month < 1)) {
      return false;
  }
  if (year < 1900) {
      return false;
  }
  
  if (age > -1) {
      return ofAge(age, month, day, year);
  } else if (typeof(futureDays) != "undefined") {
	  dateObj = getDateFromStr(dateStr);
	  if (dateObj == null) {
		  return false;
	  } else {
		  days = daysBetweenDates(new Date(), dateObj);
          return ((days >= 0) && (days <= futureDays));
	  }
  } 
  
  return true;
}

function trim(str) {
  if (str == null) {
    return null;
  }
    return str.replace(/(^[\s\xA0]+|[\s\xA0]+$)/g, '');
}

function getFieldValue( inputField ) {
  if( !inputField.id && inputField.length > 0 ) { // I think its a radio
    return getRadioValue(inputField);
  } else if( inputField.type == 'checkbox' ) {
    return inputField.checked ? inputField.value : null;
  }
  return inputField.value;
}

function checkCardNumber(cardNumber) {
  var trimmed = trim(cardNumber);
  if (trimmed == null || trimmed.length == 0) {
    return false;
  }
  var clen = new Array( trimmed.length );
  var n = 0,sum = 0;
  
  for( n = 0; n < trimmed.length; ++n ) {
    clen [n] = parseInt ( trimmed.charAt(n) );
  }
  
  for( n = clen.length -2; n >= 0; n-=2 ) {
    clen [n] *= 2;
    if( clen [n] > 9 )
      clen [n]-=9;
  }

  for( n = 0; n < clen.length; ++n ) {
          sum += clen [n];
  }

  return(((sum%10)==0)?true : false);
} 

function checkCVV(num) {
	var trimmed = trim(num);
    var i=0;
    if (trimmed == null || trimmed.length < 3 || trimmed.length > 5) {
        return false;
    }

    while (i < trimmed.length) {
        cur = trimmed.charAt(i);
        if (!isDigit(cur)) {
            return false;
        }
        i++;
    }
    return true;

}

function validateField( input, validationCode ) {
    var result = input;
    
  switch (validationCode) {
    case 0: break;
    case 1: result = validateName(input, false); break;
    case 2: result = validateName(input, true); break;
    case 3: break;// result = validateSSN(input); break;
    case 4: result = validateDate(input, -1, false); break;
    case 5: break;// result = validatePhoneNumber(input); break;
    case 6: result = validateInteger(input, false, false); break;
    case 7: if (!validateEmail(input)) { result = 0; } else if (validateTLD(input)) { result = 1; } else { result = -1; } break;
    case 8: result = validateAddress(input); break;
    case 9: result = validateZipCode(input); break;
    case 10: break;// result = validateBankABA(input); break;
    case 11: break;// result = validatePublisherID(input); break;
    case 12: break;// result = validateUSState(input); break;
    case 13: break;// result = validateIPAddress(input); break;
    case 14: break;// result = validateYesNo(input); break;
    case 15: break;// result = validateDateTime(input); break;
        case 26: result = validateDate(input, 18, false); break;
        case 28: result = validateName(input, true, false, true); break;
    default: break;// input = false;
  }

  return result;
}

function validateUKNIN(string){
	var trimmed = trim(string);
	if (trimmed == null || trimmed.length == 0) {
		return false;
	}
    var txt=new RegExp("^([0-9A-Za-z]{8,16})$");
    str = trimmed.replace(/ /g,'');
    str = str.replace(/-/g,'');
    searchResult = txt.test(str);
    if(searchResult) {
    	return true;
    }
    return false;
}

/* removed because it may be losing us some blizzard purchases
function validateUKNIN(string){
    var txt=new RegExp("^([^0-9DFIQUVdfiquv][^0-9DFIQUVOdfiquvo][0-9]{6,6}[A-Da-d]?)$");
    str = string.replace(/ /g,'');
    str = str.replace(/-/g,'');
    searchResult = txt.test(str);
    if(searchResult){
        txt.compile("^(BG|GB|NK|KN|TN|NT|ZZ|bg|gb|nk|kn|tn|nt|zz)");
        nextSearchResult = txt.test(str);
        if(!nextSearchResult){
            return true;
        }else{
            return false;
        }
    }else{
        return false;
    }
}
*/
function isHiddenFromUser(value) {
	return (value == hiddenValueText);
}

function getDateFromStr(dateStr1) {
	dateArray1 = getDateArray(dateStr1);
	if (dateArray1 == null) {
		return null;
	}
	return new Date(dateArray1[YEAR], dateArray1[MONTH] - 1, dateArray1[DAY]);
}

function compareDates(dateStr1, dateStr2) {
    dateArray1 = getDateArray(dateStr1);
    dateArray2 = getDateArray(dateStr2);
    if ((dateArray1 == null) || (dateArray2 == null)) {
        return false;
    }
    var dateTime1 = new Date(dateArray1[YEAR], dateArray1[MONTH], dateArray1[DAY]).getTime();
    var dateTime2 = new Date(dateArray2[YEAR], dateArray2[MONTH], dateArray2[DAY]).getTime();
    if (dateTime1 == dateTime2) {
        return 0;
    } else if (dateTime1 < dateTime2) {
        return -1;
    } else {
        return 1;
    }
}

function isDateBefore(beforeDateStr, afterDateStr, uk) {
	return (compareDates(beforeDateStr, afterDateStr) == -1);
}

function daysBetweenDates(startDate, endDate) {
	if ((startDate == null) || (endDate == null)) {
		return false;
	}
	// strip the times off the date objects
	startDate = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate()); 
	endDate = new Date(endDate.getFullYear(), endDate.getMonth(), endDate.getDate());
	var ONE_DAY = 1000 * 60 * 60 * 24;
	return Math.floor((endDate.getTime() - startDate.getTime())/ONE_DAY);
}

function daysBetweenDateStrings(startDateStr, endDateStr) {
    dateArray1 = getDateArray(startDateStr);
    dateArray2 = getDateArray(endDateStr);
    if ((dateArray1 == null) || (dateArray2 == null)) {
        return false;
    }
    var date1 = new Date(dateArray1[YEAR], dateArray1[MONTH], dateArray1[DAY]);
    var date2 = new Date(dateArray2[YEAR], dateArray2[MONTH], dateArray2[DAY]);
	return daysBetweenDates(date1, date2);
}

function validateUKPostcode(postcode) {
	var postcode = trim(postcode);
	var postPattern=/^[A-Za-z]{1,2}[0-9]{1,2}[ ]{0,1}[0-9][A-Za-z]{2,2}$/;
	var postPattern2=/^[A-Za-z]{1,2}[0-9][A-Za-z][ ]{0,1}[0-9][A-Za-z]{2,2}$/;
	
	if (postPattern.test(postcode) == true) {
		return true;
	} else if (postPattern2.test(postcode) == true) {
		return true;
	} else {
		return false;
	}
}

function validateCANPhoneNumber(phone) {
	var phone = getPhone(phone);
	//var phone = trim(phone);
	var phonePattern = /^([0-9]{3,3})(-*)([0-9]{3,3})(-*)([0-9]{4,4})$/;
        return phonePattern.test(phone);
}

function validateCANPostcode(postcode){
	var postcode = trim(postcode);
	var postPattern=/^[A-Za-z][0-9][A-Za-z][ ]{0,1}[0-9][A-Za-z][0-9]$/;
	return postPattern.test(postcode);
}

function validatePostCode(postcode) {
	if (countryCode == 'can') {
		return validateCANPostcode(postcode);
	} else {
		return validateUKPostcode(postcode);		
	}
}

function getNextPayDayLimit(payFreq) {
    if (payFreq == 10) {
        // weekly
        return 20;
    } else if (payFreq == 11 || payFreq == 13) {
        // biweekly
        return 25;
    }
    return 45;	
}

function getSecondPayDayLimit(payFreq) {
    if (payFreq == 10) {
        // weekly
        return 25;
    } else if (payFreq == 11 || payFreq == 13) {
        // biweekly
        return 45;
    }
    return 85;	
}

function getMinDaysBetweenPaydates(payFreq) {
    if (payFreq == 10) {
        // weekly
        return 4;
    } else if (payFreq == 11 || payFreq == 13) {
        // biweekly
        return 9;
    }
    return 20;	
}

function alertNextPayDate(payDate, payFreq, payDateObject) {
	paydateDaysMax = getNextPayDayLimit(payFreq);
	if (!validateDate(payDate, -1, true, paydateDaysMax)) {
	    alert('To continue, please enter your next pay date (dd/mm/yyyy).  It must be within ' + paydateDaysMax + ' days of today.');
	    payDateObject.focus();
	    return false;
	}

	if (!alertPayDateLastWeekOfMonth(payDate, payFreq, payDateObject, "next pay date")) {
		return false;
	}
	
    return true;
}

function alertSecondPayDate(payDate, payFreq, payDateObject) {
	paydateDaysMax = getSecondPayDayLimit(payFreq);
	if (!validateDate(payDate, -1, true, paydateDaysMax)) {
	    alert('To continue, please enter your second pay date (dd/mm/yyyy).  It must be within ' + paydateDaysMax + ' days of today.');
	    payDateObject.focus();
	    return false;
	}    

	if (!alertPayDateLastWeekOfMonth(payDate, payFreq, payDateObject, "second pay date")) {
		return false;
	}
    return true;
}

function alertPayDateLastWeekOfMonth(payDate, payFreq, payDateObject, payDateDescription) {
	if ((payFreq == 2) || (payFreq == 3) || ((payFreq >= 5) && (payFreq <= 9))) {
	    // make sure if the pay frequency is last week of month that the dates are in the last week of the month
		var dateArray1 = getDateArray(payDate);
		if (dateArray1 == null) {
			return true; // this should never happen, but return true because other validation should catch it
		}
	
		if (dateArray1[MONTH] == 12) {
			// Do not validate end of month in December because people who normally get paid end of month get paid earlier
			return true;
		}
		var date1 = new Date(dateArray1[YEAR], dateArray1[MONTH], 0); // get the last day of the month
		if (date1 == null) {
			return true; // this should never happen, but return true because other validation should catch it
		}
		
		if ((date1.getDate() - dateArray1[DAY]) > 8) {
	        alert('To continue, please make sure the ' + payDateDescription + ' is within the last week of the month.');
	        payDateObject.focus();
	        return false;
		}
	}
    return true;
}

function alertCheckDaysBetweenPaydates(nextPayDate, secondPayDate, payFreq) {
	minDays = getMinDaysBetweenPaydates(payFreq);
	numDays = daysBetweenDateStrings(nextPayDate, secondPayDate);
	return (numDays >= minDays);
}

function alertNextAndSecondPayDate(nextPayDate, secondPayDate, payFreq, nextPayDateObject, secondPayDateObject) {
    if (!alertNextPayDate(nextPayDate, payFreq, nextPayDateObject)) {
        return false;
    }
    if (!alertSecondPayDate(secondPayDate, payFreq, secondPayDateObject)) {
        return false;
    }

    if (!isDateBefore(nextPayDate, secondPayDate, true)) {
        alert('To continue, please make sure the next pay date is earlier than the second pay date.');
        nextPayDateObject.focus();
        return false;
    }

	if (!alertCheckDaysBetweenPaydates(nextPayDate, secondPayDate, payFreq)) {
		minDays = getMinDaysBetweenPaydates(payFreq);
        alert('To continue, please make sure your second paydate is at least ' + minDays + ' days after your next pay date.');
        secondPayDateObject.focus();
        return false;
	}
	
    return true;
}

function replaceNumeralTextWithNumber(str) {
	newVal = str;
	newVal = newVal.replace(/one/ig, '1');
	newVal = newVal.replace(/two/ig, '2');
	newVal = newVal.replace(/three/ig, '3');
	newVal = newVal.replace(/four/ig, '4');
	newVal = newVal.replace(/five/ig, '5');
	newVal = newVal.replace(/six/ig, '6');
	newVal = newVal.replace(/seven/ig, '7');
	newVal = newVal.replace(/eight/ig, '8');
	newVal = newVal.replace(/nine/ig, '9');
	newVal = newVal.replace(/ten/ig, '10');
	return newVal;
}

function getNumberWithUnits(val, units) { // units must be separated by |
	var unitRegEx = new RegExp("(\\d)+(" + units + ")", "ig");
	match1 = val.match(unitRegEx);
	if (match1 == null) {
		return 0;
	}
	match1 = String(match1);
	var match2 = match1.match( /(\d)+/ig ); 
	if (match2 == null) {
		return 0;
	}
	match2 = parseInt(match2);
	return match2;
}

function convertTimeTextToMonths(val) {
	var newVal = replaceNumeralTextWithNumber(val);
	newVal = newVal.replace(/[ +]/g,'');
	if (validatePositiveInt(newVal)) {
		return newVal;
	}
	//12 years 17months
	numYears = getNumberWithUnits(newVal, "year|yr");
	numMonths = getNumberWithUnits(newVal, "month|mo|mth|m0n");

	newVal = (numYears * 12) + numMonths;
	if (newVal == 0) {
		newVal = ''; // if its not an int then dont allow 0 because its invalid text.
	}

	return newVal;
}

function googleEventTracking(fieldName, fieldValue) {
    if (!ENABLE_GOOGLE_EVENT_TRACKING) {
	    return;
    }
    
    // Manual override - if googleTrackAll is set in config, 
    // then set the specified tracking for ALL fields
	if(typeof(googleTrackAll) != 'undefined') {
		if(googleTrackAll == 'errors') {
			googleEventErrorsJS(fieldName);
			return;
		} else if(googleTrackAll == 'details') {
			googleEventErrorsDetailsJS(fieldName, fieldValue);
			return;
		}
	}
	
	/*
	 * Manual override - if googleTrackSingle is set in config,
	 * then set the individual tracking for each field passed via 
	 * googleFieldsArray.
	 * __Key__:
	 * googleTrackSingle = 'errors'  // Track errors only
	 * googleTrackSingle = 'details' // Track errors and details
	 * googleFieldsArray = {"nt" : myForm.nt, "fn" : myForm.fn, ...};
	 */
	if(typeof(googleTrackSingle) != 'undefined') {
		var skipRest = true;
		for(var key in googleFieldsArray) {
			if(fieldName != key) {
				skipRest = false;
				break;
			}
			if(googleTrackSingle == 'errors') {
				//alert('checking errors');
				googleEventErrorsJS(key);
			} else {
				//alert('checking details');
				googleEventErrorsDetailsJS(key, googleFieldsArray[key].value);
			}
		}
		if(skipRest) {
			return;
		}
	}
	
	// Check to see if the field should not allow detailed tracking
	var errorTracking = new Array(
	'bt', 'bn', 'aba', 'ba', 'bsc',
	'bank_code', 'bac', 'bana', 'btn', 'bin',
	'ct', 'ca', 'ce', 'cem', 'cey',
	'ccv2', 'naoc', 'billing_address', 'billing_address_zipcode', 'billing_same_as_current_address',
	'nin'
	);
	for(var i = 0; i < errorTracking.length; i++) {
		if(errorTracking[i] == fieldName) {
			googleEventErrorsJS(fieldName);
			return;
		}			
	}
	
	googleEventErrorsDetailsJS(fieldName, fieldValue);
	return;
}

function alertAndFocus(field, alertText, fieldName) {
	alert(alertText);
	googleEventTracking(fieldName, field.value);
	field.focus();
}

function validateStandardField(field, alertText, isName, fieldName) {
	var result = true;

	if (!field.value) {
		result = false;			
	} else if ((isName) && (!validateName(field.value, true))) {
		result = false;			
	}
	
	if (!result) {
		alertAndFocus(field, alertText, fieldName);
		return false;
	}
	
	return true;
}

function buildFieldOrder(formObj, fieldObj) {
	// Grab the order that the fields appear in
	var orderedFields = new Array();
	var index = 0;
	
	for(var counter = 0; counter < formObj.length; counter++) {
		var attrType = formObj.elements[counter].getAttribute('type');
		if(attrType == 'hidden' || attrType == 'button' || attrType == 'submit' || attrType == 'reset') {
			continue;
		} else {
			for(var subcounter = 0; subcounter < fieldObj.length; subcounter++) {
				if(fieldObj[subcounter][2] == formObj.elements[counter].name) {
					orderedFields[index] = fieldObj[subcounter];
					index++;
					break;
				}
			}
		}
	}
	return orderedFields;
}

function standardValidations(myForm, fields) {
	var result = true;
	for (var i=0; i < fields.length; i++) {
    	switch (fields[i]) {
    		case 'nt':
    		case 'title':
    			result = validateStandardField(myForm.nt, 'To continue, please select the appropriate title.', false, 'nt');
    			break;
    		case 'first_name':
    		case 'fn':
    			result = validateStandardField(myForm.fn, 'To continue, please enter a valid first name.', true, 'fn');
    			break;
    		case 'last_name':
    		case 'ln':
    			var alertText = 'Country Code is Unknown';
    			if (countryCode == 'uk') {
    				alertText = 'To continue, please enter a valid surname.';
    			} else if (countryCode == 'usa') {
    				alertText = 'To continue, please enter a valid last name.';
    			}
    			result = validateStandardField(myForm.ln, alertText, true, 'ln');
    			break;
    		case 'dobd':
    			result = validateStandardField(myForm.dobd, 'To continue, please select your day of birth. You must be 18 or older.', false, 'dobd');
    			break;
    		case 'dobm':
    			result = validateStandardField(myForm.dobm, 'To continue, please select your month of birth. You must be 18 or older.', false, 'dobm');
    			break;
    		case 'doby':
    			result = validateStandardField(myForm.doby, 'To continue, please select your year of birth. You must be 18 or older.', false, 'doby');
    			break;
    		case 'ageis18':
    			var dobFields = new Array('dobd', 'dobm', 'doby');
    			var isValid = true;
    			
    			for(var counter = 0; counter < dobFields.length; counter++) {
    				if (!standardValidations(myForm, new Array(dobFields[counter]))) {
        				isValid = false;
        				break;
        			}
    			}
    			
    			if(!isValid) {
    				result = false;
    				break;
    			}
    			
    			var dob = myForm.dobd.value +  '/' + myForm.dobm.value + '/' + myForm.doby.value;
			    if (!dob || !validateDate(dob, 18, true)) {
			        alertAndFocus(myForm.dobd, 'To continue, please select the dd/mm/yyyy of your birth date. You must be 18 or older.', 'dobd');
			        result = false;
			    }
    			break;
    		case 'hpuk':
    			if (!myForm.hpuk.value || !validatePhoneUK(myForm.hpuk.value, '', '07')) {
    				alertAndFocus(myForm.hpuk, 'To continue, please enter your home phone number.', 'hpuk');
    			    result = false;
    			}
    			break;
    		case 'hpuk_allowCell':
    			if (!myForm.hpuk.value || !validatePhoneUK(myForm.hpuk.value, '', '')) {
    				alertAndFocus(myForm.hpuk, 'To continue, please enter your home phone number.', 'hpuk');
    			    result = false;
    			}
    			break;
    		case 'hpuk_trimIt':
    			myForm.hpuk.value = getPhoneUK(myForm.hpuk.value);
    			break;
    		case 'primary_contact_phone':
    			if (!myForm.hpuk.value || !validatePhoneUK(myForm.hpuk.value, '', '')) {
    				alertAndFocus(myForm.hpuk, 'To continue, please enter your primary contact number.', 'hpuk');
    			    result = false;
    			}
    			break;
    		case 'cpuk':
    			if (!myForm.cpuk.value || !validatePhoneUK(myForm.cpuk.value, '07', '')) {
    				alertAndFocus(myForm.cpuk, 'To continue, please enter your mobile phone number - must begin with 07.', 'cpuk');
    			    result = false;
    			}
    			break;
    		case 'cpuk_trimIt':
    			myForm.cpuk.value = getPhoneUK(myForm.cpuk.value);
    			break;
    		case 'ea':
    		case 'email':
    			if (!validateEmail(myForm.ea.value)) {
    				alertAndFocus(myForm.ea, 'To continue, please enter a valid email address.', 'ea');
    			    result = false;
    			}
    			break;
    		case 'an':
				if (!myForm.an.value) {
			          alertAndFocus(myForm.an, 'To continue, please enter your house number or house name.', 'an');
			          result = false;
  				}
				break;
    		case 'house_name':
    		case 'house_num_and_name_ukcash':
    			if (!myForm.house_name.value) {
			          alertAndFocus(myForm.house_name, 'To continue, please enter your house number or house name.', 'house_name');
			          result = false;
				}
				break;
    		case 'house_num_and_name':
    			if (!myForm.house_num_and_name.value) {
			          alertAndFocus(myForm.house_num_and_name, 'To continue, please enter your house number and/or house name.', 'house_num_and_name');
			          result = false;
				}
				break;
    		case 'address_select_current':
			    if ((!myForm.address_select_current.value) || (myForm.address_select_current.value == -1)) {
			        alertAndFocus(myForm.address_select_current, 'To continue, please click \'Find Address\' and select your address from the list.');
			        result = false;
			    }
			    break;
    		case 'ap':
    		case 'postcode':
    		case 'zip':
    			if (countryCode == 'uk') {
	    		    if (!myForm.ap.value || !validateUKPostcode(myForm.ap.value)) {
	    				alertAndFocus(myForm.ap, 'To continue, please enter your home address postcode.', 'ap');
	    			    result = false;
	    		    }
    			}
    			break;
			case 'as':
				if (!myForm.as.value) {
		            alertAndFocus(myForm.as, 'To continue, please enter the street name of your current address.', 'as');
		            result = false;
		        }
		        break;
			case 'ac':
				if (!myForm.ac.value) {
		            alertAndFocus(myForm.ac, 'To continue, please enter your current address town/city.', 'ac');
		            result = false;
		        }
		        break;
			case 'act':
				if (!myForm.act.value) {
		            alertAndFocus(myForm.act, 'To continue, please enter your current address county.', 'act');
		            result = false;
		        }
		        break;
    		case 'rt':
                if (!myForm.rt.value) {
                    alertAndFocus(myForm.rt, 'To continue, please choose your residential status.', 'rt');
                    result = false;
                }
                break;
            case 'ataa':
                if (!myForm.ataa.value) {
                    alertAndFocus(myForm.ataa, 'To continue, please select the amount of time you\'ve lived at your current address.', 'ataa');
                    result = false;
                }
                break;
            case 'ataay':
                if (!myForm.ataay.value) {
                    alertAndFocus(myForm.ataay, 'To continue, please select how many years you\'ve lived at your current address.', 'ataay');
                    result = false;
                }
                break;
            case 'ataam':
                if (!myForm.ataam.value) {
                    alertAndFocus(myForm.ataam, 'To continue, please select how many months you\'ve lived at your current address.', 'ataam');
                    result = false;
                }
                break;
            case 'move_in_date_months':
		var today = new Date();
		if (!myForm.move_in_date_months.value || ((myForm.move_in_date_years.value == today.getFullYear()) && (myForm.move_in_date_months.value > (today.getMonth() + 1)))) {
    		    alertAndFocus(myForm.move_in_date_months, 'To continue, please enter the date moved to current address');
		    result = false;
		}
		break;
	    case 'move_in_date_years': 
		if (!myForm.move_in_date_years.value) {
		    alertAndFocus(myForm.move_in_date_years, 'To continue, please enter the date moved to current address');
		    result = false;
		}   
                break;
            case 'it':
		if (!myForm.it.value) {
			alertAndFocus(myForm.it, 'To continue, please choose the primary source of your income.', 'it');
		    result = false;
		}
		break;
            case 'net':
            	if (countryCode == 'uk') {
	                if (!myForm.net.value || !validateMonetaryValue(myForm.net.value)) {
	                    alertAndFocus(myForm.net, 'To continue, please enter the amount (\u00A3) you are paid after taxes. Numerals only please.', 'net');
	                    result = false;
	                }
				}
                break;
			case 'net_trimIt':
                myForm.net.value = getMonetaryValue(myForm.net.value);
                break;
			case 'ct':
				if (!myForm.ct.value) {
	 				alertAndFocus(myForm.ct, 'To continue, please select your card type.', 'ct');
	 			    result = false;
	 			}
	 			break;
 			case 'ca':
	 			if (!myForm.ca.value || myForm.ca.value.length < 13 || myForm.ca.value.length > 19 || !checkCardNumber(myForm.ca.value)) {
	 				alertAndFocus(myForm.ca, 'To continue, please enter a valid card number, DIGITS ONLY, NO SPACES OR PUNCTUATION.', 'ca');
	 			    result = false;
	 			}
	 			break;
 			case 'cem':
	 			if (!myForm.cem.value) {
	 				alertAndFocus(myForm.cem, 'To continue, please select your card expiry month.', 'cem');
	 			    result = false;
	 			}
	 			break;
 			case 'cey':
	 			if (!myForm.cey.value) {
	 				alertAndFocus(myForm.cey, 'To continue, please select your card expiry year.', 'cey');
	 			    result = false;
	 			}
	 			break;
 			case 'ccv2':
	 			if (!myForm.ccv2.value || !checkCVV(myForm.ccv2.value)) {
	 				alertAndFocus(myForm.ccv2, 'To continue, please enter your CV2 code.', 'ccv2');
	 			    result = false;
	 			}
	 			break;
			case 'lar':
			case 'loan_amount':
				if (!myForm.lar.value) {
			        alertAndFocus(myForm.lar, 'To continue, please select the loan amount you wish to borrow.', 'lar'); 
			        result = false;
    			}
				break;
			case 'lar_trimIt':
				myForm.lar.value = getMonetaryValue(myForm.lar.value);
				break;
			case 'en':
				if (!myForm.en.value) {
			        alertAndFocus(myForm.en, 'To continue, please enter your company of employment.', 'en'); 
			        result = false;
    			}
				break;
			case 'etc':
				if (!myForm.etc.value) {
			        alertAndFocus(myForm.etc, 'To continue, please enter the town or city of your company of employment.', 'etc'); 
			        result = false;
    			}
				break;
			case 'occ':
				if (!myForm.occ.value) {
			        alertAndFocus(myForm.occ, 'To continue, please select your occupation.', 'occ'); 
			        result = false;
    			}
				break;
			case 'wpuk':
				if (!myForm.wpuk.value) {
			        alertAndFocus(myForm.wpuk, 'To continue, please enter your work phone number.', 'wpuk'); 
			        result = false;
    			}
				break;
			case 'wpuk_landline':
				if (!myForm.wpuk.value || !validatePhoneUK(myForm.wpuk.value, '', '07')) {
			        alertAndFocus(myForm.wpuk, 'To continue, please enter your work phone number. It must be a land line.', 'wpuk'); 
			        result = false;
    			}
				break;
			case 'wpuk_trimIt':
    			myForm.wpuk.value = getPhoneUK(myForm.wpuk.value);
    			break;
			case 'taem':
				if (!myForm.taem.value) {
			        alertAndFocus(myForm.taem, 'To continue, please enter the number of months you\'ve worked for your current employer. Numerals only please.', 'taem'); 
			        result = false;
    			}
				break;
			case 'taem_trimIt':
				myForm.taem.value = getMonetaryValue(myForm.taem.value);
				break;
			case 'taem_typein':
				monthsAtEmployer = ''+ convertTimeTextToMonths(myForm.taem.value);
				if (!monthsAtEmployer || !validatePositiveInt(myForm.taem.value)) {
			        alertAndFocus(myForm.taem, 'To continue, please enter the number of months you\'ve worked for your current employer. Numerals only please.'); 
			        result = false;
    			}
				break;
			case 'taem_trimIt':
    			myForm.taem.value = monthsAtEmployer;
				break;
			case 'pf':
			case 'pay_frequency':
				if (!myForm.pf.value) {
			        alertAndFocus(myForm.pf, 'To continue, please select how often you are paid.', 'pf'); 
			        result = false;
    			}
				break;
			case 'next_payDate_Threefields':
				var dateFields = new Array(
						new Array(myForm.pd1d, 'day', 'pd1d'),
						new Array(myForm.pd1m, 'month', 'pd1m'),
						new Array(myForm.pd1y, 'year', 'pd1y')
				);
				
				for(var count = 0; count < dateFields.length; count++) {
					if(!dateFields[count][0].value) {
						alertAndFocus(dateFields[count][0], 'To continue, please select the ' + dateFields[count][1] + ' of your next pay date.', dateFields[count][2]); 
				        result = false;
				        break;
					}
				}
				if(!result) {
					break;
				}
				
				payDate = myForm.pd1d.value + '/' + myForm.pd1m.value + '/' + myForm.pd1y.value;
				payDateObj = myForm.pd1d;
				if (!alertNextPayDate(payDate, myForm.pf.value, payDateObj)) {
					result = false;
			    }
				break;
			case 'next_payDate_OneField':
				var payDateFormat;
				var acr = 'pd1';
				if(countryCode == 'uk') {
					payDateFormat = myForm.pd1uk;
					acr += countryCode;
				} else {
					payDateFormat = myForm.pd1;
				}
				
				if(!payDateFormat.value) {
					alertAndFocus(payDateFormat, 'To continue, please select your next pay date.', acr); 
			        result = false;
			        break;
				}
				
				if (!alertNextPayDate(payDateFormat.value, myForm.pf.value, payDateFormat)) {
					result = false;
			    }
				break;
			case 'next_payDate':
				if(myForm.pd1d) {
					// Using 3 separate field
					if(!standardValidations(myForm, new Array('next_payDate_Threefields'))) {
						result = false;
					}
				} else {
					// Using 1 field
					if(!standardValidations(myForm, new Array('next_payDate_OneField'))) {
						result = false;
					}
				}
				break;
			case 'next_2payDates':
				if (!alertNextAndSecondPayDate(myForm.pd1uk.value, myForm.pd2uk.value, myForm.pf.value, myForm.pd1uk, myForm.pd2uk)) {
			    	result = false;
				}
				break;
			case 'dd':
			case 'direct_deposit':
				if (!myForm.dd.value) {
			        alertAndFocus(myForm.dd, 'To continue, please select if you are paid by direct deposit.', 'dd'); 
			        result = false;
    			}
				break;
			case 'nin':
				if (!validateUKNIN(myForm.nin.value)) {
			        alertAndFocus(myForm.nin, 'To continue, please enter your valid national insurance number.', 'nin'); 
			        result = false;
    			}
				break;
			case 'bt':
				if (!myForm.bt.value) {
			        alertAndFocus(myForm.bt, 'To continue, please select which type of bank account is being submitted.', 'bt'); 
			        result = false;
    			}
				break;
			case 'ba':
				if (!validateBankAccount(myForm.ba.value, 8, 12)) {
			        alertAndFocus(myForm.ba, 'To continue, please enter your bank account number. It should be 8 - 12 digits in length.', 'ba'); 
			        result = false;
    			}
				break;
			case 'bsc':
				if (!myForm.bsc.value || myForm.bsc.value.length != 6 || !validatePositiveInt(myForm.bsc.value)) {
			        alertAndFocus(myForm.bsc, 'To continue, please enter your bank\'s sort code. It must be exactly 6 digits in length.', 'bsc'); 
			        result = false;
    			}
				break;
			case 'dct':
				if (!myForm.dct.value) {
			        alertAndFocus(myForm.dct, 'To continue, please select your debit card type.', 'dct'); 
			        result = false;
    			}
				break;
			case 'pwd':
				if (!validatePassword(myForm.pwd.value)) {
			        alertAndFocus(myForm.pwd, 'To continue, please enter your password. No special characters allowed (ex: #@!?*%).', 'pwd'); 
			        result = false;
    			}
				break;
			case 'sec_code':
				if (myForm.sec_code.value.length != 4 || !validatePositiveInt(myForm.sec_code.value)) {
			        alertAndFocus(myForm.sec_code, 'To continue, please enter a 4-digit PIN number.', 'sec_code'); 
			        result = false;
    			}
				break;
			case 'security_question_1':
				if(!myForm.security_question_1.value) {
			        alertAndFocus(myForm.security_question_1, 'To continue, please select the first security question to answer.', 'security_question_1'); 
			        result = false;
				}
				break;
			case 'security_question_2':
				if(!myForm.security_question_2.value) {
			        alertAndFocus(myForm.security_question_2, 'To continue, please select the second security question to answer.', 'security_question_2'); 
			        result = false;
				}
				break;
			case 'security_answer_1':
				if(!myForm.security_answer_1.value) {
			        alertAndFocus(myForm.security_answer_1, 'To continue, please answer the first security question you selected.', 'security_answer_1'); 
			        result = false;
				}
				break;
			case 'security_answer_2':
				if(!myForm.security_answer_2.value) {
			        alertAndFocus(myForm.security_answer_2, 'To continue, please answer the second security question you selected.', 'security_answer_2'); 
			        result = false;
				}
				break;
			case 'naoc':
    			result = validateStandardField(myForm.naoc, 'To continue, please enter your name as it appears on your card.', true);
    			break;
			case 'billing_same_as_current_address':
				if(!myForm.billing_same_as_current_address[0].checked && !myForm.billing_same_as_current_address[1].checked) {
			        alertAndFocus(myForm.billing_same_as_current_address[0], 'To continue, please indicate if your billing address is the same as your current address.'); 
			        result = false;
				}
				break;
			case 'billing_address':
				if(!myForm.billing_address.value || !validateAddress(myForm.billing_address.value)) {
			        alertAndFocus(myForm.billing_address, 'To continue, please enter your billing address.', 'billing_address'); 
			        result = false;
				}
				break;
			case 'billing_address_zipcode':
    			if (countryCode == 'uk') {
	    		    if (!myForm.billing_address_zipcode.value || !validateUKPostcode(myForm.billing_address_zipcode.value)) {
	    				alertAndFocus(myForm.billing_address_zipcode, 'To continue, please enter your billing postcode.', 'billing_address_zipcode');
	    			    result = false;
	    		    }
    			}
				break;
			case 'checkbox':
				if (!myForm.checkbox.checked) {
			        alertAndFocus(myForm.checkbox, 'To continue, please read and agree to the terms of use and privacy policy.', 'checkbox'); 
			        result = false;
    			}
				break;
			case 'ttc':
				if (!myForm.ttc.value) {
			        alertAndFocus(myForm.ttc, 'To continue, please select the best time to contact you.', 'ttc'); 
			        result = false;
    			}
				break;
			case 'marital_status':
				if (!myForm.marital_status.value) {
					alertAndFocus(myForm.marital_status, 'To continue, please select your marital status.', 'marital_status'); 
					result = false;
    			}
				break;
			case 'credit_yn':
				if (!myForm.credit_yn.value) {
					alertAndFocus(myForm.credit_yn, 'To continue, please select whether or not you have any additional credit cards.', 'credit_yn'); 
					result = false;
    			}
				break;
			case 'aod':
				if (!myForm.aod.value) {
					alertAndFocus(myForm.aod, 'To continue, please select whether or not you have any other loans.', 'aod'); 
					result = false;
    			}
				break;
			case 'previous_address':
				// Create an array w/ all the possible previous address fields (not all fields may be present - add them if neccessary)
				var prevAddrFields = new Array(
					new Array(myForm.previous_home_zipcode_uk, 'To continue, please enter the postcode of your prevous address.', 'previous_home_zipcode_uk', true),
					new Array(myForm.move_in_date_months_previous, 'To continue, please select the number of months you lived at your previous address.', 
							'move_in_date_months_previous', false),
					new Array(myForm.house_num_and_name_previous, 'To continue, please enter the house name and/or number of your previous address.', 
							'house_num_and_name_previous', false),
					new Array(myForm.previous_street, 'To continue, please enter the street name of your previous address.', 'previous_street', false),
					new Array(myForm.previous_city, 'To continue, please enter the city name of your previous address.', 'previous_city', false),
					new Array(myForm.move_in_date_years_previous, 'To continue, please select the number of years you lived at your previous address.', 
							'move_in_date_years_previous', false),
					new Array(myForm.ataam_previous, 'To continue, please select the number of months you lived at your previous address.', 'ataam_previous', false),
					new Array(myForm.ataay_previous, 'To continue, please select the number of years you lived at your previous address.', 'ataay_previous', false)
				);
				
				// Grab the order that the fields appear in
				var orderedFields = buildFieldOrder(myForm, prevAddrFields);
				
				// Validate the fields
				for(var counter = 0; counter < orderedFields.length; counter++) {
					if(orderedFields[counter][0]) {
						if(!orderedFields[counter][0].value) {
							alertAndFocus(orderedFields[counter][0], orderedFields[counter][1], orderedFields[counter][2]); 
							result = false;
							break;							
						} else if(orderedFields[counter][3]) {
							// Zipcode field, validate accordingly
							if(countryCode == 'uk') {
								if(!validateUKPostcode(orderedFields[counter][0].value)) {
									alertAndFocus(orderedFields[counter][0], orderedFields[counter][1], orderedFields[counter][2]); 
									result = false;
									break;
								}
							}
						}
					}
				}
				
				if(result) {
					if(myForm.ataay_previous && myForm.ataam_previous) {
						if(myForm.ataay_previous.value == 0 && myForm.ataam_previous.value == 0) {
							alertAndFocus(myForm.ataay_previous, 'To continue, you must select a year and/or month value greater than zero.', 'ataay_previous');
							result = false;
						}
					}
				}
				
				break;
			case 'expiryDate':
 				var expiryMonth = new Array(myForm.cem, 'To continue, please select your card expiry month.', 'cem');
 				var expiryYear = new Array(myForm.cey, 'To continue, please select your card expiry year.', 'cey');
 				var expiryOptions = new Array(expiryYear, expiryMonth);
 				
 				// Grab the order that the fields appear in
 				var orderedFields = buildFieldOrder(myForm, expiryOptions);
 				
 				for(var counter = 0; counter < orderedFields.length; counter++) {
 					if(!orderedFields[counter][0].value) {
 						alertAndFocus(orderedFields[counter][0], orderedFields[counter][1], orderedFields[counter][2]);
 						result = false;
 						break;
 					}
 				}
 				if(!result) {
 					break;
 				}
 				if(!isFutureDate(expiryMonth[0].value, '01', expiryYear[0].value, -1)) {
 					alertAndFocus(expiryYear[0], 'To continue, please select an expiry date greater than today.', expiryYear[2]);
 					result = false;
 				}
 				
 				break;
            case 'timeAtAddress':
            	var timeOptions = new Array();
            	
            	if(myForm.ataam) {
            		var months = new Array(myForm.ataam, 'To continue, please select how many months you\'ve lived at your current address.', 'ataam');
            	}
            	if(myForm.ataay) {
            		var years = new Array(myForm.ataay, 'To continue, please select how many years you\'ve lived at your current address.', 'ataay');
            	}
            	
            	// Determine the order that the fields appear in
            	for(var counter = 0; counter < myForm.length; counter++) {
            		if(myForm.elements[counter] == months[0]) {
            			timeOptions[0] = months;
            			break;
            		} else if(myForm.elements[counter] == years[0]) {
            			timeOptions[0] = years;
            			break;
            		}
            	}
            	
            	if(timeOptions.length == 1) {
	            	if(timeOptions[0][3] == 'ataam') {
	            		timeOptions[1] = years;
	            	} else {
	            		timeOptions[1] = months;
	            	}
            	}
            	
            	// Validate each field
            	for(var counter = 0; counter < timeOptions.length; counter++) {
            		if(!timeOptions[counter][0].value) {
            			alertAndFocus(timeOptions[counter][0], timeOptions[counter][1], timeOptions[counter][2]);
            			result = false;
            			break;
            		}
            	}
            	
            	break;
	    	}
    	if (!result) {
    		return false;
    	}
    }
	return true;
}
// Google Event Tracking Functions

// Error Tracking

var TESTING_GOOGLE = 0;

ENABLE_GOOGLE_EVENT_TRACKING = false;

function googleEventErrorsJS(fieldName) {
    if (ENABLE_GOOGLE_EVENT_TRACKING) {
	    if (TESTING_GOOGLE == 1) {
			postAjaxNoResponse("http://vm/provident/html/googleTestPost.php", "value=googleEventErrorsJS, " + fieldName);
		}
    	pageTracker._trackEvent('Errors', 'JS Validation', fieldName);
    }
}

function googleEventErrorsDetailsJS(fieldName, fieldValue) {
    if (ENABLE_GOOGLE_EVENT_TRACKING) {
	    if (TESTING_GOOGLE == 1) {
			postAjaxNoResponse("http://vm/provident/html/googleTestPost.php", "value=googleEventErrorsDetailsJS, " + fieldName + ", " + fieldValue);
		}
		pageTracker._trackEvent('Error Details', fieldName, fieldValue);
    }
}

// Button Clicks

function googleEventButton(buttonType, buttonStatus) {
    if (ENABLE_GOOGLE_EVENT_TRACKING) {
		if (TESTING_GOOGLE == 1) {
			postAjaxNoResponse("http://vm/vanquis_v2/html/googleTestPost.php", "value=googleEventButton, " + buttonType + ", " + buttonStatus);
		}
		pageTracker._trackEvent('Button Clicks', buttonType, buttonStatus);
    }
}

function validateSubmitWithEvents(myForm) {
    if (ENABLE_GOOGLE_EVENT_TRACKING) {
		if (TESTING_GOOGLE == 1) {
			postAjaxNoResponse("googleTestPost.php", "value=validateSubmitsWithEvents, " + myForm);
		}
		if (validateSubmit(myForm)) {
			googleEventButton('Submit Button', 'Valid Click');
			return true;
		} else {
			googleEventButton('Submit Button', 'Invalid Click');
			return false;
		}
    } else {
    	return validateSubmit(myForm);
    }
}

// OnLoad Functions

function googleOnLoadStatus(userStatus, pageName) {
    if (ENABLE_GOOGLE_EVENT_TRACKING) {
		if (TESTING_GOOGLE == 1) {
			postAjaxNoResponse("http://vm/provident/html/googleTestPost.php", "value=googleOnLoadStatus, " + userStatus + ", " + pageName);
		}
		pageTracker._trackEvent('User Status', userStatus, pageName);
    }
}

// Focus Events

function googleFormFieldFocus(fieldName) {
    if (ENABLE_GOOGLE_EVENT_TRACKING) {
		if (TESTING_GOOGLE == 1) {
			postAjaxNoResponse("http://vm/provident/html/googleTestPost.php", "value=googleFormFieldFocus, " + fieldName);
		}
		pageTracker._trackEvent('Forms', 'Focus', fieldName);
    }
}
var submitted = 0;
function validateSubmit(myForm) {
	if (myForm == 'miniform') {
		if (!myForm.fn.value || !validateName(myForm.fn.value)) {
	        alert('To continue, please enter a valid name');
	        myForm.fn.focus();
        	return;
	    }
	    if (!validateEmail(myForm.ea.value)) {
	        alert('To continue, please enter a valid email address.');
	        myForm.ea.focus();
	        return;
	    }
	} else {
	    if (!myForm.nt.value) {
	        alert('To continue, please select the appropriate title');
	        myForm.nt.focus();
	        return;
	    }
	    if (!myForm.fn.value || !validateName(myForm.fn.value)) {
	        alert('To continue, please enter a valid first name');
	        myForm.fn.focus();
	        return;
	    }
	    if (!myForm.ln.value || !validateName(myForm.ln.value)) {
	        alert('To continue, please enter a valid surname');
	        myForm.ln.focus();
	        return;
	    }
	    if (!myForm.sx.value) {
	        alert('To continue, please select your gender');
	        myForm.sx.focus();
	        return;
	    }
	    if (!myForm.dobd.value) {
	        alert('To continue, please enter your date of birth');
	        myForm.dobd.focus();
	        return;
	    }
	    if (!myForm.dobm.value) {
	        alert('To continue, please enter your month of birth');
	        myForm.dobm.focus();
	        return;
	    }
	    if (!myForm.doby.value || (myForm.doby.value.length != 4)) {
	        alert('To continue, please enter your 4 digit year of birth');
	        myForm.doby.focus();
	        return;
	    }
	    if (!validateDate(myForm.dobd.value + "/" + myForm.dobm.value + "/" + myForm.doby.value, 18, true)) {
	        // alert(myForm.dobd.value + "/" + myForm.dobm.value + "/" + myForm.doby.value);
	        alert('To continue, please enter a valid date of birth.  You must be 18 years or older');
	        myForm.dobd.focus();
	        return;
	    }
	    if (!validateEmail(myForm.ea.value)) {
	        alert('To continue, please enter a valid email address.');
	        myForm.ea.focus();
	        return;
	    }
	    if (myForm.eac.value != myForm.ea.value) {
	    	alert('To continue, please make sure your email addresses match.');
	        myForm.eac.focus();
	        return;
	    }
	    if (!myForm.hpuk.value || !validatePhoneUK(myForm.hpuk.value, '', '07')) {
	        alert('To continue, please enter a home phone number');
	        myForm.hpuk.focus();
	        return;
	    }
	    if (!myForm.cpuk.value || !validatePhoneUK(myForm.cpuk.value, '07', '')) {
	        alert('To continue, please enter a mobile phone number');
	        myForm.cpuk.focus();
	        return;
	    }
	    if (!myForm.an.value) {
	        alert('To continue, please enter your home address house name/number');
	        myForm.an.focus();
	        return;
	    }
	    if (!myForm.ap.value) {
	        alert('To continue, please enter your post code');
	        myForm.ap.focus();
	        return;
	    }
	    if (!myForm.checkbox.checked) {
	        alert('To continue, please read and agree to the terms.');
	        myForm.checkbox.focus();
	        return;
	    }
	    myForm.hpuk.value = getPhoneUK(myForm.hpuk.value);
	    myForm.cpuk.value = getPhoneUK(myForm.cpuk.value);
	    
	}
	blnShowPP = 0;
	if (submitted == 0) { 
		submitted = 1; 
		submitForm(myForm);
		return true;
	}
	return false;
}function submitForm(myForm) {
	myForm.submit();
}
function leave() {
blnShowPP = 0;
}
// Launches address popups
function launchAddressPopup(width, height) {
	jQuery("#addresslinkPopup").fancybox({ 
		'zoomSpeedIn': 100, 
		'zoomSpeedOut': 100, 
		'overlayShow': true,
		'frameWidth':  width,
        'frameHeight': height,			
		'overlayOpacity': .8 
	});
	
	leave();
	
	jQuery("#addresslinkPopup").click();

}

function checkFieldExists(formName, fieldName, defaultValue) {
	var translator = ''; 
	var i = fieldName.indexOf('_');
	if (i >=0) {
		var translator = fieldName.substring(0, i);
		var newFieldName = fieldName.substring(i+1);
		var answer = translateFormSubmitField(translator, formName, newFieldName, defaultValue);
		// alert(translator + ", " + newFieldName + ", " + answer);
		if (answer != false) {
			return answer;
		}
	}
	// alert("back on the normal track.  fieldName: " +fieldName);
	formField = eval('document.' + formName + '.' + fieldName);
    if(formField == null) {
        return defaultValue;
    }
    if(formField == ''){
        return defaultValue;
    }
    if(typeof(formField) == ''){
        return defaultValue;
    }
    return formField.value;
}

function getRandomNum() 
{
  return (Math.floor(Math.random() * (999999)) + 1);
}

function getRandomParam() {
  return "rand=" + getRandomNum();
}

function getAjaxInnerHTML(postUrl, elementToFill, postData) {
    elementToFill.innerHTML = "<img src='images/loading.gif'  id='loadingImage' alt='Loading' />";
    s = getRandomParam() + "&" + postData;
    jQuery.ajax({   
      type: "POST",
      url: postUrl,
      cache: false,
      data: s,
      beforeSend: function(){ },   
      complete: function(){ },
      error: function() { alert("There was an error.  Please try again."); }, 
      success: function(response) {
    	  elementToFill.innerHTML = response; 
      }   
    }); //close $.ajax(   
}

function postAjaxNoResponse(postUrl, postData) {
    s = getRandomParam() + "&" + postData;
    jQuery.ajax({   
      type: "POST",
      url: postUrl,
      cache: false,
      data: s,
      beforeSend: function(){ },   
      complete: function(){ },
      error: function() { alert("There was an error.  Please try again."); }, 
      success: function(response) {
      }   
    }); //close $.ajax(   
}

function translateFormSubmitField(translator, formName, fieldName, defaultValue) {
	// check for translators here so we can decide up front whether to continue
	if (allowedFieldTranslators.indexOf(translator) == -1) { 
		return false;
	}
	
	formField = eval('document.' + formName + '.' + fieldName);
	var formValue = defaultValue;
    if(formField == null) {
    	formValue = defaultValue;
    } else if (formField == '') {
    	formValue = defaultValue;
    }  else if (typeof(formField) == '') {
    	formValue = defaultValue;
    } else {
    	formValue = formField.value;
    }
    
	if (translator == 'translfuk') {
		return translateLFUK(fieldName, formValue);
	}
    return formValue;
}

if(!Array.prototype.indexOf){
    Array.prototype.indexOf=function(obj,start){
        for(var i=(start||0),j=this.length;i<j;i++){
            if(this[i]==obj){return i;}
        }
        return -1;
    }
}var allowedFieldTranslators = [];allowedFieldTranslators[allowedFieldTranslators.length] = "translfuk";

function translateLFUK(fieldName, formValue) {
	if (fieldName == 'lar') {
		if (formValue <= 200) {
			formValue = 200;
		} else if (formValue >= 15000) {
			formValue = 15000;
		} else {
			var larArray = [300, 400, 500, 600, 700, 800, 900, 1000,
		            1250, 1500, 1750, 2000, 2250, 2500, 2750, 3000, 3250, 3500,
		            3750, 4000, 4250, 4500, 4750, 5000, 5500, 6000, 6500, 7000,
		            7500, 8000, 8500, 9000, 9500, 10000, 11000, 12000, 13000,
		            14000, 15000];
			for (i = 1; i < larArray.length; i++) {
				var checkValue = ((larArray[i] - larArray[i-1]) / 2) + larArray[i-1];  
				if (formValue < checkValue) {
					formValue = larArray[i-1];
					break;
				}
			}
		}
	} else if (fieldName == 'pol') {
	    switch (formValue) {
	        case '1': formValue='Debt Consolidation'; break;
	        case '2': formValue='Home Improvements'; break;
	        case '3': formValue='Car Purchase'; break;
	        case '4': formValue='Holiday'; break;
	        case '5':
	        case '6': formValue='House Purchase'; break;
	        case '7': formValue='Wedding'; break;
	        case '8':
	        default: formValue='Other'; break;
	    }
	} else if (fieldName == 'it') {
        switch(formValue) {
	        case '1': formValue='Benefits'; break;
	        case '3': formValue='Full Time'; break;
	        case '4': formValue='Retired'; break;
	        case '5': formValue='Self Employed'; break;
	        case '2':
	        default: formValue='Other'; break;
        }
	} else if (fieldName == 'rt') {
        switch (formValue) {
	        case '1': formValue='Homeowner'; break;
	        case '2': formValue='Tenant - Private'; break;
	        case '3': formValue= 'Tenant - Housing Assoc'; break;
	        case '4': formValue='Tenant - Council'; break;
	        case '5': formValue='Military Accommodation'; break;
	        case '6': formValue='Living with Family'; break;
	        default: formValue='Other'; break;
	    }
	} else if (fieldName == 'rt') {
		switch (formValue) {
	        case '1': formValue='Homeowner'; break;
	        case '2': formValue='Tenant - Private'; break;
	        case '3': formValue= 'Tenant - Housing Assoc'; break;
	        case '4': formValue='Tenant - Council'; break;
	        case '5': formValue='Military Accommodation'; break;
	        case '6': formValue='Living with Family'; break;
	        default: formValue='Other'; break;
		}
	} else if (fieldName == 'dd') {
		switch (formValue) {
	        case '1': formValue='yes'; break;
	        default: formValue='no'; break;
		}
	} else if (fieldName == 'pf') {
		switch (formValue) {
	        case '10': formValue='Weekly'; break;
	        case '11': formValue='Fortnightly'; break;
	        default: formValue='Monthly'; break;
		}
	} else if (fieldName == 'dct') {
		switch (formValue) {
	        case '5': formValue='no'; break;
	        default: formValue='yes'; break;
		}
	} else if (fieldName == 'nt') {
	    formValue = formValue.replace(/\./g,'');
	}
	
	return formValue;
}

/*
 * FancyBox - simple jQuery plugin for fancy image zooming
 * Examples and documentation at: http://fancy.klade.lv/
 * Version: 1.0.0 (25/04/2008)
 * Copyright (c) 2008 Janis Skarnelis
 * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
 * Requires: jQuery v1.2.1 or later
*/
(function($) {
	var opts = {}, 
		imgPreloader = new Image, imgTypes = ['png', 'jpg', 'jpeg', 'gif'], 
		loadingTimer, loadingFrame = 1;

   $.fn.fancybox = function(settings) {
		opts.settings = $.extend({}, $.fn.fancybox.defaults, settings);

		$.fn.fancybox.init();

		return this.each(function() {
			var $this = $(this);
			var o = $.metadata ? $.extend({}, opts.settings, $this.metadata()) : opts.settings;

			$this.unbind('click').click(function() {
				$.fn.fancybox.start(this, o); return false;
			});
		});
	};

	$.fn.fancybox.start = function(el, o) {
		if (opts.animating) return false;

		if (o.overlayShow) {
			$("#fancy_wrap").prepend('<div id="fancy_overlay"></div>');
			$("#fancy_overlay").css({'width': $(window).width(), 'height': $(document).height(), 'opacity': o.overlayOpacity});

			if ($.browser.msie) {
				$("#fancy_wrap").prepend('<iframe id="fancy_bigIframe" scrolling="no" frameborder="0"></iframe>');
				$("#fancy_bigIframe").css({'width': $(window).width(), 'height': $(document).height(), 'opacity': 0});
			}

			$("#fancy_overlay").click($.fn.fancybox.close);
		}

		opts.itemArray	= [];
		opts.itemNum	= 0;

		if (jQuery.isFunction(o.itemLoadCallback)) {
		   o.itemLoadCallback.apply(this, [opts]);

			var c	= $(el).children("img:first").length ? $(el).children("img:first") : $(el);
			var tmp	= {'width': c.width(), 'height': c.height(), 'pos': $.fn.fancybox.getPosition(c)}

		   for (var i = 0; i < opts.itemArray.length; i++) {
				opts.itemArray[i].o = $.extend({}, o, opts.itemArray[i].o);
				
				if (o.zoomSpeedIn > 0 || o.zoomSpeedOut > 0) {
					opts.itemArray[i].orig = tmp;
				}
		   }

		} else {
			if (!el.rel || el.rel == '') {
				var item = {url: el.href, title: el.title, o: o};

				if (o.zoomSpeedIn > 0 || o.zoomSpeedOut > 0) {
					var c = $(el).children("img:first").length ? $(el).children("img:first") : $(el);
					item.orig = {'width': c.width(), 'height': c.height(), 'pos': $.fn.fancybox.getPosition(c)}
				}

				opts.itemArray.push(item);

			} else {
				var arr	= $("a[@rel=" + el.rel + "]").get();

				for (var i = 0; i < arr.length; i++) {
					var tmp		= $.metadata ? $.extend({}, o, $(arr[i]).metadata()) : o;
   					var item	= {url: arr[i].href, title: arr[i].title, o: tmp};

   					if (o.zoomSpeedIn > 0 || o.zoomSpeedOut > 0) {
						var c = $(arr[i]).children("img:first").length ? $(arr[i]).children("img:first") : $(el);

						item.orig = {'width': c.width(), 'height': c.height(), 'pos': $.fn.fancybox.getPosition(c)}
					}

					if (arr[i].href == el.href) opts.itemNum = i;

					opts.itemArray.push(item);
				}
			}
		}

		$.fn.fancybox.changeItem(opts.itemNum);
	};

	$.fn.fancybox.changeItem = function(n) {
		$.fn.fancybox.showLoading();

		opts.itemNum = n;

		$("#fancy_nav").empty();
		$("#fancy_outer").stop();
		$("#fancy_title").hide();
		$(document).unbind("keydown");

		imgRegExp = imgTypes.join('|');
    	imgRegExp = new RegExp('\.' + imgRegExp + '$', 'i');

		var url = opts.itemArray[n].url;

		if (url.match(/#/)) {
			var target = window.location.href.split('#')[0]; target = url.replace(target,'');

	        $.fn.fancybox.showItem('<div id="fancy_div">' + $(target).html() + '</div>');

	        $("#fancy_loading").hide();

		} else if (url.match(imgRegExp)) {
			$(imgPreloader).unbind('load').bind('load', function() {
				$("#fancy_loading").hide();

				opts.itemArray[n].o.frameWidth	= imgPreloader.width;
				opts.itemArray[n].o.frameHeight	= imgPreloader.height;

				$.fn.fancybox.showItem('<img id="fancy_img" src="' + imgPreloader.src + '" />');

			}).attr('src', url);

		} else {
			$.fn.fancybox.showItem('<iframe id="fancy_frame" onload="$.fn.fancybox.showIframe()" name="fancy_iframe' + Math.round(Math.random()*1000) + '" frameborder="0" hspace="0" src="' + url + '"></iframe>');
		}
	};

	$.fn.fancybox.showIframe = function() {
		$("#fancy_loading").hide();
		$("#fancy_frame").show();
	};

	$.fn.fancybox.showItem = function(val) {
		$.fn.fancybox.preloadNeighborImages();

		var viewportPos	= $.fn.fancybox.getViewport();
		var itemSize	= $.fn.fancybox.getMaxSize(viewportPos[0] - 50, viewportPos[1] - 100, opts.itemArray[opts.itemNum].o.frameWidth, opts.itemArray[opts.itemNum].o.frameHeight);

		var itemLeft	= viewportPos[2] + Math.round((viewportPos[0] - itemSize[0]) / 2) - 20;
		var itemTop		= viewportPos[3] + Math.round((viewportPos[1] - itemSize[1]) / 2) - 40;

		var itemOpts = {
			'left':		itemLeft, 
			'top':		itemTop, 
			'width':	itemSize[0] + 'px', 
			'height':	itemSize[1] + 'px'	
		}

		if (opts.active) {
			$('#fancy_content').fadeOut("normal", function() {
				$("#fancy_content").empty();
				
				$("#fancy_outer").animate(itemOpts, "normal", function() {
					$("#fancy_content").append($(val)).fadeIn("normal");
					$.fn.fancybox.updateDetails();
				});
			});

		} else {
			opts.active = true;

			$("#fancy_content").empty();

			if ($("#fancy_content").is(":animated")) {
				console.info('animated!');
			}

			if (opts.itemArray[opts.itemNum].o.zoomSpeedIn > 0) {
				opts.animating		= true;
				itemOpts.opacity	= "show";

				$("#fancy_outer").css({
					'top':		opts.itemArray[opts.itemNum].orig.pos.top - 18,
					'left':		opts.itemArray[opts.itemNum].orig.pos.left - 18,
					'height':	opts.itemArray[opts.itemNum].orig.height,
					'width':	opts.itemArray[opts.itemNum].orig.width
				});

				$("#fancy_content").append($(val)).show();

				$("#fancy_outer").animate(itemOpts, opts.itemArray[opts.itemNum].o.zoomSpeedIn, function() {
					opts.animating = false;
					$.fn.fancybox.updateDetails();
				});

			} else {
				$("#fancy_content").append($(val)).show();
				$("#fancy_outer").css(itemOpts).show();
				$.fn.fancybox.updateDetails();
			}
		 }
	};

	$.fn.fancybox.updateDetails = function() {
		$("#fancy_bg,#fancy_close").show();

		if (opts.itemArray[opts.itemNum].title !== undefined && opts.itemArray[opts.itemNum].title !== '') {
			$('#fancy_title div').html(opts.itemArray[opts.itemNum].title);
			$('#fancy_title').show();
		}

		if (opts.itemArray[opts.itemNum].o.hideOnContentClick) {
			$("#fancy_content").click($.fn.fancybox.close);
		} else {
			$("#fancy_content").unbind('click');
		}

		if (opts.itemNum != 0) {
			$("#fancy_nav").append('<a id="fancy_left" href="javascript:;"></a>');

			$('#fancy_left').click(function() {
				$.fn.fancybox.changeItem(opts.itemNum - 1); return false;
			});
		}

		if (opts.itemNum != (opts.itemArray.length - 1)) {
			$("#fancy_nav").append('<a id="fancy_right" href="javascript:;"></a>');
			
			$('#fancy_right').click(function(){
				$.fn.fancybox.changeItem(opts.itemNum + 1); return false;
			});
		}

		$(document).keydown(function(event) {
			if (event.keyCode == 27) {
            	$.fn.fancybox.close();

			} else if(event.keyCode == 37 && opts.itemNum != 0) {
            	$.fn.fancybox.changeItem(opts.itemNum - 1);

			} else if(event.keyCode == 39 && opts.itemNum != (opts.itemArray.length - 1)) {
            	$.fn.fancybox.changeItem(opts.itemNum + 1);
			}
		});
	};

	$.fn.fancybox.preloadNeighborImages = function() {
		if ((opts.itemArray.length - 1) > opts.itemNum) {
			preloadNextImage = new Image();
			preloadNextImage.src = opts.itemArray[opts.itemNum + 1].url;
		}

		if (opts.itemNum > 0) {
			preloadPrevImage = new Image();
			preloadPrevImage.src = opts.itemArray[opts.itemNum - 1].url;
		}
	};

	$.fn.fancybox.close = function() {
		if (opts.animating) return false;

		$(imgPreloader).unbind('load');
		$(document).unbind("keydown");

		$("#fancy_loading,#fancy_title,#fancy_close,#fancy_bg").hide();

		$("#fancy_nav").empty();

		opts.active	= false;

		if (opts.itemArray[opts.itemNum].o.zoomSpeedOut > 0) {
			var itemOpts = {
				'top':		opts.itemArray[opts.itemNum].orig.pos.top - 18,
				'left':		opts.itemArray[opts.itemNum].orig.pos.left - 18,
				'height':	opts.itemArray[opts.itemNum].orig.height,
				'width':	opts.itemArray[opts.itemNum].orig.width,
				'opacity':	'hide'
			};

			opts.animating = true;

			$("#fancy_outer").animate(itemOpts, opts.itemArray[opts.itemNum].o.zoomSpeedOut, function() {
				$("#fancy_content").hide().empty();
				$("#fancy_overlay,#fancy_bigIframe").remove();
				opts.animating = false;
			});

		} else {
			$("#fancy_outer").hide();
			$("#fancy_content").hide().empty();
			$("#fancy_overlay,#fancy_bigIframe").fadeOut("fast").remove();
		}
	};

	$.fn.fancybox.showLoading = function() {
		clearInterval(loadingTimer);

		var pos = $.fn.fancybox.getViewport();

		$("#fancy_loading").css({'left': ((pos[0] - 40) / 2 + pos[2]), 'top': ((pos[1] - 40) / 2 + pos[3])}).show();
		$("#fancy_loading").bind('click', $.fn.fancybox.close);
		
		loadingTimer = setInterval($.fn.fancybox.animateLoading, 66);
	};

	$.fn.fancybox.animateLoading = function(el, o) {
		if (!$("#fancy_loading").is(':visible')){
			clearInterval(loadingTimer);
			return;
		}

		$("#fancy_loading > div").css('top', (loadingFrame * -40) + 'px');

		loadingFrame = (loadingFrame + 1) % 12;
	};

	$.fn.fancybox.init = function() {
		if (!$('#fancy_wrap').length) {
			$('<div id="fancy_wrap"><div id="fancy_loading"><div></div></div><div id="fancy_outer"><div id="fancy_inner"><div id="fancy_nav"></div><div id="fancy_close"></div><div id="fancy_content"></div><div id="fancy_title"></div></div></div></div>').appendTo("body");
			$('<div id="fancy_bg"><div class="fancy_bg fancy_bg_n"></div><div class="fancy_bg fancy_bg_ne"></div><div class="fancy_bg fancy_bg_e"></div><div class="fancy_bg fancy_bg_se"></div><div class="fancy_bg fancy_bg_s"></div><div class="fancy_bg fancy_bg_sw"></div><div class="fancy_bg fancy_bg_w"></div><div class="fancy_bg fancy_bg_nw"></div></div>').prependTo("#fancy_inner");
			
			$('<table cellspacing="0" cellpadding="0" border="0"><tr><td id="fancy_title_left"></td><td id="fancy_title_main"><div></div></td><td id="fancy_title_right"></td></tr></table>').appendTo('#fancy_title');
		}

		if ($.browser.msie) {
			$("#fancy_inner").prepend('<iframe id="fancy_freeIframe" scrolling="no" frameborder="0"></iframe>');
		}

		if (jQuery.fn.pngFix) $(document).pngFix();

    	$("#fancy_close").click($.fn.fancybox.close);
	};

	$.fn.fancybox.getPosition = function(el) {
		var pos = el.offset();

		pos.top	+= $.fn.fancybox.num(el, 'paddingTop');
		pos.top	+= $.fn.fancybox.num(el, 'borderTopWidth');

 		pos.left += $.fn.fancybox.num(el, 'paddingLeft');
		pos.left += $.fn.fancybox.num(el, 'borderLeftWidth');

		return pos;
	};

	$.fn.fancybox.num = function (el, prop) {
		return parseInt($.curCSS(el.jquery?el[0]:el,prop,true))||0;
	};

	$.fn.fancybox.getPageScroll = function() {
		var xScroll, yScroll;

		if (self.pageYOffset) {
			yScroll = self.pageYOffset;
			xScroll = self.pageXOffset;
		} else if (document.documentElement && document.documentElement.scrollTop) {
			yScroll = document.documentElement.scrollTop;
			xScroll = document.documentElement.scrollLeft;
		} else if (document.body) {
			yScroll = document.body.scrollTop;
			xScroll = document.body.scrollLeft;	
		}

		return [xScroll, yScroll]; 
	};

	$.fn.fancybox.getViewport = function() {
		var scroll = $.fn.fancybox.getPageScroll();

		return [$(window).width(), $(window).height(), scroll[0], scroll[1]];
	};

	$.fn.fancybox.getMaxSize = function(maxWidth, maxHeight, imageWidth, imageHeight) {
		var r = Math.min(Math.min(maxWidth, imageWidth) / imageWidth, Math.min(maxHeight, imageHeight) / imageHeight);

		return [Math.round(r * imageWidth), Math.round(r * imageHeight)];
	};

	$.fn.fancybox.defaults = {
		hideOnContentClick:	false,
		zoomSpeedIn:		500,
		zoomSpeedOut:		500,
		frameWidth:			600,
		frameHeight:		400,
		overlayShow:		false,
		overlayOpacity:		0.4,
		itemLoadCallback:	null
	};
})(jQuery);