/* jquery version 1.3.2 */
(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)})}});
(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")}})})();// Common.js starts here
function DescPop(url) {
    openWnd(url, "Description", 300, 600, 0, 0, 0, 1, 1, 0, 0)
} 
//open new window
function openWnd(url, name, height, width, directories, location, menubar, resizable, scrollbars, status, toolbar) 
{
	wnd = window.open(url, name, "alwaysRaised=1,height=" + height + ",width=" + width + ",directories=" + directories + ",locaton=" + location + ",menubar=" + menubar + ",resizable=" + resizable + ",scrollbars=" + scrollbars + ",status=" + status + ",toolbar=" + toolbar)
	wnd.focus()
}


//remove all name/value pairs with the passed name from url-encoded querystring
function remQStringName(qString, name) {
var i
var qStringNew = ""

if (qString != "") {
var curName
var arrNameVal = qString.split("&")

for (i = 0; i < arrNameVal.length ; i++) {
    
    curName = URLDecode(arrNameVal[i].split("=")[0])
    if (curName.toLowerCase() != name.toLowerCase()) qStringNew += "&" + arrNameVal[i]

}}

return qStringNew.substr(1)
}

function GetSelText(ctl) {
var selIdx = ctl.selectedIndex
return selIdx == -1 ? "" : ctl[selIdx].text
}

function URLDecode(urlStr) {
return unescape(urlStr.replace(/\+/g, " "))
}

//get select box value
function GetSelVal(ctl) {
var selIdx = ctl.selectedIndex
return selIdx == -1 ? "" : ctl[selIdx].value
}

function notNumber(number) {
number = number.toString()
for (var i=0; i<number.length; i++) {
if (number.charAt(i) > "9" || number.charAt(i) < "0") return true
}
return false
}

//check whether text-box is empty
function isEmpty(field, fieldName, msg){
if (Trim(field.value) == ""){
if (msg == null)
    msg = "Please enter " + fieldName + "."
    alert(msg);
	field.focus()
	return true

}
return false
}

//validate ASCII Character Set
function charCheck(field, message, toASCIIfield) {
if (toASCIIfield == null)
var txt = field.value
else
var txt = ToASCII(field)

for (var i=0; i<txt.length; i++) {
if (txt.charCodeAt(i) >= 128) {
alert(message)
field.focus()
return true
}}

return false
}

//check whether text-box is empty
function isEmptyContact(field, fieldName, msg) 
{ //alert(field)
	if (Trim(field.value) == "") 
	{
		if (msg == null)
			msg = "Please enter " + fieldName + "."
			field.focus()
			return true
		
	}

		return false
}


//validate ASCII Character Set
function charCheckContact(field, message, toASCIIfield) 
	{
		if (toASCIIfield == null)
			var txt = field.value
		else
			var txt = ToASCII(field)
			for (var i=0; i<txt.length; i++) 
			{
				if (txt.charCodeAt(i) >= 128) 
				{
				field.focus()
				return true
				}
			}
		return false
	}
function notSelected(field, fieldName, msg) 
{
	if (field.selectedIndex == 0) 
	{
		if (msg == null)
			msg = "Please select " + fieldName + "."
			field.focus()
			return true
	}
		return false
}

var AllowDocLangClick;
var AllowDocCurrClick;

AllowDocLangClick = false;
AllowDocCurrClick = false;

var LangjustClicked;
LangjustClicked = false;

var CurrjustClicked;
CurrjustClicked = false;
//_______________________________________________________________________________________
//for handling lang and curr dropdown style.
//_______________________________________________________________________________________
var IsCollapsable = false;
var UPPER_LIMIT = LOWER_LIMIT = 0;
var IsMovingDownClicked,IsMovingUpClicked = false;
var ItemsTable ;
var ParentDiv ;
var ParentDiv_ID ;
var PixTop = 0;
var PixHeight = 0;
 
 //Image Click event handler
function ImageClick (ParentDivID, ItemsTableID)
{
    ItemsTable = document.getElementById(ItemsTableID);
    ParentDiv = document.getElementById(ParentDivID);
    ParentDiv_ID =  ParentDivID;
    if(ItemsTable.style.top == null || ItemsTable.style.top == '')
    {
        ItemsTable.style.top = (0 - ItemsTable.getElementsByTagName("TR").length * 22) + "px";
    }
    
    UPPER_LIMIT = ItemsTable.getElementsByTagName("TR").length * 22;
    LOWER_LIMIT = 0 - UPPER_LIMIT;
     
    if(ParentDiv.style.display == "none")
    {
       IsCollapsable = false;
       ParentDiv.style.height = "0px";
       ItemsTable.style.top = (0 - ItemsTable.getElementsByTagName("TR").length * 22) + "px";
    }
    PixTop = 0;
    PixHeight = 0;
    if(IsCollapsable)
    {
        IsCollapsable = false;
        IsMovingUpClicked = true;
        IsMovingDownClicked = false;
        MoveUp();
    }
    else
    {
        IsCollapsable = true;
        IsMovingDownClicked = true;
        IsMovingUpClicked = false;
        toggleDisplay(ParentDivID, "block");
        MoveDown();
    }
}
var MoveUp = function()
{
    if(LOWER_LIMIT >= PixTop)
    {
        toggleDisplay(ParentDiv_ID, "none");
       
        return;
    }
    if(IsMovingDownClicked)
    {
        return;
    }
     
    PixTop = parseInt(ItemsTable.style.top.replace("px",""));
    PixHeight = parseInt(ParentDiv.style.height.replace("px",""));
	PixTop = PixTop - 10; 
	PixHeight = PixHeight - 10;
    ItemsTable.style.top = PixTop.toString() + "px";
    ParentDiv.style.height = PixHeight.toString() + "px";
	setTimeout(MoveUp,0);      
}
var MoveDown = function()
{
    if(UPPER_LIMIT <= PixHeight || IsMovingUpClicked )
    {
         
        return;
    }
 
	PixTop = parseInt(ItemsTable.style.top.replace("px",""));
    PixHeight = parseInt(ParentDiv.style.height.replace("px",""));
    PixTop = PixTop + 10; 
	PixHeight = PixHeight + 10;
    ItemsTable.style.top = PixTop.toString() + "px";
    ParentDiv.style.height = PixHeight.toString() + "px";
    setTimeout(MoveDown,0);      
}

function langcurrMouseOver(currentObject, langTitle){
if(langTitle != ''){
var images = currentObject.getElementsByTagName("img");
currentObject.style.backgroundColor = "#eae7a8";       
var index = images.length == 2? 1: 0;
if(images.length >0)
{
images[index].style.visibility = "visible";
}}}

function langcurrMouseOut(currentObject, langTitle){
if(langTitle != ''){
var images = currentObject.getElementsByTagName("img");
currentObject.style.backgroundColor = "#f8f8f8";
var index = images.length == 2? 1: 0;
if(images.length >0){
    images[index].style.visibility = "hidden";
}}}

function toggleDisplay(divId, ops) {

    var div = document.getElementById(divId);
    if (document.getElementById(divId).style.display == "block") ops = "none";
    div.style.display = ops;
 
      if (divId == 'dropmenulang') {
        AllowDocLangClick = true;
        LangjustClicked = true;
        CurrjustClicked = false;
      }
      else {
        AllowDocCurrClick = true;
        CurrjustClicked = true;
        LangjustClicked = false;
      }
  
}

function toggleDisplay2(obj, msgShow, msgHide, msgTemplate) {
    var objTemplate = document.getElementById(obj)
    var objMsgTemplate = document.getElementById(msgTemplate)
    if (objTemplate.style.display == 'block') {
        objTemplate.style.display = 'none';
        objMsgTemplate.innerHTML = msgHide;
    } else {
    objTemplate.style.display = 'block';
        objMsgTemplate.innerHTML = msgShow;
    }
}

function showLangFalse() {
if (LangjustClicked == true){
    LangjustClicked = false;
	return;
}
if (AllowDocLangClick == true) {
document.getElementById('dropmenulang').style.display="none";
AllowDocLangClick = false;
}}

function showCurrFalse() {
if (CurrjustClicked == true) {
    CurrjustClicked = false;
	return;
}

if (AllowDocCurrClick == true) {
document.getElementById('dropmenucurr').style.display="none";
AllowDocCurrClick = false;
}}

function showDivsFalse() {
    showCurrFalse();
    showLangFalse();
}

document.onclick = showDivsFalse;

function ChangeValue(urlVar, varValue) {
if (varValue != "") {
var frm = document.MainLangSwitch
var URL = switch_URL(urlVar, varValue)

if (frm) {
	frm.action = URL
	frm.submit()
} else {
	location = URL
}}}

function switch_URL(urlVar, varValue) {
var qString = location.search.substr(1)
var arrQString = qString.split("&")
var varAdded = false

for (var i in arrQString) {
if (arrQString[i].split("=")[0].toLowerCase() == urlVar) {
	arrQString[i] = urlVar + "=" + varValue
	varAdded = true
}}
qString = arrQString.join("&")
if (!varAdded) {
if (qString != "") qString += "&"
qString += urlVar + "=" + varValue
}
return location.pathname + "?" + qString
}

function LTrim(str){
var whitespace = new String(" \t\n\r");
var s = new String(str);
if (whitespace.indexOf(s.charAt(0)) != -1) {
var j=0, i = s.length;
while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
j++;
s = s.substring(j, i);
}
return s;
}

function RTrim(str){
var whitespace = new String(" \t\n\r");
var s = new String(str);
if (whitespace.indexOf(s.charAt(s.length-1)) != -1) {
var i = s.length - 1;
while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
i--;
s = s.substring(0, i+1);
}
return s;
}

function Trim(str){
return RTrim(LTrim(str));
}

function Len(str)
{  return String(str).length;  }

function Left(str, n){
        if (n <= 0)     // Invalid bound, return blank string
                return "";
        else if (n > String(str).length)   // Invalid bound, return
                return str;                // entire string
        else // Valid bound, return appropriate substring
                return String(str).substring(0,n);
}
function Right(str, n){
        if (n <= 0)     // Invalid bound, return blank string
           return "";
        else if (n > String(str).length)   // Invalid bound, return
           return str;                     // entire string
        else { // Valid bound, return appropriate substring
           var iLen = String(str).length;
           return String(str).substring(iLen, iLen - n);
        }
}

function Mid(str, start, len){
        // Make sure start and len are within proper bounds
        if (start < 0 || len < 0) return "";

        var iEnd, iLen = String(str).length;
        if (start + len > iLen)
                iEnd = iLen;
        else
                iEnd = start + len;

        return String(str).substring(start,iEnd);
}
function InStr(strSearch, charSearchFor){
for (i=0; i < Len(strSearch); i++)
{
    if (charSearchFor == Mid(strSearch, i, Len(charSearchFor) ))
    {
		return i;
    }
}
return -1;
}

//trim string
function trim(stringToTrim) {
	var i, j

	//left trim
	for(i=0; i<stringToTrim.length; i++) {
		if (stringToTrim.charAt(i) != " ") break
	}

	//right trim
	for(j=stringToTrim.length-1; j>=i; j--) {
		if (stringToTrim.charAt(j) != " ") break
	}

	return stringToTrim.substring(i, j + 1)
}
//End of Utils.js


//replace or add name/value pairs in url-encoded querystring
function setQStringName(qString, name, arrVal) {
    var qStringNew = remQStringName(qString, name)
    var i
  
   
    var start = qStringNew == "" ? 1 : 0
    for (i = 0; i < arrVal.length; i++) {
        qStringNew += "&" + escape(name) + "=" + escape(arrVal[i])
    }
    return qStringNew.substr(start)
}


//extract (first!) value from querystring for the passed name
function GetQSVal(qsName) {
    var qsPair
    var qString = location.search.substr(1)
    var arrNameVal = qString.split("&")
    for (var i in arrNameVal) {
        qsPair = arrNameVal[i].split("=")
        if (URLDecode(qsPair[0]).toLowerCase() == qsName.toLowerCase()) return URLDecode(qsPair[1])
    }
    return ""
}

function Reload(name, val, totPageNo) {
    if (val < totPageNo + 1 && val > 0) {
        var qString = location.search.substr(1)
        //always resert page to 1
        if (name != "page") {
            var page = GetQSVal("page")
            if (page != "1" && page != "") qString = setQStringName(qString, "page", new Array("1"))
        }
        qString = setQStringName(qString, name, new Array(val.toString()))
        location = location.pathname + "?" + qString
    }
}


function setCriteria(val) {
    document.getElementById('SearchBy').value = val;
}

function invalidChars(validatedControl, validatedName, charString, msg) {
    var validatedString = trim(validatedControl.value).toLowerCase()
    charString = charString.toLowerCase()

    for (var i = 0; i < validatedString.length; i++) {
        for (var j = 0; j < charString.length; j++) {
            if (validatedString.charAt(i) == charString.charAt(j)) {

                if (typeof (Common_Scripts_FuncLib_Space) == "undefined")
                    Common_Scripts_FuncLib_Space = "space"

                var alertString = charString.split("").join("  ")
                alertString = alertString.split("     ").join("  " + Common_Scripts_FuncLib_Space + "  ")

                if (msg == null)
                    msg = validatedName + " cannot contain any of the following illegal characters:\n\n " + alertString

                msg = msg.replace(/\[IllegalCharacters\]/, alertString)
                alert(msg)
                validatedControl.focus()
                return true
            }
        }
    }

    return false
}

function submitForm() {

    //check that at least one star rating is selected

    if (document.getElementById('rating3').checked == false && document.getElementById('rating4').checked == false && document.getElementById('rating5').checked == false)  {
    if (typeof (Common_Scripts_SearchEngine_SelectStar) == "undefined")
    Common_Scripts_SearchEngine_SelectStar = "Please select at least one Star Rating."

    alert(Common_Scripts_SearchEngine_SelectStar)
    document.getElementById('rating5').focus()
    return false;
    }

    if ($("#SearchBy").val() == "LocationKey" & ($("#destination").val().length < 3 | $("#destination").val() == HINT_DRE)) {
        alert(Common_Scripts_ValidDestinationSearch);
        return false;
    }

    if (document.getElementById("SearchBy").value == "Name") {
        document.getElementById('hotelname').value = trim(document.getElementById('hotelname').value)
        if (typeof (Common_Scripts_SearchEngine_HotelName) == "undefined")
            Common_Scripts_SearchEngine_HotelName = "Hotel Name cannot contain any of the following illegal characters:\n\n%"

        if (typeof (Common_Scripts_SearchEngine_HotelNameLength) == "undefined")
            Common_Scripts_SearchEngine_HotelNameLength = "Hotel Name should be at least 3 characters long."

        if (invalidChars(document.getElementById('hotelname'), "", "%", Common_Scripts_SearchEngine_HotelName)) return false;
   

        if (typeof (document.getElementById('hotelname')) != 'undefined') {
            if (trim(document.getElementById('hotelname').value).length < 3) {
                alert(Common_Scripts_SearchEngine_HotelNameLength);
                return false;

            }
        }
    }
    else {
        if (document.getElementById("SearchBy").value == "LocationKey") {
            if(document.getElementById('LocationKey'))
                document.getElementById('LocationKey').value = trim(document.getElementById('LocationKey').value)
                
            if (document.getElementById('hdnLocationKey'))
                document.getElementById('hdnLocationKey').value = trim(document.getElementById('hdnLocationKey').value)
                
            if (typeof (Common_Scripts_SearchEngine_LocationName) == "undefined")
                Common_Scripts_SearchEngine_LocationName = "Hotel Name cannot contain any of the following illegal characters:\n\n%"

            if (typeof (Common_Scripts_SearchEngine_LocationLength) == "undefined")
                Common_Scripts_SearchEngine_LocationLength = "Location Name should be at least 3 characters long."
            if (document.getElementById('LocationKey')) {
                if (invalidChars(document.getElementById('LocationKey'), "", "%", Common_Scripts_SearchEngine_LocationName)) return false;

            }
                
            
/*            if (document.getElementById('destination')) {
                if (document.getElementById('destination').value.split("'").length > 2) 
                {
                    alert(Common_Scripts_SearchEngine_LocationName + "\\~`!@#$%^&*()-+{}|\"':;?/><");
                    return false;
                }
                if (CheckForSpecialChars(document.getElementById('destination').value, "\\,~,`,!,@,#,$,%,^,&,*,(,),-,+,{,},|,\",:,;,?,/,>,<" )) {
                    alert(Common_Scripts_SearchEngine_LocationName + "\\~`!@#$%^&*()-+{}|\"':;?/><");
                    return false;
                }
            }
*/            
            if (document.getElementById('hdnLocationKey')) {
                if (invalidChars(document.getElementById('hdnLocationKey'), "", "%", Common_Scripts_SearchEngine_LocationName)) return false;
            }

            if (document.getElementById('LocationKey')) {
                if (trim(document.getElementById('LocationKey').value).length < 3) {
                    alert(Common_Scripts_SearchEngine_LocationLength);
                    return false;

                }
            }
            
            
        }
    }

}

function CheckForSpecialChars(str, splchars) {
    var charArr = splchars.split(",");
    for (i = 0; i < charArr.length; i++) {
        if (str.indexOf(charArr[i]) >= 0) {
            return true;
        }
    }
return false;
}


//update all name/value pairs with the passed name from url-encoded querystring
function updateQStringName(qString, name, value) {
    var i
    var qStringNew="" 
    //var start = qStringNew == "" ? 1 : 0
    
    if (qString != "") {
        var curName
        var arrNameVal = qString.split("&")
         
       

        for (i in arrNameVal) {
            curName = URLDecode(arrNameVal[i].split("=")[0])
            if (curName.toLowerCase() != name.toLowerCase()) qStringNew += "&" + arrNameVal[i]
        }
    }
    
    qStringNew += "&" + escape(name) + "=" + value

    return qStringNew.substr(1)
}

function UpdateFilter() {

    var qString = location.search.substr(1)

    var qStringRating
    qStringRating = remQStringName(qString, "star3")
    qStringRating = remQStringName(qStringRating, "star4")
    qStringRating = remQStringName(qStringRating, "star5")

    if (document.getElementById('star5').checked == false &&
        document.getElementById('star4').checked == false &&
        document.getElementById('star3').checked == false) {
        qStringRating += "&star3=ON&star4=ON&star5=ON&starAll=ON"
        qString = qStringRating
    }
    else if( document.getElementById('chkRatingAll').checked == true)
    {
        qStringRating += "&star3=ON&star4=ON&star5=ON&starAll=ON"
        qString = qStringRating
    }
    else {
        if (document.getElementById('star3').checked == true) {
            qStringRating += "&star3=" + document.getElementById('star3').value
            qString = qStringRating
        }

        if (document.getElementById('star4').checked == true) {
            qStringRating += "&star4=" + document.getElementById('star4').value
            qString = qStringRating
        }

        if (document.getElementById('star5').checked == true) {
            qStringRating += "&star5=" + document.getElementById('star5').value
            qString = qStringRating
        }
    }
    
    //-------------------------getting accommodation filters.
    var accChk = "";
    
    if(document.getElementById("ACCOMMODATIONTYPEAll").checked == false)
    {
        var arraccommodationTypeId = accommodationTypeIds.split(",");
        for (index = 0; index < arraccommodationTypeId.length - 1; index++) {
            if(arraccommodationTypeId[index] != ""){
                var chkbox = document.getElementById("ACCOMMODATIONTYPE" + arraccommodationTypeId[index])
                if (chkbox != null && chkbox.checked == true) {
                  accChk += chkbox.value + ',';
                }
            }
        }
        
        if (accChk.length > 0) {   
          accChk = accChk.substring(0, accChk.length - 1);
        }
    }
    
    var qStringAcc = remQStringName(qString, "accChk");
    qStringAcc += "&accChk=" + accChk;
    qString = qStringAcc;           
    //-------------------------getting accommodation filters - Ends.
       
    // FacilitiesCount is calculated in searchfilter.inc
    var count = FacilitiesCount
    var facChk =""
    if (document.getElementById("FACILITIESAll").checked == false) 
    {
        var arrFacilitiesId = FacilitiesId.split(",")
        for (i = 0; i < count+1; i++) {
             var chkbox = document.getElementById("FACILITIES" + arrFacilitiesId[i]);
             if (chkbox != null && chkbox.checked == true) {
              facChk += chkbox.value + ','
            }
        }
    }
    var chkLen = facChk.substring(0, facChk.length - 1)
    /////////

    var qStringNew = remQStringName(qString, "facChk")
    
    var chkLen = facChk.substring(0, facChk.length - 1)
    
    if (chkLen.length > 0) {       
        var arrVal = new Array(chkLen)       
        var i
       qStringNew += "&facChk=" + arrVal[0]       
    }

    qString = qStringNew
    qString = remQStringName(qString, "page")
    qString = remQStringName(qString, "rpage")
    
    qString = qString + "&rpage=" + document.getElementById("rpage").value;
    
    location = location.pathname + "?" + qString
}

function replaceQueryString(initialQuery, keyString, newValue) {
var re = new RegExp("([?|&])" + keyString + "=.*?(&|$)", "i");

var matches = initialQuery.match(re);

if (matches && matches.length)
    return initialQuery.replace(re, '$1' + keyString + "=" + newValue + '$2');
else {
    if (initialQuery.indexOf('?') < 0)
        return initialQuery + '?' + keyString + "=" + newValue;
    else
        return initialQuery + '&' + keyString + "=" + newValue;
}}


function Querystring(qs) {
this.params = {};

if (qs == null) qs = location.search.substring(1, location.search.length);
if (qs.length == 0) return;

qs = qs.toLowerCase();
qs = qs.replace(/\+/g, ' ');
var args = qs.split('&'); // parse out name/value pairs separated via &

// split out each name=value pair
for (var i = 0; i < args.length; i++) {
var pair = args[i].split('=');
var name = decodeURIComponent(unescape(pair[0]));

var value = (pair.length == 2)
	? decodeURI(encodeURI(pair[1]))
	: name;

this.params[name] = value;
}}

Querystring.prototype.get = function(key, default_) {
    key = key.toLowerCase();
    var value = this.params[key];
    return (value != null) ? value : default_;
}

function showpopup(cid,parentobj, x, y) {
    var topoffset = 18;
    if( x == 'undefined' ) x = 0 ; 
    if( y == 'undefined' ) y = 0 ;
	obj = document.getElementById(cid);
	mainobj = document.getElementById(parentobj);
	var curleft = curtop = 0;
	if (mainobj.offsetParent) {
	curleft = mainobj.offsetLeft;
	curtop = mainobj.offsetTop;
	while (mainobj = mainobj.offsetParent) {
	curleft += mainobj.offsetLeft;
	curtop += mainobj.offsetTop;
		}
	}
	obj.style.position = "absolute";
	obj.style.display = "";
	obj.style.left = (curleft + x) + 'px'; //Fix for bug#1737
	obj.style.top =  (curtop + topoffset + y) + 'px';
}


function hidepopup(divid) {
	objid = divid;
	document.getElementById(objid).style.display = "none";
}


function navigateToDirectHotelPage(hotelid,checkin,checkout, locKey, locID, isDRE, isByHotelName, hotelName, refinfo) {
  var directHotelString;
    if (isDRE == 'True')
    {
     
      directHotelString = "directhotel.asp?id=" + hotelid + "&ncl=&checkin=2009-03-10&checkout=2009-03-12&locKey=&locID=&locDispName=" + locDispName;
      directHotelString = replaceQueryString(directHotelString, "locKey", locKey);
      directHotelString = replaceQueryString(directHotelString, "locID", locID);
    }
    else if (isByHotelName == 'True')
    {
        directHotelString = "directhotel.asp?id=" + hotelid + "&ncl=&checkin=2009-03-10&checkout=2009-03-12&hotelName=";
        directHotelString = replaceQueryString(directHotelString, "hotelName", hotelName);        
    }
    else
    {
        directHotelString = "directhotel.asp?id=" + hotelid + "&ncl=&checkin=2009-03-10&checkout=2009-03-12";
    }    
    directHotelString = replaceQueryString(directHotelString, "id", hotelid);
    directHotelString = replaceQueryString(directHotelString, "checkin", checkin);
    directHotelString = replaceQueryString(directHotelString, "checkout", checkout);

    var varDMName = ""
    if (document.domain.length > 0) {
        varDMName = document.domain
    }

    directHotelString = directHotelString + "&rpage=" + varDMName + "/" + refinfo;

    window.location.href = directHotelString;
    }
    
    function navigateToDirectHotelPageRatingTab(hotelid,checkin,checkout, locKey, locID, isDRE) {
  var directHotelString;
    if (isDRE == 'True')
    {
      directHotelString = "directhotel.asp?id=" + hotelid + "&ncl=&checkin=2009-03-10&checkout=2009-03-12&locKey=&locID=&tab=2";
      directHotelString = replaceQueryString(directHotelString, "locKey", locKey);
      directHotelString = replaceQueryString(directHotelString, "locID", locID);
    }
    else
    {
    directHotelString = "directhotel.asp?id=" + hotelid + "&ncl=&checkin=2009-03-10&checkout=2009-03-12&tab=2";
    }    
    directHotelString = replaceQueryString(directHotelString, "id", hotelid);
    directHotelString = replaceQueryString(directHotelString, "checkin", checkin);
    directHotelString = replaceQueryString(directHotelString, "checkout", checkout);

    window.location.replace(directHotelString);
    }

function refreshattabclick(refreshval) {
    var pagecode = GetQSVal("vw");
    if (pagecode != refreshval)
    {
        var qString = location.search.substr(1)
        qString = location.pathname + "?" + qString
        qString = replaceQueryString(qString, "vw", refreshval)
        qString = replaceQueryString(qString, "rpage", document.getElementById("rpage").value)
        qString = replaceQueryString(qString, "page", "1")
        location =  qString;
    }
}

function logoutclick() {
    var qString = ""
    if (location.pathname.toLowerCase() == "/selections.asp") {
        qString = "?" + location.search.substr(1)

        qString = replaceQueryString(qString, "lgt", "1")

        qString = replaceQueryString(qString, "rpage", location.pathname)
    }
    //location = qString;
    location = "/logout.asp" + qString;
}


function ChangeCurrencies(currencycode, currencyname, refinfo) {
    document.getElementById('txtCurrency').innerHTML = document.getElementById(currencycode).innerHTML;
    toggleDisplay('dropmenucurr', 'none');

    var squery = "";
    var sFquery = "";
    var varDMName = "";
    if (document.domain.length > 0) {
        varDMName = document.domain
    }

    sFquery = window.location.toString();
    squery = replaceQueryString(sFquery, "curr", currencycode);
    squery = replaceQueryString(squery, "rpage", varDMName + "/" + refinfo);

    
    //TODO integrate with current function, no need to have 2 same functions
    //var frm = document.MainLangSwitch;
    
    //if (frm) {
    //    frm.action = squery
    //    frm.submit()
    //}
    //else {
        window.location.replace(squery);
    //}
    
    //window.location.replace( replaceQueryString(window.location.toString(),"curr",currencycode ));
}

function ChangeCurrenciesCCForm(currencycode, currencyname, refinfo) {
    document.getElementById('txtCurrency').innerHTML = document.getElementById(currencycode).innerHTML;
    toggleDisplay('dropmenucurr', 'none');

    var squery = "";
    var sFquery = "";
    var varDMName = "";
    if (document.domain.length > 0) {
        varDMName = document.domain
    }

    sFquery = window.location.toString();
    squery = replaceQueryString(sFquery, "curr", currencycode);
    squery = replaceQueryString(squery, "rpage", varDMName + "/" + refinfo);

    var frm = document.MainLangSwitch
    frm.action = squery
    frm.submit()
}


function ChangeLangCCForm(languagecode, languagename, refinfo) {
    document.getElementsByName("imgLang")[0].id = languagecode + "Smallgif";
    document.getElementsByName("imgLang")[0].src = "SiteEngine/HTC/Images/lang/" + languagecode + "Small.gif";
    toggleDisplay('dropmenulang', 'none');

    var squery = "";
    var sFquery = "";
    var varDMName = "";
    if (document.domain.length > 0) {
        varDMName = document.domain
    }

    sFquery = window.location.toString();
    squery = replaceQueryString(sFquery, "lc", languagecode);
    squery = replaceQueryString(squery, "rpage", varDMName + "/" + refinfo);
    var frm = document.MainLangSwitch
    if (frm) {
        frm.action = squery
        frm.submit()
    } 
}





function ChangeLang(languagecode, languagename, refinfo) {
    document.getElementsByName("imgLang")[0].id = languagecode + "Smallgif";
    document.getElementsByName("imgLang")[0].src = "SiteEngine/HTC/Images/lang/" + languagecode + "Small.gif";
    toggleDisplay('dropmenulang', 'none');

    var squery = "";
    var sFquery = "";
    var varDMName = "";
    if (document.domain.length > 0) {
        varDMName = document.domain
    }

    sFquery = window.location.toString();
    squery = replaceQueryString(sFquery, "lc", languagecode);
    squery = replaceQueryString(squery, "rpage", varDMName + "/" + refinfo);

    window.location.replace(squery);
}

function unCheckOptions(currentObject, parentObjectId){
if (currentObject.checked){
var parentObejct = document.getElementById(parentObjectId);
var childOptions = parentObejct.getElementsByTagName("input");
for(index=0; index<childOptions.length; index++){
if (childOptions[index].type == "checkbox" ){
    childOptions[index].checked = false;
}}
currentObject.checked = true;
}}

function unCheckAll(AllOption){
    document.getElementById(AllOption).checked = false;
}

function DisplayMemberDollar(mainobj, currencysign, roomtotal, memberdollars, earnpercentage,optionalparam) {
obj = document.getElementById("areyoumember");

var curleft = curtop = 0;
if (mainobj.offsetParent) {
 curleft = mainobj.offsetLeft;
 curtop = mainobj.offsetTop;
 while (mainobj = mainobj.offsetParent) {
     curleft += mainobj.offsetLeft ;
     curtop += mainobj.offsetTop - 70;
}}

obj.style.position = "absolute";
obj.style.display = "block";
if(curleft - 640 < 5)
    obj.style.left = '5px';
else
    obj.style.left = curleft - 640 + 'px';
    var IE = /*@cc_on!@*/false;
    if (IE) {
        obj.style.top = document.documentElement.scrollTop + 50 + 'px';
    }
    else {
        obj.style.top = window.pageYOffset + 50 + 'px';
    }

var _memberdollar = document.getElementById("memberdollar")

if (_memberdollar != null)
 _memberdollar.innerHTML = currencysign + " " + memberdollars;

var _currencysign = document.getElementById("currencysign")
if (_currencysign != null)
 _currencysign.innerHTML = currencysign;

var _roomtotal = document.getElementById("roomtotal")
if (_roomtotal != null)
 _roomtotal.innerHTML = roomtotal;

var _earnpercentage = document.getElementById("earnpercentage")

if (_earnpercentage != null)
 _earnpercentage.innerHTML = earnpercentage; 
}

function HideMemberDollarPopup() {
 document.getElementById("areyoumember").style.display = "none";
}

function JEscape(str) {
str = str.replace(/<jstab>/g, "\t");
str = str.replace(/<jsbr>/g, "\n");
return str;
}


//check whether passed parameter is a valid number
function notNumber(number) {
number = number.toString()
for (var i = 0; i < number.length; i++) {
    if (number.charAt(i) > "9" || number.charAt(i) < "0") return true
}
return false
}

//validate email address
function notEmail(field, fieldName, msg) {
var email = trim(field.value)

if (email == "") return false

var at = false
var dot = false

for (var i = 0; i < email.length; i++) {
    if (email.charAt(i) == "@") at = true
    if (email.charAt(i) == "." && at) dot = true
}

if (!(at && dot && email.length > 5)) {
    if (msg == null)
        msg = "The " + fieldName + " you entered is not a valid e-mail address."

    alert(msg)
    field.focus()
    field.select()
    return true
}

//check for invalid characters
if (invalidChars(field, "E-mail", '%,;|" <>\\/')) return true

return false
}


function makeHttpRequest(url) {
    http_request = false
    if (window.XMLHttpRequest) {
        http_request = new XMLHttpRequest()
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/xml')
        }
    }
    else if (window.ActiveXObject) {
        try {
            if (IeVersion()['Version'] > 6) {
                http_request = new ActiveXObject("MSXML2.DOMDocument")
            } else {
                http_request = new ActiveXObject("MSXML2.XMLHTTP.3.0")
            }
        }
    catch (e) {
        onError(e)
        try {
            if (IeVersion()['Version'] > 6) {
                http_request = new ActiveXObject("Microsoft.XMLHTTP")
            } else {
                http_request = new ActiveXObject("MSXML2.XMLHTTP.3.0")
            }
        }
        catch (e) {
            onError(e) 
        }
    }
}
    if (!http_request) {
        onError()
        return false
    }
    http_request.onreadystatechange = refreshPage
    http_request.open('GET', url , true)
    http_request.send(null)
}


