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

// t: current time, b: begInnIng value, c: change In value, d: duration
jQuery.easing['jswing'] = jQuery.easing['swing'];

jQuery.extend( jQuery.easing,
{
	def: 'easeOutQuad',
	swing: function (x, t, b, c, d) {
		//alert(jQuery.easing.default);
		return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
	},
	easeInQuad: function (x, t, b, c, d) {
		return c*(t/=d)*t + b;
	},
	easeOutQuad: function (x, t, b, c, d) {
		return -c *(t/=d)*(t-2) + b;
	},
	easeInOutQuad: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t + b;
		return -c/2 * ((--t)*(t-2) - 1) + b;
	},
	easeInCubic: function (x, t, b, c, d) {
		return c*(t/=d)*t*t + b;
	},
	easeOutCubic: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t + 1) + b;
	},
	easeInOutCubic: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t + b;
		return c/2*((t-=2)*t*t + 2) + b;
	},
	easeInQuart: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t + b;
	},
	easeOutQuart: function (x, t, b, c, d) {
		return -c * ((t=t/d-1)*t*t*t - 1) + b;
	},
	easeInOutQuart: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
		return -c/2 * ((t-=2)*t*t*t - 2) + b;
	},
	easeInQuint: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t*t + b;
	},
	easeOutQuint: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t*t*t + 1) + b;
	},
	easeInOutQuint: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
		return c/2*((t-=2)*t*t*t*t + 2) + b;
	},
	easeInSine: function (x, t, b, c, d) {
		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
	},
	easeOutSine: function (x, t, b, c, d) {
		return c * Math.sin(t/d * (Math.PI/2)) + b;
	},
	easeInOutSine: function (x, t, b, c, d) {
		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
	},
	easeInExpo: function (x, t, b, c, d) {
		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
	},
	easeOutExpo: function (x, t, b, c, d) {
		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
	},
	easeInOutExpo: function (x, t, b, c, d) {
		if (t==0) return b;
		if (t==d) return b+c;
		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
	},
	easeInCirc: function (x, t, b, c, d) {
		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
	},
	easeOutCirc: function (x, t, b, c, d) {
		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
	},
	easeInOutCirc: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
	},
	easeInElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
	},
	easeOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
	},
	easeInOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
	},
	easeInBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*(t/=d)*t*((s+1)*t - s) + b;
	},
	easeOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
	},
	easeInOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158; 
		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
	},
	easeInBounce: function (x, t, b, c, d) {
		return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
	},
	easeOutBounce: function (x, t, b, c, d) {
		if ((t/=d) < (1/2.75)) {
			return c*(7.5625*t*t) + b;
		} else if (t < (2/2.75)) {
			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
		} else if (t < (2.5/2.75)) {
			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
		} else {
			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
		}
	},
	easeInOutBounce: function (x, t, b, c, d) {
		if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
		return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
	}
});

/*
 *
 * TERMS OF USE - EASING EQUATIONS
 * 
 * Open source under the BSD License. 
 * 
 * Copyright Â© 2001 Robert Penner
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 * 
 * Redistributions of source code must retain the above copyright notice, this list of 
 * conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice, this list 
 * of conditions and the following disclaimer in the documentation and/or other materials 
 * provided with the distribution.
 * 
 * Neither the name of the author nor the names of contributors may be used to endorse 
 * or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
 * OF THE POSSIBILITY OF SUCH DAMAGE. 
 *
 *//*
    http://www.JSON.org/json2.js
    2009-09-29

    Public Domain.

    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.

    See http://www.JSON.org/js.html

    This file creates a global JSON object containing two methods: stringify
    and parse.

        JSON.stringify(value, replacer, space)
            value       any JavaScript value, usually an object or array.

            replacer    an optional parameter that determines how object
                        values are stringified for objects. It can be a
                        function or an array of strings.

            space       an optional parameter that specifies the indentation
                        of nested structures. If it is omitted, the text will
                        be packed without extra whitespace. If it is a number,
                        it will specify the number of spaces to indent at each
                        level. If it is a string (such as '\t' or '&nbsp;'),
                        it contains the characters used to indent at each level.

            This method produces a JSON text from a JavaScript value.

            When an object value is found, if the object contains a toJSON
            method, its toJSON method will be called and the result will be
            stringified. A toJSON method does not serialize: it returns the
            value represented by the name/value pair that should be serialized,
            or undefined if nothing should be serialized. The toJSON method
            will be passed the key associated with the value, and this will be
            bound to the value

            For example, this would serialize Dates as ISO strings.

                Date.prototype.toJSON = function (key) {
                    function f(n) {
                        // Format integers to have at least two digits.
                        return n < 10 ? '0' + n : n;
                    }

                    return this.getUTCFullYear()   + '-' +
                         f(this.getUTCMonth() + 1) + '-' +
                         f(this.getUTCDate())      + 'T' +
                         f(this.getUTCHours())     + ':' +
                         f(this.getUTCMinutes())   + ':' +
                         f(this.getUTCSeconds())   + 'Z';
                };

            You can provide an optional replacer method. It will be passed the
            key and value of each member, with this bound to the containing
            object. The value that is returned from your method will be
            serialized. If your method returns undefined, then the member will
            be excluded from the serialization.

            If the replacer parameter is an array of strings, then it will be
            used to select the members to be serialized. It filters the results
            such that only members with keys listed in the replacer array are
            stringified.

            Values that do not have JSON representations, such as undefined or
            functions, will not be serialized. Such values in objects will be
            dropped; in arrays they will be replaced with null. You can use
            a replacer function to replace those with JSON values.
            JSON.stringify(undefined) returns undefined.

            The optional space parameter produces a stringification of the
            value that is filled with line breaks and indentation to make it
            easier to read.

            If the space parameter is a non-empty string, then that string will
            be used for indentation. If the space parameter is a number, then
            the indentation will be that many spaces.

            Example:

            text = JSON.stringify(['e', {pluribus: 'unum'}]);
            // text is '["e",{"pluribus":"unum"}]'


            text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
            // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'

            text = JSON.stringify([new Date()], function (key, value) {
                return this[key] instanceof Date ?
                    'Date(' + this[key] + ')' : value;
            });
            // text is '["Date(---current time---)"]'


        JSON.parse(text, reviver)
            This method parses a JSON text to produce an object or array.
            It can throw a SyntaxError exception.

            The optional reviver parameter is a function that can filter and
            transform the results. It receives each of the keys and values,
            and its return value is used instead of the original value.
            If it returns what it received, then the structure is not modified.
            If it returns undefined then the member is deleted.

            Example:

            // Parse the text. Values that look like ISO date strings will
            // be converted to Date objects.

            myData = JSON.parse(text, function (key, value) {
                var a;
                if (typeof value === 'string') {
                    a =
/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
                    if (a) {
                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
                            +a[5], +a[6]));
                    }
                }
                return value;
            });

            myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
                var d;
                if (typeof value === 'string' &&
                        value.slice(0, 5) === 'Date(' &&
                        value.slice(-1) === ')') {
                    d = new Date(value.slice(5, -1));
                    if (d) {
                        return d;
                    }
                }
                return value;
            });


    This is a reference implementation. You are free to copy, modify, or
    redistribute.

    This code should be minified before deployment.
    See http://javascript.crockford.com/jsmin.html

    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
    NOT CONTROL.
*/

/*jslint evil: true, strict: false */

/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
    call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
    getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
    lastIndex, length, parse, prototype, push, replace, slice, stringify,
    test, toJSON, toString, valueOf
*/


// Create a JSON object only if one does not already exist. We create the
// methods in a closure to avoid creating global variables.

if (!this.JSON) {
    this.JSON = {};
}

(function () {

    function f(n) {
        // Format integers to have at least two digits.
        return n < 10 ? '0' + n : n;
    }

    if (typeof Date.prototype.toJSON !== 'function') {

        Date.prototype.toJSON = function (key) {

            return isFinite(this.valueOf()) ?
                   this.getUTCFullYear()   + '-' +
                 f(this.getUTCMonth() + 1) + '-' +
                 f(this.getUTCDate())      + 'T' +
                 f(this.getUTCHours())     + ':' +
                 f(this.getUTCMinutes())   + ':' +
                 f(this.getUTCSeconds())   + 'Z' : null;
        };

        String.prototype.toJSON =
        Number.prototype.toJSON =
        Boolean.prototype.toJSON = function (key) {
            return this.valueOf();
        };
    }

    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        gap,
        indent,
        meta = {    // table of character substitutions
            '\b': '\\b',
            '\t': '\\t',
            '\n': '\\n',
            '\f': '\\f',
            '\r': '\\r',
            '"' : '\\"',
            '\\': '\\\\'
        },
        rep;


    function quote(string) {

// If the string contains no control characters, no quote characters, and no
// backslash characters, then we can safely slap some quotes around it.
// Otherwise we must also replace the offending characters with safe escape
// sequences.

        escapable.lastIndex = 0;
        return escapable.test(string) ?
            '"' + string.replace(escapable, function (a) {
                var c = meta[a];
                return typeof c === 'string' ? c :
                    '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
            }) + '"' :
            '"' + string + '"';
    }


    function str(key, holder) {

// Produce a string from holder[key].

        var i,          // The loop counter.
            k,          // The member key.
            v,          // The member value.
            length,
            mind = gap,
            partial,
            value = holder[key];

// If the value has a toJSON method, call it to obtain a replacement value.

        if (value && typeof value === 'object' &&
                typeof value.toJSON === 'function') {
            value = value.toJSON(key);
        }

// If we were called with a replacer function, then call the replacer to
// obtain a replacement value.

        if (typeof rep === 'function') {
            value = rep.call(holder, key, value);
        }

// What happens next depends on the value's type.

        switch (typeof value) {
        case 'string':
            return quote(value);

        case 'number':

// JSON numbers must be finite. Encode non-finite numbers as null.

            return isFinite(value) ? String(value) : 'null';

        case 'boolean':
        case 'null':

// If the value is a boolean or null, convert it to a string. Note:
// typeof null does not produce 'null'. The case is included here in
// the remote chance that this gets fixed someday.

            return String(value);

// If the type is 'object', we might be dealing with an object or an array or
// null.

        case 'object':

// Due to a specification blunder in ECMAScript, typeof null is 'object',
// so watch out for that case.

            if (!value) {
                return 'null';
            }

// Make an array to hold the partial results of stringifying this object value.

            gap += indent;
            partial = [];

// Is the value an array?

            if (Object.prototype.toString.apply(value) === '[object Array]') {

// The value is an array. Stringify every element. Use null as a placeholder
// for non-JSON values.

                length = value.length;
                for (i = 0; i < length; i += 1) {
                    partial[i] = str(i, value) || 'null';
                }

// Join all of the elements together, separated with commas, and wrap them in
// brackets.

                v = partial.length === 0 ? '[]' :
                    gap ? '[\n' + gap +
                            partial.join(',\n' + gap) + '\n' +
                                mind + ']' :
                          '[' + partial.join(',') + ']';
                gap = mind;
                return v;
            }

// If the replacer is an array, use it to select the members to be stringified.

            if (rep && typeof rep === 'object') {
                length = rep.length;
                for (i = 0; i < length; i += 1) {
                    k = rep[i];
                    if (typeof k === 'string') {
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
                        }
                    }
                }
            } else {

// Otherwise, iterate through all of the keys in the object.

                for (k in value) {
                    if (Object.hasOwnProperty.call(value, k)) {
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
                        }
                    }
                }
            }

// Join all of the member texts together, separated with commas,
// and wrap them in braces.

            v = partial.length === 0 ? '{}' :
                gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
                        mind + '}' : '{' + partial.join(',') + '}';
            gap = mind;
            return v;
        }
    }

// If the JSON object does not yet have a stringify method, give it one.

    if (typeof JSON.stringify !== 'function') {
        JSON.stringify = function (value, replacer, space) {

// The stringify method takes a value and an optional replacer, and an optional
// space parameter, and returns a JSON text. The replacer can be a function
// that can replace values, or an array of strings that will select the keys.
// A default replacer method can be provided. Use of the space parameter can
// produce text that is more easily readable.

            var i;
            gap = '';
            indent = '';

// If the space parameter is a number, make an indent string containing that
// many spaces.

            if (typeof space === 'number') {
                for (i = 0; i < space; i += 1) {
                    indent += ' ';
                }

// If the space parameter is a string, it will be used as the indent string.

            } else if (typeof space === 'string') {
                indent = space;
            }

// If there is a replacer, it must be a function or an array.
// Otherwise, throw an error.

            rep = replacer;
            if (replacer && typeof replacer !== 'function' &&
                    (typeof replacer !== 'object' ||
                     typeof replacer.length !== 'number')) {
                throw new Error('JSON.stringify');
            }

// Make a fake root object containing our value under the key of ''.
// Return the result of stringifying the value.

            return str('', {'': value});
        };
    }