function refreshPage() {
    if (http_request.readyState == 4) {
        window.location.reload(false);
    }
}

//Start of defect-3016
function IeVersion() {
    var browser = navigator.userAgent.toLowerCase()
    var ba = new Array()
    if (browser.indexOf('msie') != -1) {
        var splie, splietoname
        splie = browser.split(';')
        splietoname = splie[1].split(' ')
        return parseFloat(splietoname[2])
    }
}
function onError(e) {
}
//Start of defect-3016

/* Ajax Load for Search Box using JQuery syntax */

var AXPAGE = "/ajaxxsl.asp";
$(function() {
    //load on change
    $("select#country").change(function() {
        $("select#city_region").attr("disabled", true);
        $("#city_regionAJAXloading").show();
        if ($.jCache.hasItem("C_" + $("#country").val())) {

            var k = $.jCache.getItem("C_" + $("#country").val());
            popCitiesAndLoc(k);

            return;
        }

        $.getJSON(AXPAGE, { param1: $(this).val(), action: 'getcities' }, function(j) {
            //$.jCache.setItem("C_" + $("#country").val(), j);
            popCitiesAndLoc(j);
        });
    });

    //load on document load
    $(document).ready(function() {
        $("select#city_region").attr("disabled", true);
        $("#city_regionAJAXloading").show();
        if ($.jCache.hasItem("C_" + $("#country").val())) {


            var k = $.jCache.getItem("C_" + $("#country").val());
            popCitiesAndLoc(k);

            return;
        }

        $.getJSON(AXPAGE, { param1: $("#country").val(), action: 'getcities' }, function(j) {
            //$.jCache.setItem("C_" + $("#country").val(), j);
            popCitiesAndLoc(j);
        });
    });

    function popCitiesAndLoc(j) {
        var options = '';
        ct = j.Cities;

        dc = j.DefaultCities;

        var isSetSel = false;
        var ctyValSel = "";
        for (var i = 0; i < dc.length; i++) {

            if (!isSetSel) {
                if (dc[i].Name == $("#CITYNAME").val()) {
                    ctyValSel = "selected=\"selected\"";
                    isSetSel = true;
                }
            }

            if (dc[i].Name != -2) {
                if (ctyValSel == "") {
                    options += '<option value="' + dc[i].Name + '">' + dc[i].DisplayName + '</option>';
                } else {
                    options += '<option value="' + dc[i].Name + '" selected=\"selected\">' + dc[i].DisplayName + '</option>';
                }
            }
            else {
                options += '<option disabled="disabled" value="' + dc[i].Name + '">' + dc[i].DisplayName + '</option>';
            }
            ctyValSel = "";

        }
        if (dc.length > 0)
            options += '<option disabled="disabled" value="-2">---------------</option>';
        for (var i = 0; i < ct.length; i++) {
            if (!isSetSel) {
                if (ct[i].Name == $("#CITYNAME").val()) {
                    ctyValSel = "selected=\"selected\"";
                    isSetSel = true;
                }
            }

            if (ct[i].Name != -2)
                if (ctyValSel == "") {
                options += '<option value="' + ct[i].Name + '">' + ct[i].DisplayName + '</option>';
            } else {
                options += '<option value="' + ct[i].Name + '" selected=\"selected\">' + ct[i].DisplayName + '</option>';
            }
            else {
                options += '<option disabled="disabled" value="' + ct[i].Name + '">' + ct[i].DisplayName + '</option>';
            }

            ctyValSel = "";
        }
        isSetSel = false;

        $("select#city_region").html(options);
        $("#city_regionAJAXloading").hide();
        $("select#city_region").attr("disabled", false);

        //$("#city_region option[value='Toronto']").attr('selected', 'selected');

    }

    function cancelAjaxLoad(ctl) {
        var oldValue, oldIndex;
        oldIndex = 0;
        for (j = 0; j < ctl.options.length; j++) {

            if (ctl.options[j].defaultSelected) {
                ctl.options[j].defaultSelected = false;
                oldValue = ctl.options[j].value;
                oldIndex = j;
            }

        }

        // If the selected city is "---------" (value -2); Change event to be cancelled  and previous value selected
        if (ctl.value == -2) {
            ctl.selectedIndex = oldIndex;
            ctl.options[oldIndex].defaultSelected = true;
            return false;
        }
        ctl.options[ctl.selectedIndex].defaultSelected = true;

        // Some cities are duplicated above and below "---------"; Change event to be cancelled if selected city is a duplicate city
        if (oldValue == ctl.options[ctl.selectedIndex].value) {
            return false;
        }
    }


});

$(document).ready(function() {

    $("#readmorelink").click(function() {
        $("#readmorelink").hide();
        $("#descbody").removeClass("ddisp");
        $("#descbody").addClass("disp");
        $("#dots").hide();
    });

    $("#readmorelink").hover(function() {
        $(this).css("color", "#BE272A");
    }, function() {
        $(this).css("color", "#333");
    });

    $("#hidelink").click(function() {
        $("#readmorelink").show();
        $("#descbody").removeClass("disp");
        $("#descbody").addClass("ddisp");
        $("#dots").show();
    });

    $("#hidelink").hover(function() {
        $(this).css("color", "#BE272A");
    }, function() {
        $(this).css("color", "#333");
    });

    if ($("#3Stars > li").length > 0) {

        $("#3.subnav").hover(function() {
            $("#3Stars").show();
        }, function() {
            $("#3Stars").hide();
        });
    }
    if ($("#4Stars > li").length > 0) {

        $("#4.subnav").hover(function() {
            $("#4Stars").show();
        }, function() {
            $("#4Stars").hide();
        });
    }
    if ($("#5Stars > li").length > 0) {

        $("#5.subnav").hover(function() {
            $("#5Stars").show();
        }, function() {
            $("#5Stars").hide();
        });
    }

    $('#topnav .sublink').hover(function() {
        $(this).find('ul').css('display', 'block');
    }, function() {
        $(this).find('ul').css('display', 'none');
    });

    $("a.close_button").click(function() {
        $("#divpopup").hide();
    });

    $("a#checkbookingdates").click(function() {
        if ($('#divpopup').css('display') != 'none') { $("#divpopup").hide(); }
    });

    $("span#lang").click(function() {
        $("#dropmenulang").slideToggle("100");
    });

    $("span#curr").click(function() {
        $("#dropmenucurr").slideToggle("100");
    });

    $(".map").click(function() {
        var par = this;
        if ($('#divpopup').css('display') != 'none') {

            $("#divpopup").hide();
        }

        var curleft = curtop = 0;
        if (par.offsetParent) {
            curleft = par.offsetLeft;
            curtop = par.offsetTop;
            while (par = par.offsetParent) {
                curleft += par.offsetLeft;
                curtop += par.offsetTop;
            }
        }

        $("#tplGoogleMap").show();



        $.scrollTo(curtop - 200 + 'px', 800);
    });

    $(".rates").click(function() {
        var par = this;
        if ($('#tplGoogleMap').css('display') != 'none') {
            $("#tplGoogleMap").hide();

        }

        var curleft = curtop = 0;

        if (par.offsetParent) {
            curleft = par.offsetLeft;
            curtop = par.offsetTop;
            while (par = par.offsetParent) {
                curleft += par.offsetLeft;
                curtop += par.offsetTop;
            }
        }


        initSEOCalendar();


        var xdisp, ydisp;
        xdisp = -70;
        ydisp = 150;

        if (this.id == 'hotel-action-check') {
            //xdisp = -70;
            //ydisp = 149;
            document.getElementById("hdnHotelID").value = $("#hotelid").attr('Value');
        }
        else if (this.id == 'ppccheckrates') {
            xdisp = -45;
            ydisp = 160;
            document.getElementById("hdnHotelID").value = this.attributes.getNamedItem('hotelid').value;
        }
        else {
            document.getElementById("hdnHotelID").value = this.name;
        }

        $("#divpopup").css("top", curtop + xdisp)
        $("#divpopup").css("left", curleft + ydisp)
        $("#divpopup").show();


        $.scrollTo(curtop - 400 + 'px', 800);
    });
});

$(document).keyup(function(event) {
    if (event.keyCode == 27) {
        $("#divpopup").hide();
        $("#tplGoogleMap").hide();
        $("#dropmenucurr").hide();
        $("#dropmenulang").hide();
    }
});

function reloadpage(type, value) {
    var strurl;
    var pageurl;
    var pagename;
    var newpage;
    strurl = window.location.href;
    if (strurl.indexOf(type + "-") > 0) {
        pageurl = strurl.substring(strurl.indexOf(type + "-"), strurl.length);
        pagename = pageurl.substring(0, pageurl.indexOf("/"))
        newpage = strurl.replace(pagename, type + "-" + value.toString());
    }
    else {
        newpage = strurl + type + "-" + value.toString() + "/";
    }

    if (newpage.indexOf("page-") > 0) {
        newpage = newpage.replace(/page-[\d]\/?/ig, "");
    }
    window.location = newpage;
}


function getSearchResultsBy(sortValue) {
    reloadpage("Sort", parseInt(sortValue) + 1);
}

function DisplayCheckRates(cid, parentobj, hotelid) {
    initSEOCalendar();
    document.getElementById("hdnHotelID").value = hotelid;
    obj = document.getElementById(cid);



    var curleft = curtop = 0;
    if (parentobj.offsetParent) {
        curleft = parentobj.offsetLeft;
        curtop = parentobj.offsetTop;
        while (parentobj = parentobj.offsetParent) {
            curleft += parentobj.offsetLeft;
            curtop += parentobj.offsetTop;
        }
    }

    obj.style.position = "absolute";
    obj.style.display = "block";
    obj.style.left = '66%';
    obj.style.top = curtop + 111 + 'px';
    obj.style.visibility = "visible";

}

function DisplayCheckRatesHotelPage(cid, parentobj, hotelid, yPos) {

    initSEOCalendar();
    document.getElementById("hdnHotelID").value = hotelid;
    obj = document.getElementById(cid);
    
    var curleft = curtop = 0;
    if (parentobj.offsetParent) {
        curleft = parentobj.offsetLeft;
        curtop = parentobj.offsetTop;

        
        while (parentobj = parentobj.offsetParent) {
            curleft += parentobj.offsetLeft;
            curtop += parentobj.offsetTop;
        }
    }

    obj.style.position = "absolute";
    obj.style.display = "block";
    obj.style.left = yPos;
    obj.style.top = (curtop - 298) + 'px';
    obj.style.visibility = "visible";

    $.scrollTo(curtop - 200 + 'px', 800);

}


function redirecttodhpage(lang, type) {
    if (!ValidateDateSeo(type)) { return false; }
    
    var url, checkindate, checkoutdate;
    var inDay, inMonth, inYear, outDay, outMonth, outYear;
    var dtdate;
    checkindate = document.getElementById("Cal3").value;
    checkoutdate = document.getElementById("Cal4").value;


    inDay = checkindate.substring(0, checkindate.indexOf("/"));
    checkindate = checkindate.substring(checkindate.indexOf("/") + 1, checkindate.length);
    inMonth = checkindate.substring(0, checkindate.indexOf("/"));
    checkindate = checkindate.substring(checkindate.indexOf("/") + 1, checkindate.length);
    inYear = checkindate;

    outDay = checkoutdate.substring(0, checkoutdate.indexOf("/"));
    checkoutdate = checkoutdate.substring(checkoutdate.indexOf("/") + 1, checkoutdate.length);
    outMonth = checkoutdate.substring(0, checkoutdate.indexOf("/"));
    checkoutdate = checkoutdate.substring(checkoutdate.indexOf("/") + 1, checkoutdate.length);
    outYear = checkoutdate;

    url = window.location.protocol + "//" + window.location.host + "/directhotel.asp?";

    if (lang == "JP" | lang == "CS" | lang == "CN" | lang == "KR") {
        url = url + "id=" + document.getElementById("hdnHotelID").value + "&ncl=" + "&checkin=" + inDay + "-" + inMonth + "-" + inYear;
        url = url + "&checkout=" + outDay + "-" + outMonth + "-" + outYear;
        url = url + "&lc=" + lang;
    } else {
        url = url + "id=" + document.getElementById("hdnHotelID").value + "&ncl=" + "&checkin=" + inYear + "-" + inMonth + "-" + inDay;
        url = url + "&checkout=" + outYear + "-" + outMonth + "-" + outDay;
        url = url + "&lc=" + lang;
    }
    window.location.href = url;
}