// If the JSON object does not yet have a parse method, give it one.

    if (typeof JSON.parse !== 'function') {
        JSON.parse = function (text, reviver) {

// The parse method takes a text and an optional reviver function, and returns
// a JavaScript value if the text is a valid JSON text.

            var j;

            function walk(holder, key) {

// The walk method is used to recursively walk the resulting structure so
// that modifications can be made.

                var k, v, value = holder[key];
                if (value && typeof value === 'object') {
                    for (k in value) {
                        if (Object.hasOwnProperty.call(value, k)) {
                            v = walk(value, k);
                            if (v !== undefined) {
                                value[k] = v;
                            } else {
                                delete value[k];
                            }
                        }
                    }
                }
                return reviver.call(holder, key, value);
            }


// Parsing happens in four stages. In the first stage, we replace certain
// Unicode characters with escape sequences. JavaScript handles many characters
// incorrectly, either silently deleting them, or treating them as line endings.

            cx.lastIndex = 0;
            if (cx.test(text)) {
                text = text.replace(cx, function (a) {
                    return '\\u' +
                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
                });
            }

// In the second stage, we run the text against regular expressions that look
// for non-JSON patterns. We are especially concerned with '()' and 'new'
// because they can cause invocation, and '=' because it can cause mutation.
// But just to be safe, we want to reject all unexpected forms.

// We split the second stage into 4 regexp operations in order to work around
// crippling inefficiencies in IE's and Safari's regexp engines. First we
// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
// replace all simple value tokens with ']' characters. Third, we delete all
// open brackets that follow a colon or comma or that begin the text. Finally,
// we look to see that the remaining characters are only whitespace or ']' or
// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.

            if (/^[\],:{}\s]*$/.
test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {

// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// in JavaScript: it can begin a block or an object literal. We wrap the text
// in parens to eliminate the ambiguity.

                j = eval('(' + text + ')');

// In the optional fourth stage, we recursively walk the new structure, passing
// each name/value pair to a reviver function for possible transformation.

                return typeof reviver === 'function' ?
                    walk({'': j}, '') : j;
            }

// If the text is not JSON parseable, then a SyntaxError is thrown.

            throw new SyntaxError('JSON.parse');
        };
    }
}());
/*	ColorBox v1.3.6 - a full featured, light-weight, customizable lightbox based on jQuery 1.3 */
(function(c){function r(b,d){d=d==="x"?m.width():m.height();return typeof b==="string"?Math.round(b.match(/%/)?d/100*parseInt(b,10):parseInt(b,10)):b}function M(b){b=c.isFunction(b)?b.call(i):b;return a.photo||b.match(/\.(gif|png|jpg|jpeg|bmp)(?:\?([^#]*))?(?:#(\.*))?$/i)}function Y(){for(var b in a)if(c.isFunction(a[b])&&b.substring(0,2)!=="on")a[b]=a[b].call(i);a.rel=a.rel||i.rel;a.href=a.href||i.href;a.title=a.title||i.title}function Z(b){i=b;a=c(i).data(q);Y();if(a.rel&&a.rel!=="nofollow"){g= c(".cboxElement").filter(function(){return(c(this).data(q).rel||this.rel)===a.rel});j=g.index(i);if(j<0){g=g.add(i);j=g.length-1}}else{g=c(i);j=0}if(!B){C=B=n;N=i;N.blur();c(document).bind("keydown.cbox_close",function(d){if(d.keyCode===27){d.preventDefault();e.close()}}).bind("keydown.cbox_arrows",function(d){if(g.length>1)if(d.keyCode===37){d.preventDefault();D.click()}else if(d.keyCode===39){d.preventDefault();E.click()}});a.overlayClose&&s.css({cursor:"pointer"}).one("click",e.close);c.event.trigger(aa); a.onOpen&&a.onOpen.call(i);s.css({opacity:a.opacity}).show();a.w=r(a.initialWidth,"x");a.h=r(a.initialHeight,"y");e.position(0);O&&m.bind("resize.cboxie6 scroll.cboxie6",function(){s.css({width:m.width(),height:m.height(),top:m.scrollTop(),left:m.scrollLeft()})}).trigger("scroll.cboxie6")}P.add(D).add(E).add(t).add(Q).hide();R.html(a.close).show();e.slideshow();e.load()}var q="colorbox",F="hover",n=true,e,x=!c.support.opacity,O=x&&!window.XMLHttpRequest,aa="cbox_open",H="cbox_load",S="cbox_complete", T="resize.cbox_resize",s,k,u,p,U,V,W,X,g,m,l,I,J,K,Q,P,t,E,D,R,y,z,v,w,i,N,j,a,B,C,$={transition:"elastic",speed:350,width:false,height:false,innerWidth:false,innerHeight:false,initialWidth:"400",initialHeight:"400",maxWidth:false,maxHeight:false,scalePhotos:n,scrolling:n,inline:false,html:false,iframe:false,photo:false,href:false,title:false,rel:false,opacity:0.9,preloading:n,current:"image {current} of {total}",previous:"previous",next:"next",close:"close",open:false,overlayClose:n,slideshow:false, slideshowAuto:n,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",onOpen:false,onLoad:false,onComplete:false,onCleanup:false,onClosed:false};e=c.fn.colorbox=function(b,d){var h=this;if(!h.length)if(h.selector===""){h=c("<a/>");b.open=n}else return this;h.each(function(){var f=c.extend({},c(this).data(q)?c(this).data(q):$,b);c(this).data(q,f).addClass("cboxElement");if(d)c(this).data(q).onComplete=d});b&&b.open&&Z(h);return this};e.init=function(){function b(d){return c('<div id="cbox'+ d+'"/>')}m=c(window);k=c('<div id="colorbox"/>');s=b("Overlay").hide();u=b("Wrapper");p=b("Content").append(l=b("LoadedContent").css({width:0,height:0}),J=b("LoadingOverlay"),K=b("LoadingGraphic"),Q=b("Title"),P=b("Current"),t=b("Slideshow"),E=b("Next"),D=b("Previous"),R=b("Close"));u.append(c("<div/>").append(b("TopLeft"),U=b("TopCenter"),b("TopRight")),c("<div/>").append(V=b("MiddleLeft"),p,W=b("MiddleRight")),c("<div/>").append(b("BottomLeft"),X=b("BottomCenter"),b("BottomRight"))).children().children().css({"float":"left"}); I=c("<div style='position:absolute; top:0; left:0; width:9999px; height:0;'/>");c("body").prepend(s,k.append(u,I));if(x){k.addClass("cboxIE");O&&s.css("position","absolute")}p.children().bind("mouseover mouseout",function(){c(this).toggleClass(F)}).addClass(F);y=U.height()+X.height()+p.outerHeight(n)-p.height();z=V.width()+W.width()+p.outerWidth(n)-p.width();v=l.outerHeight(n);w=l.outerWidth(n);k.css({"padding-bottom":y,"padding-right":z}).hide();E.click(e.next);D.click(e.prev);R.click(e.close);p.children().removeClass(F); c(".cboxElement").live("click",function(d){if(d.button!==0&&typeof d.button!=="undefined")return n;else{Z(this);return false}})};e.position=function(b,d){function h(A){U[0].style.width=X[0].style.width=p[0].style.width=A.style.width;K[0].style.height=J[0].style.height=p[0].style.height=V[0].style.height=W[0].style.height=A.style.height}var f=m.height();f=Math.max(f-a.h-v-y,0)/2+m.scrollTop();var o=Math.max(document.documentElement.clientWidth-a.w-w-z,0)/2+m.scrollLeft();b=k.width()===a.w+w&&k.height()=== a.h+v?0:b;u[0].style.width=u[0].style.height="9999px";k.dequeue().animate({width:a.w+w,height:a.h+v,top:f,left:o},{duration:b,complete:function(){h(this);C=false;u[0].style.width=a.w+w+z+"px";u[0].style.height=a.h+v+y+"px";d&&d()},step:function(){h(this)}})};e.resize=function(b){function d(){a.w=a.w||l.width();a.w=a.mw&&a.mw<a.w?a.mw:a.w;return a.w}function h(){a.h=a.h||l.height();a.h=a.mh&&a.mh<a.h?a.mh:a.h;return a.h}function f(G){e.position(G,function(){if(B){if(x){A&&l.fadeIn(100);k[0].style.removeAttribute("filter")}if(a.iframe)l.append("<iframe id='cboxIframe'"+ (a.scrolling?" ":"scrolling='no'")+" name='iframe_"+(new Date).getTime()+"' frameborder=0 src='"+a.href+"' "+(x?"allowtransparency='true'":"")+" />");l.show();Q.show().html(a.title);if(g.length>1){P.html(a.current.replace(/\{current\}/,j+1).replace(/\{total\}/,g.length)).show();E.html(a.next).show();D.html(a.previous).show();a.slideshow&&t.show()}J.hide();K.hide();c.event.trigger(S);a.onComplete&&a.onComplete.call(i);a.transition==="fade"&&k.fadeTo(L,1,function(){x&&k[0].style.removeAttribute("filter")}); m.bind(T,function(){e.position(0)})}})}if(B){var o,A,L=a.transition==="none"?0:a.speed;m.unbind(T);if(b){l.remove();l=c('<div id="cboxLoadedContent"/>').html(b);l.hide().appendTo(I).css({width:d(),overflow:a.scrolling?"auto":"hidden"}).css({height:h()}).prependTo(p);c("#cboxPhoto").css({cssFloat:"none"});O&&c("select:not(#colorbox select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("cbox_cleanup",function(){this.style.visibility="inherit"});a.transition=== "fade"&&k.fadeTo(L,0,function(){f(0)})||f(L);if(a.preloading&&g.length>1){b=j>0?g[j-1]:g[g.length-1];o=j<g.length-1?g[j+1]:g[0];o=c(o).data(q).href||o.href;b=c(b).data(q).href||b.href;M(o)&&c("<img />").attr("src",o);M(b)&&c("<img />").attr("src",b)}}else setTimeout(function(){var G=l.wrapInner("<div style='overflow:auto'></div>").children();a.h=G.height();l.css({height:a.h});G.replaceWith(G.children());e.position(L)},1)}};e.load=function(){var b,d,h,f=e.resize;C=n;i=g[j];a=c(i).data(q);Y();c.event.trigger(H); a.onLoad&&a.onLoad.call(i);a.h=a.height?r(a.height,"y")-v-y:a.innerHeight?r(a.innerHeight,"y"):false;a.w=a.width?r(a.width,"x")-w-z:a.innerWidth?r(a.innerWidth,"x"):false;a.mw=a.w;a.mh=a.h;if(a.maxWidth){a.mw=r(a.maxWidth,"x")-w-z;a.mw=a.w&&a.w<a.mw?a.w:a.mw}if(a.maxHeight){a.mh=r(a.maxHeight,"y")-v-y;a.mh=a.h&&a.h<a.mh?a.h:a.mh}b=a.href;J.show();K.show();if(a.inline){c('<div id="cboxInlineTemp" />').hide().insertBefore(c(b)[0]).bind(H+" cbox_cleanup",function(){c(this).replaceWith(l.children())}); f(c(b))}else if(a.iframe)f(" ");else if(a.html)f(a.html);else if(M(b)){d=new Image;d.onload=function(){var o;d.onload=null;d.id="cboxPhoto";c(d).css({margin:"auto",border:"none",display:"block",cssFloat:"left"});if(a.scalePhotos){h=function(){d.height-=d.height*o;d.width-=d.width*o};if(a.mw&&d.width>a.mw){o=(d.width-a.mw)/d.width;h()}if(a.mh&&d.height>a.mh){o=(d.height-a.mh)/d.height;h()}}if(a.h)d.style.marginTop=Math.max(a.h-d.height,0)/2+"px";f(d);g.length>1&&c(d).css({cursor:"pointer"}).click(e.next); if(x)d.style.msInterpolationMode="bicubic"};d.src=b}else c("<div />").appendTo(I).load(b,function(o,A){A==="success"?f(this):f(c("<p>Request unsuccessful.</p>"))})};e.next=function(){if(!C){j=j<g.length-1?j+1:0;e.load()}};e.prev=function(){if(!C){j=j>0?j-1:g.length-1;e.load()}};e.slideshow=function(){function b(){t.text(a.slideshowStop).bind(S,function(){h=setTimeout(e.next,a.slideshowSpeed)}).bind(H,function(){clearTimeout(h)}).one("click",function(){d();c(this).removeClass(F)});k.removeClass(f+ "off").addClass(f+"on")}var d,h,f="cboxSlideshow_";t.bind("cbox_closed",function(){t.unbind();clearTimeout(h);k.removeClass(f+"off "+f+"on")});d=function(){clearTimeout(h);t.text(a.slideshowStart).unbind(S+" "+H).one("click",function(){b();h=setTimeout(e.next,a.slideshowSpeed);c(this).removeClass(F)});k.removeClass(f+"on").addClass(f+"off")};if(a.slideshow&&g.length>1)a.slideshowAuto?b():d()};e.close=function(){c.event.trigger("cbox_cleanup");a.onCleanup&&a.onCleanup.call(i);B=false;c(document).unbind("keydown.cbox_close keydown.cbox_arrows"); m.unbind(T+" resize.cboxie6 scroll.cboxie6");s.css({cursor:"auto"}).fadeOut("fast");k.stop(n,false).fadeOut("fast",function(){c("#colorbox iframe").attr("src","about:blank");l.remove();k.css({opacity:1});try{N.focus()}catch(b){}c.event.trigger("cbox_closed");a.onClosed&&a.onClosed.call(i)})};e.element=function(){return c(i)};e.settings=$;c(e.init)})(jQuery);function unescapeEntities(str) {
   var temp_div = document.createElement('div');
   temp_div.innerHTML = str;
   return temp_div.firstChild.nodeValue;
}

function swapTooltip(target) {
	if (($(target).data('tooltip') != undefined) && ($(target).data('tooltip') != '')) {
		$(target).attr('title', $(target).data('tooltip'));
		$(target).data('tooltip', '');
	} else {
		$(target).data('tooltip', $(target).attr('title'));
		$(target).attr('title', '');
	}
}
function showTooltip(target) {
	if ($(target).attr('title') == '')
		return;
	swapTooltip($(target));
	var x = $(target).offset().left;
	var y = $(target).offset().top;
	y = y + $(target).height();
	x = x + $(target).width() / 2;
	if ($(target).data('tooltip') != '') {
		$("body").append('<div id="tooltip" class="popup-text-container"><div class="popup-text-container-w"><div class="popup-text-container-p"></div><div class="popup-text-container-t"></div><div class="popup-text-content">' + $(target).data('tooltip') + '</div></div><div class="popup-text-container-b"><div></div></div></div>');
		$("#tooltip").css("top", (y - yOffset) + "px").css(
				"left", (x + xOffset) + "px")
				.fadeIn("fast");
	}
}

function hideTooltip(target) {
	if ($(target).attr('title') != '')
		return;
	swapTooltip($(target));
	$("#tooltip").remove();
}
/** 
 * Tooltips initialisieren 
 */
this.initializeTooltip = function() {
	yOffset = -0;
	xOffset = -62;

	$(".tooltip").each(function(){$(this).data('tooltip', '');});
	$(".tooltip").hover(function() {showTooltip($(this));}, function() {hideTooltip($(this));});

	$(".tooltip-container").find().each(function(){$(this).data('tooltip', '');});
	$(".tooltip-container .tooltip-trigger").hover(
			function(e) {
				$(this).parents('.tooltip-container').find('.tooltip-trigger').each(function(){
					if (!$(this).is('.tooltip-target') && $(this).attr('title') != ''){
						swapTooltip($(this));
					}
				});
				target = $(this).parents('.tooltip-container').find('.tooltip-target').get(0);
				showTooltip(target);
			}, function() {
				$(this).parents('.tooltip-container').find('.tooltip-trigger').each(function(){
					if (!$(this).is('.tooltip-target') && $(this).attr('title') == ''){
						swapTooltip($(this));
					}
				});
				target = $(this).parents('.tooltip-container').find('.tooltip-target').get(0);
				hideTooltip(target);
			});

};

function showHeaderMenuItem(sel) {
	var id=$(sel).children(".header-menu-link").attr("id");
	$(sel).children(".header-menu-link").addClass(id + '-active');
	$(sel).children(".header-menu-content").show();
}

function hideHeaderMenuItem(sel) {
	var id=$(sel).children(".header-menu-link").attr("id");
	$(sel).children(".header-menu-link").removeClass(id + '-active');
	$(sel).children(".header-menu-content").hide();
}

function isHeaderMenuItemFixed(sel) {
	var classes = $(sel).attr("class");
	var i = classes.indexOf('header-menu-fixed', 0);
	return (i>=0);
}

function openHeaderMenuItem(sel) {
	if (top.location!=document.location){
		top.openHeaderMenuItem(sel);
		return;
	}
	if (isHeaderMenuItemFixed(sel)) {
		return;
	}
	showHeaderMenuItem(sel);
	$(sel).addClass('header-menu-fixed');
}

function closeHeaderMenuItem(sel) {
	if (top.location!=document.location){
		top.openHeaderMenuItem(sel);
		return;
	}
	if (!isHeaderMenuItemFixed(sel)) {
		return;
	}
	hideHeaderMenuItem(sel);
	$(sel).removeClass('header-menu-fixed');
}

function isNumeric(form_value) 
{ 
    if (form_value.match(/^\d+$/) == null) 
        return false; 
    else 
        return true; 
} 

/**
 * Menu im Header initialisieren
 */
this.initializeHeaderMenu = function() {
	$(".header-menu").hover(
			function(e) {
				if (!isHeaderMenuItemFixed(this)) {
					showHeaderMenuItem(this);
				}
			}, 
			function() {
				if (!isHeaderMenuItemFixed(this)) {
					hideHeaderMenuItem(this);
				}
			});
	$(".header-menu-close").click(
			function(e) {
				e.preventDefault();
				closeHeaderMenuItem($(this).parent().parent().parent().parent());
			}); 
};

/**
 * Produktlisten auf der Startseite initialisieren
 */
this.initializeSliders = function() {
	$("#weekSpecials-list").svdSlider({
		listID: "week_specials",
		maxPanelCount: 5,
		sliderID: "weekSpecials"
	});

	$("#bestsellers-list").svdSlider({
		listID: "bestsellers",
		maxPanelCount: 5,
		sliderID: "bestsellers"
	});
	
	$("#newProducts-list").svdSlider({
		listID: "new_products",
		maxPanelCount: 5,
		sliderID: "newProducts"
	});
	
	$("#lastSeenProducts-list").svdSlider({
		listID: "lastseen_products",
		maxPanelCount: 5,
		sliderID: "lastSeenProducts"
	});
	
	$("#weekSpecials-link").click( function() {
		if ($("#weekSpecials-link").is('.scroller-buttons-link-active')) {
			$('#slider-nav-right-weekSpecials a:visible').trigger('click');
		} else {
			$("#weekSpecials-link").addClass("scroller-buttons-link-active");
			$("#bestsellers-link").removeClass("scroller-buttons-link-active");
			$("#newProducts-link").removeClass("scroller-buttons-link-active");
			
			$("#weekSpecials-list").css({display: ""});
			$("#bestsellers-list").css({display: "none"});
			$("#newProducts-list").css({display: "none"});
			
			if ($('#weekSpecials-list .slider-panel-current').length) {
				panelHeight = $('#weekSpecials-list .slider-panel-current').height();
				panelWidth = $('#weekSpecials-list .slider-panel-current').width();
			} else {
				panelHeight = $('#weekSpecials-list .slider-panel:first').height();
				panelWidth = $('#weekSpecials-list .slider-panel:first').width();
			}
		}
	});
	
	$("#bestsellers-link").click( function() {
		if ($("#bestsellers-link").is('.scroller-buttons-link-active')) {
			$('#slider-nav-right-bestsellers a:visible').trigger('click');
		} else {
			$("#bestsellers-link").addClass("scroller-buttons-link-active");
			$("#weekSpecials-link").removeClass("scroller-buttons-link-active");
			$("#newProducts-link").removeClass("scroller-buttons-link-active");
	
			$("#bestsellers-list").css({display: ""});
			$("#weekSpecials-list").css({display: "none"});
			$("#newProducts-list").css({display: "none"});
			
			
			if ($('#bestsellers-list .slider-panel-current').length) {
				panelHeight = $('#bestsellers-list .slider-panel-current').height();
				panelWidth = $('#bestsellers-list .slider-panel-current').width();
			} else {
				panelHeight = $('#bestsellers-list .slider-panel:first').height();
				panelWidth = $('#bestsellers-list .slider-panel:first').width();
			}
			
			$('#bestsellers-list .slider-panel').css({width: panelWidth});
			$('#bestsellers-list .slider-panels').css({height: panelHeight});
		}
	});
	
	$("#newProducts-link").click( function() {
		if ($("#newProducts-link").is('.scroller-buttons-link-active')) {
			$('#slider-nav-right-newProducts a:visible').trigger('click');
		} else {
			$("#newProducts-link").addClass("scroller-buttons-link-active");
			$("#weekSpecials-link").removeClass("scroller-buttons-link-active");
			$("#bestsellers-link").removeClass("scroller-buttons-link-active");
	
			$("#newProducts-list").css({display: ""});
			$("#weekSpecials-list").css({display: "none"});
			$("#bestsellers-list").css({display: "none"});
	
			if ($('#newProducts-list .slider-panel-current').length) {
				panelHeight = $('#newProducts-list .slider-panel-current').height();
				panelWidth = $('#newProducts-list .slider-panel-current').width();
			} else {
				panelHeight = $('#newProducts-list .slider-panel:first').height();
				panelWidth = $('#newProducts-list .slider-panel:first').width();
			}
			
			$('#newProducts-list .slider-panel').css({width: panelWidth});
			$('#newProducts-list .slider-panels').css({height: panelHeight});
		}
	});
};

this.initializeCollapsibles = function() {
	$('.collapsible').svdCollapsible({allowOnlyOne: false});
	$('.collapsible-hover').svdCollapsible({allowOnlyOne: false, withHover: true});
};

this.initializeImageViewers = function() {
	$('.imgviewer').svdImageViewer();

	if (top.location==document.location){
		$('.product-images .lightbox').each(function() {
			// replace the href-attribute with the AJAX-url needed in colorbox
			checkClipLister( clipListerLink, this, function( cObj ) {
				$(cObj).attr('href', $(cObj).attr('href').replace(/popup_image\.php\?/, 'ajax.php?func=popup_image&lightbox=1&cliplister=1&'));
				$(cObj).attr('href', $(cObj).attr('href').replace( clipListerLink , 'ajax.php?func=popup_image&lightbox=1&cliplister=1&pID=' + $('#cart_quantity input[name="products_id"]').val() + '&is_clip=1'));
				initializeImageColorbox(cObj);
			}, function( cObj ) {
				$(cObj).attr('href', $(cObj).attr('href').replace(/popup_image\.php\?/, 'ajax.php?func=popup_image&lightbox=1&cliplister=0&'));
				initializeImageColorbox(cObj);
			});
		});
	} else {
		$('.product-images .lightbox').each(function() {
			$(this).attr('href', 'javascript:void(0)');
			$(this).attr('target', '');
			$(this).css({cursor: 'default'});
		});
	}
};

function initializeImageColorbox( cObj ) {
	$('.magnifier', cObj).fadeIn('fast');

	$(cObj).colorbox({
		onComplete: function() {
			// define the variables we need in the next functions
			var parentColorBox = $(cObj).colorbox;
			var parent = $('.popup-image-ajax');
			var thumbnails = $('.thumbnails', parent);
			var content = $('.content', parent);
			var contentImage = $('.content-image', parent);
			var contentIFrame = $('.content-iframe', parent);
			var	currentFullImageSrc = contentImage.attr('src');

			// calls the resize when css is loaded ( for the slider on the right side ... )
			parentColorBox.resize();
			
			/* set the height of the slider */
			thumbnails.height( content.height() - parseInt(thumbnails.css('margin-bottom')) - parseInt(thumbnails.css('margin-top')));
			
			/**
			 * display the DOWN-button only if there is something to scroll ...
			 * At first - try this onComplete (all images are loaded ...)
			 * At second - try this on images are loaded (if you open the lightbox the first time)
			 */
			if ( thumbnails.height() < $('div', thumbnails).height() ) {
				$('.buttons .down', parent).show();
			}
			
			/* this var will be set if somebody clicks a thumbnail. So I can control if the browser
			 * has loaded the first image or if the user has clicked on a thumbnail.
			 */
			var hasClickedOnThumbnail = false;
			
			$('img', thumbnails).load(function() {
				if ( !hasClickedOnThumbnail && thumbnails.height() < $('div', thumbnails).height() ) {
					$('.buttons .down', parent).show();
				}
			});
			
			
			function setImageSize(width, height) {
				var contentImage = $('.content-image', parent);
				contentImage.css({marginTop : '0px', marginLeft: '0px'});

				newWidth = width;
				newHeight = height;
				
				if (newWidth > content.width()) {
					newHeight = newHeight*(content.width()/newWidth); 
					newWidth = content.width();
				}
				if (newHeight > content.height()) {
					newWidth = newWidth*(content.height()/newHeight); 
					newHeight = content.height();
				}
				
				contentImage.width(newWidth);
				contentImage.height(newHeight);
				if (newWidth < content.width()) {
					contentImage.css({marginLeft: parseInt(content.width()/2 - newWidth/2)+'px'});
				}
				if (newHeight < content.height()) {
					contentImage.css({marginTop: parseInt(content.height()/2 - newHeight/2)+'px'});
				}
			}
			
			initPopupBigImage = function() {
				/**
				 * image-resizing and centering ...
				 * I can't use css because IE doesn't realize it ...
				 */
				
				var contentImage = $('.content-image', parent);
				
				// wait until the image is loaded ...
				if ( contentImage.is(":loaded") && (contentImage.width() < 100 || contentImage.height() < 100) ) {
					setTimeout('initPopupBigImage()', 100);
					return;
				}
				
				setImageSize(contentImage.width(), contentImage.height());
			};
			
			
			// rerender the lightbox if the main-Image is loaded.
			if ( contentImage.is(":loaded") ) {
				initPopupBigImage();
			} else {
				contentImage.load( function() {
					initPopupBigImage();
				});
			}
			
			/**
			 * load any page-content into the colorbox
			 * hide all other possible content
			 * 
			 * @param string url
			 * @param int width
			 * @param int height
			 */
			function loadIFrameContent( url, width, height ) {
				
				if (!width) width=600;
				if (!height) height=600;
				
				contentImage.hide();
				
				contentIFrame.html('<iframe src="' + url + '" name="iframeContent"></iframe>');
				contentIFrame.width( width );
				contentIFrame.height( height );
				
				if ( contentIFrame.width() < content.width() ) {
					contentIFrame.css({marginLeft: parseInt( content.width()/2 - contentIFrame.width()/2 )+'px'});
				}
				
				if ( contentIFrame.height() < content.height() ) {
					contentIFrame.css({marginTop: parseInt( content.height()/2 - contentIFrame.height()/2 )+'px'});
				}
				
			}
			
			function handleThumbnailChange(src) {
				hasClickedOnThumbnail = true;
				
				contentIFrame.html("");
				contentImage.show();
				
				var test = new Image();
				test.onload = function() {
					setImageSize(test.width, test.height);
					contentImage.attr('src', src);
				};
				test.src = src;
			}
			
			/**
			 * onClick-Events for all kind of thumbnails
			 */
			$('img.popup-image', thumbnails).click( function() {
				currentFullImageSrc = contentImage.attr('src'); 
				handleThumbnailChange($(this).attr('src'));
			});
			
			$('img.popup-image', thumbnails).hover( function() {
				handleThumbnailChange($(this).attr('src'));
			}, function() {
				handleThumbnailChange(currentFullImageSrc);
			});
      
			
			/**
			 * onClick-Event for ClipLister-video and check
			 * if the video should be loaded on-open
			 */
			$('img.popup-video', thumbnails).click( function() { loadIFrameContent( clipListerLink, 325, 265 ); } );
			
			// if clipLister-video should be loaded on colorbox-init
			if ( ( $('.content-iframe:has(div.loadCliplister)', parent).length == 1 ) ) {
				$('img.popup-video', thumbnails).click();
			}
			
			/**
			 * onClick-Events for the two UP- and DOWN-Buttons
			 */
			$('.buttons .down', parent).click( function() {
				
				var scroller = $('div', thumbnails);
				var range = 140;
				
				if ( scroller.is(":animated") ) {
					return;
				}
				
				/* check if the animation-range is exited and move the scroller */
				if ( parseInt(scroller.css('marginTop')) - range < (scroller.height() - thumbnails.height()) *-1 ) {
					scroller.animate( {marginTop: '-'+(scroller.height() - thumbnails.height())+'px'}, 200);
				} else {
					scroller.animate( {marginTop: '-='+range+'px'}, 200);
				}
				
				$('.buttons .up', parent).show();
				
				/* i want to hide this button after the animation has finished */
				if ( parseInt(scroller.css('marginTop')) - range <= (scroller.height() - thumbnails.height()) *-1 ) {
					$(this).hide();
				}
			});
			
			$('.buttons .up', parent).click( function() {
				
				var scroller = $('div', thumbnails);
				var range = 140;
				
				if ( scroller.is(":animated") ) {
					return;
				}
				
				/* check if the animation-range is exited and move the scroller */
				if ( parseInt(scroller.css('marginTop')) + range > 0 ) {
					scroller.animate( {marginTop: '0px'}, 200);
				} else {
					scroller.animate( {marginTop: '+='+range+'px'}, 200);
				}
				
				$('.buttons .down', parent).show();
				
				/* i want to hide this button after the animation has finished */
				if ( parseInt(scroller.css('marginTop')) + range >= 0 ) {
					$(this).hide();
				}
			});
			
		}
	});
}

/**
 * Radio-Buttons durch Sterne ersetzen
 */
this.initializeProductRating = function() {
	$('#reviewsinput').css({display: 'none'});
	$('#reviewsstars').css({display: 'inline-block'});
};

/**
 * Standard-Wert für ein Input-Element setzen
 * 
 * @param elementID JQuery-Selektor des Elements
 * @param defaultValue Standard-Wert des Elements 
 */
function setDefaultInputValue(elementID, defaultValue) {
	$(elementID).data('defaultValue', unescapeEntities(defaultValue));
}

/**
 * Alle Input-Elemente die einen Standard-Wert haben sollen initialisieren
 */
this.initializeInputDefaults = function() {
	$('.default-value').each(function() {
	    var defaultValue = $(this).data('defaultValue');
	    if($(this).val() == defaultValue) {
	    	$(this).addClass('default-value-active');
	    }
	    $(this).focus(function() {
	        if($(this).val() == defaultValue) {
	        	$(this).val('');
	        	$(this).removeClass('default-value-active');
	        }
	    });
	    $(this).blur(function() {
	        if(this.value == '') {
	            this.value = defaultValue;
	        	$(this).addClass('default-value-active');
	        }
	    });
	});
};

/**
 * Seite aktualisieren nachdem neue Elemente hinzugefügt wurden
 */
function initializeNewElements() {
	$('.no-autocomplete').attr('autocomplete', 'off');
}

/**
 *	alle Submit/Text/..-Inputs deaktivieren 
 */
function disableAllFormElements() {
	$('a.image-button').each(function () {
		$(this).addClass('image-button-disabled');
		$(this).attr('href', 'javascript:void(0)');
		$(this).unbind('click');
	});
	$('input.image-button').each(function () {
		$(this).addClass('image-button-disabled');
	});
	$('input').each(function () {
		$(this).attr('disabled', 'disabled');
	});
}


/**
 * Seite initialisieren
 */
$(document).ready(function() {
	set_product_configuration();
	updateProductInfo();
	
	$('#cart_quantity').unbind('submit');
	$('#cart_quantity').submit( function() { return addToCart(); });
	
	initializeHeaderMenu();
	initializeSliders();
	initializeCollapsibles();
	initializeTooltip();
	initializeProductRating();
	initializeInputDefaults();
	initializeNewElements();
	
	$('#header-tb-service-link').attr('href', 'javascript:void(0);');
	
	$('select').not('.selectbox-special').svdSelectBox();
	$('.product-illuminant select').svdSelectBox({optionsContainer: '.product-illuminant-content', hideOptionsOnClick: false});

});



$(window).load(function() {
	initializeImageViewers();
});


/**
 * Status der Aktualisierungsanzeige setzen
 */
function setCartLoading(loading) {
	if (top.location!=document.location){
		top.setCartLoading(loading);
		return;
	}
	
	if($.browser.opera){
		$('html').animate({scrollTop: 0}, 500);
	} else 
		$('html,body').animate({scrollTop: 0}, 500);
	
	$("#cart-html").html('');
	$('.box-cart-overlay-error').hide();
	if (loading) {
		$('.box-cart-overlay-loading').show();
	} else {
		$('.box-cart-overlay-loading').hide();
	}
}

/**
 * Fehlermeldung beim Laden des Warenkorbs anzeigen
 */
function cartError() {
	if (top.location!=document.location){
		parent.cartError();
		return;
	}
	setCartLoading(false);
	$('.box-cart-overlay-error').show();
}

var
	lastFocusedElement = '';

/** 
 * box_CART neu laden
 */
function reloadCart() {
	if (top.location!=document.location){
		top.reloadCart();
	}

	$.ajax({
		type : "GET",
		url : "/ajax.php",
		data : 'func=cart_content',
		success : function(data) {
			try {
				var obj = JSON.parse(data);
				setCartLoading(false);
				if (obj.success) {
					$("#cart-count").html(obj.cart_count);
					$("#cart-total").html(obj.cart_total);
					$("#cart-html").html(obj.cart_html);
					setTimeout( function() {
						$(lastFocusedElement).focus();
					} , 100);
					initializeNewElements();
				} else {
					cartError();
				}
			} catch(err) {
				cartError();
			}
		},
		error : function() {
			cartError();
		}
	});
}

/** 
 * Produkt zum Warenkorb hinzufügen
 * 
 * @return false
 */
function executeAddToCart(dataString) {
	if (top.location!=document.location){
		top.executeAddToCart(dataString);
		return;
	}
	setCartLoading(true);
	openHeaderMenuItem(".header-tb-cart-content");

	$.ajax({
		type : "POST",
		url : "/ajax.php?func=add_product",
		data : dataString,
		success : function() {
			reloadCart();	
		},
		error : function() {
			cartError();
		}
	});
}

function addToCart() { 
	if ($('#product-cart-button').is('.product-cart-button-disabled')) {
		return false;
	}
	
	var products_qty = $("#cart_quantity [name=products_qty]").val();
	
	if (products_qty == "" || products_qty <= 0) {
		$("#cart_quantity [name=products_qty]").focus();
		return false;
	}
	
	var dataString = $("#cart_quantity").serialize();

	if (top.location!=document.location){
		closeLightbox();
	}
	top.executeAddToCart(dataString);	
	
	return false;
}

/**
 * Produkt zum Warenkorb hinzufügen (nach ID)
 * 
 * @param id ID des Forms
 * @return false
 */
function addToCartByID(id) { 
	var products_qty = $('#products_qty'+id).val();
	
	if (products_qty == "" || products_qty <= 0) {
		$('#products_qty'+id).focus();
		return false;
	}
	
	var dataString = $("#"+id).serialize();

	setCartLoading(true);
	openHeaderMenuItem(".header-tb-cart-content");

	$.ajax({
				type : "POST",
				url : "/ajax.php?func=add_product",
				data : dataString,
				success : function() {
					reloadCart();	
				},
				error : function() {
					cartError();
				}
			});
	return false;
}
/** 
 * Produkt aus dem Warenkorb entfernen
 * 
 * @param products_id ID des Produktes
 * @return false
 */
function removeFromCart(products_id) { 
	var dataString = "&products_id="+products_id;

	setCartLoading(true);
	
	$.ajax({
				type : "GET",
				url : "/ajax.php?func=remove_product"+dataString,
				data : '',
				success : function() {
					reloadCart();
				},
				error : function() {
					cartError();
				}
			});
	return false;
}

/**
 * Anzahl eines Produktes im Warenkorb setzen
 * 
 * @param el Input-Feld mit Anzahl
 */
function updateCartQuantity(el) {
	var product_quantity = $(el).val();
	if (product_quantity !== null && product_quantity !== '' && isNumeric(product_quantity)) {
		var form = $(el).parents('form:first');
		var dataString = form.serialize();
	
		lastFocusedElement = '#'+$(el).attr("id");
		setCartLoading(true);
		openHeaderMenuItem(".header-tb-cart-content");

		$.ajax({
					type : "POST",
					url : "/ajax.php?func=update_product",
					data : dataString,
					success : function() {
						reloadCart();	
					},
					error : function() {
						cartError();
					}
				});
	}
}


/**
 * Temporäre Seite nach der Liste anhängen
 */
function appendEmptyPanel(targetElement, panelNumber) {
	$('.slider-panel-container', targetElement).append('<div class="slider-panel slider-panel-loading slider-panel-'+panelNumber+'"></div>');
	var o=$('.slider-panel:last', targetElement);
	o.css({
		width: targetElement.data('panelWidth'),
		height: targetElement.data('panelHeight'),
		display: "block",
		opacity: "0.0"
	});
	o.animate(
			{opacity: 1.0},
			500, 
			"easeInExpo"
	);
}

/**
 * Temporäre Seite vor der Liste anhängen
 */
function prependEmptyPanel(targetElement, panelNumber) {
	$('.slider-panel-container', targetElement).prepend('<div class="slider-panel slider-panel-loading slider-panel-'+panelNumber+'"></div>');
	var o=$('.slider-panel:first', targetElement);
	o.css({
		width: targetElement.data('panelWidth'),
		height: targetElement.data('panelHeight'),
		display: "block",
		opacity: 0.0
	});
	o.animate(
			{opacity: 1.0},
			500, 
			"easeInExpo"
	);
}

/**
 * Anzahl der Seiten der Produktliste abfragen
 */
function countProductList(targetElement, nextElement, prevElement, listID) {
	$.ajax({
		type : "GET",
		url : "/ajax.php",
		data : 'func=count_list&list_id='+listID,
		success : function(data) {
			try {
				var obj = JSON.parse(data);
				if (obj.success) {
					if (obj.listCount>5) {
						obj.listCount = 10;
					}
					targetElement.data('panelCount', obj.listCount);
					if (obj.listCount>1) {
						nextElement.css({display: "block"});
						prevElement.css({display: "block"});
						$(".slider-panel-container", targetElement).css({ width: (targetElement.data('panelCount')+1)*targetElement.data('panelWidth')});
					} else {
						// falls nur eine Seite vorhanden ist Buttons verstecken
						nextElement.parent().parent().find('.slider-panels .slider-panel').each(function() {
							$(this).css({width: '100%'});
						});
						nextElement.parent().parent().find('.slider-panels .slider-panel-container').each(function() {
							$(this).css({width: '100%'});
						});
						nextElement.parent().parent().children('.slider-panels').css({margin: '0', width: '100%'});
						nextElement.parent().css({display: "none"});	
						prevElement.parent().css({display: "none"});
					}
				}
			} catch (err) {
				targetElement.data('panelCount', 1);
				nextElement.css({display: "none"});
			}
		},
		error : function() {
			targetElement.data('panelCount', 1);
			nextElement.css({display: "none"});
		}
	});	
}

/**
 * Temporäre Seite durch tatsächliche Seite ersetzen
 */
function loadProductListAppend(targetElement, listID, page, onFinishedCallback, data, height) {
	var oldElement = $('.slider-panel-'+page, targetElement);
	var newElement = oldElement.after(data).next();
	newElement.addClass('slider-panel-'+page);
	newElement.css({
		width: targetElement.data('panelWidth'),
		opacity: 0.0
	});
	if (height !==null) {
		newElement.css({
			height: height
		});
	}
	oldElement.remove();
	newElement.animate({opacity: 1.0}, 500,	"linear");

	if (onFinishedCallback !== undefined)
		onFinishedCallback(page);
}

/**
 * Temporäre Seite durch Seite mit Fehlermeldung ersetzen
 */
function loadProductListError(targetElement, listID, page, onFinishedCallback, error) {
	var oldElement = $('.slider-panel-'+page, targetElement);
	loadProductListAppend(targetElement, listID, page, onFinishedCallback, '<div class="slider-panels"><div class="slider-panel">'+error+'</div></div>', oldElement.height());
}

/**
 * Produktliste per Ajax laden
 * 
 * @param targetElement Container für die Listeneinträge
 * @param listID Liste die geladen werden soll
 * @param page Seite der Liste die geladen werden soll
 * @param onFinishedCallback Funktion die aufgerufen werden soll wenn die Anfrage abgeschlossen ist
 */
function loadProductList(targetElement, listID, page, onFinishedCallback) {
	$.ajax({
		type : "GET",
		url : "/ajax.php",
		data : 'func=load_list&list_id='+listID+'&page='+page,
		success : function(data) {
			try {
				var obj = JSON.parse(data);
				if (obj.success) {
					var html = '';
					if (obj.data != '') {
						html =  obj.data;
					}
					loadProductListAppend(targetElement, listID, page, onFinishedCallback, html);
				}
			} catch(err) {
				loadProductListError(targetElement, listID, page, onFinishedCallback, err);
			}

		},
		error : function(err) {
			loadProductListError(targetElement, listID, page, onFinishedCallback, err);
		}
	});	
}


var sliderCount = 1;

/**
 * Scrollbare Listen die per Ajax nachgeladen werden können
 */
$.fn.svdSlider = function(settings) {
settings = $.extend({
	autoHeight: false,
	autoHeightEaseDuration: 500,
	autoHeightEaseFunction: "easeOutExpo",
	autoSlide: false,
	autoSlideInterval: 7000,
	autoSlideStopWhenClicked: true,
	slideEaseDuration: 500,
	slideEaseFunction: "easeOutExpo",
	disableOnAnimation: true,
	listID: "",
	reverseDirection: false,
	maxPanelCount: 0,
	sliderID: ""
}, settings);

return this.each(function(){
	var slider = $(this);
	
	var sliderDisplay = slider.css('display');
	slider.css({display: "block" });
	var panelWidth = slider.find(".slider-panel").width();
	var panelHeight = slider.find(".slider-panel").height();
	var panelCount = slider.find(".slider-panel").length;
	var navigationTop = slider.find(".slider-panel:first").height()/2;
	slider.css({display: sliderDisplay });

	
	var panelContainerWidth = panelWidth*panelCount;
	var navClicks = 0;
	var animating = false;

	slider.data('panelWidth', panelWidth);
	slider.data('panelHeight', panelHeight);
	slider.data('panelCount', panelCount);
	
	$('.slider-panel', slider).wrapAll('<div class="slider-panel-container"></div>');
	$('.slider-panel', slider).each(function(intIndex){ $(this).addClass('slider-panel-'+(intIndex));});
	$(".slider-panel-container", slider).css({ width: panelContainerWidth, height: panelHeight });
	
	$(".slider-panels", slider).css({ width: panelWidth });
	$(".slider-panel", slider).css({ width: panelWidth });
	$(".slider-panel:first", slider).addClass('slider-panel-current');
	
	var currentPanel = 0;
	var firstPanel = 0;
	

	var sliderID = sliderCount;
	if (settings.id != "") 
		sliderID = settings.sliderID;
		
	$("#slider-nav-left-" + sliderID + " a").css({top: navigationTop});
	$("#slider-nav-right-" + sliderID + " a").css({top: navigationTop});

	if (settings.listID != "") {
		countProductList(slider, $('#slider-nav-right-' + sliderID + ' a'), $('#slider-nav-left-' + sliderID + ' a'), settings.listID);
	}
	
	$("#slider-nav-left-" + sliderID + " a").click(function(){
		navClicks++;
		if (settings.disableOnAnimation && animating && $(this).is(":not(animated)") )
			return false;
		if (currentPanel >= 0) {
			if (settings.maxPanelCount > 0) {
				var target = currentPanel+settings.maxPanelCount-1;
				for (n=slider.data('panelCount'); n>=target; n--) {
					var o=$('.slider-panel-'+n, slider);
					if (o.length) {
						o.remove();
						firstPanel -= 1;
					}
				}
			}
			$('.slider-panel-'+(currentPanel), slider).removeClass('slider-panel-current');

			if (currentPanel-1 < 0) {
				// Ans Ende scrollen
				if (settings.maxPanelCount > 0) {
					panelCount = 0;
					for (n=0; n<=slider.data('panelCount'); n++) {
						var o=$('.slider-panel-'+n, slider);
						if (o.length) {
							panelCount++;
						}
					}
					offset = - (panelWidth*(panelCount));
					if ($('.slider-panel-'+(slider.data('panelCount')-1), slider).length) {
						offset = - slider.data("panelWidth")*(slider.data('panelCount')-1);
					}
					firstPanel = slider.data('panelCount')-settings.maxPanelCount;	
					if (firstPanel<0)
						firstPanel = 0;
				}
				currentPanel = slider.data('panelCount')-1;
				
				if (settings.listID !="" && !$('.slider-panel-'+(currentPanel), slider).length) {
					appendEmptyPanel(slider, currentPanel);
					loadProductList(slider, settings.listID, currentPanel,  
							function(page){
								if (page==currentPanel) {
									$('.slider-panel-'+(currentPanel), slider).addClass('slider-panel-current');
									alterPanelHeight(currentPanel);
								}
							});
				}
				animating = true;
				$('.slider-panel-container', slider).animate(
						{ marginLeft: offset }, 
						settings.slideEaseDuration*1.5, 
						'easeInBack',
						function() {
							animating = false;
							offs=offset;
							if (settings.maxPanelCount > 0) {
								for (n=0; n<=slider.data('panelCount')-settings.maxPanelCount; n++) {
									var o=$('.slider-panel-'+n, slider);
									if (o.length) {
										o.remove();
										offs += slider.data("panelWidth");
									}
								}
							}
							$('.slider-panel-container', slider).css({marginLeft: offs});
						}
				);
				return false;
			}
			offset = - (panelWidth*((currentPanel-1)-(firstPanel)));
			currentPanel -= 1;
			if (settings.maxPanelCount > 0) {
				for (n=firstPanel; n<currentPanel; n++) {
					var o=$('.slider-panel-'+n, slider);
					if (!o.length) {
						offset += slider.data("panelWidth");
					}
				}
			}

			if ($('.slider-panel-'+(currentPanel), slider).length) {
				$('.slider-panel-'+(currentPanel), slider).addClass('slider-panel-current');
				alterPanelHeight(currentPanel);
			}

			if (settings.listID !="" && (currentPanel>=0) && !$('.slider-panel-'+(currentPanel), slider).length) {
				prependEmptyPanel(slider, currentPanel);
				newMarginLeft = parseInt($('.slider-panel-container', slider).css("marginLeft"));
				newMarginLeft -= slider.data("panelWidth");
				$('.slider-panel-container', slider).css({marginLeft: newMarginLeft});

				loadProductList(slider, settings.listID, currentPanel,  
						function(page){
							if (page==currentPanel) {
								$('.slider-panel-'+(currentPanel), slider).addClass('slider-panel-current');
								alterPanelHeight(currentPanel);
							}
						});
			}	

			animating = true;
			$('.slider-panel-container', slider).animate(
					{ marginLeft: offset }, 
					settings.slideEaseDuration, 
					settings.slideEaseFunction,
					function() {
						animating = false;
					}
			);
		}
		return false;
	});
		
	$('#slider-nav-right-' + sliderID + ' a').click(function(){
		navClicks++;
		if (settings.disableOnAnimation && animating && $(this).is(":not(animated)") )
			return false;
		if (currentPanel < slider.data('panelCount')) {
			$('.slider-panel-'+(currentPanel), slider).removeClass('slider-panel-current');

			if (settings.maxPanelCount > 0) {
				for (n=0; n<=currentPanel-settings.maxPanelCount+1; n++) {
					var o=$('.slider-panel-'+n, slider);
					if (o.length) {
						o.remove();
						firstPanel += 1;
						newMarginLeft = parseInt($('.slider-panel-container', slider).css("marginLeft"));
						newMarginLeft += slider.data("panelWidth");
						$('.slider-panel-container', slider).css({marginLeft: newMarginLeft});
					}
				}
			}
			
			if (currentPanel+1 == slider.data('panelCount')) {
				// An den Anfang scrollen
				firstPanel = 0;
				currentPanel = 0;
				offset = 0;
				
				if (settings.listID !="" && !$('.slider-panel-'+(currentPanel), slider).length) {
					prependEmptyPanel(slider, currentPanel);
					newMarginLeft = parseInt($('.slider-panel-container', slider).css("marginLeft"));
					newMarginLeft -= slider.data("panelWidth");
					$('.slider-panel-container', slider).css({marginLeft: newMarginLeft});

					loadProductList(slider, settings.listID, currentPanel,  
							function(page){
								if (page==currentPanel) {
									$('.slider-panel-'+(currentPanel), slider).addClass('slider-panel-current');
									alterPanelHeight(currentPanel);
								}
							});
				}
				animating = true;
				$('.slider-panel-container', slider).animate(
						{ marginLeft: offset }, 
						settings.slideEaseDuration*1.5, 
						'easeInBack',
						function() {
							animating = false;
							
							if (settings.maxPanelCount > 0) {
								for (n=settings.maxPanelCount; n<=slider.data('panelCount')+1; n++) {
									var o=$('.slider-panel-'+n, slider);
									if (o.length) {
										o.remove();
									}
								}
							}
						}
				);
				return false;
			}

			offset = - (panelWidth*((currentPanel+1)-firstPanel));
			currentPanel += 1;
			
			if (settings.maxPanelCount > 0) {
				for (n=firstPanel; n<currentPanel; n++) {
					var o=$('.slider-panel-'+n, slider);
					if (!o.length) {
						offset += slider.data("panelWidth");
					}
				}
			}

			if ($('.slider-panel-'+(currentPanel), slider).length) {
				$('.slider-panel-'+(currentPanel), slider).addClass('slider-panel-current');
				alterPanelHeight(currentPanel);
			}
			
			if (settings.listID !="" && (currentPanel<slider.data('panelCount')) && !$('.slider-panel-'+(currentPanel), slider).length) {
				appendEmptyPanel(slider, currentPanel);
				loadProductList(slider, settings.listID, currentPanel,
						function(page){
							if (page==currentPanel) { 
								$('.slider-panel-'+(currentPanel), slider).addClass('slider-panel-current');
								alterPanelHeight(currentPanel);
							}
						});
			}
			
			animating = true;
			$('.slider-panel-container', slider).animate(
					{ marginLeft: offset }, 
					settings.slideEaseDuration, 
					settings.slideEaseFunction,
					function() {
						animating = false;
					}
			);
		}
		return false;
	});
	
		
	if (settings.autoHeight) {
		panelHeight = $('.slider-panel:eq(' + (currentPanel - 1) + ')', slider).height();
		$('.slider-panels', slider).css({ height: panelHeight });
	};
	
	if (settings.autoSlide) {
		slider.ready(function() {
			setTimeout(autoSlide,settings.autoSlideInterval);
		});
	};
	
	function alterPanelHeight(x) {
		if (!$('.slider-panel-'+x, slider).length)
			return;
		
		$('.slider-panel-'+x, slider).css({width: panelWidth});
		if (settings.autoHeight) {
			panelHeight = $('.slider-panel-'+x, slider).height();
			$('.slider-panels', slider).animate({ height: panelHeight }, settings.autoHeightEaseDuration, settings.autoHeightEaseFunction);
		};
	};
	
	function autoSlide() {
		if (navClicks == 0 || !settings.autoSlideStopWhenClicked) {
			if (currentPanel == slider.data('panelCount')) {
				var offset = 0;
				currentPanel = 1;
			} else {
				var offset = - (panelWidth*currentPanel);
				currentPanel += 1;
			};
			alterPanelHeight(currentPanel - 1);
			$('.slider-panel-container', slider).animate({ marginLeft: offset }, settings.slideEaseDuration, settings.slideEaseFunction);
			setTimeout(autoSlide,settings.autoSlideInterval);
		};
	};
	
	sliderCount++;
});
};

/**
 * aufklappbares Element
 */
$.fn.svdCollapsible = function(settings) {
	settings = $.extend({
		allowOnlyOne: true, // nur ein geöffnetes Element erlauben
		withHover: false // öffnen/schließen bei hover, fixieren bei click
	}, settings);

	return this.each(function(){
		var container = $(this);
		var containerClass=$(this).attr('class');
		var items = containerClass.split(' ');
		containerClass = '.'+items[0];
		
		$('.collapsible-content').hide();
		$('.collapsible-trigger', container).removeClass('expanded').addClass('collapsed');

		$('.isfixed .collapsible-content').show();
		$('.isfixed .collapsible-trigger').addClass('expanded').removeClass('collapsed');
		
		if (settings.withHover) {
			$('.collapsible-trigger', container).unbind('hover');
			$('.collapsible-trigger', container).hover(
				function() {
					$(this).addClass('hover');
					if (container.is('.isfixed'))
						return;
					var element = container.children('.collapsible-content');
					if (element.is(":hidden")) {
						element.stop(true, true).animate({opacity: '+=0'}, 150).slideDown(250);
					}
				}, 
				function() {
					$(this).removeClass('hover');
					var element = container.children('.collapsible-content');
					element.stop(true, true);
					if (container.is('.isfixed'))
						return;
					if (element.is(":visible")) {
						element.slideUp(100);
					}
				}
			);
		}
		$('.collapsible-trigger', container).unbind('click');
		$('.collapsible-trigger', container).click(function() {
			if (settings.allowOnlyOne) {
				$('.collapsible-content').hide();
				$(containerClass).removeClass('isfixed');
				$(containerClass+' .collapsible-trigger').removeClass('expanded').addClass('collapsed');
			}
			var element = container.children('.collapsible-content');
			if (element.is(":hidden")) {
				element.stop(true, true).slideDown(100);
				$(this).removeClass('collapsed').addClass('expanded');
				container.addClass('isfixed');
			} else {
				if (!$(this).is('.hover') || container.is('.isfixed')){
					if (!$(this).is('.hover')) {
						element.stop(true, true).slideUp(100);
					}
					container.removeClass('isfixed');
					$(this).removeClass('expanded').addClass('collapsed');
				} else {
					container.addClass('isfixed');
					$(this).removeClass('collapsed');
					$(this).addClass('expanded');
				}
			}
		});
		
		$('.collapsible-opener', container).unbind('click');
		$('.collapsible-opener', container).click(function() {
			$('.collapsible-content').hide();
			$(containerClass).removeClass('isfixed');
			$(containerClass+' .collapsible-trigger').removeClass('expanded').addClass('collapsed');
			var element = container.children('.collapsible-content');
			if (element.is(":hidden")) {
				element.stop(true, true).slideDown(100);
				$('.collapsible-trigger', container).removeClass('collapsed').addClass('expanded');
				container.addClass('isfixed');
			} else {
			}
		});
	});
};

/**
 * Cliplister abfragen
 */
var clipListerAvailable = null;
function checkClipLister(clurl, cObj, onVideoAvailableCallback, onVideoNotAvailableCallback) {
	
	// Cache einrichten wenn Funktion bei Seitenaufruf mehrfach aufgerufen wird
	if ( clipListerAvailable !== null ) {
		if ( clipListerAvailable ) {
			if (onVideoAvailableCallback !== undefined)
				onVideoAvailableCallback( cObj );
		} else {
			if (onVideoNotAvailableCallback !== undefined)
				onVideoNotAvailableCallback( cObj );
		}
		
		return;
	}
	
	var test = new Image();
	test.onload = function() {
		if (test.width>=2) {
			clipListerAvailable = true;
			if (onVideoAvailableCallback !== undefined)
				onVideoAvailableCallback( cObj );
		} else {
			clipListerAvailable = false;
			if (onVideoNotAvailableCallback !== undefined)
				onVideoNotAvailableCallback( cObj );
		}
	};
	var s = clurl.replace(/\/ind/g,"");
	test.src = s.replace(/playBtn/g,"play")+"/cx";
}

/** 
 * Ansicht der Produktbilder auf der Produktdetailseite
 */
$.fn.svdImageViewer = function(settings) {
	settings = $.extend({
		slideEaseDuration: 250,
		slideEaseFunction: "linear"
	}, settings);
	
	return this.each(function(){
		var container = $(this);
		if (imageViewerImagesLarge == null)
			return;
		
		var firstImage = 0;
		var imageCount = 0;
		for (var n=0; n<imageViewerImagesLarge.length; n++) {
			if (imageViewerImagesLarge[n] != '') {
				imageCount += 1;
			}
		}

		container.find('.imgviewer-thumb').wrapAll('<div class="imgviewer-thumbs-container"></div>');
		container.find('.imgviewer-image').show();
		var count = 0;
		var height = 0;
		var maxHeight = 0;
		container.find('.imgviewer-image').each(function (){
			if (imageViewerImagesLarge[count] != '') {
				$(this).data('imageIndex', count);
				if (!$(this).complete) {
					height = height + 59;
					if (54>maxHeight) 
						maxHeight = 59;
				} else {
					height = height + $(this).height();
					if ($(this).height()>maxHeight) 
						maxHeight = $(this).height();
				}
				count += 1;
			} else {
				$(this).remove();	
			}
		});
		
		container.find('.imgviewer-thumbs-container').css({height: height+"px"});

		var h = $(container).height()-container.find('.imgviewer-buttons').height();
		container.find('.imgviewer-thumbs').css({height: maxHeight*3});
			
		if (imageCount>3) {
			container.find('.imgviewer-buttons').show();	
		}
		container.find('.imgviewer-buttons-up').hide();

		
		container.find('.imgviewer-image').hover(
			function (){
				container.find('.imgviewer-bigimage img.product').attr("src", imageViewerImagesLarge[$(this).data('imageIndex')]);
			}, function(){
				container.find('.imgviewer-bigimage img.product').attr("src", imageViewerProductImage);
			}
		);

		container.find('.imgviewer-buttons-down').click(function() {
			if (firstImage+3>=imageCount)
				return;

			var offset=0;
			container.find('.imgviewer-thumb').each(function(){
				index = $(this).data('imageIndex');
				if (($(this).is('.imgviewer-video') && firstImage>1 ) ||
					(imageViewerImagesLarge[index] != '' && index<firstImage+1)) {
					offset += $(this).height();
				}
			});
			container.find('.imgviewer-thumbs-container').animate({marginTop: '-'+offset+'px'}, settings.slideEaseDuration, settings.slideEaseFunction);
			firstImage += 1;
			if (firstImage>0)
				container.find('.imgviewer-buttons-up').show();

			if (firstImage+3>=imageCount)
				$(this).hide();
		});
		
		container.find('.imgviewer-buttons-up').click(function() {
			if (firstImage==0)
				return;

			var offset=0;
			container.find('.imgviewer-thumb').each(function(){
				index = $(this).data('imageIndex');
				if ( ($(this).is('.imgviewer-video') && firstImage>1 ) ||
					(imageViewerImagesLarge[index] != '' && index<firstImage-2)) {
					offset += $(this).height();
				}
			});
			container.find('.imgviewer-thumbs-container').animate({marginTop: '-'+offset+'px'}, settings.slideEaseDuration, settings.slideEaseFunction);

			firstImage -= 1;
			if (firstImage==0)
				$(this).hide();
			container.find('.imgviewer-buttons-down').show();
		});
		

		checkClipLister(clipListerLink, null,
			function(){
				container.find('.imgviewer-scroller').show();
				container.find('.imgviewer-video').show();
				
				height = height + container.find('.imgviewer-video').height();
				container.find('.imgviewer-thumbs-container').css({height: height+"px"});
				
				if (maxHeight==0)
					maxHeight = container.find('.imgviewer-video').height();
				container.find('.imgviewer-thumbs').css({height: maxHeight*3});

				imageCount += 1;
				if (imageCount>3) {
					container.find('.imgviewer-buttons').show();
				}
				if (imageCount>0) {
					container.find('.imgviewer-bigimage').removeClass('imgviewer-bigimage-full').addClass('imgviewer-bigimage-normal');
				}
			}, function () {
				container.find('.imgviewer-video').remove();
				if (imageCount==0) {
					container.find('.imgviewer-scroller').hide();
					container.find('.imgviewer-bigimage').removeClass('imgviewer-bigimage-normal').addClass('imgviewer-bigimage-full');
				}
			}
		);
	});
};

/** 
 * Kundenbewertung absenden 
 */
function submitReview() {
	if ($('#review').val() == $('#review').data('defaultValue')) {
		$('#review').val('');	
	}
	
	if (check_form('product_reviews_write')) {
		var submit_url = $('#product_reviews_write').attr("action");
		var data = $('#product_reviews_write').serialize();
		var container = $('#product_reviews_write').parent();
		
		$('#product_reviews_write').hide();
		$('.module-reviews-write-overlay-confirm').hide();
		$('.module-reviews-write-overlay-loading').fadeIn("slow");
		
		$.ajax({
					url : '/ajax.php?func=submit_review',
					type : "POST",
					data : data,
					success : function(data) {
						var obj = JSON.parse(data);
						if (obj.success) {
							reviewSubmissionSuccess();
						} else {
							reviewSubmissionError();
						}
					},
					error : function() {
						reviewSubmissionError();
					}
				});
	} else {
		$('.module-reviews-write-overlay-confirm').hide();
		$('#product_reviews_write').fadeIn("slow");
	}
	if ($('#review').val() == '') {
		$('#review').val($('#review').data('defaultValue'));	
	}
	return false;
}

function checkReview() {
	if ($('#review').val() == $('#review').data('defaultValue')) {
		$('#review').val('');	
	}
	submitted = false;
	if (check_form('product_reviews_write')) {
		$('#product_reviews_write').hide();
		$('.module-reviews-write-overlay-confirm').fadeIn("slow");
	}
	submitted = false;
	if ($('#review').val() == '') {
		$('#review').val($('#review').data('defaultValue'));	
	}
	return false;
}

function cancelReview() {
	$('.module-reviews-write-overlay-confirm').hide();
	$('#product_reviews_write').fadeIn("slow");
	return false;
}

/** 
 * Kundenbewertung erfolgreich gesendet 
 */
function reviewSubmissionSuccess() {
	$('.module-reviews-write-overlay-loading').hide();
	$('.module-reviews-write-overlay-thankyou').fadeIn("slow");
}

/**
 * Kundenbewertung nicht erfolgreich gesendet 
 */
function reviewSubmissionError(text) {
	$('.module-reviews-write-overlay-loading').hide();
	$('.module-reviews-write-overlay-error').fadeIn("slow");
	$('#product_reviews_write').show();
	return true;
}


/** 
 * Produktbewertung setzen (A->Input) 
 */
function setRating(p, rating, r) {
	var uls = $('.'+p);
	for(i=0; i<uls.length; i++) {
		uls[i].className = 'productrating ' + p + ' ' + r;
	}
	var inputs = $('.'+p+'_'+rating);

	for(i=0; i<inputs.length; i++) {
		inputs[i].checked = true;
	}
}


/** 
 * Popup Artikelinfo 
 */
function popup_productInfo(productID) {
	closeSelectBox();
	$.fn.colorbox({iframe:true, innerWidth: 670, innerHeight: 650, href: '/ajax.php?func=show_product&products_id='+productID});
	return false;
}


/** 
 * Popup Frage zu diesem Artikel 
 */
function popup_productQuestion() {
	var dom_prod_config = document.getElementById("prod_config");
	if (dom_prod_config) {
		top.$.fn.colorbox({iframe:true, innerWidth: 600, innerHeight: 650, href:dom_prod_config.value+'&ajax=1'});	
	}
	return false;
}

/**
 * Lightbox schließen
 * 
 * @return
 */
function closeLightbox() {
	top.$.fn.colorbox.close();
}

/**
 * base64 charset
 */
var keyStr = "ABCDEFGHIJKLMNOP" +
			 "QRSTUVWXYZabcdef" +
			 "ghijklmnopqrstuv" +
			 "wxyz0123456789+/" +
			 "=";

/**
 * Base64 encode
 * 
 * @param input Inputstring
 * @return base64 encoded string
 */
function base64encode(input) {
//	input = escape(input);
	var output = "";
	var chr1, chr2, chr3 = "";
	var enc1, enc2, enc3, enc4 = "";
	var i = 0;
	
	do {
		chr1 = input.charCodeAt(i++);
		chr2 = input.charCodeAt(i++);
		chr3 = input.charCodeAt(i++);
		
		enc1 = chr1 >> 2;
		enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
		enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
		enc4 = chr3 & 63;
		
		if (isNaN(chr2)) {
			enc3 = enc4 = 64;
		} else if (isNaN(chr3)) {
			enc4 = 64;
		}
		
		output = output +
		keyStr.charAt(enc1) +
		keyStr.charAt(enc2) +
		keyStr.charAt(enc3) +
		keyStr.charAt(enc4);
		chr1 = chr2 = chr3 = "";
		enc1 = enc2 = enc3 = enc4 = "";
	} while (i < input.length);
	
	return output;
}

/**
 * Base64 decode
 * 
 * @param input Inputstring
 * @return base64 decoded string
 */
function base64decode(input) {
	var output = "";
	var chr1, chr2, chr3 = "";
	var enc1, enc2, enc3, enc4 = "";
	var i = 0;
	// remove all characters that are not A-Z, a-z, 0-9, +, /, or =
	var base64test = /[^A-Za-z0-9\+\/\=]/g;
	if (base64test.exec(input)) {
		alert("There were invalid base64 characters in the input text.\n" +
		"Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\n" +
		"Expect errors in decoding.");
	}
	input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
	do {
		enc1 = keyStr.indexOf(input.charAt(i++));
		enc2 = keyStr.indexOf(input.charAt(i++));
		enc3 = keyStr.indexOf(input.charAt(i++));
		enc4 = keyStr.indexOf(input.charAt(i++));
		chr1 = (enc1 << 2) | (enc2 >> 4);
		chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
		chr3 = ((enc3 & 3) << 6) | enc4;
		output = output + String.fromCharCode(chr1);
		if (enc3 != 64) {
		output = output + String.fromCharCode(chr2);
		}
		if (enc4 != 64) {
		output = output + String.fromCharCode(chr3);
		}
		chr1 = chr2 = chr3 = "";
		enc1 = enc2 = enc3 = enc4 = "";
	} while (i < input.length);
	
	return unescape(output);
}

/**
 * Update an url (set new attributes)
 * 
 * @param myhref original url
 * @return new url if successful, otherwise false
 */
function update_url(myhref) {
	if (myhref.length > 0) {
		var i = 0;
		
		// Get product attributes and values (stolen from above)
		var attributes_ids = document.getElementById("attributes_ids");
		var attributes_ids_string = '';
		if (attributes_ids) {
			attributes_ids = attributes_ids.value.split(',');
			for(i = 0; i < attributes_ids.length; i++) {
				attribute_values = document.getElementsByName("id["+attributes_ids[i]+"]");
				for(ii = 0; ii < attribute_values.length; ii++) {
					if(attribute_values[ii].checked == true) attributes_ids_string = attributes_ids_string + "{"+attributes_ids[i]+"}"+attribute_values[ii].value;
				}
			}
		}
		
		// If this product has attributes -> modify url (prod_config=)
		if (attributes_ids_string.length > 0) {
			// Split url where [0] is the base url
			var url_split = myhref.split("?");
			var url_base = url_split[0];
			
			// Join "?"-split-mistakes where i > 1
			var get_split = "";
			for(i = 1; i < url_split.length; i++) {
				get_split += url_split[i];
			}
			
			// split get-params
			get_split = get_split.split("&");
			
			// Test if the url has an prod_config. If not, add it. 
			var has_prod_config = false;
			for(i = 0; i < get_split.length; i++) {
				var get_sub_split = get_split[i].split("=");
				if (get_sub_split[0] == "prod_config") {
					has_prod_config = true;
					break;
				}
			}
			if (has_prod_config == false) {				
				get_split.push("prod_config=");
			}
		
			var get = Array();
			// modify prod_config
			for(i = 0; i < get_split.length; i++) {
				// split each get-param into key and value
				var get_sub_split = get_split[i].split("=");
				var key = get_sub_split[0];
				var value = get_sub_split[1];
				
				// create new products_id with attribute_code and encode it
				if (key == "prod_config") {
					if (attributes_ids_string.length == 0) {
						continue;
					}
					value = base64encode(attributes_ids_string);
					has_prod_config = true;
				}
				
				// push (the modified) get-param into 'get'
				get.push(key + "=" + value);
			}
			
			// encode url with corrected products_id + attributes
			return url_base + "?" + get.join("&");;
		} else {
			return myhref;
		}
	}
	return false;
}

/**
 * URLs an die gewählte Produktkonfiguration anpassen
 */
function update_all_button_urls() {
	// Wish List button
	var wish_button = document.getElementById("wish_list_button");
	if (wish_button) {
		wish_button.href = update_url(wish_button.href);
	}
	
	// Product-question image
	var dom_prod_config = document.getElementById("prod_config");
	if (dom_prod_config) {
		dom_prod_config.value = update_url(dom_prod_config.value);
	}
}


/**
 * Produktkonfiguration laden und Ansicht aktualisieren
 */
function updateProductInfo() {
	if(!document.getElementById("article_x_nr")) {
		return false;
	}
	$('.product-price-overlay-error').fadeOut('fast');
	$('.product-price-overlay-loading').animate({opacity: '+=0'}, 1000).fadeIn('slow');
	$('#product-cart-button').addClass('product-cart-button-disabled');

	product_x_nr = $('#article_x_nr').val();
	attributes_ids = $('#attributes_ids').val();
	attributes_ids = attributes_ids.split(',');

	//CHECK ALL CHECKBOXES AND GET THE VALUE OF THE CHECKED BOXES
	var attributes_ids_string = '';
	for(i = 0; i < attributes_ids.length; i++) {
		attribute_values = document.getElementsByName("id["+attributes_ids[i]+"]");
		for(ii = 0; ii < attribute_values.length; ii++) {
			if(attribute_values[ii].checked == true) attributes_ids_string = attributes_ids_string + "&id_"+attributes_ids[i]+"="+attribute_values[ii].value;
		}
	}

	$.ajax({
				url : '/ajax.php?func=product_info',
				type : "POST",
				data : "x_nr="+product_x_nr+attributes_ids_string,
				success : function(data) {
					var obj = JSON.parse(data);
					if (obj.success) {
							$('#product_price').html(obj.preis);
							$('#product_oldprice').html('');
							if (obj.preis_special)
								$('#product_oldprice').html(obj.preis_special);
							$('#products_model').html(obj.art_nr);
							$('#shipping_zusatz').html(obj.shipping_zusatz);
							
							if ($('#tooltip').length) {
								hideTooltip($('#shipping_info'));
							}
							
							$('#shipping_image').attr('src', obj.shipping_image);
							$('#shipping_image').attr('alt', obj.shipping_name);
							$('#shipping_image').attr('title', obj.shipping_name);
							$('#shipping_image').data('tooltip', '');
							
							$('#shipping_info').attr('title', obj.shipping_name);
							$('#shipping_info').data('tooltip', '');
							
							$('#product-cart-button').removeClass('product-cart-button-disabled');
							$('#product-cart-button').removeClass('image-button-disabled');
							$('.product-price-overlay-loading').stop(true).fadeOut('fast');
					} else {
						$('.product-price-overlay-loading').stop(true).fadeOut('fast');
						$('.product-price-overlay-error').fadeIn('fast');
						$('#product-cart-button').addClass('image-button-disabled');
					}
					update_all_button_urls();
				},
				error : function() {
					$('.product-price-overlay-loading').stop(true).fadeOut('fast');
					$('.product-price-overlay-error').fadeIn('fast');
					$('#product-cart-button').addClass('image-button-disabled');
					update_all_button_urls();
				}
			});
	return false;
}

/**
 * URL Parameter parsen und Produktkonfiguration setzen
 */
function set_product_configuration() {
	// Split url where [0] is the base url
	var url = window.location.toString();
	var url_split = url.split("?");
	
	// Join "?"-split-mistakes where i > 1
	var get_split = "";
	for(i = 1; i < url_split.length; i++) {
		get_split += url_split[i];
	}
	
	// split get-params
	get_split = get_split.split("&");
	for(i = 0; i < get_split.length; i++) {
		// split each get-param into key and value
		// we have to do this manually because of the ==='s at the end and splits behaviour is strange
		var ypos = get_split[i].indexOf("=");
		var key = get_split[i].substr(0, ypos);
		var value = get_split[i].substr(ypos + 1);
		
		if (key == "prod_config") {
			value = base64decode(value);
			var value_split = value.split("{");
			for (j = 1; j < value_split.length; j++) {
				var options_split	= value_split[j].split("}");
				var tags_id			= "id_" + options_split[1];
//				var tags_name		= "id[" + options_split[0] + "]";
//				var tags_value		= options_split[1];
				
				var dom_elem = document.getElementById(tags_id);
				if (dom_elem != null) {
					dom_elem.checked = true;
				}
			}
		}
	}
}


function check_payment_selection(selected) {
	if (document.getElementById("domlast_fields")) {
		if(selected.value == 'banktransfer') {
			document.getElementById("domlast_fields").style.display = 'block';
		} else {
			document.getElementById("domlast_fields").style.display = 'none';
		}
	}
	return true;
}


PopUp = function(autoapply){
	this.types = [];
	this.defaults = {
		width:800,
		height:600,
		top:0,
		left:0,
		location:false,
		resizable:false,
		scrollbars:false,
		status:false,
		toolbar:false,
		menubar:false,
		center:true,
		title:"Dieser Link wird in einem neuen Fenster geöffnet"
	};
	this.addType({
		name:"standard",
		location:true,
		resizable:true,
		scrollbars:true,
		status:true,
		toolbar:true,
		menubar:true
	});
	if(autoapply) this.apply();
};
o = PopUp.prototype;
o.apply = function(){
	var links = document.getElementsByTagName("a");
	if(!links) return;
	for(var i=0;i<links.length;i++){
		var l = links[i];
		if(l.className.indexOf("popup") > -1) {
			this.attachBehavior(l,this.getType(l));
		}
	}
};
o.addType = function(type){
	for(var prop in this.defaults){
		if(type[prop] == undefined) type[prop] = this.defaults[prop];
	}
	this.types[type.name] = type;
};
o.getType = function(l){
	for(var type in this.types){
		if(l.className.indexOf(type) > -1) return type;
	}
	return "standard";
};
o.attachBehavior = function(l,type){
	var t = this.types[type];
	l.title = t.title;
	l.popupProperties = {
		type: type,
		ref: this
	};
	l.onclick = function(){
		this.popupProperties.ref.open(this.href,this.popupProperties.type);
		return false;
	};
};
o.booleanToWord = function(bool){
	if(bool) return "yes";
	return "no";
};
o.getTopLeftCentered = function(typeObj){
	var t = typeObj;
	var r = {left:t.left, top:t.top};
	var sh = screen.availHeight-20;
	var sw = screen.availWidth-10;
	if(!sh || !sw) return r;
	r.left = (sw/2)-(t.width/2);
	r.top = (sh/2)-(t.height/2);
	return r;
};
o.getParamsOfType = function(typeObj){
	var t = typeObj;
	var c = this.booleanToWord;
	if(t.center){
		var tc = this.getTopLeftCentered(typeObj);
		t.left = tc.left;
		t.top = tc.top;
	}
	var p = "width="+t.width;
	p+=",height="+t.height;
	p+=",left="+t.left;
	p+=",top="+t.top;
	p+=",location="+c(t.location);
	p+=",resizable="+c(t.resizable);
	p+=",scrollbars="+c(t.scrollbars);
	p+=",status="+c(t.status);
	p+=",toolbar="+c(t.toolbar);
	p+=",menubar="+c(t.menubar);
	return p;
};
o.open = function(url,type){
	if(!type) type = "standard";
	var t = this.types[type];
	var p = this.getParamsOfType(t);
	var w = window.open(url,t.name,p);
	if(w) w.focus();
	return false;
};


/**
 * Form absenden über onclick
 * 
 * @param formName
 * @return
 */

var formSubmitted = false;

function linkFormSubmit(formName) {
	if (formSubmitted) 
		return false;

	if(typeof check_form == 'function') {
		try {
			var canSubmit = check_form(formName);
		} catch (e) {
			canSubmit=false;
		}
	if (canSubmit) {
			formSubmitted = true;
			document.getElementById(formName).submit();
			disableAllFormElements();
			}
		} else {
			formSubmitted = true;
			document.getElementById(formName).submit();
			disableAllFormElements();
		}
	return false;
}

/** 
 * Form drucken über onclick 
 */
function linkFormPrint(formName) {
	if(typeof check_form == 'function') {
		try {
			var canSubmit = check_form(formName);
		} catch (e) {
			canSubmit=false;
		}
		if (canSubmit)
			window.print(); 
	} else 
		window.print();
	return false;
}



/* ehemals header.php */
var selected;
var submitter = null;

function submitFunction() {
	submitter = 1;
}
function popupWindow(url) {
	window.open(url,'popupWindow','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=no,width=100,height=100,screenX=150,screenY=150,top=150,left=150');
}

function selectRowEffect(object, buttonSelect) {
	if (!selected) {
		if (document.getElementById) {
			selected = document.getElementById('defaultSelected');
		} else {
			selected = document.all['defaultSelected'];
		}
	}

	if (selected) selected.className = 'moduleRow';
	object.className = 'moduleRowSelected';
	selected = object;

	// one button is not an array
	if (document.getElementById('payment'[0])) {
		document.getElementById('payment'[buttonSelect]).checked=true;
	} else {
		//document.getElementById('payment'[selected]).checked=true;
	}
}

function rowOverEffect(object) {
	if (object.className == 'moduleRow') object.className = 'moduleRowOver';
}

function rowOutEffect(object) {
	if (object.className == 'moduleRowOver') object.className = 'moduleRow';
}

function popupImageWindow(url) {
	window.open(url,'popupImageWindow','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=100,height=100,screenX=150,screenY=150,top=150,left=150');
}

/** 
 * Checkout Adressbearbeitung 
 */
function checkoutSetAddressData(addressID) {
	for (n=0; n<addresses.length; n++) {
		if (addresses[n]["address_book_id"] == addressID) {
			$('.checkout-address-edit .toolbox-heading').text(addresses[n]["firstname"]+' '+addresses[n]["lastname"]); 
			$('#checkout_address_edit [name=edit]').val(addressID).change();
			$('#checkout_address_edit [name=firstname]').val(addresses[n]["firstname"]).change();
			$('#checkout_address_edit [name=lastname]').val(addresses[n]["lastname"]).change();
			$('#checkout_address_edit [name=company]').val(addresses[n]["company"]).change();
			$('#checkout_address_edit [name=street_address]').val(addresses[n]["street_address"]).change();
			$('#checkout_address_edit [name=postcode]').val(addresses[n]["postcode"]).change();
			$('#checkout_address_edit [name=city]').val(addresses[n]["city"]).change();
			$('#checkout_address_edit [name=gender]').val(addresses[n]["gender"]).change();
			$('#checkout_address_edit [name=country]').val(addresses[n]["country"]).change();
			break;
		}
	}
}


function checkoutEditAddress(addressID) {
	$('#checkout_address_edit .error').slideUp(100);
	$('#checkout_address_edit .success').slideUp(100);
	checkoutSetAddressData(addressID);
}

function checkoutSaveAddressError(errorDescription) {
	if (errorDescription != undefined && errorDescription != '') {
		$('#checkout_address_edit .error').html(errorDescription);
	} else {
	}
	$('#checkout_address_edit .error').slideDown(100);
}

function checkoutSaveAddress(addressID) {
	$('#checkout_address_edit .error').slideUp(100);
	$('#checkout_address_edit .success').slideUp(100);

	if (addressID == undefined)
		addressID = $('#checkout_address_edit [name=edit]').val();
	var form = $('#checkout_address_edit');
	var dataString = form.serialize();
	
	$.ajax({
		type : "POST",
		url : '/ajax.php?func=save_address',
		data : dataString,
		success : function(data) {
			try {
				var obj = JSON.parse(data);
				if (obj.success) {
					addresses = obj.addresses;
					$('#checkout_address_edit .success').slideDown(100);
					$('.checkout-address-rows').html(obj.selection);
					checkoutSetAddressData(obj.addressID);
				} else {
					checkoutSaveAddressError(obj.errorDescription);
				}
			} catch(err) {
				checkoutSaveAddressError();
			}
		},
		error : function() {
			checkoutSaveAddressError();
		}
	});
	return false;
}


(function($){
	$.fn.extend({
		widthTruncate: function(options) {
			var defaults = {
					width: 'auto',
					after: '...'
			};
			
			var options = $.extend(defaults, options);
		  
			return this.each(function() {
				if(options.width=='auto'){
					truncateWidth=$(this).width()-8;
				} else { 
					truncateWidth = options.width;
				}
				if($(this).width() > truncateWidth && truncateWidth > 0){		 
					var smaller_text = $(this).text();
					var tLength = smaller_text.length;
					$target = $(this).html('<span id="truncateWrapper" style="visibility: hidden">'+smaller_text+options.after+'</span>');
					i=tLength;
					while ($target.width() > truncateWidth && i>0) {
						$target.html($.trim(smaller_text.substr(0, i))+ options.after);
						i--;
					}
					if (i>0)
						$(this).html($target.html());
					else
						$(this).html(smaller_text);
				}
			});
		}
	});
})(jQuery);

/**
 * Javascript-Comboboxen
 */

function closeSelectBox() {
	$('#selectbox-container').children().each(function() {
		$(this).hide();
	});
	$('#selectbox-container').hide();
}

$.fn.extend({
	svdSelectBox: function(options) {
		if (!$('#selectbox-container').length) {
			var cont = document.createElement("div");
			container = $(cont);
			container.attr('id', 'selectbox-container');
			container.css({position: 'absolute', zIndex: '9000', display: 'none'});
			$('body').append(container);
		}
		return this.each(function() {
			new jQuery.svdSelectBox(this, options);
		});
	}
});

$.fn.toEm = function(settings){
	settings = jQuery.extend({
		scope: 'body'
	}, settings);
	var that = parseInt(this[0],10);
	var scopeTest = jQuery('<div style="display: none; font-size: 1em; margin: 0; padding:0; height: auto; line-height: 1; border:0;">&nbsp;</div>').appendTo(settings.scope);
	var scopeVal = scopeTest.height();
	scopeTest.remove();
	return (that / scopeVal).toFixed(8) + 'em';
};


$.fn.toPx = function(settings){
	settings = jQuery.extend({
		scope: 'body'
	}, settings);
	var that = parseFloat(this[0]);
	var scopeTest = jQuery('<div style="display: none; font-size: 1em; margin: 0; padding:0; height: auto; line-height: 1; border:0;">&nbsp;</div>').appendTo(settings.scope);
	var scopeVal = scopeTest.height();
	scopeTest.remove();
	return Math.round(that * scopeVal) + 'px';
};

jQuery.svdSelectBox = function(selectobj, options) {
	var opt = options || {};
	opt.inputClass = opt.inputClass || "selectbox";
	opt.inputClassDisabled = opt.inputClassDisabled || "selectbox-disabled";
	opt.containerClass = opt.containerClass || "selectbox-wrapper";
	opt.hoverClass = opt.hoverClass || "current";
	opt.currentClass = opt.selectedClass || "selected";
	opt.disabledClass = opt.selectedClass || "disabled";
	opt.optionsContainer = opt.optionsContainer || null; 
	opt.hideOptionsOnClick = opt.hideOptionsOnClick || true;
	opt.inputItemWrapper = opt.inputItemWrapper || "div";
	opt.inputItemBreak  = opt.inputItemBreak || "";
	
	var elm_id = selectobj.id;
	var active = -1;
	var inFocus = false;
	var hasfocus = false;
	var $select = $(selectobj);

	var spanLineHeight = '1.5em';
	var inputLineHeight = $select.outerHeight();
	var internalChange = false;
	
	if (opt.optionsContainer != null) {
		var $container = $(opt.optionsContainer);
	} else {
		var $container = setupContainer(opt);
	}

	var $input = setupInput(opt, $select);
	$select.hide().before($input);
	
	if (opt.optionsContainer == null) {
		$container.append(getSelectOptions($input.attr('id')));
		$container.hide();
	}
	setInputText();
	$('#selectbox-container').append($container);
	
	$('#selectbox-container')
	.mouseover(function(event) {
		hasfocus = true;
	})
	.mouseout(function(event) {
		hasfocus = false;
	});
	
	$select.change(function() {
		if (internalChange) {
			internalChange = false;
			return;
		}
		$('option', $select).each(function(){
			li = optionToLi($(this));
			if ($(this).is(':selected')) {
				li.addClass(opt.currentClass);
			} else {
				li.removeClass(opt.currentClass); 
			}
		});
		setInputText();
	});
	
	$("body").click(function(e){
		var target = $(e.target);  
		if (!target.is('.'+opt.inputClass) 
			&& !target.is('.'+opt.inputClass+' '+opt.inputItemWrapper)
			&& !target.is('.'+opt.inputClass+' '+opt.inputItemWrapper+' span')
			&& !target.is('.'+opt.disabledClass)) {
			if (!hasfocus)
				hideMe();	
		}
	});

	$input
	.click(function(){
		if ($select.is(':disabled')) 
			return;
		hasfocus = false;
		if (inFocus) {
			inFocus = false;	
			return;
		}
		if (!$('#selectbox-container').is(':visible')) {
			showMe();
		} else {
			hideMe();
		}
		
	})
	.focus(function(e){
		if ($select.is(':disabled')) 
			return;
		hasfocus = false;
		inFocus = true;
		if (!$('#selectbox-container').is(':visible')) {
			showMe();
		} else {
			hideMe();
		}
	})
	.keydown(function(event) {	   
		if ($select.is(':disabled')) 
			return;
		
		switch(event.keyCode) {
			case 38: // up
				event.preventDefault();
				moveSelect(-1);
				break;
			case 40: // down
				event.preventDefault();
				moveSelect(1);
				break;
			//case 9:  // tab 
			case 13: // return
				event.preventDefault();
				$('li.'+opt.hoverClass).trigger('click');
				break;
			case 27: //escape
				hideMe();
				break;
		}
	})
	.blur(function(event) {
		if ($select.is(':disabled')) 
			return;
		inFocus = false;
		if ($('#selectbox-container').is(':visible') && hasfocus ) {
		} else {
			hideMe();	
		}
	});


	function showMe() { 
		pos = $input.offset();
		$('#selectbox-container').css({top: pos.top+$input.outerHeight(), left: pos.left, width: $input.width()});
		borderCol = $select.css('borderLeftColor');
		if (borderCol != '') {
			$('#selectbox-container').css({'borderColor': borderCol});
		}
		$('#selectbox-container').show();
		$('#selectbox-container').height('auto');
		$container.show();
		if (opt.optionsContainer==null) {
			if ($('#selectbox-container').height() > 200) {
				$('#selectbox-container').height(200);
			}
		}
	}
	
	function hideMe() { 
		hasfocus = false;
		$('#selectbox-container').children().each(function() {
			$(this).hide();
		});
		$('#selectbox-container').hide();
	}
	
	function setupContainer(options) {
		var container = document.createElement("div");
		$container = $(container);
		$container.attr('id', elm_id+'_container');
		$container.addClass(options.containerClass);
		return $container;
	}
	
	function setupInput(options, select) {
		var input = document.createElement("span");
		var $input = $(input);
		$input.attr("id", elm_id+"_input");
		$input.addClass(options.inputClass);
		$input.attr("tabIndex", $select.attr("tabindex"));
		
		if ($.browser.msie)
			var ems = $(0.99).toPx({scope: $select.parent()});
		else 
			var ems = $select.css("font-size");
		$input.css({fontSize: ems});
		$input.css({fontFamily: $select.css("fontFamily")});
		
		$input.css({width: select.outerWidth(),  outline: 'none'});

		isMultiple = select.attr('multiple');
		if (isMultiple) {
			// temporäres select erzeugen da Safari size=1 nicht respektiert
			$s = select.after('<select></select>').next();
			spanLineHeight = Math.round($s.outerHeight()-2);
			spanLineHeight++; 
			inputLineHeight = $s.outerHeight();
			$s.remove();
		} else {
			spanLineHeight = Math.round(select.outerHeight()-2);
			inputLineHeight = select.outerHeight();
		}
		
		spanLineHeight +='px';
		$(opt.inputItemWrapper, $input).css({lineHeight: spanLineHeight, height: spanLineHeight});
		
		
		borderCol = select.css('borderLeftColor');
		if (borderCol != '' && borderCol != '#ffffff') {
			$input.css({'borderColor': borderCol});
		}
		if (select.is(':disabled')) {
			$input.addClass(options.inputClassDisabled);
		}
		return $input;	
	}
	
	function moveSelect(step) {
		var lis = $("li", $container);
		if (!lis) return;

		active += step;

		if (active < 0) {
			active = 0;
		} else if (active >= lis.size()) {
			active = lis.size() - 1;
		}

		lis.removeClass(opt.hoverClass);

		$(lis[active]).addClass(opt.hoverClass);
	}

	function liToOption(li) {
		ar = (''+$(li).attr('id')).split('_');
		el = ar[ar.length-1];
		return $('option[value='+el+']', $select);
	}
	
	function optionToLi(option) {
		return $('#'+$input.attr('id')+'_' + $(option).val());
	}
	
	function setInputText() {
		if (!$select.attr('multiple')) {
			if (opt.optionsContainer == null) {
				if (!$("li."+opt.currentClass, $container).length)
					return;
				var li = $("li."+opt.currentClass, $container).get(0);
				li = liToOption(li);
			} else {
				var li = $(':selected', $select).get(0);
			}
			
			$input.children().remove();
			$target = $input.append('<'+opt.inputItemWrapper+'><span class="optionText">'+$(li).text()+'</span></'+opt.inputItemWrapper+'>');
			$input.css({height: inputLineHeight-2});		
		} else {
			var count = 1;
			$input.children().remove();
			if ($("li."+opt.currentClass, $container).length) {
				count = $(":selected", $select).length;
				var str = '';
				$("li."+opt.currentClass, $container).each(function(index) {
					$option = liToOption(this);
					text = '<span class="optionText">'+$option.text()+'</span>';
					text = '<input id="check_'+this.id+'" type="checkbox" checked="checked" />'+text;
					str = str+'<'+opt.inputItemWrapper+'>'+text+'</'+opt.inputItemWrapper+'>';
					if (index < count-1) {
						str = str+ opt.inputItemBreak;
					}
				});
				$target = $input.append(str);
				$('input', $input).click(function(event) {
					var li = $(this);
					var ar = (''+li.attr('id')).split('check_');
					var el = ar[ar.length-1];
					li = $('#'+el);
					li.removeClass(opt.currentClass);
					$('input', li).attr('checked', false);
					hideMe();
					setCurrent();
				});

			} else {
				if ($select.attr('title') != '') {
					$input.append('<'+opt.inputItemWrapper+'>'+$select.attr('title')+'</'+opt.inputItemWrapper+'>');
				} else {
					$input.append('<'+opt.inputItemWrapper+'>&nbsp;</'+opt.inputItemWrapper+'>');
				}
			}
			if (count == 1)
				$input.css({height: inputLineHeight*count, backgroundPosition: '100% 50%'});
			else {
				h = (spanLineHeight.replace('px', '')*count);
				$input.css({height: h, backgroundPosition: '100% '+Math.round(h-inputLineHeight*2/3)+'px'});
			}
		}
		
		$(opt.inputItemWrapper, $input).css({lineHeight: spanLineHeight, height: spanLineHeight});
		if ($('.optionText', $target).position() != undefined) {
			targetWidth = $input.width()-26;
			if ($('.optionText', $target).position().left<$input.width())
				targetWidth -= $('.optionText', $target).position().left;
			if (targetWidth>0)
				$('.optionText', $target).widthTruncate({width: targetWidth});
		}
	}
	
	function setCurrent() {	
		$('option', $select).each(function(){$(this).attr("selected", false);});

		$('li.'+opt.currentClass, $container).each(function(index){
			liToOption($(this)).attr("selected", true);
		});
		setInputText();
		
		internalChange = true;
		$select.trigger('change');
		return true;
	}
	
	function getSelectOptions(parentid) {
		var select_options = new Array();
		var ul = document.createElement('ul');
		$select.children('option').each(function() {
			// JSON-Optionen aus class-Tag auslesen
			var m = /({.*})/.exec($(this).attr('class') );
			data = false;
			if (m)
				data = eval('('+m[1]+')');
			if (data === false) {
				data = eval('('+"{extraText: '', image:''}"+')');
			}

			li = document.createElement('li');
			li.setAttribute('id', parentid + '_' + $(this).val());
			str = $(this).html();
			if (data.image != undefined && data.image != '') {
				str = '<img src="'+data.image+'" width="15" />'+$(this).html();
			}
			if ($select.attr('multiple')) {
				isSelected = '';
				isDisabled = '';
				if($(this).is(':selected')) isSelected = ' checked="checked"';
				if($(this).is(':disabled')) isDisabled = ' disabled="disabled"';
				str = '<input type="checkbox"'+isSelected+isDisabled+'/>' + str;
			}
			if (data.extraText != undefined && data.extraText != '') {
				str = str+' <span class="extraText">'+data.extraText+'</span>';
			}
			li.innerHTML = str; 
			if ($(this).is(':selected')) {
				$(li).addClass(opt.currentClass);
			}
			if ($(this).is(':disabled')) {
				$(li).addClass(opt.disabledClass);
			}
			ul.appendChild(li);
			$(li).css({fontSize: $input.css("fontSize")});
			$(li).css({fontFamily: $input.css("fontFamily")});
			
			
			$(li)
			.mouseover(function(event) {
				hasfocus = true;
				$(this).addClass(opt.hoverClass);
			})
			.mouseout(function(event) {
				hasfocus = false;
				$(this).removeClass(opt.hoverClass);
			})
			.click(function(event) {
				if ($(this).is('li.'+opt.disabledClass)) {
					return;
				}
				if (!$select.attr('multiple')) {
					$('li.'+opt.currentClass).removeClass(opt.currentClass); 
					$(this).addClass(opt.currentClass);
				} else {
					var li = $(this);
					var ar = (''+li.id).split('_');
					var el = ar[ar.length-1];
					if ($(this).is('.'+opt.currentClass)) {
						$(this).removeClass(opt.currentClass);
						$('input', this).attr('checked', false);
					} else {
						$(this).addClass(opt.currentClass);
						$('input', this).attr('checked', true);
					}
				}
				setCurrent();
				hideMe();
			});
			$('input', li)
			.mouseover(function(event) {
				hasfocus = true;
				$(this).parent().addClass(opt.hoverClass);
			})
			.mouseout(function(event) {
				hasfocus = false;
				$(this).parent().removeClass(opt.hoverClass);
			});

		});
		return ul;
	}
};
function FFSuggest() {
	
	var pRequest;
	var pLayer;
	var pDebug					= false;
	var pInstanceName			= '';
	var pSearchURL				= '';
	var pQueryParamName			= '';
	var pFormname 				= '';
	var pLayerName				= '';
	var pQueryInput;
	var pSuggest				= new Array();
	var pLastQuery;
	var pCurrentSelection		= 0;
	var submitted				= false;
	var pShowImages				= false;

	var pSuggestImageClass 		= 'suggestImage';
	var pSuggestQueryClass 		= 'suggestTextQuery';
	var pSuggestTypeClass 		= 'suggestTextType';
	var pSuggestAmountClass     = 'suggestTextAmount';
	var pSuggestQueryTypedClass = 'suggestTextQueryTyped';
	var pSuggestFooterClass     = 'suggestFooter';
	var pSuggestHeaderClass     = 'suggestHeader';
	var pSuggestRowClass	    = 'suggestRow';
	var pSuggestHighlightClass  = 'suggestHighlight';

	this.init = function(searchURL, formname, queryParamName, divLayername, instanceName, debugMode, channelParamName, channel, showImages) {
		pSearchURL			= searchURL;
		pFormname			= formname;
		pQueryParamName		= queryParamName;
		pChannelParamName	= channelParamName;
		pChannel			= channel;
		pLayerName			= divLayername;
		pInstanceName		= instanceName;
 		pDebug				= debugMode;
 		pShowImages			= showImages;
		if (pSearchURL == '') {		
			if (pDebug) alert('no searchurl defined');
			return null;
		} else if (pInstanceName == '') {
			if (pDebug) alert('no instancename defined');
			return null;
		} else if (pFormname == '') {
			if (pDebug) alert('no formname defined');
			return null;
		} else if (pQueryParamName == '') {
			if (pDebug) alert('no queryparamname defined');
			return null;
		} else if (pLayerName == '') {
			if (pDebug) alert('need a layer for output');
		}
		pQueryInput = document[pFormname][pQueryParamName];
		pQueryInput.onkeyup	= handleKeyPress;
		pQueryInput.onfocus	= showLayer;
		pQueryInput.onblur	= hideLayer;
		document[pFormname].onsubmit = handleSubmit;
	}
	
	function handleSubmit() {
		submitted = true;
		if (pSuggest[pCurrentSelection] != undefined) {
			document[pFormname][pQueryParamName].value = pSuggest[pCurrentSelection].split('###')[0];
			createQueryFromSuggestField();
		}
	}
	
	this.handleClick = function() {
		if (pSuggest[pCurrentSelection] != undefined) {
			document[pFormname][pQueryParamName].value = pSuggest[pCurrentSelection].split('###')[0];
			createQueryFromSuggestField();
			document[pFormname].submit();
		}
	}
	
	this.handleMouseOver = function(pos) {
		var tblCell = getTableCell(pos);
		unmarkAll();
		if (tblCell != null) {
			highlightSuggest(tblCell);
			pCurrentSelection = pos;
		}
	}
	
	this.handleMouseOut = function(pos) {
		var tblCell = getTableCell(pos);
		if (tblCell != null) {
			unmarkSuggest(tblCell);
			pCurrentSelection = -1
		}
	}
	
	function handleKeyPress(evt) {
		evt = (evt) ? evt : ((event) ? event : null);
		var keyCode = evt.keyCode;
		if (keyCode == 38) {
			moveSelection('up')
		} else if (keyCode == 27) {	
			hideLayer();
		} else if (keyCode == 40) {
			moveSelection('down');
		} else {
			if (pQueryInput.value == '') {
				hideLayer();
				if (pLayer != null){ pLayer.innerHTML = ''; }
				return null;
			}
			if (pLastQuery != pQueryInput.value){ startAjax(); }
			pLastQuery = pQueryInput.value;
		}
	}
	
	function moveSelection(direction) {
		var pos = pCurrentSelection;
		if (direction == 'up'){	pos--; }
		else{ 					pos += 1; }
		
		if (pos < 0) {
			unmarkAll();
			pQueryInput.focus();
			pCurrentSelection	= -1;
		} else {
			var tblCell = getTableCell(pos);
			if (tblCell != null) {
				unmarkAll();
				highlightSuggest(tblCell);
				pCurrentSelection = pos;
			}
		}
		
		var query = pQueryInput.value;
		pQueryInput.value = '';
		pQueryInput.focus();
		pQueryInput.value = query; 
	}
	
	function startAjax() {
		var query = pQueryInput.value;
		if(query.length > 50 ){ return; }

		
		var requestURL = pSearchURL +'?'+ pQueryParamName +'='+ escape(query) +'&'+ pChannelParamName +'='+ pChannel;
		 
		
		try {
			if( window.XMLHttpRequest ) {
				pRequest = new XMLHttpRequest();
			} else if( window.ActiveXObject ) {
				pRequest = new ActiveXObject( "Microsoft.XMLHTTP" );
			} else {
				if (pDebug) alert( 'no ajax connection' );
			}
			
			pLayer = document.getElementById(pLayerName);
			if (pLayer != null) {
				if (query != '') {

					pRequest.open( "GET", requestURL, true );
					pRequest.onreadystatechange = callbackAjax;
					pRequest.send( null );
				} else {
					hideLayer();
				}
			} else {
				if (pDebug) alert( 'no layer for output found' );
			}
		} catch( ex ) {
			hideLayer();
			if (ex == undefined) {
				if (pDebug) alert( 'Error: ' + ex.getmessage );
			} else {
				if (pDebug) alert( 'Error: ' + ex );
			}
		}
	}
	
	function hideLayer() {
		if (pLayer != null) {
			pLayer.style.display = 'none';
			fireSuggestLayerHidden();
		}
	}
	
	this.hideLayerOutsideCall = function() {
		if (pLayer != null) {
			pLayer.style.display = 'none';
			fireSuggestLayerHidden();
		}
	}
	
	function showLayer() {
		if (pLayer != null && pSuggest != null && pSuggest.length >= 1) {
			pLayer.style.display = 'block';
		}
	}
	
	function callbackAjax() {
		if (submitted == false) {
			if (pRequest.readyState == 4) {
				if (pRequest.status != 200) {
					hideLayer();
					if (pDebug) alert( 'Error (' + pRequest.status + '): ' + pRequest.statusText );
				} else {
					handleResponse(pRequest.responseText);
				}
			}
		}
  }

	// calls the callback for "outside" listeners if the callback is implemented
	function fireSuggestCompleted(suggestLayerIsVisible) {
		if (typeof(onSuggestCompleted) == 'function') {
			onSuggestCompleted(suggestLayerIsVisible);
		}
	}
	
	// calls the callback for "outside" listeners if the callback is implemented
	function fireSuggestLayerHidden() {
		if (typeof(onSuggestLayerHidden) == 'function') {
			onSuggestLayerHidden();
		}
	}

	function handleResponse(text) {
		var colSpan = 3;
		if(pShowImages){colSpan++;}
		
		pCurrentSelection = -1;
		pSuggest = new Array();
		pSuggest = text.split('\n');
		var outputText = '<table cellpadding="0" cellspacing="0" class="' + pLayerName + '" width="100%" border="0" onMouseDown="' + pInstanceName + '.handleClick();">';
		outputText += '<tr class="'+pSuggestHeaderClass+'" ><td nowrap="nowrap" colspan="'+colSpan+'">Vorschl&#228;ge zu Ihrer Suche...</td></tr>';
		
		var pNewSuggest = new Array();
		for (var i = 0; i < pSuggest.length; i++) {
			var firstChar = pSuggest[i].charCodeAt(0);
			
			if (firstChar != 13 && firstChar != 10 && pSuggest[i].length >= 1) {
				pNewSuggest.push(pSuggest[i]);
			}
		}
		pSuggest = pNewSuggest;
		var query = pQueryInput.value;
		
		for (var i = 0; i < pSuggest.length; i++) {
			pSuggestParts = new Array();
			pSuggestParts = pSuggest[i].split("###");
			
			if (document.URL.split(":")[0] == 'https' && pSuggestParts[3].split(":")[0] == 'http') {
				pSuggestParts[3] = pSuggestParts[3].replace(/http:/g, "https:");
			} else if (document.URL.split(":")[0] == 'http' && pSuggestParts[3].split(":")[0] == 'https') {
				pSuggestParts[3] = pSuggestParts[3].replace(/https:/g, "http:");
			}
			
			outputText += '<tr id="' + pLayerName + '_' + i + '" class="'+pSuggestRowClass+'" onMouseOver="' + pInstanceName + '.handleMouseOver(' + i + ');" onMouseOut="' + pInstanceName + '.handleMouseOut(' + i + ');">';
			if(pShowImages){
				outputText +=	'<td nowrap="nowrap" class="'+ pSuggestImageClass +'"><img src="' + pSuggestParts[3] + '" alt=""/></td>';
			}
			outputText +=		'<td nowrap="nowrap" class="'+ pSuggestQueryClass +'">' + pSuggestParts[0].replace(new RegExp("("+query+")","ig"),'<span class="'+pSuggestQueryTypedClass+'">$1</span>') + '</td>'
								+'<td nowrap="nowrap" class="'+ pSuggestTypeClass +'">' + pSuggestParts[2] + '</td>'
								+'<td nowrap="nowrap" class="'+ pSuggestAmountClass +'">' + pSuggestParts[1] + '</td>'
						+'</tr>';
		}
		outputText += '<tr><td class="'+pSuggestFooterClass+'" colspan="'+colSpan+'">&nbsp;</td></tr></table>';
		if (pSuggest.length >= 1) {
			showLayer();
			pLayer.innerHTML = outputText;

			// calback for "outside" listeners
			fireSuggestCompleted(true);
		} else {
			hideLayer();
			pLayer.innerHTML = '';
			
			// calback for "outside" listeners
			fireSuggestCompleted(false);
		}
		
	}
	
	function highlightSuggest(tblCell) {
		tblCell.className = pSuggestHighlightClass; 
	}
	
	function unmarkSuggest(tblCell) {
		tblCell.className = pSuggestRowClass; 
	}
	
	function unmarkAll() {
		var tblCell;
		for (var i = 0; i < pSuggest.length; i++) {
			tblCell = getTableCell(i);
			if (tblCell != null) {
				unmarkSuggest(tblCell);
			}
		}
	}
	
	function getTableCell(pos) {
		var tblCell;
		tblCell = document.getElementById(pLayerName + '_' + pos);
		return tblCell;
	}
	
	//creates a hidden input field to pass, so we know this query was chosen from suggest
	function createQueryFromSuggestField(){
		var element = document.createElement('input');
		element.name = 'queryFromSuggest';
		element.type = 'hidden';
		element.value = 'true';
		document[pFormname].appendChild(element);
	}
}