function ValidateDateSeo(type) {
    var strChkin;
    var strChkout; 
    if (type == 0) {
        strChkin = document.getElementById('Cal1').value;
        strChkout = document.getElementById('Cal2').value;
    } else {
        strChkin = document.getElementById('Cal3').value;
        strChkout = document.getElementById('Cal4').value;
    }

    if (isDate(strChkin) == false) {
        if (type == 0) {
            document.getElementById('Cal1').focus()
            return false
        } else {
            document.getElementById('Cal3').focus()
            return false
        }
    }
    if (isDate(strChkout) == false) {
        if (type == 0) { 
            document.getElementById('Cal2').focus()
            return false
        } else {
            document.getElementById('Cal4').focus()
            return false
        }
    }

    UpdateDates();
    var one_day = 1000 * 60 * 60 * 24;
    var date1 = new Date(ConvertToSysFormat(strChkin));
    var date2 = new Date(ConvertToSysFormat(strChkout));

    var dateDiff = Math.ceil((date2.getTime() - date1.getTime()) / (one_day));

    if (parseInt(dateDiff) < 1) {

        if (typeof (Common_Scripts_TravelDates_OutAfterIn) == "undefined")
            Common_Scripts_TravelDates_OutAfterIn = "Please ensure that the Check-out Date is after the Check-in Date."

        alert(Common_Scripts_TravelDates_OutAfterIn)
        return false;
    }
    var mnDate = new Date(minDate);
    minDate = new Date(mnDate.toDateString());

    if (date1 < minDate || date1 > maxDate) {
        alert("Please enter valid checkin date between " + minDate.toDateString() + " and " + maxDate.toDateString())
        return false
    }
    if (date2 < minDate2 || date2 > maxDate) {
        alert("Please enter valid checkout date between " + minDate2.toDateString() + " and " + maxDate.toDateString())
        return false
    }
    if (parseInt(dateDiff) > 25) {
        if (typeof (Common_Scripts_TravelDates_StayTooLong) == "undefined") {
            Common_Scripts_TravelDates_StayTooLong = 'Your period of stay should be not longer than 25 nights.\n\nIf you wish to book for more than 25 nights, please send us an e-mail with your request.'

        }
        alert(Common_Scripts_TravelDates_StayTooLong);
        return false;
    }
    return true
}
(function($) { $.extend($.ui, { datepicker: { version: "1.7.1"} }); var PROP_NAME = 'datepicker'; function Datepicker() { this.debug = false; this._curInst = null; this._keyEvent = false; this._disabledInputs = []; this._datepickerShowing = false; this._inDialog = false; this._mainDivId = 'ui-datepicker-div'; this._inlineClass = 'ui-datepicker-inline'; this._appendClass = 'ui-datepicker-append'; this._triggerClass = 'ui-datepicker-trigger'; this._dialogClass = 'ui-datepicker-dialog'; this._disableClass = 'ui-datepicker-disabled'; this._unselectableClass = 'ui-datepicker-unselectable'; this._currentClass = 'ui-datepicker-current-day'; this._dayOverClass = 'ui-datepicker-days-cell-over'; this.regional = []; this.regional[''] = { closeText: 'Done', prevText: 'Prev', nextText: 'Next', currentText: 'Today', monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], dateFormat: 'mm/dd/yy', firstDay: 0, isRTL: false }; this._defaults = { showOn: 'focus', showAnim: 'show', showOptions: {}, defaultDate: null, appendText: '', buttonText: '...', buttonImage: '', buttonImageOnly: false, hideIfNoPrevNext: false, navigationAsDateFormat: false, gotoCurrent: false, changeMonth: false, changeYear: false, showMonthAfterYear: false, yearRange: '-10:+10', showOtherMonths: false, calculateWeek: this.iso8601Week, shortYearCutoff: '+10', minDate: null, maxDate: null, duration: 'normal', beforeShowDay: null, beforeShow: null, onSelect: null, onChangeMonthYear: null, onClose: null, numberOfMonths: 1, showCurrentAtPos: 0, stepMonths: 1, stepBigMonths: 12, altField: '', altFormat: '', constrainInput: true, showButtonPanel: false, customTriggerElementID: null }; $.extend(this._defaults, this.regional['']); this.dpDiv = $('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>') } $.extend(Datepicker.prototype, { markerClassName: 'hasDatepicker', log: function() { if (this.debug) console.log.apply('', arguments) }, setDefaults: function(settings) { extendRemove(this._defaults, settings || {}); return this }, _attachDatepicker: function(target, settings) { var inlineSettings = null; for (var attrName in this._defaults) { var attrValue = target.getAttribute('date:' + attrName); if (attrValue) { inlineSettings = inlineSettings || {}; try { inlineSettings[attrName] = eval(attrValue) } catch (err) { inlineSettings[attrName] = attrValue } } } var nodeName = target.nodeName.toLowerCase(); var inline = (nodeName == 'div' || nodeName == 'span'); if (!target.id) target.id = 'dp' + (++this.uuid); var inst = this._newInst($(target), inline); inst.settings = $.extend({}, settings || {}, inlineSettings || {}); if (nodeName == 'input') { this._connectDatepicker(target, inst) } else if (inline) { this._inlineDatepicker(target, inst) } }, _newInst: function(target, inline) { var id = target[0].id.replace(/([:\[\]\.])/g, '\\\\$1'); return { id: id, input: target, selectedDay: 0, selectedMonth: 0, selectedYear: 0, drawMonth: 0, drawYear: 0, inline: inline, dpDiv: (!inline ? this.dpDiv : $('<div class="' + this._inlineClass + ' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))} }, _connectDatepicker: function(target, inst) { var input = $(target); inst.trigger = $([]); if (input.hasClass(this.markerClassName)) return; var appendText = this._get(inst, 'appendText'); var isRTL = this._get(inst, 'isRTL'); if (appendText) input[isRTL ? 'before' : 'after']('<span class="' + this._appendClass + '">' + appendText + '</span>'); var showOn = this._get(inst, 'showOn'); if (showOn == 'focus' || showOn == 'both') input.focus(this._showDatepicker); if (showOn == 'customclick') { input.focus(this._showDatepicker); var customTriggerElementID = this._get(inst, 'customTriggerElementID'); if (customTriggerElementID) { inst.trigger = $('#' + customTriggerElementID).addClass(this._triggerClass); inst.trigger.click(function() { if ($.datepicker._datepickerShowing && $.datepicker._lastInput == target) $.datepicker._hideDatepicker(); else $.datepicker._showDatepicker(target); return false }) } } if (showOn == 'button' || showOn == 'both') { var buttonText = this._get(inst, 'buttonText'); var buttonImage = this._get(inst, 'buttonImage'); inst.trigger = $(this._get(inst, 'buttonImageOnly') ? $('<img/>').addClass(this._triggerClass).attr({ src: buttonImage, alt: buttonText, title: buttonText }) : $('<button type="button"></button>').addClass(this._triggerClass).html(buttonImage == '' ? buttonText : $('<img/>').attr({ src: buttonImage, alt: buttonText, title: buttonText }))); input[isRTL ? 'before' : 'after'](inst.trigger); inst.trigger.click(function() { if ($.datepicker._datepickerShowing && $.datepicker._lastInput == target) $.datepicker._hideDatepicker(); else $.datepicker._showDatepicker(target); return false }) } input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker", function(event, key, value) { inst.settings[key] = value }).bind("getData.datepicker", function(event, key) { return this._get(inst, key) }); $.data(target, PROP_NAME, inst) }, _inlineDatepicker: function(target, inst) { var divSpan = $(target); if (divSpan.hasClass(this.markerClassName)) return; divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker", function(event, key, value) { inst.settings[key] = value }).bind("getData.datepicker", function(event, key) { return this._get(inst, key) }); $.data(target, PROP_NAME, inst); this._setDate(inst, this._getDefaultDate(inst)); this._updateDatepicker(inst); this._updateAlternate(inst) }, _dialogDatepicker: function(input, dateText, onSelect, settings, pos) { var inst = this._dialogInst; if (!inst) { var id = 'dp' + (++this.uuid); this._dialogInput = $('<input type="text" id="' + id + '" size="1" style="position: absolute; top: -100px;"/>'); this._dialogInput.keydown(this._doKeyDown); $('body').append(this._dialogInput); inst = this._dialogInst = this._newInst(this._dialogInput, false); inst.settings = {}; $.data(this._dialogInput[0], PROP_NAME, inst) } extendRemove(inst.settings, settings || {}); this._dialogInput.val(dateText); this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); if (!this._pos) { var browserWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; var browserHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; var scrollY = document.documentElement.scrollTop || document.body.scrollTop; this._pos = [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY] } this._dialogInput.css('left', this._pos[0] + 'px').css('top', this._pos[1] + 'px'); inst.settings.onSelect = onSelect; this._inDialog = true; this.dpDiv.addClass(this._dialogClass); this._showDatepicker(this._dialogInput[0]); if ($.blockUI) $.blockUI(this.dpDiv); $.data(this._dialogInput[0], PROP_NAME, inst); return this }, _destroyDatepicker: function(target) { var $target = $(target); var inst = $.data(target, PROP_NAME); if (!$target.hasClass(this.markerClassName)) { return } var nodeName = target.nodeName.toLowerCase(); $.removeData(target, PROP_NAME); if (nodeName == 'input') { inst.trigger.remove(); $target.siblings('.' + this._appendClass).remove().end().removeClass(this.markerClassName).unbind('focus', this._showDatepicker).unbind('keydown', this._doKeyDown).unbind('keypress', this._doKeyPress) } else if (nodeName == 'div' || nodeName == 'span') $target.removeClass(this.markerClassName).empty() }, _enableDatepicker: function(target) { var $target = $(target); var inst = $.data(target, PROP_NAME); if (!$target.hasClass(this.markerClassName)) { return } var nodeName = target.nodeName.toLowerCase(); if (nodeName == 'input') { target.disabled = false; inst.trigger.filter("button").each(function() { this.disabled = false }).end().filter("img").css({ opacity: '1.0', cursor: '' }) } else if (nodeName == 'div' || nodeName == 'span') { var inline = $target.children('.' + this._inlineClass); inline.children().removeClass('ui-state-disabled') } this._disabledInputs = $.map(this._disabledInputs, function(value) { return (value == target ? null : value) }) }, _disableDatepicker: function(target) { var $target = $(target); var inst = $.data(target, PROP_NAME); if (!$target.hasClass(this.markerClassName)) { return } var nodeName = target.nodeName.toLowerCase(); if (nodeName == 'input') { target.disabled = true; inst.trigger.filter("button").each(function() { this.disabled = true }).end().filter("img").css({ opacity: '0.5', cursor: 'default' }) } else if (nodeName == 'div' || nodeName == 'span') { var inline = $target.children('.' + this._inlineClass); inline.children().addClass('ui-state-disabled') } this._disabledInputs = $.map(this._disabledInputs, function(value) { return (value == target ? null : value) }); this._disabledInputs[this._disabledInputs.length] = target }, _isDisabledDatepicker: function(target) { if (!target) { return false } for (var i = 0; i < this._disabledInputs.length; i++) { if (this._disabledInputs[i] == target) return true } return false }, _getInst: function(target) { try { return $.data(target, PROP_NAME) } catch (err) { throw 'Missing instance data for this datepicker'; } }, _optionDatepicker: function(target, name, value) { var settings = name || {}; if (typeof name == 'string') { settings = {}; settings[name] = value } var inst = this._getInst(target); if (inst) { if (this._curInst == inst) { this._hideDatepicker(null) } extendRemove(inst.settings, settings); var date = new Date(); extendRemove(inst, { rangeStart: null, endDay: null, endMonth: null, endYear: null, selectedDay: date.getDate(), selectedMonth: date.getMonth(), selectedYear: date.getFullYear(), currentDay: date.getDate(), currentMonth: date.getMonth(), currentYear: date.getFullYear(), drawMonth: date.getMonth(), drawYear: date.getFullYear() }); this._updateDatepicker(inst) } }, _changeDatepicker: function(target, name, value) { this._optionDatepicker(target, name, value) }, _refreshDatepicker: function(target) { var inst = this._getInst(target); if (inst) { this._updateDatepicker(inst) } }, _setDateDatepicker: function(target, date, endDate) { var inst = this._getInst(target); if (inst) { this._setDate(inst, date, endDate); this._updateDatepicker(inst); this._updateAlternate(inst) } }, _getDateDatepicker: function(target) { var inst = this._getInst(target); if (inst && !inst.inline) this._setDateFromField(inst); return (inst ? this._getDate(inst) : null) }, _doKeyDown: function(event) { var inst = $.datepicker._getInst(event.target); var handled = true; var isRTL = inst.dpDiv.is('.ui-datepicker-rtl'); inst._keyEvent = true; if ($.datepicker._datepickerShowing) switch (event.keyCode) { case 9: $.datepicker._hideDatepicker(null, ''); break; case 13: var sel = $('td.' + $.datepicker._dayOverClass + ', td.' + $.datepicker._currentClass, inst.dpDiv); if (sel[0]) $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]); else $.datepicker._hideDatepicker(null, $.datepicker._get(inst, 'duration')); return false; break; case 27: $.datepicker._hideDatepicker(null, $.datepicker._get(inst, 'duration')); break; case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ? -$.datepicker._get(inst, 'stepBigMonths') : -$.datepicker._get(inst, 'stepMonths')), 'M'); break; case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ? +$.datepicker._get(inst, 'stepBigMonths') : +$.datepicker._get(inst, 'stepMonths')), 'M'); break; case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target); handled = event.ctrlKey || event.metaKey; break; case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target); handled = event.ctrlKey || event.metaKey; break; case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D'); handled = event.ctrlKey || event.metaKey; if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? -$.datepicker._get(inst, 'stepBigMonths') : -$.datepicker._get(inst, 'stepMonths')), 'M'); break; case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D'); handled = event.ctrlKey || event.metaKey; break; case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D'); handled = event.ctrlKey || event.metaKey; if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? +$.datepicker._get(inst, 'stepBigMonths') : +$.datepicker._get(inst, 'stepMonths')), 'M'); break; case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D'); handled = event.ctrlKey || event.metaKey; break; default: handled = false } else if (event.keyCode == 36 && event.ctrlKey) $.datepicker._showDatepicker(this); else { handled = false } if (handled) { event.preventDefault(); event.stopPropagation() } }, _doKeyPress: function(event) { var inst = $.datepicker._getInst(event.target); if ($.datepicker._get(inst, 'constrainInput')) { var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')); var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode); return event.ctrlKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1) } }, _showDatepicker: function(input) { input = input.target || input; if (input.nodeName.toLowerCase() != 'input') input = $('input', input.parentNode)[0]; if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) return; var inst = $.datepicker._getInst(input); var beforeShow = $.datepicker._get(inst, 'beforeShow'); extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {})); $.datepicker._hideDatepicker(null, ''); $.datepicker._lastInput = input; $.datepicker._setDateFromField(inst); if ($.datepicker._inDialog) input.value = ''; if (!$.datepicker._pos) { $.datepicker._pos = $.datepicker._findPos(input); $.datepicker._pos[1] += input.offsetHeight } var isFixed = false; $(input).parents().each(function() { isFixed |= $(this).css('position') == 'fixed'; return !isFixed }); if (isFixed && $.browser.opera) { $.datepicker._pos[0] -= document.documentElement.scrollLeft; $.datepicker._pos[1] -= document.documentElement.scrollTop } var offset = { left: $.datepicker._pos[0], top: $.datepicker._pos[1] }; $.datepicker._pos = null; inst.rangeStart = null; inst.dpDiv.css({ position: 'absolute', display: 'block', top: '-1000px' }); $.datepicker._updateDatepicker(inst); offset = $.datepicker._checkOffset(inst, offset, isFixed); inst.dpDiv.css({ position: ($.datepicker._inDialog && $.blockUI ? 'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none', left: offset.left + 'px', top: offset.top + 'px' }); if (!inst.inline) { var showAnim = $.datepicker._get(inst, 'showAnim') || 'show'; var duration = $.datepicker._get(inst, 'duration'); var postProcess = function() { $.datepicker._datepickerShowing = true; if ($.browser.msie && parseInt($.browser.version, 10) < 7) $('iframe.ui-datepicker-cover').css({ width: inst.dpDiv.width() + 4, height: inst.dpDiv.height() + 4 }) }; if ($.effects && $.effects[showAnim]) inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); else inst.dpDiv[showAnim](duration, postProcess); if (duration == '') postProcess(); if (inst.input[0].type != 'hidden') inst.input[0].focus(); $.datepicker._curInst = inst } }, _updateDatepicker: function(inst) { var dims = { width: inst.dpDiv.width() + 4, height: inst.dpDiv.height() + 4 }; var self = this; inst.dpDiv.empty().append(this._generateHTML(inst)).find('iframe.ui-datepicker-cover').css({ width: dims.width, height: dims.height }).end().find('button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a').bind('mouseout', function() { $(this).removeClass('ui-state-hover'); if (this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover'); if (this.className.indexOf('ui-datepicker-next') != -1) $(this).removeClass('ui-datepicker-next-hover') }).bind('mouseover', function() { if (!self._isDisabledDatepicker(inst.inline ? inst.dpDiv.parent()[0] : inst.input[0])) { $(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover'); $(this).addClass('ui-state-hover'); if (this.className.indexOf('ui-datepicker-prev') != -1) $(this).addClass('ui-datepicker-prev-hover'); if (this.className.indexOf('ui-datepicker-next') != -1) $(this).addClass('ui-datepicker-next-hover') } }).end().find('.' + this._dayOverClass + ' a').trigger('mouseover').end(); var numMonths = this._getNumberOfMonths(inst); var cols = numMonths[1]; var width = 17; if (cols > 1) { if (window.navigator.userAgent.indexOf("MSIE") > -1 && window.navigator.userAgent.indexOf("8.0") == -1) { inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', '360px') } else { inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', 'auto') } } else { inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width('') } inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') + 'Class']('ui-datepicker-multi'); inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') + 'Class']('ui-datepicker-rtl'); if (inst.input && inst.input[0].type != 'hidden' && inst == $.datepicker._curInst) $(inst.input[0]).focus() }, _checkOffset: function(inst, offset, isFixed) { var dpWidth = inst.dpDiv.outerWidth(); var dpHeight = inst.dpDiv.outerHeight(); var inputWidth = inst.input ? inst.input.outerWidth() : 0; var inputHeight = inst.input ? inst.input.outerHeight() : 0; var viewWidth = (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) + $(document).scrollLeft(); var viewHeight = (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight) + $(document).scrollTop(); offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0); offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0; offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0; offset.left -= (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? Math.abs(offset.left + dpWidth - viewWidth) : 0; offset.top -= (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? Math.abs(offset.top + dpHeight + inputHeight * 2 - viewHeight) : 0; return offset }, _findPos: function(obj) { while (obj && (obj.type == 'hidden' || obj.nodeType != 1)) { obj = obj.nextSibling } var position = $(obj).offset(); return [position.left, position.top] }, _hideDatepicker: function(input, duration) { var inst = this._curInst; if (!inst || (input && inst != $.data(input, PROP_NAME))) return; if (inst.stayOpen) this._selectDate('#' + inst.id, this._formatDate(inst, inst.currentDay, inst.currentMonth, inst.currentYear)); inst.stayOpen = false; if (this._datepickerShowing) { duration = (duration != null ? duration : this._get(inst, 'duration')); var showAnim = this._get(inst, 'showAnim'); var postProcess = function() { $.datepicker._tidyDialog(inst) }; if (duration != '' && $.effects && $.effects[showAnim]) inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); else inst.dpDiv[(duration == '' ? 'hide' : (showAnim == 'slideDown' ? 'slideUp' : (showAnim == 'fadeIn' ? 'fadeOut' : 'hide')))](duration, postProcess); if (duration == '') this._tidyDialog(inst); var onClose = this._get(inst, 'onClose'); if (onClose) onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ''), inst]); this._datepickerShowing = false; this._lastInput = null; if (this._inDialog) { this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' }); if ($.blockUI) { $.unblockUI(); $('body').append(this.dpDiv) } } this._inDialog = false } this._curInst = null }, _tidyDialog: function(inst) { inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar') }, _checkExternalClick: function(event) { if (!$.datepicker._curInst) return; var $target = $(event.target); if (($target.parents('#' + $.datepicker._mainDivId).length == 0) && !$target.hasClass($.datepicker.markerClassName) && !$target.hasClass($.datepicker._triggerClass) && $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI)) $.datepicker._hideDatepicker(null, '') }, _adjustDate: function(id, offset, period) { var target = $(id); var inst = this._getInst(target[0]); if (this._isDisabledDatepicker(target[0])) { return } this._adjustInstDate(inst, offset + (period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), period); this._updateDatepicker(inst) }, _gotoToday: function(id) { var target = $(id); var inst = this._getInst(target[0]); if (this._get(inst, 'gotoCurrent') && inst.currentDay) { inst.selectedDay = inst.currentDay; inst.drawMonth = inst.selectedMonth = inst.currentMonth; inst.drawYear = inst.selectedYear = inst.currentYear } else { var date = new Date(); inst.selectedDay = date.getDate(); inst.drawMonth = inst.selectedMonth = date.getMonth(); inst.drawYear = inst.selectedYear = date.getFullYear() } this._notifyChange(inst); this._adjustDate(target) }, _selectMonthYear: function(id, select, period) { var target = $(id); var inst = this._getInst(target[0]); inst._selectingMonthYear = false; inst['selected' + (period == 'M' ? 'Month' : 'Year')] = inst['draw' + (period == 'M' ? 'Month' : 'Year')] = parseInt(select.options[select.selectedIndex].value, 10); this._notifyChange(inst); this._adjustDate(target) }, _clickMonthYear: function(id) { var target = $(id); var inst = this._getInst(target[0]); if (inst.input && inst._selectingMonthYear && !$.browser.msie) inst.input[0].focus(); inst._selectingMonthYear = !inst._selectingMonthYear }, _selectDay: function(id, month, year, td) { var target = $(id); if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) { return } var inst = this._getInst(target[0]); inst.selectedDay = inst.currentDay = $('a', td).html(); inst.selectedMonth = inst.currentMonth = month; inst.selectedYear = inst.currentYear = year; if (inst.stayOpen) { inst.endDay = inst.endMonth = inst.endYear = null } this._selectDate(id, this._formatDate(inst, inst.currentDay, inst.currentMonth, inst.currentYear)); if (inst.stayOpen) { inst.rangeStart = this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)); this._updateDatepicker(inst) } }, _clearDate: function(id) { var target = $(id); var inst = this._getInst(target[0]); inst.stayOpen = false; inst.endDay = inst.endMonth = inst.endYear = inst.rangeStart = null; this._selectDate(target, '') }, _selectDate: function(id, dateStr) { var target = $(id); var inst = this._getInst(target[0]); dateStr = (dateStr != null ? dateStr : this._formatDate(inst)); if (inst.input) inst.input.val(dateStr); this._updateAlternate(inst); var onSelect = this._get(inst, 'onSelect'); if (onSelect) onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); else if (inst.input) inst.input.trigger('change'); if (inst.inline) this._updateDatepicker(inst); else if (!inst.stayOpen) { this._hideDatepicker(null, this._get(inst, 'duration')); this._lastInput = inst.input[0]; if (typeof (inst.input[0]) != 'object') inst.input[0].focus(); this._lastInput = null } }, _updateAlternate: function(inst) { var altField = this._get(inst, 'altField'); if (altField) { var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat'); var date = this._getDate(inst); dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst)); $(altField).each(function() { $(this).val(dateStr) }) } }, noWeekends: function(date) { var day = date.getDay(); return [(day > 0 && day < 6), ''] }, iso8601Week: function(date) { var checkDate = new Date(date.getFullYear(), date.getMonth(), date.getDate()); var firstMon = new Date(checkDate.getFullYear(), 1 - 1, 4); var firstDay = firstMon.getDay() || 7; firstMon.setDate(firstMon.getDate() + 1 - firstDay); if (firstDay < 4 && checkDate < firstMon) { checkDate.setDate(checkDate.getDate() - 3); return $.datepicker.iso8601Week(checkDate) } else if (checkDate > new Date(checkDate.getFullYear(), 12 - 1, 28)) { firstDay = new Date(checkDate.getFullYear() + 1, 1 - 1, 4).getDay() || 7; if (firstDay > 4 && (checkDate.getDay() || 7) < firstDay - 3) { return 1 } } return Math.floor(((checkDate - firstMon) / 86400000) / 7) + 1 }, parseDate: function(format, value, settings) { if (format == null || value == null) throw 'Invalid arguments'; value = (typeof value == 'object' ? value.toString() : value + ''); if (value == '') return null; var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff; var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; var year = -1; var month = -1; var day = -1; var doy = -1; var literal = false; var lookAhead = function(match) { var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); if (matches) iFormat++; return matches }; var getNumber = function(match) { lookAhead(match); var origSize = (match == '@' ? 14 : (match == 'y' ? 4 : (match == 'o' ? 3 : 2))); var size = origSize; var num = 0; while (size > 0 && iValue < value.length && value.charAt(iValue) >= '0' && value.charAt(iValue) <= '9') { num = num * 10 + parseInt(value.charAt(iValue++), 10); size-- } if (size == origSize) throw 'Missing number at position ' + iValue; return num }; var getName = function(match, shortNames, longNames) { var names = (lookAhead(match) ? longNames : shortNames); var size = 0; for (var j = 0; j < names.length; j++) size = Math.max(size, names[j].length); var name = ''; var iInit = iValue; while (size > 0 && iValue < value.length) { name += value.charAt(iValue++); for (var i = 0; i < names.length; i++) if (name == names[i]) return i + 1; size-- } throw 'Unknown name at position ' + iInit; }; var checkLiteral = function() { if (value.charAt(iValue) != format.charAt(iFormat)) throw 'Unexpected literal at position ' + iValue; iValue++ }; var iValue = 0; for (var iFormat = 0; iFormat < format.length; iFormat++) { if (literal) if (format.charAt(iFormat) == "'" && !lookAhead("'")) literal = false; else checkLiteral(); else switch (format.charAt(iFormat)) { case 'd': day = getNumber('d'); break; case 'D': getName('D', dayNamesShort, dayNames); break; case 'o': doy = getNumber('o'); break; case 'm': month = getNumber('m'); break; case 'M': month = getName('M', monthNamesShort, monthNames); break; case 'y': year = getNumber('y'); break; case '@': var date = new Date(getNumber('@')); year = date.getFullYear(); month = date.getMonth() + 1; day = date.getDate(); break; case "'": if (lookAhead("'")) checkLiteral(); else literal = true; break; default: checkLiteral() } } if (year == -1) year = new Date().getFullYear(); else if (year < 100) year += new Date().getFullYear() - new Date().getFullYear() % 100 + (year <= shortYearCutoff ? 0 : -100); if (doy > -1) { month = 1; day = doy; do { var dim = this._getDaysInMonth(year, month - 1); if (day <= dim) break; month++; day -= dim } while (true) } var date = this._daylightSavingAdjust(new Date(year, month - 1, day)); if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day) throw 'Invalid date'; return date }, ATOM: 'yy-mm-dd', COOKIE: 'D, dd M yy', ISO_8601: 'yy-mm-dd', RFC_822: 'D, d M y', RFC_850: 'DD, dd-M-y', RFC_1036: 'D, d M y', RFC_1123: 'D, d M yy', RFC_2822: 'D, d M yy', RSS: 'D, d M y', TIMESTAMP: '@', W3C: 'yy-mm-dd', formatDate: function(format, date, settings) { if (!date) return ''; var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; var lookAhead = function(match) { var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); if (matches) iFormat++; return matches }; var formatNumber = function(match, value, len) { var num = '' + value; if (lookAhead(match)) while (num.length < len) num = '0' + num; return num }; var formatName = function(match, value, shortNames, longNames) { return (lookAhead(match) ? longNames[value] : shortNames[value]) }; var output = ''; var literal = false; if (date) for (var iFormat = 0; iFormat < format.length; iFormat++) { if (literal) if (format.charAt(iFormat) == "'" && !lookAhead("'")) literal = false; else output += format.charAt(iFormat); else switch (format.charAt(iFormat)) { case 'd': output += formatNumber('d', date.getDate(), 2); break; case 'D': output += formatName('D', date.getDay(), dayNamesShort, dayNames); break; case 'o': var doy = date.getDate(); for (var m = date.getMonth() - 1; m >= 0; m--) doy += this._getDaysInMonth(date.getFullYear(), m); output += formatNumber('o', doy, 3); break; case 'm': output += formatNumber('m', date.getMonth() + 1, 2); break; case 'M': output += formatName('M', date.getMonth(), monthNamesShort, monthNames); break; case 'y': output += (lookAhead('y') ? date.getFullYear() : (date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100); break; case '@': output += date.getTime(); break; case "'": if (lookAhead("'")) output += "'"; else literal = true; break; default: output += format.charAt(iFormat) } } return output }, _possibleChars: function(format) { var chars = ''; var literal = false; for (var iFormat = 0; iFormat < format.length; iFormat++) if (literal) if (format.charAt(iFormat) == "'" && !lookAhead("'")) literal = false; else chars += format.charAt(iFormat); else switch (format.charAt(iFormat)) { case 'd': case 'm': case 'y': case '@': chars += '0123456789'; break; case 'D': case 'M': return null; case "'": if (lookAhead("'")) chars += "'"; else literal = true; break; default: chars += format.charAt(iFormat) } return chars }, _get: function(inst, name) { return inst.settings[name] !== undefined ? inst.settings[name] : this._defaults[name] }, _setDateFromField: function(inst) { var dateFormat = this._get(inst, 'dateFormat'); var dates = inst.input ? inst.input.val() : null; inst.endDay = inst.endMonth = inst.endYear = null; var date = defaultDate = this._getDefaultDate(inst); var settings = this._getFormatConfig(inst); try { date = this.parseDate(dateFormat, dates, settings) || defaultDate } catch (event) { this.log(event); date = defaultDate } var maxDate = this._get(inst, 'maxDate'); if (date > maxDate) date = defaultDate; inst.selectedDay = date.getDate(); inst.drawMonth = inst.selectedMonth = date.getMonth(); inst.drawYear = inst.selectedYear = date.getFullYear(); inst.currentDay = (dates ? date.getDate() : 0); inst.currentMonth = (dates ? date.getMonth() : 0); inst.currentYear = (dates ? date.getFullYear() : 0); this._adjustInstDate(inst) }, _getDefaultDate: function(inst) { var date = this._determineDate(this._get(inst, 'defaultDate'), new Date()); var minDate = this._getMinMaxDate(inst, 'min', true); var maxDate = this._getMinMaxDate(inst, 'max'); date = (minDate && date < minDate ? minDate : date); date = (maxDate && date > maxDate ? maxDate : date); return date }, _determineDate: function(date, defaultDate) { var offsetNumeric = function(offset) { var date = new Date(); date.setDate(date.getDate() + offset); return date }; var offsetString = function(offset, getDaysInMonth) { var date = new Date(); var year = date.getFullYear(); var month = date.getMonth(); var day = date.getDate(); var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g; var matches = pattern.exec(offset); while (matches) { switch (matches[2] || 'd') { case 'd': case 'D': day += parseInt(matches[1], 10); break; case 'w': case 'W': day += parseInt(matches[1], 10) * 7; break; case 'm': case 'M': month += parseInt(matches[1], 10); day = Math.min(day, getDaysInMonth(year, month)); break; case 'y': case 'Y': year += parseInt(matches[1], 10); day = Math.min(day, getDaysInMonth(year, month)); break } matches = pattern.exec(offset) } return new Date(year, month, day) }; date = (date == null ? defaultDate : (typeof date == 'string' ? offsetString(date, this._getDaysInMonth) : (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : date))); date = (date && date.toString() == 'Invalid Date' ? defaultDate : date); if (date) { date.setHours(0); date.setMinutes(0); date.setSeconds(0); date.setMilliseconds(0) } return this._daylightSavingAdjust(date) }, _daylightSavingAdjust: function(date) { if (!date) return null; date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); return date }, _setDate: function(inst, date, endDate) { var clear = !(date); var origMonth = inst.selectedMonth; var origYear = inst.selectedYear; date = this._determineDate(date, new Date()); inst.selectedDay = inst.currentDay = date.getDate(); inst.drawMonth = inst.selectedMonth = inst.currentMonth = date.getMonth(); inst.drawYear = inst.selectedYear = inst.currentYear = date.getFullYear(); if (origMonth != inst.selectedMonth || origYear != inst.selectedYear) this._notifyChange(inst); this._adjustInstDate(inst); if (inst.input) { inst.input.val(clear ? '' : this._formatDate(inst)) } }, _getDate: function(inst) { var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null : this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); return startDate }, _generateHTML: function(inst) { var today = new Date(); today = this._daylightSavingAdjust(new Date(today.getFullYear(), today.getMonth(), today.getDate())); var isRTL = this._get(inst, 'isRTL'); var showButtonPanel = this._get(inst, 'showButtonPanel'); var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext'); var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat'); var numMonths = this._getNumberOfMonths(inst); var showCurrentAtPos = this._get(inst, 'showCurrentAtPos'); var stepMonths = this._get(inst, 'stepMonths'); var stepBigMonths = this._get(inst, 'stepBigMonths'); var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1); var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) : new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); var minDate = this._getMinMaxDate(inst, 'min', true); var maxDate = this._getMinMaxDate(inst, 'max'); var drawMonth = inst.drawMonth - showCurrentAtPos; var drawYear = inst.drawYear; if (drawMonth < 0) { drawMonth += 12; drawYear-- } if (maxDate) { var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), maxDate.getMonth() - numMonths[1] + 1, maxDate.getDate())); maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw); while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) { drawMonth--; if (drawMonth < 0) { drawMonth = 11; drawYear-- } } } inst.drawMonth = drawMonth; inst.drawYear = drawYear; var prevText = this._get(inst, 'prevText'); prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), this._getFormatConfig(inst))); var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? '<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#' + inst.id + '\', -' + stepMonths + ', \'M\');"' + ' title="' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>' : (hideIfNoPrevNext ? '' : '<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>')); var nextText = this._get(inst, 'nextText'); nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), this._getFormatConfig(inst))); var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? '<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#' + inst.id + '\', +' + stepMonths + ', \'M\');"' + ' title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>' : (hideIfNoPrevNext ? '' : '<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>')); var currentText = this._get(inst, 'currentText'); var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today); currentText = (!navigationAsDateFormat ? currentText : this.formatDate(currentText, gotoDate, this._getFormatConfig(inst))); var controls = (!inst.inline ? '<div class="hc_close_hold"><a  class="hc_close" onclick="DP_jQuery.datepicker._hideDatepicker();">' + this._get(inst, 'closeText') + '</a></div>' : ''); var buttonPanel = (showButtonPanel) ? '<div class="ui-datepicker-buttonpane ui-widget-content">' + (isRTL ? controls : '') + (this._isInRange(inst, gotoDate) ? '' : '') + (isRTL ? '' : controls) + '</div>' : ''; var firstDay = parseInt(this._get(inst, 'firstDay'), 10); firstDay = (isNaN(firstDay) ? 0 : firstDay); var dayNames = this._get(inst, 'dayNames'); var dayNamesShort = this._get(inst, 'dayNamesShort'); var dayNamesMin = this._get(inst, 'dayNamesMin'); var monthNames = this._get(inst, 'monthNames'); var monthNamesShort = this._get(inst, 'monthNamesShort'); var beforeShowDay = this._get(inst, 'beforeShowDay'); var showOtherMonths = this._get(inst, 'showOtherMonths'); var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week; var endDate = inst.endDay ? this._daylightSavingAdjust(new Date(inst.endYear, inst.endMonth, inst.endDay)) : currentDate; var defaultDate = this._getDefaultDate(inst); var html = ''; for (var row = 0; row < numMonths[0]; row++) { var group = ''; for (var col = 0; col < numMonths[1]; col++) { var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)); var cornerClass = ' ui-corner-all'; var calender = ''; if (isMultiMonth) { calender += '<div class="ui-datepicker-group ui-datepicker-group-'; switch (col) { case 0: calender += 'first'; cornerClass = ' ui-corner-' + (isRTL ? 'right' : 'left'); break; case numMonths[1] - 1: calender += 'last'; cornerClass = ' ui-corner-' + (isRTL ? 'left' : 'right'); break; default: calender += 'middle'; cornerClass = ''; break } calender += '">' } calender += '<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix' + cornerClass + '">' + (/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') + (/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') + this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, selectedDate, row > 0 || col > 0, monthNames, monthNamesShort) + '</div><table class="ui-datepicker-calendar"><thead>' + '<tr>'; var thead = ''; for (var dow = 0; dow < 7; dow++) { var day = (dow + firstDay) % 7; thead += '<th' + ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' + '<span title="' + dayNames[day] + '">' + dayNamesMin[day] + '</span></th>' } calender += thead + '</tr></thead><tbody>'; var daysInMonth = this._getDaysInMonth(drawYear, drawMonth); if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth) inst.selectedDay = Math.min(inst.selectedDay, daysInMonth); var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; var numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)); for (var dRow = 0; dRow < numRows; dRow++) { calender += '<tr>'; var tbody = ''; for (var dow = 0; dow < 7; dow++) { var daySettings = (beforeShowDay ? beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']); var otherMonth = (printDate.getMonth() != drawMonth); var unselectable = otherMonth || !daySettings[0] || (minDate && printDate < minDate) || (maxDate && printDate > maxDate); tbody += '<td class="' + ((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end' : '') + (otherMonth ? ' ui-datepicker-other-month' : '') + ((printDate.getTime() == selectedDate.getTime() && drawMonth == inst.selectedMonth && inst._keyEvent) || (defaultDate.getTime() == printDate.getTime() && defaultDate.getTime() == selectedDate.getTime()) ? ' ' + this._dayOverClass : '') + (unselectable ? ' ' + this._unselectableClass + ' ui-state-disabled' : '') + (otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + (printDate.getTime() >= currentDate.getTime() && printDate.getTime() <= endDate.getTime() ? ' ' + this._currentClass : '') + (printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '"' + ((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') + (unselectable ? '' : ' onclick="DP_jQuery.datepicker._selectDay(\'#' + inst.id + '\',' + drawMonth + ',' + drawYear + ', this);return false;"') + '>' + (otherMonth ? (showOtherMonths ? printDate.getDate() : '&#xa0;') : (unselectable ? '<span class="ui-state-default">' + printDate.getDate() + '</span>' : '<a class="ui-state-default' + (printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') + (printDate.getTime() >= currentDate.getTime() && printDate.getTime() <= endDate.getTime() ? ' ui-state-active' : '') + '" href="#">' + printDate.getDate() + '</a>')) + '</td>'; printDate.setDate(printDate.getDate() + 1); printDate = this._daylightSavingAdjust(printDate) } calender += tbody + '</tr>' } drawMonth++; if (drawMonth > 11) { drawMonth = 0; drawYear++ } calender += '</tbody></table>' + (isMultiMonth ? '</div>' + ((numMonths[0] > 0 && col == numMonths[1] - 1) ? '<div class="ui-datepicker-row-break"></div>' : '') : ''); group += calender } html += group } html += buttonPanel + ($.browser.msie && parseInt($.browser.version, 10) < 7 && !inst.inline ? '<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>' : ''); inst._keyEvent = false; return html }, _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, selectedDate, secondary, monthNames, monthNamesShort) { minDate = (inst.rangeStart && minDate && selectedDate < minDate ? selectedDate : minDate); var changeMonth = this._get(inst, 'changeMonth'); var changeYear = this._get(inst, 'changeYear'); var showMonthAfterYear = this._get(inst, 'showMonthAfterYear'); var html = '<div class="ui-datepicker-title">'; var monthHtml = ''; if (secondary || !changeMonth) monthHtml += '<span class="ui-datepicker-month">' + monthNames[drawMonth] + '</span> '; else { var inMinYear = (minDate && minDate.getFullYear() == drawYear); var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); monthHtml += '<select class="ui-datepicker-month" ' + 'onchange="DP_jQuery.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'M\');" ' + 'onclick="DP_jQuery.datepicker._clickMonthYear(\'#' + inst.id + '\');"' + '>'; for (var month = 0; month < 12; month++) { if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) monthHtml += '<option value="' + month + '"' + (month == drawMonth ? ' selected="selected"' : '') + '>' + monthNamesShort[month] + '</option>' } monthHtml += '</select>' } if (!showMonthAfterYear) html += monthHtml + ((secondary || changeMonth || changeYear) && (!(changeMonth && changeYear)) ? '&#xa0;' : ''); if (secondary || !changeYear) html += '<span class="ui-datepicker-year">' + drawYear + '</span>'; else { var years = this._get(inst, 'yearRange').split(':'); var year = 0; var endYear = 0; if (years.length != 2) { year = drawYear - 10; endYear = drawYear + 10 } else if (years[0].charAt(0) == '+' || years[0].charAt(0) == '-') { year = drawYear + parseInt(years[0], 10); endYear = drawYear + parseInt(years[1], 10) } else { year = parseInt(years[0], 10); endYear = parseInt(years[1], 10) } year = (minDate ? Math.max(year, minDate.getFullYear()) : year); endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); html += '<select class="ui-datepicker-year" ' + 'onchange="DP_jQuery.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'Y\');" ' + 'onclick="DP_jQuery.datepicker._clickMonthYear(\'#' + inst.id + '\');"' + '>'; for (; year <= endYear; year++) { html += '<option value="' + year + '"' + (year == drawYear ? ' selected="selected"' : '') + '>' + year + '</option>' } html += '</select>' } if (showMonthAfterYear) html += (secondary || changeMonth || changeYear ? '&#xa0;' : '') + monthHtml; html += '</div>'; return html }, _adjustInstDate: function(inst, offset, period) { var year = inst.drawYear + (period == 'Y' ? offset : 0); var month = inst.drawMonth + (period == 'M' ? offset : 0); var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period == 'D' ? offset : 0); var date = this._daylightSavingAdjust(new Date(year, month, day)); var minDate = this._getMinMaxDate(inst, 'min', true); var maxDate = this._getMinMaxDate(inst, 'max'); date = (minDate && date < minDate ? minDate : date); date = (maxDate && date > maxDate ? maxDate : date); inst.selectedDay = date.getDate(); inst.drawMonth = inst.selectedMonth = date.getMonth(); inst.drawYear = inst.selectedYear = date.getFullYear(); if (period == 'M' || period == 'Y') this._notifyChange(inst) }, _notifyChange: function(inst) { var onChange = this._get(inst, 'onChangeMonthYear'); if (onChange) onChange.apply((inst.input ? inst.input[0] : null), [inst.selectedYear, inst.selectedMonth + 1, inst]) }, _getNumberOfMonths: function(inst) { var numMonths = this._get(inst, 'numberOfMonths'); return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)) }, _getMinMaxDate: function(inst, minMax, checkRange) { var date = this._determineDate(this._get(inst, minMax + 'Date'), null); return (!checkRange || !inst.rangeStart ? date : (!date || inst.rangeStart > date ? inst.rangeStart : date)) }, _getDaysInMonth: function(year, month) { return 32 - new Date(year, month, 32).getDate() }, _getFirstDayOfMonth: function(year, month) { return new Date(year, month, 1).getDay() }, _canAdjustMonth: function(inst, offset, curYear, curMonth) { var numMonths = this._getNumberOfMonths(inst); var date = this._daylightSavingAdjust(new Date(curYear, curMonth + (offset < 0 ? offset : numMonths[1]), 1)); if (offset < 0) date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); return this._isInRange(inst, date) }, _isInRange: function(inst, date) { var newMinDate = (!inst.rangeStart ? null : this._daylightSavingAdjust(new Date(inst.selectedYear, inst.selectedMonth, inst.selectedDay))); newMinDate = (newMinDate && inst.rangeStart < newMinDate ? inst.rangeStart : newMinDate); var minDate = newMinDate || this._getMinMaxDate(inst, 'min'); var maxDate = this._getMinMaxDate(inst, 'max'); return ((!minDate || date >= minDate) && (!maxDate || date <= maxDate)) }, _getFormatConfig: function(inst) { var shortYearCutoff = this._get(inst, 'shortYearCutoff'); shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); return { shortYearCutoff: shortYearCutoff, dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'), monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')} }, _formatDate: function(inst, day, month, year) { if (!day) { inst.currentDay = inst.selectedDay; inst.currentMonth = inst.selectedMonth; inst.currentYear = inst.selectedYear } var date = (day ? (typeof day == 'object' ? day : this._daylightSavingAdjust(new Date(year, month, day))) : this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst)) } }); function extendRemove(target, props) { $.extend(target, props); for (var name in props) if (props[name] == null || props[name] == undefined) target[name] = props[name]; return target }; function isArray(a) { return (a && (($.browser.safari && typeof a == 'object' && a.length) || (a.constructor && a.constructor.toString().match(/\Array\(\)/)))) }; $.fn.datepicker = function(options) { if (!$.datepicker.initialized) { $(document).mousedown($.datepicker._checkExternalClick).find('body').append($.datepicker.dpDiv); $.datepicker.initialized = true } var otherArgs = Array.prototype.slice.call(arguments, 1); if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate')) return $.datepicker['_' + options + 'Datepicker'].apply($.datepicker, [this[0]].concat(otherArgs)); return this.each(function() { typeof options == 'string' ? $.datepicker['_' + options + 'Datepicker'].apply($.datepicker, [this].concat(otherArgs)) : $.datepicker._attachDatepicker(this, options) }) }; $.datepicker = new Datepicker(); $.datepicker.initialized = false; $.datepicker.uuid = new Date().getTime(); $.datepicker.version = "1.7.1"; window.DP_jQuery = $ })(jQuery);var dtCh = "/";
function RedefineDate(DateValue) {
    if (DateValue == "") return "";
    var RefinedDate = DateValue;
    var dateSplits = DateValue.split(GetDateSeperator());
    var ddmmyyyyReg = /\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}/
    var yyyymmddReg = /\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}/
    var strMonth;
    var strDay;
    var strYear;
   
    if (ddmmyyyyReg.test(DateValue)) {
        strDay = dateSplits[0];
        strMonth = dateSplits[1];
        strYear = dateSplits[2];
    }
    else if (yyyymmddReg.test(DateValue)) {
        strDay = dateSplits[2];
        strMonth = dateSplits[1];
        strYear = dateSplits[0];
    }
    var dfmt = GetDateFormat();
    if (dfmt == "dd/mm/yyyy") {
        RefinedDate = strDay + GetDateSeperator() + strMonth + GetDateSeperator() + strYear;
    }
    else if (dfmt == "yyyy/mm/dd") {
        RefinedDate = strYear + GetDateSeperator() + strMonth + GetDateSeperator() + strDay;
    }
    return RefinedDate;
}
function isInteger(s) {
    var i;
    for (i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    return true;
}
function GetDateFormat() {
    if (typeof (window['calDateFormat']) != 'undefined') {
        if (calDateFormat == "yyyy/mm/dd")
            return "yyyy/mm/dd";
        else if (calDateFormat == "dd/mm/yyyy")
            return "dd/mm/yyyy";
    }
    else {
        return "dd/mm/yyyy";
    }
}
function GetDateSeperator() { return dtCh; }
function stripCharsInBag(s, bag) {
    var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function GetDateDiff(Date1, Date2) {
    var one_day = 1000 * 60 * 60 * 24;
    var startDate = new Date(ConvertToSysFormat(Date1));
    var endDate = new Date(ConvertToSysFormat(Date2));
    _Diff = Math.round((endDate.getTime() - startDate.getTime()) / (one_day));
    return _Diff;
}

function ResetDate(InOut, Date1, Date2) {
    var checkinDate = new Date(Date1);
    var checkoutDate = new Date(Date2);
    var checkDate, incremet
    if (InOut == "in") {
        checkDate = checkoutDate
        incremet = -1
    } else {
        checkDate = checkinDate
        incremet = 2
    }
    if (checkinDate >= checkoutDate) {
        var newDate = new Date(checkDate.getFullYear(), checkDate.getMonth(), checkDate.getDate() + incremet)
        SetDateVal(newDate.getFullYear(), newDate.getMonth() + 1, newDate.getDate(), InOut)
    }
}

function SetDateVal(year, month, varday, inOut) {
    var dfmt = GetDateFormat();
    if (month.toString.length < 2) month = "0" + month
    if (varday.toString.length < 2) varday = "0" + varday

    if (inOut == "in") {
        if (dfmt == "dd/mm/yyyy") {
            document.getElementById("Cal1").value = varday + GetDateSeperator() + month + GetDateSeperator() + year;
        }
        else if (dfmt == "yyyy/mm/dd") {
            document.getElementById("Cal1").value = year + GetDateSeperator() + month + GetDateSeperator() + varday;
        }
    } else {
        if (dfmt == "dd/mm/yyyy") {
            document.getElementById("Cal2").value = varday + GetDateSeperator() + month + GetDateSeperator() + year;
        }
        else if (dfmt == "yyyy/mm/dd") {
            document.getElementById("Cal2").value = year + GetDateSeperator() + month + GetDateSeperator() + varday;
        }
    }
    DateDiff();
}


function DateDiff() {
    dtCheckIn = document.getElementById("Cal1").value;
    var StartDate, EndDate;
    if (dtCheckIn != "") {
        var dateSplits = dtCheckIn.split(GetDateSeperator());
        if (dateSplits.length != 3 || isDate(dtCheckIn) != true) {
            $('#Cal1').datepicker('setDate', minDate);
            dtCheckIn = document.getElementById("Cal1").value;
        }
        CheckinDayEle = document.getElementById("day1");
        StartDate = new Date(ConvertToSysFormat(dtCheckIn));
        setDay(StartDate, CheckinDayEle);

    }
    dtCheckOut = document.getElementById("Cal2").value;
    if (dtCheckOut != "") {
        var dateSplits = dtCheckOut.split(GetDateSeperator());
        if (dateSplits.length != 3 || isDate(dtCheckOut) != true) {
            $('#Cal2').datepicker('setDate', minDate2);
            dtCheckOut = document.getElementById("Cal2").value;
        }
        CheckoutDayEle = document.getElementById("day2");
        EndDate = new Date(ConvertToSysFormat(dtCheckOut));
        setDay(EndDate, CheckoutDayEle);
    }
    if (dtCheckIn != "" && dtCheckOut != "") {
        var dtDatediff = GetDateDiff(dtCheckIn, dtCheckOut);
        if (typeof (document.getElementById("hdnDateDiff")) != "undefined") {
            if (document.getElementById("hdnDateDiff") != null) {
            document.getElementById('lenStay').innerHTML = document.getElementById("hdnDateDiff").value.replace("[NumNights]", "&nbsp;" + dtDatediff + "&nbsp;");
        }
        }
        AutoUpdateCheckout(StartDate, EndDate, "up");
    }
}

function DateDiff2() {
    dtCheckIn = document.getElementById("Cal1").value;
    var StartDate, EndDate;
    if (dtCheckIn != "") {
        var dateSplits = dtCheckIn.split(GetDateSeperator());
        if (dateSplits.length != 3 || isDate(dtCheckIn) != true) {
            $('#Cal1').datepicker('setDate', minDate);
            dtCheckIn = document.getElementById("Cal1").value;
        }
        CheckinDayEle = document.getElementById("day1");
        StartDate = new Date(ConvertToSysFormat(dtCheckIn));
        setDay(StartDate, CheckinDayEle);
    }
    dtCheckOut = document.getElementById("Cal2").value;
    if (dtCheckOut != "") {
        var dateSplits = dtCheckOut.split(GetDateSeperator());
        if (dateSplits.length != 3 || isDate(dtCheckOut) != true) {
            $('#Cal2').datepicker('setDate', minDate2);
            dtCheckOut = document.getElementById("Cal2").value;
        }
        CheckoutDayEle = document.getElementById("day2");
        EndDate = new Date(ConvertToSysFormat(dtCheckOut));
        setDay(EndDate, CheckoutDayEle);
    }
    if (dtCheckIn != "" && dtCheckOut != "") {

        var dtDatediff = GetDateDiff(dtCheckIn, dtCheckOut);
        if (typeof (document.getElementById("hdnDateDiff")) != "undefined") {
            if (document.getElementById("hdnDateDiff") != null) {
            document.getElementById('lenStay').innerHTML = document.getElementById("hdnDateDiff").value.replace("[NumNights]", "&nbsp;" + dtDatediff + "&nbsp;");
            }
        }
        //document.getElementById('dateDiff').innerHTML = GetDateDiff(dtCheckIn, dtCheckOut);


        AutoUpdateCheckout(StartDate, EndDate, "down");
    }
}

function DateDiff3() {
    dtCheckIn = document.getElementById("Cal3").value;
    var StartDate, EndDate;
    if (dtCheckIn != "") {
        var dateSplits = dtCheckIn.split(GetDateSeperator());
        if (dateSplits.length != 3 || isDate(dtCheckIn) != true) {
            $('#Cal3').datepicker('setDate', minDate);
            dtCheckIn = document.getElementById("Cal3").value;
        }
        CheckinDayEle = document.getElementById("day3");
        StartDate = new Date(ConvertToSysFormat(dtCheckIn));
        setDay(StartDate, CheckinDayEle);

    }
    dtCheckOut = document.getElementById("Cal4").value;
    if (dtCheckOut != "") {
        var dateSplits = dtCheckOut.split(GetDateSeperator());
        if (dateSplits.length != 3 || isDate(dtCheckOut) != true) {
            $('#Cal4').datepicker('setDate', minDate2);
            dtCheckOut = document.getElementById("Cal4").value;
        }
        CheckoutDayEle = document.getElementById("day4");
        EndDate = new Date(ConvertToSysFormat(dtCheckOut));
        setDay(EndDate, CheckoutDayEle);
    }
    if (dtCheckIn != "" && dtCheckOut != "") {
        AutoUpdateCheckout1(StartDate, EndDate, "up");
    }
}

function DateDiff4() {
    dtCheckIn = document.getElementById("Cal3").value;
    var StartDate, EndDate;
    if (dtCheckIn != "") {
        var dateSplits = dtCheckIn.split(GetDateSeperator());
        if (dateSplits.length != 3 || isDate(dtCheckIn) != true) {
            $('#Cal3').datepicker('setDate', minDate);
            dtCheckIn = document.getElementById("Cal3").value;
        }
        CheckinDayEle = document.getElementById("day3");
        StartDate = new Date(ConvertToSysFormat(dtCheckIn));
        setDay(StartDate, CheckinDayEle);
    }
    dtCheckOut = document.getElementById("Cal4").value;
    if (dtCheckOut != "") {
        var dateSplits = dtCheckOut.split(GetDateSeperator());
        if (dateSplits.length != 3 || isDate(dtCheckOut) != true) {
            $('#Cal4').datepicker('setDate', minDate2);
            dtCheckOut = document.getElementById("Cal4").value;
        }
        CheckoutDayEle = document.getElementById("day4");
        EndDate = new Date(ConvertToSysFormat(dtCheckOut));
        setDay(EndDate, CheckoutDayEle);
    }
    if (dtCheckIn != "" && dtCheckOut != "") {
        AutoUpdateCheckout1(StartDate, EndDate, "down");
    }
}

function AutoUpdateCheckout(CheckinDate, CheckoutDate, Dir) {
    var month, day, year, dfmt;
    if (CheckoutDate.getTime() < CheckinDate.getTime() && Dir == "up") {
        CheckoutDate.setTime(CheckinDate.getTime() + oneDay * 2);

        month = CheckoutDate.getMonth() + 1; month = AddPrecedingZero(month);
        day = CheckoutDate.getDate(); day = AddPrecedingZero(day);
        year = CheckoutDate.getFullYear();

        dfmt = GetDateFormat();
        if (dfmt == "dd/mm/yyyy") {
            document.getElementById("Cal2").value = day.toString() + GetDateSeperator() + month.toString() + GetDateSeperator() + year.toString();
        }
        else if (dfmt == "yyyy/mm/dd") {
            document.getElementById("Cal2").value = year.toString() + GetDateSeperator() + month.toString() + GetDateSeperator() + day.toString();
        }
        DateDiff();
    }
    else if (CheckoutDate.getTime() < CheckinDate.getTime() && Dir == "down") {
        CheckinDate.setTime(CheckoutDate.getTime() - oneDay * 2);
        month = CheckinDate.getMonth() + 1; month = AddPrecedingZero(month);
        day = CheckinDate.getDate(); day = AddPrecedingZero(day);
        year = CheckinDate.getFullYear();

        dfmt = GetDateFormat();
        if (dfmt == "dd/mm/yyyy") {
            document.getElementById("Cal1").value = day.toString() + GetDateSeperator() + month.toString() + GetDateSeperator() + year.toString();
        }
        else if (dfmt == "yyyy/mm/dd") {
            document.getElementById("Cal1").value = year.toString() + GetDateSeperator() + month.toString() + GetDateSeperator() + day.toString();
        }
        DateDiff();
    }
}

function AutoUpdateCheckout1(CheckinDate, CheckoutDate, Dir) {
    var month, day, year, dfmt;
    if (CheckoutDate.getTime() < CheckinDate.getTime() && Dir == "up") {
        CheckoutDate.setTime(CheckinDate.getTime() + oneDay * 2);

        month = CheckoutDate.getMonth() + 1; month = AddPrecedingZero(month);
        day = CheckoutDate.getDate(); day = AddPrecedingZero(day);
        year = CheckoutDate.getFullYear();

        dfmt = GetDateFormat();
        if (dfmt == "dd/mm/yyyy") {
            document.getElementById("Cal4").value = day.toString() + GetDateSeperator() + month.toString() + GetDateSeperator() + year.toString();
        }
        else if (dfmt == "yyyy/mm/dd") {
            document.getElementById("Cal4").value = year.toString() + GetDateSeperator() + month.toString() + GetDateSeperator() + day.toString();
        }
        DateDiff3();
    }
    else if (CheckoutDate.getTime() < CheckinDate.getTime() && Dir == "down") {
        CheckinDate.setTime(CheckoutDate.getTime() - oneDay * 2);
        month = CheckinDate.getMonth() + 1; month = AddPrecedingZero(month);
        day = CheckinDate.getDate(); day = AddPrecedingZero(day);
        year = CheckinDate.getFullYear();

        dfmt = GetDateFormat();
        if (dfmt == "dd/mm/yyyy") {
            document.getElementById("Cal3").value = day.toString() + GetDateSeperator() + month.toString() + GetDateSeperator() + year.toString();
        }
        else if (dfmt == "yyyy/mm/dd") {
            document.getElementById("Cal3").value = year.toString() + GetDateSeperator() + month.toString() + GetDateSeperator() + day.toString();
        }
        DateDiff3();
    }
}

function setDay(DateInput, Control) {
    if (Control != null) {
        Control.innerHTML = arrDayNames[DateInput.getDay()];
    }
}
function AddPrecedingZero(InputString) {
    if (InputString.toString().charAt(0) != "0" && InputString.toString().length != 2) { InputString = "0" + InputString.toString(); }
    return InputString;
}
function RemovePrecedingZero(InputString) {
    if (InputString.toString().charAt(0) == "0" && InputString.toString().length == 2) { InputString = InputString.charAt(1); }
    return InputString;
}

function SetDefaultDate() {
    if (document.getElementById("Cal1") && document.getElementById("Cal2")) {
        var dtCheckIn = document.getElementById("Cal1").value;
        var dtCheckOut = document.getElementById("Cal2").value;
        var dfmt = GetDateFormat();
        if (dtCheckIn == "" || dtCheckOut == "") {
            var sDate = new Date();
            var one_day = 1000 * 60 * 60 * 24;
            sDate.setTime(sDate.getTime() + one_day * 17);

            var inDay = sDate.getDate(); inDay = AddPrecedingZero(inDay);
            var inMonth = sDate.getMonth() + 1; inMonth = AddPrecedingZero(inMonth);
            var inYear = sDate.getFullYear();

            var eDate = new Date();
            eDate.setTime(eDate.getTime() + one_day * 19);
            var outDay = eDate.getDate(); outDay = AddPrecedingZero(outDay);
            var outMonth = eDate.getMonth() + 1; outMonth = AddPrecedingZero(outMonth);
            var outYear = eDate.getFullYear();
            if (dfmt == "dd/mm/yyyy") {
                document.getElementById('Cal1').value = inDay + GetDateSeperator() + inMonth + GetDateSeperator() + inYear;
                document.getElementById('Cal2').value = outDay + GetDateSeperator() + outMonth + GetDateSeperator() + outYear;
            }
            else if (dfmt == "yyyy/mm/dd") {
                document.getElementById('Cal1').value = inYear + GetDateSeperator() + inMonth + GetDateSeperator() + inDay;
                document.getElementById('Cal2').value = outYear + GetDateSeperator() + outMonth + GetDateSeperator() + outDay
            }
        }
    }
}

function SetSeoDefaultDate() {

    var dtCheckIn = document.getElementById("Cal3").value;
    var dtCheckOut = document.getElementById("Cal4").value;
    var dfmt = GetDateFormat();

    if (dtCheckIn == "" || dtCheckOut == "") {
        var sDate = new Date();
        var one_day = 1000 * 60 * 60 * 24;
        sDate.setTime(sDate.getTime() + one_day * 17);

        var inDay = sDate.getDate(); inDay = AddPrecedingZero(inDay);
        var inMonth = sDate.getMonth() + 1; inMonth = AddPrecedingZero(inMonth);
        var inYear = sDate.getFullYear();

        var eDate = new Date();
        eDate.setTime(eDate.getTime() + one_day * 19);
        var outDay = eDate.getDate(); outDay = AddPrecedingZero(outDay);
        var outMonth = eDate.getMonth() + 1; outMonth = AddPrecedingZero(outMonth);
        var outYear = eDate.getFullYear();
        if (dfmt == "dd/mm/yyyy") {
            document.getElementById('Cal3').value = inDay + GetDateSeperator() + inMonth + GetDateSeperator() + inYear;
            document.getElementById('Cal4').value = outDay + GetDateSeperator() + outMonth + GetDateSeperator() + outYear;
        }
        else if (dfmt == "yyyy/mm/dd") {
            document.getElementById('Cal3').value = inYear + GetDateSeperator() + inMonth + GetDateSeperator() + inDay;
            document.getElementById('Cal4').value = outYear + GetDateSeperator() + outMonth + GetDateSeperator() + outDay
        }
    }
}

function initSEOCalendar() {
    SetSeoDefaultDate();
    if (document.getElementById('Cal3')) {
        document.getElementById('Cal3').value = RedefineDate(document.getElementById('Cal3').value);
        var CheckInDate = document.getElementById('Cal3').value
        var dtCheckInDate = new Date(ConvertToSysFormat(CheckInDate));
        checkInday = dtCheckInDate.getDate();
        checkInMonth = dtCheckInDate.getMonth() + 1;
        checkInyear = dtCheckInDate.getFullYear();
        setDay(dtCheckInDate, document.getElementById('day3'));
    }
    if (document.getElementById('Cal4')) {
        document.getElementById('Cal4').value = RedefineDate(document.getElementById('Cal4').value);
        var CheckOutDate = document.getElementById('Cal4').value
        var dtCheckOutDate = new Date(ConvertToSysFormat(CheckOutDate));
        checkOutday = dtCheckOutDate.getDate();
        checkOutMonth = dtCheckOutDate.getMonth() + 1;
        checkOutyear = dtCheckOutDate.getFullYear();
        setDay(dtCheckOutDate, document.getElementById('day4'));
    }
}

function initCalendar() {
    var dfmt = GetDateFormat();
    var qs = new Querystring(location.search.substr(1))
    var inDay = qs.get("inDay")
    var inMonth = qs.get("inMonth")
    var inYear = qs.get("inYear")

    var outDay = qs.get("outDay")
    var outMonth = qs.get("outMonth")
    var outYear = qs.get("outYear")

    /* added check for directhotel when the 6 variables above are not available */
    var qsCheckInDate = qs.get("checkin");
    var qsCheckOutDate = qs.get("checkout");
    if ((typeof (inDay) == 'undefined' || inDay == null) &&
        (typeof (qsCheckInDate) != 'undefined' || qsCheckInDate != null)) {
        inYear = qsCheckInDate.split("-")[0];
        inMonth = qsCheckInDate.split("-")[1].length > 1 ? qsCheckInDate.split("-")[1] : "0" + qsCheckInDate.split("-")[1];
        inDay = qsCheckInDate.split("-")[2].length > 1 ? qsCheckInDate.split("-")[2] : "0" + qsCheckInDate.split("-")[2];

        outYear = qsCheckOutDate.split("-")[0];
        outMonth = qsCheckOutDate.split("-")[1].length > 1 ? qsCheckOutDate.split("-")[1] : "0" + qsCheckOutDate.split("-")[1];
        outDay = qsCheckOutDate.split("-")[2].length > 1 ? qsCheckOutDate.split("-")[2] : "0" + qsCheckOutDate.split("-")[2];
    }

    SetDefaultDate();

    var checkInday, checkInMonth, checkInyear
    var checkOutday, checkOutMonth, checkOutyear

    if (document.getElementById('Cal1')) {
        document.getElementById('Cal1').value = RedefineDate(document.getElementById('Cal1').value);
        var CheckInDate = document.getElementById('Cal1').value
        var dtCheckInDate = new Date(ConvertToSysFormat(CheckInDate));
        checkInday = dtCheckInDate.getDate();
        checkInMonth = dtCheckInDate.getMonth() + 1;
        checkInyear = dtCheckInDate.getFullYear();
        setDay(dtCheckInDate, document.getElementById('day1'));
    }
    if (document.getElementById('Cal2')) {
        document.getElementById('Cal2').value = RedefineDate(document.getElementById('Cal2').value);
        var CheckOutDate = document.getElementById('Cal2').value
        var dtCheckOutDate = new Date(ConvertToSysFormat(CheckOutDate));
        checkOutday = dtCheckOutDate.getDate();
        checkOutMonth = dtCheckOutDate.getMonth() + 1;
        checkOutyear = dtCheckOutDate.getFullYear();
        setDay(dtCheckOutDate, document.getElementById('day2'));
    }
    /*********set month, day, year in the hidden text *******/
    if (document.getElementById('inDay')) {
        document.getElementById('inDay').value = checkInday;
        document.getElementById('inMonth').value = checkInMonth;
        document.getElementById('inYear').value = checkInyear;

        document.getElementById('outDay').value = checkOutday;
        document.getElementById('outMonth').value = checkOutMonth;
        document.getElementById('outYear').value = checkOutyear;
    }
    /*******************************************************/
    if (typeof (inDay) != 'undefined' && inDay != null && document.getElementById('inDay')) {

        document.getElementById('inDay').value = inDay;
        document.getElementById('inMonth').value = inMonth;
        document.getElementById('inYear').value = inYear;

        document.getElementById('outDay').value = outDay;
        document.getElementById('outMonth').value = outMonth;
        document.getElementById('outYear').value = outYear;

        checkInday = inDay;
        checkInMonth = inMonth;
        checkInyear = inYear;

        checkOutday = outDay;
        checkOutMonth = outMonth;
        checkOutyear = outYear;

        if (dfmt == "dd/mm/yyyy") {
            document.getElementById('Cal1').value = inDay + GetDateSeperator() + inMonth + GetDateSeperator() + inYear;
            document.getElementById('Cal2').value = outDay + GetDateSeperator() + outMonth + GetDateSeperator() + outYear;
        }
        else if (dfmt == "yyyy/mm/dd") {
            document.getElementById('Cal1').value = inYear + GetDateSeperator() + inMonth + GetDateSeperator() + inDay;
            document.getElementById('Cal2').value = outYear + GetDateSeperator() + outMonth + GetDateSeperator() + outDay
        }
        var Cal1 = inMonth + GetDateSeperator() + inDay + GetDateSeperator() + inYear;
        var chkInDate = new Date(eval('"' + Cal1 + '"'))
        setDay(chkInDate, document.getElementById('day1'));


        var Cal2 = outMonth + GetDateSeperator() + outDay + GetDateSeperator() + outYear;
        var chkOutDate = new Date(eval('"' + Cal2 + '"'))
        setDay(chkOutDate, document.getElementById('day2'));

    }
    if (document.getElementById('hdnDateDiff') != null) {
        //********Length of stay *******/////  
        /*var strDiff = document.getElementById('hdnDateDiff').value
        var actualDiffStr = document.getElementById('hdnDateDiff').value;
        strDiff = strDiff.substring(strDiff.indexOf("]") + 1, strDiff.length);
        document.getElementById('lenStay').innerHTML = "<strong>" + actualDiffStr.substring(0, actualDiffStr.indexOf("[")) + "</strong>";
        document.getElementById('spnnight').innerHTML = strDiff;
        */
        DateDiff();
    }
}

function ChangeDates() {
    if (ValidateDate() == true) {
        var qString = location.search.substr(1)

        qString = remQStringName(qString, "page")
        qString = remQStringName(qString, "rpage")

        var strCheckIn = DateFormat(strCheckIn = document.getElementById('Cal1').value)
        var strCheckOut = DateFormat(document.getElementById('Cal2').value)
        qString = remQStringName(qString, "inDay")
        qString = remQStringName(qString, "inMonth")
        qString = remQStringName(qString, "inYear")
        qString = remQStringName(qString, "outDay")
        qString = remQStringName(qString, "outMonth")
        qString = remQStringName(qString, "outYear")
        qString = remQStringName(qString, "vw")
        qString += "&" + "inDay" + "=" + document.getElementById('inDay').value
        qString += "&" + "inMonth" + "=" + document.getElementById('inMonth').value
        qString += "&" + "inYear" + "=" + document.getElementById('inYear').value
        qString += "&rpage=" + document.getElementById("rpage").value;
        var outDate = document.getElementById('outDay').value
        if (outDate.length < 2)
        { qString += "&" + "outDay" + "=0" + outDate }
        else
        { qString += "&" + "outDay" + "=" + outDate }
        qString += "&" + "outMonth" + "=" + document.getElementById('outMonth').value
        qString += "&" + "outYear" + "=" + document.getElementById('outYear').value
        qString += "&" + "vw=D"
        qString = setQStringName(qString, "Checkin", new Array(strCheckIn))
        qString = setQStringName(qString, "Checkout", new Array(strCheckOut))
        location = location.pathname + "?" + qString
    }
}

function ValidateDate() {

    var strChkin = document.getElementById('Cal1').value;
    var strChkout = document.getElementById('Cal2').value;

    if (isDate(strChkin) == false) {
        document.getElementById('Cal1').focus()
        return false
    }
    if (isDate(strChkout) == false) {
        document.getElementById('Cal2').focus()
        return false
    }

    UpdateDates();
    var one_day = 1000 * 60 * 60 * 24;
    var date1 = new Date(ConvertToSysFormat(strChkin));
    var date2 = new Date(ConvertToSysFormat(strChkout));

    var dateDiff = Math.ceil((date2.getTime() - date1.getTime()) / (one_day));

    if (parseInt(dateDiff) < 1) {

        if (typeof (Common_Scripts_TravelDates_OutAfterIn) == "undefined")
            Common_Scripts_TravelDates_OutAfterIn = "Please ensure that the Check-out Date is after the Check-in Date."

        alert(Common_Scripts_TravelDates_OutAfterIn)
        return false;
    }
    var mnDate = new Date(minDate);
    minDate = new Date(mnDate.toDateString());

    if (date1 < minDate || date1 > maxDate) {
        alert("Please enter valid checkin date between " + minDate.toDateString() + " and " + maxDate.toDateString())
        return false
    }

    var mnDate2 = new Date(minDate2);
    minDate2 = new Date(mnDate2.toDateString());
    
    if (date2 < minDate2 || date2 > maxDate) {
        alert("Please enter valid checkout date between " + minDate2.toDateString() + " and " + maxDate.toDateString())
        return false
    }
    if (parseInt(dateDiff) > 25) {
        if (typeof (Common_Scripts_TravelDates_StayTooLong) == "undefined") {
            Common_Scripts_TravelDates_StayTooLong = 'Your period of stay should be not longer than 25 nights.\n\nIf you wish to book for more than 25 nights, please send us an e-mail with your request.'

        }
        alert(Common_Scripts_TravelDates_StayTooLong);
        return false;
    }
    return true
}

function ConvertToSysFormat(dtStr) {
    var dfmt = GetDateFormat();
    var dateSplits = dtStr.split(GetDateSeperator());
    var strMonth, strDay, strYear;
    if (dfmt == "dd/mm/yyyy") {
        strDay = dateSplits[0];
        strMonth = dateSplits[1];
        strYear = dateSplits[2];
    }
    else if (dfmt == "yyyy/mm/dd") {
        strDay = dateSplits[2];
        strMonth = dateSplits[1];
        strYear = dateSplits[0];
    }
    return strMonth + GetDateSeperator() + strDay + GetDateSeperator() + strYear;
}

function DateFormat(strDate) {
    var dfmt = GetDateFormat();
    var dateSplits = strDate.split(GetDateSeperator());
    var strMonth, strDay, strYear;
    var strMonth, strDay, strYear;
    if (dfmt == "dd/mm/yyyy") {
        strDay = dateSplits[0];
        strMonth = dateSplits[1];
        strYear = dateSplits[2];
    }
    else if (dfmt == "yyyy/mm/dd") {
        strDay = dateSplits[2];
        strMonth = dateSplits[1];
        strYear = dateSplits[0];
    }
    newDate = strYear + '-' + strMonth + '-' + strDay
    return newDate
}

function isDate(dtStr) {
    var dfmt = GetDateFormat();

    var dateSplits = dtStr.split(GetDateSeperator());
    if (dateSplits.length != 3) {
        alert("Enter a valid date");
        return false;
    }
    var strMonth, strDay, strYear;
    if (dfmt == "dd/mm/yyyy") {
        strDay = dateSplits[0];
        strMonth = dateSplits[1];
        strYear = dateSplits[2];
    }
    else if (dfmt == "yyyy/mm/dd") {
        strDay = dateSplits[2];
        strMonth = dateSplits[1];
        strYear = dateSplits[0];
    }
    var daysInMonth = DaysArray(12)
    strDay = AddPrecedingZero(strDay); strMonth = AddPrecedingZero(strMonth);
    if (isInteger(strDay) != true && isInteger(strMonth) != true && isInteger(strYear) != true)
        return false;
    var month = parseInt(strMonth, 10)
    var day = parseInt(strDay, 10)
    var year = parseInt(strYear, 10)

    if (strMonth.length < 1 || month < 1 || month > 12) {
        alert("Please enter valid month")
        return false
    }
    if (strDay.length < 1 || day < 1 || day > 31 || (month == 2 && day > daysInFebruary(year)) || day > daysInMonth[month]) {
        alert("Please enter valid date")
        return false
    }
    if (strYear.length != 4 || year == 0) {
        alert("Please enter valid 4 digit year")
        return false
    }

    //    var dt = new Date(ConvertToSysFormat(dtStr));
    //    if (dt < minDate || dt > maxDate) {
    //        alert("Please enter valid date between " + minDate.toDateString() + " and " + maxDate.toDateString())
    //        return false
    //    }
    return true
}
function DaysArray(n) {
    for (var i = 1; i <= n; i++) {
        this[i] = 31
        if (i == 4 || i == 6 || i == 9 || i == 11) { this[i] = 30 }
        if (i == 2) { this[i] = 29 }
    }
    return this
}
function daysInFebruary(year) {
    // February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ((!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28);
}
function UpdateDates() {
    var dfmt = GetDateFormat();
    var CheckInDate = document.getElementById('Cal1').value
    var checkInday, checkInMonth, checkInyear
    var CheckInDateSplits = CheckInDate.split(GetDateSeperator());
    if (dfmt == "dd/mm/yyyy") {
        checkInday = CheckInDateSplits[0];
        checkInMonth = CheckInDateSplits[1];
        checkInyear = CheckInDateSplits[2];
    }
    else if (dfmt == "yyyy/mm/dd") {
        checkInday = CheckInDateSplits[2];
        checkInMonth = CheckInDateSplits[1];
        checkInyear = CheckInDateSplits[0];
    }
    checkInday = AddPrecedingZero(checkInday); checkInMonth = AddPrecedingZero(checkInMonth);

    var CheckOutDate = document.getElementById('Cal2').value
    var checkOutday, checkOutMonth, checkOutyear
    var CheckOutDateSplits = CheckOutDate.split(GetDateSeperator());
    if (dfmt == "dd/mm/yyyy") {
        checkOutday = CheckOutDateSplits[0];
        checkOutMonth = CheckOutDateSplits[1];
        checkOutyear = CheckOutDateSplits[2];
    }
    else if (dfmt == "yyyy/mm/dd") {
        checkOutday = CheckOutDateSplits[2];
        checkOutMonth = CheckOutDateSplits[1];
        checkOutyear = CheckOutDateSplits[0];
    }

    checkOutday = AddPrecedingZero(checkOutday); checkOutMonth = AddPrecedingZero(checkOutMonth);

    document.getElementById('inDay').value = checkInday;
    document.getElementById('inMonth').value = checkInMonth;
    document.getElementById('inYear').value = checkInyear;

    document.getElementById('outDay').value = checkOutday;
    document.getElementById('outMonth').value = checkOutMonth;
    document.getElementById('outYear').value = checkOutyear;
}

function CheckIrrelevantDates() {
    var qs = new Querystring(location.search.substr(1))
    var inDay = qs.get("inDay"); var inMonth = qs.get("inMonth"); var inYear = qs.get("inYear"); var outDay = qs.get("outDay")
    var outMonth = qs.get("outMonth"); var outYear = qs.get("outYear"); var qsCheckInDate = qs.get("checkin");
    var qsCheckOutDate = qs.get("checkout");
    /*if ((typeof (inDay) == 'undefined' || inDay == null) && (typeof (qsCheckOutDate) == 'undefined' || qsCheckOutDate == null)) {
    //CheckInDate
    }*/

    if (typeof (qsCheckInDate) == 'undefined' || qsCheckInDate == null) {
        qsCheckInDate = varCheckInDate;
    }


    if (typeof (qsCheckOutDate) == 'undefined' || qsCheckOutDate == null) {
        qsCheckOutDate = varCheckOutDate;
    }


    if (typeof (inDay) == 'undefined' || inDay == null) {
        inYear = qsCheckInDate.substring(0, 4);
        inMonth = qsCheckInDate.substring(5, 7);
        inDay = qsCheckInDate.substring(8, 10);
        outYear = qsCheckOutDate.substring(0, 4);
        outMonth = qsCheckOutDate.substring(5, 7);
        outDay = qsCheckOutDate.substring(8, 10);
    }
    var DtCheckIn = new Date(inMonth + GetDateSeperator() + inDay + GetDateSeperator() + inYear);
    var DtCheckOut = new Date(outMonth + GetDateSeperator() + outDay + GetDateSeperator() + outYear);
    var one_day = 1000 * 60 * 60 * 24;

    var mnDate = new Date();
    mnDate.setTime(mnDate.getTime() - one_day);
    var minDate = new Date(mnDate.toDateString());
    var CurrentYear = mnDate.getFullYear();
    var MaxYear = CurrentYear + 2
    var mxDate = new Date("12/31/" + MaxYear);

    if (DtCheckIn > mxDate || DtCheckIn < minDate || DtCheckOut > mxDate || DtCheckOut < minDate || DtCheckIn > DtCheckOut) {
        var sDate = new Date();
        sDate.setTime(sDate.getTime() + one_day * 17);
        var eDate = new Date();
        eDate.setTime(eDate.getTime() + one_day * 19);
        var qString = location.search.substr(1)
        qString = remQStringName(qString, "page")
        qString = remQStringName(qString, "inDay")
        qString = remQStringName(qString, "inMonth")
        qString = remQStringName(qString, "inYear")
        qString = remQStringName(qString, "outDay")
        qString = remQStringName(qString, "outMonth")
        qString = remQStringName(qString, "outYear")
        inDay = sDate.getDate(); inDay = AddPrecedingZero(inDay);
        inMonth = sDate.getMonth() + 1; inMonth = AddPrecedingZero(inMonth);
        inYear = sDate.getFullYear();
        outDay = eDate.getDate(); outDay = AddPrecedingZero(outDay);
        outMonth = eDate.getMonth() + 1; outMonth = AddPrecedingZero(outMonth);
        outYear = eDate.getFullYear();
        var strCheckIn = DateFormat(inDay + GetDateSeperator() + inMonth + GetDateSeperator() + inYear);
        var strCheckOut = DateFormat(outDay + GetDateSeperator() + outMonth + GetDateSeperator() + outYear);
        qString += "&" + "inDay" + "=" + inDay;
        qString += "&" + "inMonth" + "=" + inMonth;
        qString += "&" + "inYear" + "=" + inYear;
        qString += "&" + "outDay" + "=" + outDay;
        qString += "&" + "outMonth" + "=" + outMonth;
        qString += "&" + "outYear" + "=" + outYear;
        qString = setQStringName(qString, "Checkin", new Array(strCheckIn))
        qString = setQStringName(qString, "Checkout", new Array(strCheckOut))
        location = location.pathname + "?" + qString
    }
}
/**/
(function(jQuery) {
    this.version = '(beta)(0.0.1)';

    /**
    * The maximum items this cache should hold. 
    * If the cache is going to be overload, oldest item will be deleted (FIFO).
    * Since the cached object is retained inside browser's state, 
    * a too big value on a too big web apps may affect system memory.
    * Default is 10.
    */
    this.maxSize = 50;

    /**
    * An array to keep track of the cache keys
    */
    this.keys = new Array();

    /**
    * Number of currently cached items
    */
    this.cache_length = 0;

    /**
    * An associated array to contain the cached items
    */
    this.items = new Array();

    /*
    * @desc	Puts an item into the cache
    *
    * @param	string Key of the item
    * @param 	string Value of the item
    * @return	string Value of the item
    */
    this.setItem = function(pKey, pValue) {
        if (typeof (pValue) != 'undefined') {
            if (typeof (this.items[pKey]) == 'undefined') {
                this.cache_length++;
            }

            this.keys.push(pKey);
            this.items[pKey] = pValue;

            if (this.cache_length > this.maxSize) {
                this.removeOldestItem();
            }
        }

        return pValue;
    }

    /*
    * @desc	Removes an item from the cache using its key
    * @param 	string Key of the item
    */
    this.removeItem = function(pKey) {
        var tmp;
        if (typeof (this.items[pKey]) != 'undefined') {
            this.cache_length--;
            var tmp = this.items[pKey];
            delete this.items[pKey];
        }

        return tmp;
    }

    /*
    * @desc 	Retrieves an item from the cache by its key
    *
    * @param 	string Key of the item
    * @return	string Value of the item
    */
    this.getItem = function(pKey) {
        return this.items[pKey];
    }

    /*
    * @desc	Indicates if the cache has an item specified by its key
    * @param 	string Key of the item
    * @return 	boolean TRUE or FALSE
    */
    this.hasItem = function(pKey) {
        return typeof (this.items[pKey]) != 'undefined';
    }

    /**
    * @desc	Removes the oldest cached item from the cache
    */
    this.removeOldestItem = function() {
        this.removeItem(this.keys.shift());
    }

    /**
    * @desc	Clears the cache
    * @return	Number of items cleared
    */
    this.clear = function() {
        var tmp = this.cache_length;
        this.keys = new Array();
        this.cache_length = 0;
        this.items = new Array();
        return tmp;
    }

    jQuery.jCache = this;
    return jQuery;
})(jQuery);/*****************************************
SEARCH RESULTS MAP (Only for SR)
******************************************/
var minZoomLevel = 16;

var IsMapJSAvilable = false;
var IsMapJSRequestProcessing = false;

function initMapJSLoader(callBackMethod) {
    if (IsMapJSRequestProcessing == false) {
        IsMapJSRequestProcessing = true;
        var script = document.createElement("script");
        script.src = varMapsUrl + callBackMethod;
        script.type = "text/javascript";
        document.getElementsByTagName("head")[0].appendChild(script);
    }
}

function SRmapsLoaded() {
    IsMapJSAvilable = true;
    IsMapJSRequestProcessing = false;
    ShowGGMaps(_varlat, _varlon, _objvar, _varHotelName, _varLocation, _varAddress, _varRating, _varHotelImageURL, _varX, _varY)

}



var _varlat, _varlon, _objvar, _varHotelName, _varLocation, _varAddress, _varRating, _varHotelImageURL, _varX, _varY

function ShowGGMaps(varlat, varlon, objvar, varHotelName, varLocation, varAddress, varRating, varHotelImageURL, varX, varY) {

    if (IsMapJSAvilable == false) {
        _varlat = varlat;
        _varlon = varlon;
        _objvar = objvar;
        _varHotelName = varHotelName;
        _varLocation = varLocation;
        _varAddress = varAddress;
        _varRating = varRating;
        _varHotelImageURL = varHotelImageURL;
        _varX = varX;
        _varY = varY;
        loadMapTemplateAndData(varlat, varlon, objvar, varHotelName, varLocation, varAddress, varRating, varHotelImageURL, varX, varY);
        if (IsMapJSRequestProcessing == false) {
            initMapJSLoader("SRmapsLoaded");
        }
        return false;
    }

    loadMapTemplateAndData(varlat, varlon, objvar, varHotelName, varLocation, varAddress, varRating, varHotelImageURL, varX, varY);

    return false;
}

function loadMapTemplateAndData(varlat, varlon, objvar, varHotelName, varLocation, varAddress, varRating, varHotelImageURL, varX, varY) {
    MoveGGTemplate(objvar, varX, varY);
    document.getElementById("HotelImageURL").src = varHotelImageURL;
    document.getElementById("HotelName").innerHTML = varHotelName;
    document.getElementById("HotelMapStarRating").src = "/SiteEngine/HTC/Img/pixel.gif";
    document.getElementById("HotelMapStarRating").className = varRating; 
    document.getElementById("HotelMapLocation").innerHTML = "<strong>" + varLocationStringLang + ": </strong>" + varLocation;
    document.getElementById("HotelMapAddress").innerHTML = "<strong>" + varAddressStringLang + " </strong>" + varAddress;
    document.getElementById("HotelImageURL").src = "/HCRefreshAshx/ThumbNail.ashx?square=true&s=70&hid=" + varHotelImageURL;
}

function MoveGGTemplate(objvar, varX, varY) {
    var posX;
    if (parseInt(findPosX(objvar)) + parseInt(varX) < 5)
        posX = 5;
    else
        posX = parseInt(findPosX(objvar)) + parseInt(varX);
    var posY = parseInt(findPosY(objvar)) + parseInt(varY);

    document.getElementById("tplGoogleMap").style.left = posX + "px";
    document.getElementById("tplGoogleMap").style.top = posY + "px";
    document.getElementById("tplGoogleMap").style.display = "block";
}

function CloseMapWindow() {
    document.getElementById("tplGoogleMap").style.display = "none";
}

function findPosX(obj) {
    var curleft = 0;
    if (obj.offsetParent)
        while (1) {
        curleft += obj.offsetLeft;
        if (!obj.offsetParent)
            break;
        obj = obj.offsetParent;
    }
    else if (obj.x)
        curleft += obj.x;
    return curleft;
}

function findPosY(obj) {
    var curtop = 0;
    if (obj.offsetParent)
        while (1) {
        curtop += obj.offsetTop;
        if (!obj.offsetParent)
            break;
        obj = obj.offsetParent;
    }
    else if (obj.y)
        curtop += obj.y;
    return curtop;
}


function DHJsLoaded() {
    IsMapJSAvilable = true;
    IsMapJSRequestProcessing = false;
}

function mapsLoaded() {
}/* This file is blocked in the robots.txt */
function redirecttohotel(hotelurl) {
    url = window.location.protocol + "//" + window.location.host + hotelurl;
    window.location.href = url;
}
;(function( $ ){
	
	var $scrollTo = $.scrollTo = function( target, duration, settings ){
		$(window).scrollTo( target, duration, settings );
	};

	$scrollTo.defaults = {
		axis:'y',
		duration:1
	};

	// Returns the element that needs to be animated to scroll the window.
	// Kept for backwards compatibility (specially for localScroll & serialScroll)
	$scrollTo.window = function( scope ){
		return $(window).scrollable();
	};

	// Hack, hack, hack... stay away!
	// Returns the real elements to scroll (supports window/iframes, documents and regular nodes)
	$.fn.scrollable = function(){
		return this.map(function(){
			// Just store it, we might need it
			var win = this.parentWindow || this.defaultView,
				// If it's a document, get its iframe or the window if it's THE document
				elem = this.nodeName == '#document' ? win.frameElement || win : this,
				// Get the corresponding document
				doc = elem.contentDocument || (elem.contentWindow || elem).document,
				isWin = elem.setInterval;

			return elem.nodeName == 'IFRAME' || isWin && $.browser.safari ? doc.body
				: isWin ? doc.documentElement
				: this;
		});
	};

	$.fn.scrollTo = function( target, duration, settings ){
		if( typeof duration == 'object' ){
			settings = duration;
			duration = 0;
		}
		if( typeof settings == 'function' )
			settings = { onAfter:settings };
			
		settings = $.extend( {}, $scrollTo.defaults, settings );
		// Speed is still recognized for backwards compatibility
		duration = duration || settings.speed || settings.duration;
		// Make sure the settings are given right
		settings.queue = settings.queue && settings.axis.length > 1;
		
		if( settings.queue )
			// Let's keep the overall duration
			duration /= 2;
		settings.offset = both( settings.offset );
		settings.over = both( settings.over );

		return this.scrollable().each(function(){
			var elem = this,
				$elem = $(elem),
				targ = target, toff, attr = {},
				win = $elem.is('html,body');

			switch( typeof targ ){
				// A number will pass the regex
				case 'number':
				case 'string':
					if( /^([+-]=)?\d+(px)?$/.test(targ) ){
						targ = both( targ );
						// We are done
						break;
					}
					// Relative selector, no break!
					targ = $(targ,this);
				case 'object':
					// DOMElement / jQuery
					if( targ.is || targ.style )
						// Get the real position of the target 
						toff = (targ = $(targ)).offset();
			}
			$.each( settings.axis.split(''), function( i, axis ){
				var Pos	= axis == 'x' ? 'Left' : 'Top',
					pos = Pos.toLowerCase(),
					key = 'scroll' + Pos,
					old = elem[key],
					Dim = axis == 'x' ? 'Width' : 'Height',
					dim = Dim.toLowerCase();

				if( toff ){// jQuery / DOMElement
					attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] );

					// If it's a dom element, reduce the margin
					if( settings.margin ){
						attr[key] -= parseInt(targ.css('margin'+Pos)) || 0;
						attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0;
					}
					
					attr[key] += settings.offset[pos] || 0;
					
					if( settings.over[pos] )
						// Scroll to a fraction of its width/height
						attr[key] += targ[dim]() * settings.over[pos];
				}else
					attr[key] = targ[pos];

				// Number or 'number'
				if( /^\d+$/.test(attr[key]) )
					// Check the limits
					attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max(Dim) );

				// Queueing axes
				if( !i && settings.queue ){
					// Don't waste time animating, if there's no need.
					if( old != attr[key] )
						// Intermediate animation
						animate( settings.onAfterFirst );
					// Don't animate this axis again in the next iteration.
					delete attr[key];
				}
			});			
			animate( settings.onAfter );			

			function animate( callback ){
				$elem.animate( attr, duration, settings.easing, callback && function(){
					callback.call(this, target, settings);
				});
			};
			function max( Dim ){
				var attr ='scroll'+Dim,
					doc = elem.ownerDocument;
				
				return win
						? Math.max( doc.documentElement[attr], doc.body[attr]  )
						: elem[attr];
			};
		}).end();
	};

	function both( val ){
		return typeof val == 'object' ? val : { top:val, left:val };
	};

})(jQuery);

