(function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else
return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else
return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else
selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;if(one)return value;values.push(value);}}return values;}else
return(this[0].value||"").replace(/\r/g,"");}return undefined;}if(value.constructor==Number)value+='';return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else
this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else
return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else
jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i<length;i++)if((options=arguments[i])!=null)for(var name in options){var src=target[name],copy=options[name];if(target===copy)continue;if(deep&&copy&&typeof copy=="object"&&!copy.nodeType)target[name]=jQuery.extend(deep,src||(copy.length!=null?[]:{}),copy);else if(copy!==undefined)target[name]=copy;}return target;};var expando="jQuery"+now(),uuid=0,windowData={},exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i,defaultView=document.defaultView||{};jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)window.jQuery=_jQuery;return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/^[\s[]?function/.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.browser.msie)script.text=data;else
script.appendChild(document.createTextNode(data));head.insertBefore(script,head.firstChild);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!==undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])break;if(!name)jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)elem.removeAttribute(expando);}delete jQuery.cache[id];}},each:function(object,callback,args){var name,i=0,length=object.length;if(args){if(length==undefined){for(name in object)if(callback.apply(object[name],args)===false)break;}else
for(;i<length;)if(callback.apply(object[i++],args)===false)break;}else{if(length==undefined){for(name in object)if(callback.call(object[name],name,object[name])===false)break;}else
for(var value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.className?" ":"")+className;});},remove:function(elem,classNames){if(elem.nodeType==1)elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return!jQuery.className.has(classNames,className);}).join(" "):"";},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else
jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i<stack.length;i++)if(color(stack[i])){swap[i]=stack[i].style.display;stack[i].style.display="block";}ret=name=="display"&&swap[stack.length-1]!=null?"none":(computedStyle&&computedStyle.getPropertyValue(name))||"";for(i=0;i<swap.length;i++)if(swap[i]!=null)stack[i].style.display=swap[i];}if(name=="opacity"&&ret=="")ret="1";}else if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var left=style.left,rsLeft=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;style.left=ret||0;ret=style.pixelLeft+"px";style.left=left;elem.runtimeStyle.left=rsLeft;}}return ret;},clean:function(elems,context){var ret=[];context=context||document;if(typeof context.createElement=='undefined')context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;jQuery.each(elems,function(i,elem){if(!elem)return;if(elem.constructor==Number)elem+='';if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else
ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&&notxml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&&notxml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&&notxml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else
while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]===elem)return i;return-1;},merge:function(first,second){var i=0,elem,pos=first.length;if(jQuery.browser.msie){while(elem=second[i++])if(elem.nodeType!=8)first[pos++]=elem;}else
while(elem=second[i++])first[pos++]=elem;return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv!=!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<length;i++){var value=callback(elems[i],i);if(value!=null)ret[ret.length]=value;}return ret.concat.apply([],ret);}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing"}});jQuery.each({parent:function(elem){return elem.parentNode;},parents:function(elem){return jQuery.dir(elem,"parentNode");},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(selector){var ret=jQuery.map(this,fn);if(selector&&typeof selector=="string")ret=jQuery.multiFilter(selector,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;return this.each(function(){for(var i=0,length=args.length;i<length;i++)jQuery(args[i])[original](this);});};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1)this.removeAttribute(name);},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode)this.parentNode.removeChild(this);}},empty:function(){jQuery(">*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return i<m[3]-0;},gt:function(a,i,m){return i>m[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~")merge[id]=true;r.push(n);}if(m=="+")break;}}ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}if(m[1]==".")r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}r=tmp;}ret=r;}t=t.replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)if(n.nodeType==1)n.nodeIndex=c++;merge[id]=true;}var add=false;if(first==0){if(node.nodeIndex==last)add=true;}else if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)/first>=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else
for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var 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 timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i<args.length)jQuery.event.proxy(fn,args[i++]);return this.click(jQuery.event.proxy(fn,function(event){this.lastToggle=(this.lastToggle||0)%i;event.preventDefault();return args[this.lastToggle++].apply(this,arguments)||false;}));},hover:function(fnOver,fnOut){return this.bind('mouseenter',fnOver).bind('mouseleave',fnOut);},ready:function(fn){bindReady();if(jQuery.isReady)fn.call(document,jQuery);else
jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.call(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DOMContentLoaded",jQuery.ready,false);if(jQuery.browser.msie&&window==top)(function(){if(jQuery.isReady)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}jQuery.ready();})();if(jQuery.browser.opera)document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady)return;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}jQuery.ready();},false);if(jQuery.browser.safari){var numStyles;(function(){if(jQuery.isReady)return;if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);return;}if(numStyles===undefined)numStyles=jQuery("style, link[rel=stylesheet]").length;if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}jQuery.ready();})();}jQuery.event.add(window,"load",jQuery.ready);}jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};});var withinElement=function(event,elem){var parent=event.relatedTarget;while(parent&&parent!=elem)try{parent=parent.parentNode;}catch(error){parent=elem;}return parent==elem;};jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();});jQuery.fn.extend({_load:jQuery.fn.load,load:function(url,params,callback){if(typeof url!='string')return this._load(url);var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,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(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else
xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else
jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else
for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else
e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)if(!timers[i]())timers.splice(i--,1);if(!timers.length){clearInterval(jQuery.timerId);jQuery.timerId=null;}},13);}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")this.elem.style[this.prop]="1px";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=now();if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})();
(function($)
{$.fn.jqzoom=function(options)
{var settings={zoomType:'standard',zoomWidth:200,zoomHeight:200,xOffset:10,yOffset:0,position:"right",lens:true,lensReset:false,imageOpacity:0.2,title:true,alwaysOn:false,showEffect:'show',hideEffect:'hide',fadeinSpeed:'fast',fadeoutSpeed:'slow',preloadImages:true,showPreload:true,preloadText:'Loading zoom',preloadPosition:'center'};options=options||{};$.extend(settings,options);return this.each(function()
{var a=$(this);var aTitle=a.attr('title');$(a).css('outline-style','none');var img=$("img",this);var imageTitle=img.attr('title');var smallimage=new Smallimage(img);var smallimagedata={};var btop=0;var bleft=0;var loader=null;loader=new Loader();var ZoomTitle=(trim(aTitle).length>0)?aTitle:(trim(imageTitle).length>0)?imageTitle:null;var ZoomTitleObj=new zoomTitle();if(a[0].href.match(".jpg|.gif|.png"))
{var largeimage=new Largeimage(a[0].href);}
else
{var largeimage=new Largeimage(a[0].rel);}
var lens=new Lens();var lensdata={};var largeimageloaded=false;var scale={};var stage=null;var running=false;var mousepos={};var firstime=0;var preloadshow=false;var isMouseDown=false;var dragstatus=false
smallimage.loadimage();if($('#parent_product_id').val()>0&&$('.lightbox_active').length==0&&!$(this).hasClass('thickbox'))
{var strProductPopupURL='/productimages/'+($('#parent_product_id').val())+'/'+(($('#product_id').val()==0)?$('.image_product_id').val():$('#product_id').val())+'/'+($('.image_id').val());$(this).unbind('click');if($(this).attr('rel')=='product_image_gallery')
{$(this).bind('click',function(){$('#product_image_gallery').click();return false;});}
else{var sDimensions = $(this).attr('rel');if(sDimensions != ''){var aDimensions = sDimensions.split('-');$(this).bind('click', function(){ popupWindow(strProductPopupURL,aDimensions[0],aDimensions[1]);return false;} );}else{$(this).bind('click', function(){ popupWindow(strProductPopupURL,750,700);return false;} );
}}}else{}
$(this).hover(function(e)
{mousepos.x=e.pageX;mousepos.y=e.pageY;activate();},function()
{deactivate();});if(settings.alwaysOn)
{setTimeout(function(){activate();},150);}
function activate()
{running=false;largeimage=false;largeimageloaded=false;if(!running){smallimage.findborder();running=true;img.removeAttr('title');$(a).removeAttr('title');if(!largeimage||$.browser.safari){if(a[0].href.match(".jpg|.gif|.png"))
{largeimage=new Largeimage(a[0].href);}
else
{largeimage=new Largeimage(a[0].rel);}}
if(!largeimageloaded||$.browser.safari)
{largeimage.loadimage();}else
{if(settings.zoomType!='innerzoom')
{stage=new Stage();stage.activate();}
lens=new Lens;lens.activate();}
a[0].blur();return false;}}
function deactivate()
{if(settings.zoomType=='reverse'&&!settings.alwaysOn)
{img.css({'opacity':1});}
if(!settings.alwaysOn)
{running=false;largeimageloaded=false;$(lens.node).unbind('mousemove');lens.remove();if($('div.jqZoomWindow').length>0)
{if(stage!=null)
{stage.remove();}}
if($('div.jqZoomTitle').length>0)
{ZoomTitleObj.remove();}
img.attr('title',imageTitle);a.attr('title',aTitle);$().unbind();a.unbind('mousemove');firstime=0;if(jQuery('.zoom_ieframe').length>0)
{jQuery('.zoom_ieframe').remove();}}else
{if(settings.lensReset)
{switch(settings.zoomType)
{case'innerzoom':largeimage.setcenter();break;default:lens.center();break;}}
activate();}};function Smallimage(image)
{this.node=image[0];
this.loadimage=function()
{this.node.src=image[0].src;
if(typeof smallimagedata.top==="undefined"){this.node.onload();} /* WebKit fix for JQZoom. MB */
};this.findborder=function()
{var bordertop='';bordertop=$(img).css('border-top-width');btop='';var borderleft='';borderleft=$(img).css('border-left-width');bleft='';if(bordertop)
{for(i=0;i<3;i++)
{var x=[];x=bordertop.substr(i,1);if(isNaN(x)==false)
{btop=btop+''+bordertop.substr(i,1);}else
{break;}}}
if(borderleft)
{for(i=0;i<3;i++)
{if(!isNaN(borderleft.substr(i,1)))
{bleft=bleft+borderleft.substr(i,1);}
else
{break;}}}
btop=(btop.length>0)?eval(btop):0;bleft=(bleft.length>0)?eval(bleft):0;}
this.node.onload=function()
{if(a.css('position')!='absolute'&&a.parent().css('position'))
{}
if(a.parent().css('position')!='absolute')
{a.parent().css('position','relative');}
else{}
if($.browser.safari||$.browser.opera)
{$(img).css({position:'absolute',top:'0px',left:'0px'});}
smallimagedata.w=$(this).width();smallimagedata.h=$(this).height();smallimagedata.h=$(this).height();smallimagedata.pos=$(this).offset();smallimagedata.pos.l=$(this).offset().left;smallimagedata.pos.t=$(this).offset().top;smallimagedata.pos.r=smallimagedata.w+smallimagedata.pos.l;smallimagedata.pos.b=smallimagedata.h+smallimagedata.pos.t;a.height(smallimagedata.h);a.width(smallimagedata.w);if(settings.preloadImages)
{largeimage.loadimage();}};return this;};function Lens()
{this.node=document.createElement("div");$(this.node).addClass('jqZoomPup');this.node.onerror=function(){$(lens.node).remove();lens=new Lens();lens.activate();};this.loadlens=function()
{switch(settings.zoomType)
{case'reverse':this.image=new Image();this.image.src=smallimage.node.src;this.node.appendChild(this.image);$(this.node).css({'opacity':1});break;case'innerzoom':this.image=new Image();this.image.src=largeimage.node.src;this.node.appendChild(this.image);$(this.node).css({'opacity':1});break
default:break;}
switch(settings.zoomType)
{case'innerzoom':lensdata.w=smallimagedata.w;lensdata.h=smallimagedata.h;break;default:lensdata.w=(settings.zoomWidth)/scale.x;lensdata.h=(settings.zoomHeight)/scale.y;break;}
$(this.node).css({width:lensdata.w+'px',height:lensdata.h+'px',position:'absolute',display:'none',borderWidth:1+'px'});a.append(this.node);}
return this;};Lens.prototype.activate=function()
{this.loadlens();switch(settings.zoomType)
{case'reverse':img.css({'opacity':settings.imageOpacity});(settings.alwaysOn)?lens.center():lens.setposition(null);a.bind('mousemove',function(e)
{mousepos.x=e.pageX;mousepos.y=e.pageY;lens.setposition(e);});break;case'innerzoom':$(this.node).css({top:0,left:0});if(settings.title)
{ZoomTitleObj.loadtitle();}
largeimage.setcenter();a.bind('mousemove',function(e)
{mousepos.x=e.pageX;mousepos.y=e.pageY;largeimage.setinner(e);});break;default:(settings.alwaysOn)?lens.center():lens.setposition(null);$(a).bind('mousemove',function(e)
{mousepos.x=e.pageX;mousepos.y=e.pageY;lens.setposition(e);});break;}
return this;};Lens.prototype.setposition=function(e)
{if(e)
{mousepos.x=e.pageX;mousepos.y=e.pageY;}
if(firstime==0)
{var lensleft=(smallimagedata.w)/2-(lensdata.w)/2;var lenstop=(smallimagedata.h)/2-(lensdata.h)/2;$('div.jqZoomPup').show()
if(settings.lens)
{this.node.style.visibility='visible';}
else
{this.node.style.visibility='hidden';$('div.jqZoomPup').hide();}
firstime=1;}else
{var lensleft=mousepos.x-smallimagedata.pos.l-(lensdata.w)/2;var lenstop=mousepos.y-smallimagedata.pos.t-(lensdata.h)/2;}
if(overleft())
{lensleft=0+bleft;}else
if(overright())
{if($.browser.msie)
{lensleft=smallimagedata.w-lensdata.w+bleft+1;}else
{lensleft=smallimagedata.w-lensdata.w+bleft-1;}}
if(overtop())
{lenstop=0+btop;}else
if(overbottom())
{if($.browser.msie)
{lenstop=smallimagedata.h-lensdata.h+btop+1;}else
{lenstop=smallimagedata.h-lensdata.h-1+btop;}}
lensleft=parseInt(lensleft);lenstop=parseInt(lenstop);$('div.jqZoomPup',a).css({top:lenstop,left:lensleft});if(settings.zoomType=='reverse')
{$('div.jqZoomPup img',a).css({'position':'absolute','top':-(lenstop-btop+1),'left':-(lensleft-bleft+1)});}
this.node.style.left=lensleft+'px';this.node.style.top=lenstop+'px';largeimage.setposition();function overleft(){return mousepos.x-(lensdata.w+2*1)/2-bleft<smallimagedata.pos.l;}
function overright(){return mousepos.x+(lensdata.w+2*1)/2>smallimagedata.pos.r+bleft;}
function overtop(){return mousepos.y-(lensdata.h+2*1)/2-btop<smallimagedata.pos.t;}
function overbottom(){return mousepos.y+(lensdata.h+2*1)/2>smallimagedata.pos.b+btop;}
return this;};Lens.prototype.center=function()
{$('div.jqZoomPup',a).css('display','none');var lensleft=(smallimagedata.w)/2-(lensdata.w)/2;var lenstop=(smallimagedata.h)/2-(lensdata.h)/2;this.node.style.left=lensleft+'px';this.node.style.top=lenstop+'px';$('div.jqZoomPup',a).css({top:lenstop,left:lensleft});if(settings.zoomType=='reverse')
{$('div.jqZoomPup img',a).css({'position':'absolute','top':-(lenstop-btop+1),'left':-(lensleft-bleft+1)});}
largeimage.setposition();if($.browser.msie)
{$('div.jqZoomPup',a).show();}else
{setTimeout(function(){$('div.jqZoomPup').fadeIn('fast');},10);}};Lens.prototype.getoffset=function(){var o={};o.left=parseInt(this.node.style.left);o.top=parseInt(this.node.style.top);return o;};Lens.prototype.remove=function()
{if(settings.zoomType=='innerzoom')
{$('div.jqZoomPup',a).fadeOut('fast',function(){$(this).remove();});}else
{$('div.jqZoomPup',a).remove();}};Lens.prototype.findborder=function()
{var bordertop='';bordertop=$('div.jqZoomPup').css('borderTop');lensbtop='';var borderleft='';borderleft=$('div.jqZoomPup').css('borderLeft');lensbleft='';if($.browser.msie)
{var temp=bordertop.split(' ');bordertop=temp[1];var temp=borderleft.split(' ');borderleft=temp[1];}
if(bordertop)
{for(i=0;i<3;i++)
{var x=[];x=bordertop.substr(i,1);if(isNaN(x)==false)
{lensbtop=lensbtop+''+bordertop.substr(i,1);}else
{break;}}}
if(borderleft)
{for(i=0;i<3;i++)
{if(!isNaN(borderleft.substr(i,1)))
{lensbleft=lensbleft+borderleft.substr(i,1)}else
{break;}}}
lensbtop=(lensbtop.length>0)?eval(lensbtop):0;lensbleft=(lensbleft.length>0)?eval(lensbleft):0;}
function Largeimage(url)
{this.url=url;this.node=new Image();this.loadimage=function()
{if(!this.node)
this.node=new Image();this.node.style.position='absolute';this.node.style.display='none';this.node.style.left='-5000px';this.node.style.top='10px';loader=new Loader();if(settings.showPreload&&!preloadshow)
{loader.show();preloadshow=true;}
if (this.url != 'product_image_gallery' && this.url != ''){document.body.appendChild(this.node);this.node.src=this.url;}}
this.node.onload=function()
{this.style.display='block';var w=Math.round($(this).width());var h=Math.round($(this).height());this.style.display='none';scale.x=(w/smallimagedata.w);scale.y=(h/smallimagedata.h);if($('div.preload').length>0)
{$('div.preload').remove();}
largeimageloaded=true;if(settings.zoomType!='innerzoom'&&running){stage=new Stage();stage.activate();}
if(running)
{lens=new Lens();lens.activate();}
if($('div.preload').length>0)
{$('div.preload').remove();}}
return this;}
Largeimage.prototype.setposition=function()
{this.node.style.left=Math.ceil(-scale.x*parseInt(lens.getoffset().left)+bleft)+'px';this.node.style.top=Math.ceil(-scale.y*parseInt(lens.getoffset().top)+btop)+'px';};Largeimage.prototype.setinner=function(e){this.node.style.left=Math.ceil(-scale.x*Math.abs(e.pageX-smallimagedata.pos.l))+'px';this.node.style.top=Math.ceil(-scale.y*Math.abs(e.pageY-smallimagedata.pos.t))+'px';$('div.jqZoomPup img',a).css({'position':'absolute','top':this.node.style.top,'left':this.node.style.left});};Largeimage.prototype.setcenter=function(){this.node.style.left=Math.ceil(-scale.x*Math.abs((smallimagedata.w)/2))+'px';this.node.style.top=Math.ceil(-scale.y*Math.abs((smallimagedata.h)/2))+'px';$('div.jqZoomPup img',a).css({'position':'absolute','top':this.node.style.top,'left':this.node.style.left});};function Stage()
{var leftpos=smallimagedata.pos.l;var toppos=smallimagedata.pos.t;this.node=document.createElement("div");$(this.node).addClass('jqZoomWindow');$(this.node).css({position:'absolute',width:Math.round(settings.zoomWidth)+'px',height:Math.round(settings.zoomHeight)+'px',display:'none',zIndex:10000,overflow:'hidden'});switch(settings.position)
{case"right":leftpos=(smallimagedata.pos.r+Math.abs(settings.xOffset)+settings.zoomWidth<screen.width)?(smallimagedata.pos.l+smallimagedata.w+Math.abs(settings.xOffset)):(smallimagedata.pos.l-settings.zoomWidth-Math.abs(settings.xOffset));topwindow=smallimagedata.pos.t+settings.yOffset+settings.zoomHeight;toppos=(topwindow<screen.height&&topwindow>0)?smallimagedata.pos.t+settings.yOffset:smallimagedata.pos.t;break;case"left":leftpos=(smallimagedata.pos.l-Math.abs(settings.xOffset)-settings.zoomWidth>0)?(smallimagedata.pos.l-Math.abs(settings.xOffset)-settings.zoomWidth):(smallimagedata.pos.l+smallimagedata.w+Math.abs(settings.xOffset));topwindow=smallimagedata.pos.t+settings.yOffset+settings.zoomHeight;toppos=(topwindow<screen.height&&topwindow>0)?smallimagedata.pos.t+settings.yOffset:smallimagedata.pos.t;break;case"top":toppos=(smallimagedata.pos.t-Math.abs(settings.yOffset)-settings.zoomHeight>0)?(smallimagedata.pos.t-Math.abs(settings.yOffset)-settings.zoomHeight):(smallimagedata.pos.t+smallimagedata.h+Math.abs(settings.yOffset));leftwindow=smallimagedata.pos.l+settings.xOffset+settings.zoomWidth;leftpos=(leftwindow<screen.width&&leftwindow>0)?smallimagedata.pos.l+settings.xOffset:smallimagedata.pos.l;break;case"bottom":toppos=(smallimagedata.pos.b+Math.abs(settings.yOffset)+settings.zoomHeight<$('body').height())?(smallimagedata.pos.b+Math.abs(settings.yOffset)):(smallimagedata.pos.t-settings.zoomHeight-Math.abs(settings.yOffset));leftwindow=smallimagedata.pos.l+settings.xOffset+settings.zoomWidth;leftpos=(leftwindow<screen.width&&leftwindow>0)?smallimagedata.pos.l+settings.xOffset:smallimagedata.pos.l;break;default:leftpos=(smallimagedata.pos.l+smallimagedata.w+settings.xOffset+settings.zoomWidth<screen.width)?(smallimagedata.pos.l+smallimagedata.w+Math.abs(settings.xOffset)):(smallimagedata.pos.l-settings.zoomWidth-Math.abs(settings.xOffset));toppos=(smallimagedata.pos.b+Math.abs(settings.yOffset)+settings.zoomHeight<screen.height)?(smallimagedata.pos.b+Math.abs(settings.yOffset)):(smallimagedata.pos.t-settings.zoomHeight-Math.abs(settings.yOffset));break;}
this.node.style.left=leftpos+'px';this.node.style.top=toppos+'px';return this;}
Stage.prototype.activate=function()
{if(!this.node.firstChild)
this.node.appendChild(largeimage.node);if(settings.title)
{ZoomTitleObj.loadtitle();}
document.body.appendChild(this.node);switch(settings.showEffect)
{case'show':$(this.node).show();break;case'fadein':$(this.node).fadeIn(settings.fadeinSpeed);break;default:$(this.node).show();break;}
$(this.node).show();if($.browser.msie&&$.browser.version<7){this.ieframe=$('<iframe class="zoom_ieframe" frameborder="0" src="#"></iframe>').css({position:"absolute",left:this.node.style.left,top:this.node.style.top,zIndex:99,width:settings.zoomWidth,height:settings.zoomHeight}).insertBefore(this.node);};largeimage.node.style.display='block';}
Stage.prototype.remove=function(){switch(settings.hideEffect)
{case'hide':$('.jqZoomWindow').remove();break;case'fadeout':$('.jqZoomWindow').fadeOut(settings.fadeoutSpeed);break;default:$('.jqZoomWindow').remove();break;}}
function zoomTitle()
{this.node=jQuery('<div />').addClass('jqZoomTitle').html(''+ZoomTitle+'');this.loadtitle=function()
{if(settings.zoomType=='innerzoom')
{$(this.node).css({position:'absolute',top:smallimagedata.pos.b+3,left:(smallimagedata.pos.l+1),width:smallimagedata.w}).appendTo('body');}else
{$(this.node).appendTo(stage.node);}};}
zoomTitle.prototype.remove=function(){$('.jqZoomTitle').remove();}
function Loader()
{this.node=document.createElement("div");$(this.node).addClass('preload');$(this.node).html(settings.preloadText);$(this.node).appendTo("body").css('visibility','hidden');this.show=function()
{switch(settings.preloadPosition)
{case'center':loadertop=smallimagedata.pos.t+(smallimagedata.h-$(this.node).height())/2;loaderleft=smallimagedata.pos.l+(smallimagedata.w-$(this.node).width())/2;break;default:var loaderoffset=this.getoffset();loadertop=!isNaN(loaderoffset.top)?smallimagedata.pos.t+loaderoffset.top:smallimagedata.pos.t+0;loaderleft=!isNaN(loaderoffset.left)?smallimagedata.pos.l+loaderoffset.left:smallimagedata.pos.l+0;break;}
$(this.node).css({top:loadertop,left:loaderleft,position:'absolute',visibility:'visible'});}
return this;}
Loader.prototype.getoffset=function()
{var o=null;o=$('div.preload').offset();return o;}});}})(jQuery);function trim(stringa)
{while(stringa.substring(0,1)==' '){stringa=stringa.substring(1,stringa.length);}
while(stringa.substring(stringa.length-1,stringa.length)==' '){stringa=stringa.substring(0,stringa.length-1);}
return stringa;};jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options=$.extend({},options);options.expires=-1;}var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000));}else{date=options.expires;}expires='; expires='+date.toUTCString();}var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('');}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break;}}}return cookieValue;}};/**
 * jCarousel - Riding carousels with jQuery
 *   http://sorgalla.com/jcarousel/
 *
 * Copyright (c) 2006 Jan Sorgalla (http://sorgalla.com)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * Built on top of the jQuery library
 *   http://jquery.com
 *
 * Inspired by the "Carousel Component" by Bill Scott
 *   http://billwscott.com/carousel/
 */

(function($) {
    /**
     * Creates a carousel for all matched elements.
     *
     * @example $("#mycarousel").jcarousel();
     * @before <ul id="mycarousel" class="jcarousel-skin-name"><li>First item</li><li>Second item</li></ul>
     * @result
     *
     * <div class="jcarousel-skin-name">
     *   <div class="jcarousel-container">
     *     <div disabled="disabled" class="jcarousel-prev jcarousel-prev-disabled"></div>
     *     <div class="jcarousel-next"></div>
     *     <div class="jcarousel-clip">
     *       <ul class="jcarousel-list">
     *         <li class="jcarousel-item-1">First item</li>
     *         <li class="jcarousel-item-2">Second item</li>
     *       </ul>
     *     </div>
     *   </div>
     * </div>
     *
     * @name jcarousel
     * @type jQuery
     * @param Hash o A set of key/value pairs to set as configuration properties.
     * @cat Plugins/jCarousel
     */
    $.fn.jcarousel = function(o) {
        return this.each(function() {
            new $jc(this, o);
        });
    };

    // Default configuration properties.
    var defaults = {
        vertical: false,
        start: 1,
        offset: 1,
        size: null,
        scroll: 3,
        visible: null,
        animation: 'normal',
        easing: 'swing',
        auto: 0,
        wrap: null,
        initCallback: null,
        reloadCallback: null,
        itemLoadCallback: null,
        itemFirstInCallback: null,
        itemFirstOutCallback: null,
        itemLastInCallback: null,
        itemLastOutCallback: null,
        itemVisibleInCallback: null,
        itemVisibleOutCallback: null,
        buttonNextHTML: '<div></div>',
        buttonPrevHTML: '<div></div>',
        buttonNextEvent: 'click',
        buttonPrevEvent: 'click',
        buttonNextCallback: null,
        buttonPrevCallback: null
    };

    /**
     * The jCarousel object.
     *
     * @constructor
     * @name $.jcarousel
     * @param Object e The element to create the carousel for.
     * @param Hash o A set of key/value pairs to set as configuration properties.
     * @cat Plugins/jCarousel
     */
    $.jcarousel = function(e, o) {
        this.options    = $.extend({}, defaults, o || {});

        this.locked     = false;

        this.container  = null;
        this.clip       = null;
        this.list       = null;
        this.buttonNext = null;
        this.buttonPrev = null;

        this.wh = !this.options.vertical ? 'width' : 'height';
        this.lt = !this.options.vertical ? 'left' : 'top';

        // Extract skin class
        var skin = '', split = e.className.split(' ');

        for (var i = 0; i < split.length; i++) {
            if (split[i].indexOf('jcarousel-skin') != -1) {
                $(e).removeClass(split[i]);
                var skin = split[i];
                break;
            }
        }

        if (e.nodeName == 'UL' || e.nodeName == 'OL') {
            this.list = $(e);
            this.container = this.list.parent();

            if (this.container.hasClass('jcarousel-clip')) {
                if (!this.container.parent().hasClass('jcarousel-container'))
                    this.container = this.container.wrap('<div></div>');

                this.container = this.container.parent();
            } else if (!this.container.hasClass('jcarousel-container'))
                this.container = this.list.wrap('<div></div>').parent();
        } else {
            this.container = $(e);
            this.list = $(e).find('>ul,>ol,div>ul,div>ol');
        }

        if (skin != '' && this.container.parent()[0].className.indexOf('jcarousel-skin') == -1)
        	this.container.wrap('<div class=" '+ skin + '"></div>');

        this.clip = this.list.parent();

        if (!this.clip.length || !this.clip.hasClass('jcarousel-clip'))
            this.clip = this.list.wrap('<div></div>').parent();

        this.buttonPrev = $('.jcarousel-prev', this.container);

        if (this.buttonPrev.size() == 0 && this.options.buttonPrevHTML != null)
            this.buttonPrev = this.clip.before(this.options.buttonPrevHTML).prev();

        this.buttonPrev.addClass(this.className('jcarousel-prev'));

        this.buttonNext = $('.jcarousel-next', this.container);

        if (this.buttonNext.size() == 0 && this.options.buttonNextHTML != null)
            this.buttonNext = this.clip.before(this.options.buttonNextHTML).prev();

        this.buttonNext.addClass(this.className('jcarousel-next'));

        this.clip.addClass(this.className('jcarousel-clip'));
        this.list.addClass(this.className('jcarousel-list'));
        this.container.addClass(this.className('jcarousel-container'));

        var di = this.options.visible != null ? Math.ceil(this.clipping() / this.options.visible) : null;
        var li = this.list.children('li');

        var self = this;

        if (li.size() > 0) {
            var wh = 0, i = this.options.offset;
            li.each(function() {
                self.format(this, i++);
                wh += self.dimension(this, di);
            });

            this.list.css(this.wh, wh + 'px');

            // Only set if not explicitly passed as option
            if (!o || o.size === undefined)
                this.options.size = li.size();
        }

        // For whatever reason, .show() does not work in Safari...
        this.container.css('display', 'block');
        this.buttonNext.css('display', 'block');
        this.buttonPrev.css('display', 'block');

        this.funcNext   = function() { self.next(); };
        this.funcPrev   = function() { self.prev(); };
        this.funcResize = function() { self.reload(); };

        if (this.options.initCallback != null)
            this.options.initCallback(this, 'init');

     if ($.browser.safari  &&  $.browser.version < 523 ) {
            this.buttons(false, false);
            $(window).bind('load', function() { self.setup(); });
        } else
            this.setup();
    };

    // Create shortcut for internal use
    var $jc = $.jcarousel;

    $jc.fn = $jc.prototype = {
        jcarousel: '0.2.3'
    };

    $jc.fn.extend = $jc.extend = $.extend;

    $jc.fn.extend({
        /**
         * Setups the carousel.
         *
         * @name setup
         * @type undefined
         * @cat Plugins/jCarousel
         */
        setup: function() {
            this.first     = null;
            this.last      = null;
            this.prevFirst = null;
            this.prevLast  = null;
            this.animating = false;
            this.timer     = null;
            this.tail      = null;
            this.inTail    = false;

            if (this.locked)
                return;

            this.list.css(this.lt, this.pos(this.options.offset) + 'px');
            var p = this.pos(this.options.start);
            this.prevFirst = this.prevLast = null;
            this.animate(p, false);

            $(window).unbind('resize', this.funcResize).bind('resize', this.funcResize);
        },

        /**
         * Clears the list and resets the carousel.
         *
         * @name reset
         * @type undefined
         * @cat Plugins/jCarousel
         */
        reset: function() {
            this.list.empty();

            this.list.css(this.lt, '0px');
            this.list.css(this.wh, '10px');

            if (this.options.initCallback != null)
                this.options.initCallback(this, 'reset');

            this.setup();
        },

        /**
         * Reloads the carousel and adjusts positions.
         *
         * @name reload
         * @type undefined
         * @cat Plugins/jCarousel
         */
        reload: function() {
            if (this.tail != null && this.inTail)
                this.list.css(this.lt, $jc.intval(this.list.css(this.lt)) + this.tail);

            this.tail   = null;
            this.inTail = false;

            if (this.options.reloadCallback != null)
                this.options.reloadCallback(this);

            if (this.options.visible != null) {
                var self = this;
                var di = Math.ceil(this.clipping() / this.options.visible), wh = 0, lt = 0;
                $('li', this.list).each(function(i) {
                    wh += self.dimension(this, di);
                    if (i + 1 < self.first)
                        lt = wh;
                });

                this.list.css(this.wh, wh + 'px');
                this.list.css(this.lt, -lt + 'px');
            }

            this.scroll(this.first, false);
        },

        /**
         * Locks the carousel.
         *
         * @name lock
         * @type undefined
         * @cat Plugins/jCarousel
         */
        lock: function() {
            this.locked = true;
            this.buttons();
        },

        /**
         * Unlocks the carousel.
         *
         * @name unlock
         * @type undefined
         * @cat Plugins/jCarousel
         */
        unlock: function() {
            this.locked = false;
            this.buttons();
        },

        /**
         * Sets the size of the carousel.
         *
         * @name size
         * @type undefined
         * @param Number s The size of the carousel.
         * @cat Plugins/jCarousel
         */
        size: function(s) {
            if (s != undefined) {
                this.options.size = s;
                if (!this.locked)
                    this.buttons();
            }

            return this.options.size;
        },

        /**
         * Checks whether a list element exists for the given index (or index range).
         *
         * @name get
         * @type bool
         * @param Number i The index of the (first) element.
         * @param Number i2 The index of the last element.
         * @cat Plugins/jCarousel
         */
        has: function(i, i2) {
            if (i2 == undefined || !i2)
                i2 = i;

            if (this.options.size !== null && i2 > this.options.size)
            	i2 = this.options.size;

            for (var j = i; j <= i2; j++) {
                var e = this.get(j);
                if (!e.length || e.hasClass('jcarousel-item-placeholder'))
                    return false;
            }

            return true;
        },

        /**
         * Returns a jQuery object with list element for the given index.
         *
         * @name get
         * @type jQuery
         * @param Number i The index of the element.
         * @cat Plugins/jCarousel
         */
        get: function(i) {
            return $('.jcarousel-item-' + i, this.list);
        },

        /**
         * Adds an element for the given index to the list.
         * If the element already exists, it updates the inner html.
         * Returns the created element as jQuery object.
         *
         * @name add
         * @type jQuery
         * @param Number i The index of the element.
         * @param String s The innerHTML of the element.
         * @cat Plugins/jCarousel
         */
        add: function(i, s) {
            var e = this.get(i), old = 0, add = 0;

            if (e.length == 0) {
                var c, e = this.create(i), j = $jc.intval(i);
                while (c = this.get(--j)) {
                    if (j <= 0 || c.length) {
                        j <= 0 ? this.list.prepend(e) : c.after(e);
                        break;
                    }
                }
            } else
                old = this.dimension(e);

            e.removeClass(this.className('jcarousel-item-placeholder'));
            typeof s == 'string' ? e.html(s) : e.empty().append(s);

            var di = this.options.visible != null ? Math.ceil(this.clipping() / this.options.visible) : null;
            var wh = this.dimension(e, di) - old;

            if (i > 0 && i < this.first)
                this.list.css(this.lt, $jc.intval(this.list.css(this.lt)) - wh + 'px');

            this.list.css(this.wh, $jc.intval(this.list.css(this.wh)) + wh + 'px');

            return e;
        },

        /**
         * Removes an element for the given index from the list.
         *
         * @name remove
         * @type undefined
         * @param Number i The index of the element.
         * @cat Plugins/jCarousel
         */
        remove: function(i) {
            var e = this.get(i);

            // Check if item exists and is not currently visible
            if (!e.length || (i >= this.first && i <= this.last))
                return;

            var d = this.dimension(e);

            if (i < this.first)
                this.list.css(this.lt, $jc.intval(this.list.css(this.lt)) + d + 'px');

            e.remove();

            this.list.css(this.wh, $jc.intval(this.list.css(this.wh)) - d + 'px');
        },

        /**
         * Moves the carousel forwards.
         *
         * @name next
         * @type undefined
         * @cat Plugins/jCarousel
         */
        next: function() {
            this.stopAuto();

            if (this.tail != null && !this.inTail)
                this.scrollTail(false);
            else
                this.scroll(((this.options.wrap == 'both' || this.options.wrap == 'last') && this.options.size != null && this.last == this.options.size) ? 1 : this.first + this.options.scroll);
        },

        /**
         * Moves the carousel backwards.
         *
         * @name prev
         * @type undefined
         * @cat Plugins/jCarousel
         */
        prev: function() {
            this.stopAuto();

            if (this.tail != null && this.inTail)
                this.scrollTail(true);
            else
                this.scroll(((this.options.wrap == 'both' || this.options.wrap == 'first') && this.options.size != null && this.first == 1) ? this.options.size : this.first - this.options.scroll);
        },

        /**
         * Scrolls the tail of the carousel.
         *
         * @name scrollTail
         * @type undefined
         * @param Bool b Whether scroll the tail back or forward.
         * @cat Plugins/jCarousel
         */
        scrollTail: function(b) {
            if (this.locked || this.animating || !this.tail)
                return;

            var pos  = $jc.intval(this.list.css(this.lt));

            !b ? pos -= this.tail : pos += this.tail;
            this.inTail = !b;

            // Save for callbacks
            this.prevFirst = this.first;
            this.prevLast  = this.last;

            this.animate(pos);
        },

        /**
         * Scrolls the carousel to a certain position.
         *
         * @name scroll
         * @type undefined
         * @param Number i The index of the element to scoll to.
         * @param Bool a Flag indicating whether to perform animation.
         * @cat Plugins/jCarousel
         */
        scroll: function(i, a) {
            if (this.locked || this.animating)
                return;

            this.animate(this.pos(i), a);
        },

        /**
         * Prepares the carousel and return the position for a certian index.
         *
         * @name pos
         * @type Number
         * @param Number i The index of the element to scoll to.
         * @cat Plugins/jCarousel
         */
        pos: function(i) {
            if (this.locked || this.animating)
                return;

            i = $jc.intval(i);
            if (this.options.wrap != 'circular')
                i = i < 1 ? 1 : (this.options.size && i > this.options.size ? this.options.size : i);

            var back = this.first > i;
            var pos  = $jc.intval(this.list.css(this.lt));

            // Create placeholders, new list width/height
            // and new list position
            var f = this.options.wrap != 'circular' && this.first <= 1 ? 1 : this.first;
            var c = back ? this.get(f) : this.get(this.last);
            var j = back ? f : f - 1;
            var e = null, l = 0, p = false, d = 0;

            while (back ? --j >= i : ++j < i) {
                e = this.get(j);
                p = !e.length;
                if (e.length == 0) {
                    e = this.create(j).addClass(this.className('jcarousel-item-placeholder'));
                    c[back ? 'before' : 'after' ](e);
                }

                c = e;
                d = this.dimension(e);

                if (p)
                    l += d;

                if (this.first != null && (this.options.wrap == 'circular' || (j >= 1 && (this.options.size == null || j <= this.options.size))))
                    pos = back ? pos + d : pos - d;
            }

            // Calculate visible items
            var clipping = this.clipping();
            var cache = [];
            var visible = 0, j = i, v = 0;
            var c = this.get(i - 1);

            while (++visible) {
                e = this.get(j);
                p = !e.length;
                if (e.length == 0) {
                    e = this.create(j).addClass(this.className('jcarousel-item-placeholder'));
                    // This should only happen on a next scroll
                    c.length == 0 ? this.list.prepend(e) : c[back ? 'before' : 'after' ](e);
                }

                c = e;
                var d = this.dimension(e);
                if (d == 0) {
                    //alert('jCarousel: No width/height set for items. This will cause an infinite loop. Aborting...');
                    return 0;
                }

                if (this.options.wrap != 'circular' && this.options.size !== null && j > this.options.size)
                    cache.push(e);
                else if (p)
                    l += d;

                v += d;

                if (v >= clipping)
                    break;

                j++;
            }

             // Remove out-of-range placeholders
            for (var x = 0; x < cache.length; x++)
                cache[x].remove();

            // Resize list
            if (l > 0) {
                this.list.css(this.wh, this.dimension(this.list) + l + 'px');

                if (back) {
                    pos -= l;
                    this.list.css(this.lt, $jc.intval(this.list.css(this.lt)) - l + 'px');
                }
            }

            // Calculate first and last item
            var last = i + visible - 1;
            if (this.options.wrap != 'circular' && this.options.size && last > this.options.size)
                last = this.options.size;

            if (j > last) {
                visible = 0, j = last, v = 0;
                while (++visible) {
                    var e = this.get(j--);
                    if (!e.length)
                        break;
                    v += this.dimension(e);
                    if (v >= clipping)
                        break;
                }
            }

            var first = last - visible + 1;
            if (this.options.wrap != 'circular' && first < 1)
                first = 1;

            if (this.inTail && back) {
                pos += this.tail;
                this.inTail = false;
            }

            this.tail = null;
            if (this.options.wrap != 'circular' && last == this.options.size && (last - visible + 1) >= 1) {
                var m = $jc.margin(this.get(last), !this.options.vertical ? 'marginRight' : 'marginBottom');
                if ((v - m) > clipping)
                    this.tail = v - clipping - m;
            }

            // Adjust position
            while (i-- > first)
                pos += this.dimension(this.get(i));

            // Save visible item range
            this.prevFirst = this.first;
            this.prevLast  = this.last;
            this.first     = first;
            this.last      = last;

            return pos;
        },

        /**
         * Animates the carousel to a certain position.
         *
         * @name animate
         * @type undefined
         * @param mixed p Position to scroll to.
         * @param Bool a Flag indicating whether to perform animation.
         * @cat Plugins/jCarousel
         */
        animate: function(p, a) {
            if (this.locked || this.animating)
                return;

            this.animating = true;

            var self = this;
            var scrolled = function() {
                self.animating = false;

                if (p == 0)
                    self.list.css(self.lt,  0);

                if (self.options.wrap == 'both' || self.options.wrap == 'last' || self.options.size == null || self.last < self.options.size)
                    self.startAuto();

                self.buttons();
                self.notify('onAfterAnimation');
            };

            this.notify('onBeforeAnimation');

            // Animate
            if (!this.options.animation || a == false) {
                this.list.css(this.lt, p + 'px');
                scrolled();
            } else {
                var o = !this.options.vertical ? {'left': p} : {'top': p};
                this.list.animate(o, this.options.animation, this.options.easing, scrolled);
            }
        },

        /**
         * Starts autoscrolling.
         *
         * @name auto
         * @type undefined
         * @param Number s Seconds to periodically autoscroll the content.
         * @cat Plugins/jCarousel
         */
        startAuto: function(s) {
            if (s != undefined)
                this.options.auto = s;

            if (this.options.auto == 0)
                return this.stopAuto();

            if (this.timer != null)
                return;

            var self = this;
            this.timer = setTimeout(function() { self.next(); }, this.options.auto * 1000);
        },

        /**
         * Stops autoscrolling.
         *
         * @name stopAuto
         * @type undefined
         * @cat Plugins/jCarousel
         */
        stopAuto: function() {
            if (this.timer == null)
                return;

            clearTimeout(this.timer);
            this.timer = null;
        },

        /**
         * Sets the states of the prev/next buttons.
         *
         * @name buttons
         * @type undefined
         * @cat Plugins/jCarousel
         */
        buttons: function(n, p) {
            if (n == undefined || n == null) {
                var n = !this.locked && this.options.size !== 0 && ((this.options.wrap && this.options.wrap != 'first') || this.options.size == null || this.last < this.options.size);
                if (!this.locked && (!this.options.wrap || this.options.wrap == 'first') && this.options.size != null && this.last >= this.options.size)
                    n = this.tail != null && !this.inTail;
            }

            if (p == undefined || p == null) {
                var p = !this.locked && this.options.size !== 0 && ((this.options.wrap && this.options.wrap != 'last') || this.first > 1);
                if (!this.locked && (!this.options.wrap || this.options.wrap == 'last') && this.options.size != null && this.first == 1)
                    p = this.tail != null && this.inTail;
            }

            var self = this;

            this.buttonNext[n ? 'bind' : 'unbind'](this.options.buttonNextEvent, this.funcNext)[n ? 'removeClass' : 'addClass'](this.className('jcarousel-next-disabled')).attr('disabled', n ? false : true);
            this.buttonPrev[p ? 'bind' : 'unbind'](this.options.buttonPrevEvent, this.funcPrev)[p ? 'removeClass' : 'addClass'](this.className('jcarousel-prev-disabled')).attr('disabled', p ? false : true);

            if (this.buttonNext.length > 0 && (this.buttonNext[0].jcarouselstate == undefined || this.buttonNext[0].jcarouselstate != n) && this.options.buttonNextCallback != null) {
                this.buttonNext.each(function() { self.options.buttonNextCallback(self, this, n); });
                this.buttonNext[0].jcarouselstate = n;
            }

            if (this.buttonPrev.length > 0 && (this.buttonPrev[0].jcarouselstate == undefined || this.buttonPrev[0].jcarouselstate != p) && this.options.buttonPrevCallback != null) {
                this.buttonPrev.each(function() { self.options.buttonPrevCallback(self, this, p); });
                this.buttonPrev[0].jcarouselstate = p;
            }
        },

        notify: function(evt) {
            var state = this.prevFirst == null ? 'init' : (this.prevFirst < this.first ? 'next' : 'prev');

            // Load items
            this.callback('itemLoadCallback', evt, state);

            if (this.prevFirst !== this.first) {
                this.callback('itemFirstInCallback', evt, state, this.first);
                this.callback('itemFirstOutCallback', evt, state, this.prevFirst);
            }

            if (this.prevLast !== this.last) {
                this.callback('itemLastInCallback', evt, state, this.last);
                this.callback('itemLastOutCallback', evt, state, this.prevLast);
            }

            this.callback('itemVisibleInCallback', evt, state, this.first, this.last, this.prevFirst, this.prevLast);
            this.callback('itemVisibleOutCallback', evt, state, this.prevFirst, this.prevLast, this.first, this.last);
        },

        callback: function(cb, evt, state, i1, i2, i3, i4) {
            if (this.options[cb] == undefined || (typeof this.options[cb] != 'object' && evt != 'onAfterAnimation'))
                return;

            var callback = typeof this.options[cb] == 'object' ? this.options[cb][evt] : this.options[cb];

            if (!$.isFunction(callback))
                return;

            var self = this;

            if (i1 === undefined)
                callback(self, state, evt);
            else if (i2 === undefined)
                this.get(i1).each(function() { callback(self, this, i1, state, evt); });
            else {
                for (var i = i1; i <= i2; i++)
                    if (i !== null && !(i >= i3 && i <= i4))
                        this.get(i).each(function() { callback(self, this, i, state, evt); });
            }
        },

        create: function(i) {
            return this.format('<li></li>', i);
        },

        format: function(e, i) {
            var $e = $(e).addClass(this.className('jcarousel-item')).addClass(this.className('jcarousel-item-' + i));
            $e.attr('jcarouselindex', i);
            return $e;
        },

        className: function(c) {
            return c + ' ' + c + (!this.options.vertical ? '-horizontal' : '-vertical');
        },

        dimension: function(e, d) {
            var el = e.jquery != undefined ? e[0] : e;

            var old = !this.options.vertical ?
                el.offsetWidth + $jc.margin(el, 'marginLeft') + $jc.margin(el, 'marginRight') :
                (el.offsetHeight > 0 ? el.offsetHeight : ($('#'+el.id+ ' img').attr('height'))+5) + $jc.margin(el, 'marginTop') + $jc.margin(el, 'marginBottom');


            if (d == undefined || old == d)
                return old;

            var w = !this.options.vertical ?
                d - $jc.margin(el, 'marginLeft') - $jc.margin(el, 'marginRight') :
                d - $jc.margin(el, 'marginTop') - $jc.margin(el, 'marginBottom');

            $(el).css(this.wh, w + 'px');

            return this.dimension(el);
        },

        clipping: function() {
            return !this.options.vertical ?
                this.clip[0].offsetWidth - $jc.intval(this.clip.css('borderLeftWidth')) - $jc.intval(this.clip.css('borderRightWidth')) :
                this.clip[0].offsetHeight - $jc.intval(this.clip.css('borderTopWidth')) - $jc.intval(this.clip.css('borderBottomWidth'));
        },

        index: function(i, s) {
            if (s == undefined)
                s = this.options.size;

            return Math.round((((i-1) / s) - Math.floor((i-1) / s)) * s) + 1;
        }
    });

    $jc.extend({
        /**
         * Gets/Sets the global default configuration properties.
         *
         * @name defaults
         * @descr Gets/Sets the global default configuration properties.
         * @type Hash
         * @param Hash d A set of key/value pairs to set as configuration properties.
         * @cat Plugins/jCarousel
         */
        defaults: function(d) {
            return $.extend(defaults, d || {});
        },

        margin: function(e, p) {
            if (!e)
                return 0;

            var el = e.jquery != undefined ? e[0] : e;

            if (p == 'marginRight' && $.browser.safari) {
                var old = {'display': 'block', 'float': 'none', 'width': 'auto'}, oWidth, oWidth2;

                $.swap(el, old, function() { oWidth = el.offsetWidth; });

                old['marginRight'] = 0;
                $.swap(el, old, function() { oWidth2 = el.offsetWidth; });

                return oWidth2 - oWidth;
            }

            return $jc.intval($.css(el, p));
        },

        intval: function(v) {
            v = parseInt(v);
            return isNaN(v) ? 0 : v;
        }
    });

})(jQuery);function addEvent(obj, evType, fn) {
  if (obj.addEventListener) {
    obj.addEventListener(evType, fn, false);
    return true;
  } else if (obj.attachEvent) {
    var r = obj.attachEvent("on" + evType, fn);
    return r;
  } else {
    return false;
  }
}

function showOrHide(elementid) {
  if (document.getElementById(elementid)) {
    element = document.getElementById(elementid);
    if (element.style.display == "none") {
      element.style.display = '';
    } else {
      element.style.display = 'none';
    }
  }
}

function displayDifferentDeliveryAddress(type, element, blnResetFields) {
  var arrElements = [];
  arrElements[0] = 'delivery_full_name';
  arrElements[1] = 'delivery_house_number';
  arrElements[2] = 'delivery_address1';
  arrElements[3] = 'delivery_address2';
  arrElements[4] = 'delivery_town';
  arrElements[5] = 'delivery_county';
  arrElements[6] = 'delivery_postcode';
  arrElements[7] = 'delivery_postcode_find';
  arrElements[8] = 'delivery_country';
  arrElements[9] = 'delivery_telephone';
  arrElements[10] = 'delivery_company_name';
  arrElements[11] = 'delivery_mobile';
  arrElements[12] = 'delivery_title';
  arrElements[13] = 'delivery_firstname';
  arrElements[14] = 'delivery_surname';
  var arrLen = arrElements.length;
  for (var i = 0, x = arrLen; i < x; ++i) {
    if (type == 'show') {
      if (blnResetFields == true) {
        if (arrElements[i] != 'delivery_full_name' && arrElements[i] != 'delivery_country') {
          if (document.getElementById(arrElements[i])) document.getElementById(arrElements[i]).value = '';
        }
      }
      if (document.getElementById(arrElements[i])) document.getElementById(arrElements[i]).disabled = false;
      if (document.getElementById(arrElements[i] + '_header')) document.getElementById(arrElements[i] + '_header').disabled = false;
      $('.delivery').removeClass('field_disabled');
    } else {
      if (document.getElementById(arrElements[i])) document.getElementById(arrElements[i]).disabled = true;
      if (document.getElementById(arrElements[i] + '_header')) document.getElementById(arrElements[i] + '_header').disabled = true;
      $('.delivery').addClass('field_disabled');
    }
  }
}

function changeQuantity(iKey, strDirection) {
  if (strDirection == 'plus') {
    if (((arrBasket[iKey]['quantity'] + 1) > arrBasket[iKey]['stock']) && arrBasket[iKey]['stock'] != -1) {
      alert(arrBasket[iKey]['title'] + '\n\nSorry, we currently only have ' + arrBasket[iKey]['stock'] + ' of this item in stock');
      return false;
    } else {
      return true;
    }
  } else if (strDirection == 'minus') {
    if ((arrBasket[iKey]['quantity'] == 1)) {
      if (confirm("Are you sure you want to remove this item from your basket?\n\nClick \"OK\" for Yes or \"Cancel\" for No")) {
        return true;
      } else {
        return false;
      }
      return false;
    } else {
      return true;
    }
  }
  return true;
}

function updateQuantity(iKey, iQuantity) {
  if (((iQuantity) > arrBasket[iKey]['stock']) && arrBasket[iKey]['stock'] != -1) {
    alert(arrBasket[iKey]['title'] + '\n\nSorry, we currently only have ' + arrBasket[iKey]['stock'] + ' of this item in stock');
    return false;
  } else {
    return true;
  }
}

function removeItem(iKey) {
  if (confirm("Are you sure you want to remove this item from your basket?\n\nClick \"OK\" for Yes or \"Cancel\" for No")) {
    return true;
  } else {
    return false;
  }
}

function AJAXRemoveItem(iKey) {
  if (confirm("Are you sure you want to remove this item from your basket?\n\nClick \"OK\" for Yes or \"Cancel\" for No")) {
    $.getJSON('/ajax/removefrombasket/' + iKey, function (data) {
      if (data == "OK") {
        updateMiniBasket();
      }
    });
  }
  return false;
}

function popupWindow(url, width, height) {
  LeftPosition = (screen.width) ? (screen.width - 500) / 2 : 0;
  TopPosition = (screen.height) ? (screen.height - 500) / 2 : 0;
  settings = 'height=' + height + ',width=' + width + ',top=' + TopPosition + ',left=' + LeftPosition + ',toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1';
  win = window.open(url, null, settings);
  return false;
}

function initCurrency(strCurrency) {
  var strStoredCurrency = $.cookie('VSCurrency');
  hideCurrencyPrices();
  if (!strStoredCurrency) {
    toggleCurrency(strCurrency);
  } else {
    toggleCurrency(strStoredCurrency);
  }
}

function hideCurrencyPrices() {
  var arrCurrencies = $('#currency_options').children();
  for (var i = 0; i < arrCurrencies.length; ++i) {
    $('#link_' + arrCurrencies[i].id).bind("click", function () {
      var strCurrency = this.id;
      strCurrency = strCurrency.replace(/link_currency_/, '');
      toggleCurrency(strCurrency);
      this.blur();
      if ($('#delivery_country_id').length > 0 && $('#courier_id').hasClass('update_on_currency_change')) {
        //change_country($('#delivery_country_id'));
        change_country(document.getElementById('delivery_country_id'));
      }
      return false;
    });
  }
}

function refreshCurrency() {
  hideCurrencyPrices();
  toggleCurrency($.cookie('VSCurrency'));
}

function toggleCurrency(strCurrencyCode) {
  if ($("#price_swap") && $('#link_currency_' + strCurrencyCode).attr('name') == 'N') {
    $("#price_swap").css('visibility', 'hidden');
  } else {
    $("#price_swap").css('visibility', 'visible');
  }
  if (strCurrencyCode == $.cookie('VSCurrency')) {
    return;
  }
  var arrCurrencies = $('#currency_options').children();
  for (var i = 0; i < arrCurrencies.length; ++i) {
    if (document.getElementById('link_' + arrCurrencies[i].id)) {
      document.getElementById('link_' + arrCurrencies[i].id).className = '';
      var strCurrency = arrCurrencies[i].id;
      strCurrency = strCurrency.replace(/currency_/, '');
      $("." + strCurrency).hide();
      $("#img_currency_active_" + strCurrency).hide();
      $("#img_currency_inactive_" + strCurrency).show();
      $("#extra_img_currency_active_" + strCurrency).hide();
      $("#extra_img_currency_inactive_" + strCurrency).show();
    }
  }
  document.getElementById('link_currency_' + strCurrencyCode).className = 'active';
  if ($('#link_currency_' + strCurrencyCode).attr('name') == 'N') {
    if ($("#price_swap")) {
      $("#price_swap").css('visibility', 'hidden');
    }
  }
  if ($.cookie('VSCurrency') != strCurrencyCode) {
    $.cookie('VSCurrency', strCurrencyCode, {
      expires: +365,
      path: '/',
      domain: window.location.hostname
    });
  }
  $("." + strCurrencyCode).show();
  $("#img_currency_active_" + strCurrencyCode).show();
  $("#img_currency_inactive_" + strCurrencyCode).hide();
  $("#extra_img_currency_active_" + strCurrencyCode).show();
  $("#extra_img_currency_inactive_" + strCurrencyCode).hide();
}

function initVat() {
  if ($('#vat_options')) {
    var arrVatOptions = $('#vat_options').children();
    for (var i = 0; i < arrVatOptions.length; ++i) {
      $('#link_' + arrVatOptions[i].id).bind("click", function () {
        var strDisplayPrices = this.id;
        strDisplayPrices = strDisplayPrices.replace(/link_vat_options_/, '');
        refreshVat();
        this.blur();
        return false;
      });
    }
  }
  if ($('#price_swap')) {
    $("#price_swap").bind("click", function () {
      toggleVat(false);
      this.blur();
      return false;
    });
  }
  toggleVat($.cookie('VSVatPrices'));
}

function refreshVat() {
  var strDisplayPricesCookie = $.cookie('VSVatPrices');
  if (strDisplayPricesCookie == '') {
    return;
  }
  toggleVat($.cookie('VSVatPrices'));
}

function toggleVat(strDisplayPrices) {
  if (strDisplayPrices == false) {
    if ($.cookie('VSVatPrices') == 'inc') {
      strDisplayPrices = 'ex';
    } else {
      strDisplayPrices = 'inc';
    }
  }
  if (strDisplayPrices == 'ex') {
    $("#link_vat_options_ex").addClass('active');
    $("#link_vat_options_inc").removeClass('active');
    $(".ex").show();
    $(".inc").hide();
    if ($("#vat_basket_row")) {
      $("#vat_basket_row").show();
    }
  } else {
    $("#link_vat_options_inc").addClass('active');
    $("#link_vat_options_ex").removeClass('active');
    $(".ex").hide();
    $(".inc").show();
    if ($("#vat_basket_row")) {
      $("#vat_basket_row").hide();
    }
  }
  if ($.cookie('VSVatPrices') != strDisplayPrices) {
    $.cookie('VSVatPrices', strDisplayPrices, {
      expires: +365,
      path: '/',
      domain: window.location.hostname
    });
  }
}

function initReviewStarRater() {
  if ($('#review_star_1').length) {
    var iPointer = 1;
    while ($('#review_star_' + iPointer).length) {
      $('#review_star_' + iPointer).bind("click", function () {
        var strCurrentWidth = this.innerHTML;
        var strNewWidth = strCurrentWidth * 20 + '%';
        $('#review_star_user_rating').css('width', strNewWidth);
        $('#review_form_rating').focus();
        $('#review_form_rating').val(strCurrentWidth);
        $('#review_form_rating').blur();
        $('#review_form_subject').focus();
        $('#review_form_rating_errors').hide();
        var iMessagePointer = 1;
        while ($('#rating_message_' + iMessagePointer).length) {
          $('#rating_message_' + iMessagePointer).hide();
          iMessagePointer++;
        }
        $('#rating_message_' + strCurrentWidth).show();
        return false;
      });
      iPointer++;
    }
  }
}

function updateLHSNavigationCookie(iCategoryGroupID) {
  $.cookie('VSCategoryGroup', iCategoryGroupID, {
    expires: +364,
    path: '/',
    domain: window.location.hostname
  });
}

function updateLHSNavigationTabs(iCategoryGroupID) {
  var iCounter = 1;
  while ($('#category_group_' + iCounter + '_on').length > 0) {
    if ($('#category_group_' + iCounter + '_on').length) {
      $('#category_group_' + iCounter + '_on').hide();
    }
    if ($('#category_group_' + iCounter + '_off').length) {
      $('#category_group_' + iCounter + '_off').show();
    }
    iCounter++;
  }
  if ($('#category_group_' + iCategoryGroupID + '_on').length) {
    $('#category_group_' + iCategoryGroupID + '_off').hide();
    $('#category_group_' + iCategoryGroupID + '_on').show();
  }
}

function updateLHSNavigationLinks(iCategoryGroupID) {
  var iCounter = 1;
  while ($('#category_group_' + iCounter + '_on').length > 0) {
    if ($('#shop_categories_' + iCounter).length > 0) {
      $('#shop_categories_' + iCounter).hide();
    }
    iCounter++;
  }
  $('#shop_categories_' + iCategoryGroupID).show();
}

function showLHSNavigation(iCategoryGroupID) {
  updateLHSNavigationTabs(iCategoryGroupID);
  updateLHSNavigationLinks(iCategoryGroupID);
  updateLHSNavigationCookie(iCategoryGroupID);
}

function toggleLHSCategoryFilterNavigation() {
  if ($('#menu_left').length > 0) {
    showOrHide('menu_left');
  } else if ($('#default_navigation').length > 0) {
    showOrHide('default_navigation');
  }
  showOrHide('filter_wrapper');
}
var arrPausedCrossfaders = [];
var arrPausePromoUnits = Array();
var arrCancelPromoUnits = Array();
var arrCurrentBanners = Array();
var iBannerIDOverride = null;

function pausePromoUnitFade(strPromoUnitName) {
  arrPausePromoUnits[parseInt(strPromoUnitName)] = 0;
  arrPausedCrossfaders[strPromoUnitName] = true;
}

function resumePromoUnitFade(strPromoUnitName, iInterval, iMouseoutInterval) {
  arrPausePromoUnits[parseInt(strPromoUnitName)] = 1;
  arrPausedCrossfaders[strPromoUnitName] = false;
}
var promoUnitFadeTimer = null;

function initPromoUnitFade(strPromoUnitName, iStartingBannerID, iInterval, iMouseoutInterval, blnPauseOnHover) {
  if (!blnPauseOnHover) {
    blnPauseOnHover = 'true';
  }
  arrPausePromoUnits[parseInt(strPromoUnitName)] = 1;
  arrCancelPromoUnits[parseInt(strPromoUnitName)] = 0;
  promoUnitFadeTimer = window.setTimeout("triggerRunPromoUnitFade('" + strPromoUnitName + "', '" + iStartingBannerID + "', '" + iInterval * 1000 + "')", 0);
  if (blnPauseOnHover == 'true') {
    $('.' + strPromoUnitName + 'fade').attr('onmouseover', 'pausePromoUnitFade("' + strPromoUnitName + '");');
    $('.' + strPromoUnitName + 'fade').attr('onmouseout', 'resumePromoUnitFade("' + strPromoUnitName + '", "' + iInterval * 1000 + '", "' + iMouseoutInterval + '");');
  }

  $('.promo_slider_pause').unbind();
  $('.promo_slider_pause').bind('click',function(){
    pausePromoUnitFade(strPromoUnitName);
  });

  $('.promo_slider_play').unbind();
  $('.promo_slider_play').bind('click',function(){
    resumePromoUnitFade(strPromoUnitName, iInterval*1000, iMouseoutInterval);
  });

  $('.' + strPromoUnitName + 'thumbs > a').bind('click', function () {
    var iName = this.name;
    var WrapObject = $(this).parent().parent().parent().parent().parent();
    if (WrapObject.hasClass('multi_promos')) {
      clearInterval(promoUnitFadeTimer);
      arrCancelPromoUnits[parseInt(strPromoUnitName)] = 1;
      arrPausePromoUnits[parseInt(strPromoUnitName)] = 1;
      $.each(WrapObject.children('div'), function () {
        $.each($(this).children('div'), function () {
          runPromoUnitFade($(this).attr('id') + '_', parseInt(iName) - 1, -1);
        });
      });
      return false;
    } else {
      clearInterval(promoUnitFadeTimer);
      arrCancelPromoUnits[parseInt(strPromoUnitName)] = 1;
      arrPausePromoUnits[parseInt(strPromoUnitName)] = 1;
      runPromoUnitFade(strPromoUnitName, parseInt(this.name) - 1, -1);
      return false;
    }
  });
  $('.promo_slider_prev').bind('click', function () {
    var strId = $(this).parent().attr('id');
    iNewBannerID = $('.' + strPromoUnitName + 'fade:visible').attr('id').replace(strId + '_', '');
    clearInterval(promoUnitFadeTimer);
    arrCancelPromoUnits[parseInt(strPromoUnitName)] = 1;
    arrPausePromoUnits[parseInt(strPromoUnitName)] = 1;
    runPromoUnitFade(strPromoUnitName, iNewBannerID, -1);
    arrPausePromoUnits[parseInt(strPromoUnitName)] = 1;
    arrCancelPromoUnits[parseInt(strPromoUnitName)] = 0;
    promoUnitFadeTimer = window.setTimeout("triggerRunPromoUnitFade('" + strPromoUnitName + "', '" + iNewBannerID + "', '" + iInterval * 1000 + "')", 0);
    return false;
  });
  $('.promo_slider_next').bind('click', function () {
    var strId = $(this).parent().attr('id');
    iNewBannerID = $('.' + strPromoUnitName + 'fade:visible').attr('id').replace(strId + '_', '');
    clearInterval(promoUnitFadeTimer);
    arrCancelPromoUnits[parseInt(strPromoUnitName)] = 1;
    arrPausePromoUnits[parseInt(strPromoUnitName)] = 1;
    runPromoUnitFade(strPromoUnitName, iNewBannerID, -1);
    arrPausePromoUnits[parseInt(strPromoUnitName)] = 1;
    arrCancelPromoUnits[parseInt(strPromoUnitName)] = 0;
    promoUnitFadeTimer = window.setTimeout("triggerRunPromoUnitFade('" + strPromoUnitName + "', '" + iNewBannerID + "', '" + iInterval * 1000 + "')", 0);
    return false;
  });
}

function triggerRunPromoUnitFade(strPromoUnitName, iStartingBannerID, iInterval) {
  if (arrCancelPromoUnits[parseInt(strPromoUnitName)] == 0) {
    promoUnitFadeTimer = window.setTimeout("runPromoUnitFade('" + strPromoUnitName + "', '" + iStartingBannerID + "', '" + iInterval + "');", iInterval);
  } else {
    arrCancelPromoUnits[parseInt(strPromoUnitName)] = 0;
  }
}

function runPromoUnitFade(strPromoUnitName, iStartingBannerID, iInterval) {
  iNewBannerID = parseInt(iStartingBannerID) + parseInt(1);
  if (!$("#" + strPromoUnitName + iNewBannerID).length) {
    iNewBannerID = 0;
  }
  if (typeof promoUnitOnChange == 'function') {
    promoUnitOnChange(strPromoUnitName);
  }
  if (arrPausePromoUnits[parseInt(strPromoUnitName)] == 1) {
    arrCurrentBanners[strPromoUnitName] = iNewBannerID;
    $("#" + strPromoUnitName + iStartingBannerID).fadeOut(Math.ceil(iInterval / (iInterval / 1000)));
    $("." + strPromoUnitName + 'fade').fadeOut(Math.ceil(iInterval / (iInterval / 1000)));
    $("#" + strPromoUnitName + iNewBannerID).fadeIn(Math.ceil(iInterval / (iInterval / 1000)));
    if (iStartingBannerID < 0) iStartingBannerID = 0;
    if ($('#thumb_' + strPromoUnitName + iStartingBannerID).length > 0) {
      $("." + strPromoUnitName + 'thumbs').removeClass('selected');
      $("#thumb_" + strPromoUnitName + iNewBannerID).addClass('selected');
    }
  }
  if (iInterval > 0) {
    triggerRunPromoUnitFade(strPromoUnitName, iNewBannerID, iInterval);
  }
}
var iLastPriceBreakPointer = 0;

function togglePriceBands(iPriceBreakQuantity, strElementID, blnM2) {
  while ($('#' + strElementID + '_' + iPriceBreakQuantity).length == 0 && iPriceBreakQuantity > 0) {
    iPriceBreakQuantity--;
  }
  if (iPriceBreakQuantity > 0) {
    if (iPriceBreakQuantity != iLastPriceBreakPointer || blnM2 == true) {
      $('.' + strElementID).hide();
      $('#' + strElementID + '_' + iPriceBreakQuantity).show();
    }
  }
  iLastPriceBreakPointer = iPriceBreakQuantity;
}

function alterQuantity(iIncrement, iMinQuantity, iMaxQuantity, strElementID) {
  simpleAlterQuantity(iIncrement, iMinQuantity, iMaxQuantity, strElementID);
  togglePriceBands(iNewQuantity, 'price_break');
}

function simpleAlterQuantity(iIncrement, iMinQuantity, iMaxQuantity, strElementID) {
  iCurrentQuantity = parseInt($("#" + strElementID).val());
  iNewQuantity = parseInt(iCurrentQuantity) + parseInt(iIncrement);
  if (iNewQuantity < iMinQuantity) {
    iNewQuantity = iMinQuantity;
  }
  if (iMaxQuantity > 0 && iNewQuantity > iMaxQuantity) {
    alert('Sorry, we currently only have ' + iMaxQuantity + ' of this item in stock.');
    iNewQuantity = iMaxQuantity;
  }
  $("#" + strElementID).val(iNewQuantity);
}

function sizeConvert(strInches, strCM) {
  var strUserLength = $("#size_query").val();
  if ((strUserLength == null) || (strUserLength == "") || (isNaN(strUserLength))) {
    alert('Please enter a length with numbers only. Use a period for decimal place.');
    $("#size_query").focus();
  } else {
    var arrChecked = $("input:checked");
    for (var i = 0; i < arrChecked.length; i++) {
      var strUserUnit = arrChecked[i].value;
    }
    if (strUserUnit == 'inch') {
      var strAnswer = strUserLength * 0.3937008;
      var strAnswerRounded = Math.round(10 * strAnswer) / 10;
      $("#convertor_result").html(strUserLength + strCM + ' = ' + strAnswerRounded + ' ' + strInches);
    } else if (strUserUnit == 'cm') {
      var strAnswer = strUserLength * 2.54;
      var strAnswerRounded = Math.round(10 * strAnswer) / 10;
      $("#convertor_result").html(strUserLength + ' ' + strInches + ' = ' + strAnswerRounded + strCM);
    }
  }
}

function in_array(needle, haystack, argStrict) {
  var found = false,
    key, strict = !! argStrict;
  for (key in haystack) {
    if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
      found = true;
      break;
    }
  }
  return found;
}

function setupPopupLinks() {
  $(".popup").unbind('click');
  $(".popup").click(function () {
    var iHeight = 0;
    var iWidth = 0;
    if (this.name != '') {
      var arrBits = this.name.split('x');
      if (!isNaN(arrBits[0]) && !isNaN(arrBits[1])) {
        iWidth = arrBits[0];
        iHeight = arrBits[1];
      }
    }
    if (iHeight == 0 || iWidth == 0) {
      iHeight = 780;
      iWidth = 680;
    }
    popupWindow(this.href, iHeight, iWidth);
    return false;
  });
}

function setupConfirmationDialogs() {
  $(".confirmation").attr("onclick", "if(!confirm(this.title)) { return false; }");
}

function setupVS3FormValidation() {
  $(".vs3form").attr("onsubmit", "return checkVS3Form(this);");
}

function checkVS3Form(objForm) {
  var arClass, bValid;
  var objField = objForm.getElementsByTagName('*');
  for (var iFieldCounter = 0; iFieldCounter < objField.length; iFieldCounter++) {
    arClass = objField[iFieldCounter].className.split(' ');
    for (var iClassCounter = 0; iClassCounter < arClass.length; iClassCounter++) {
      switch (arClass[iClassCounter]) {
      case 'string':
        bValid = isString(objField[iFieldCounter].value.replace(/^\s*|\s*$/g, ''));
        break;
      case 'number':
        bValid = isNumber(objField[iFieldCounter].value);
        break;
      case 'email':
        bValid = isEmail(objField[iFieldCounter].value);
        break;
      case 'telephone':
        bValid = isTelephone(objField[iFieldCounter].value);
        break;
      case 'password':
        bValid = isPassword(objField[iFieldCounter].value);
        break;
      case 'check':
        bValid = isChecked(objField[iFieldCounter].checked);
        break;
      default:
        bValid = true;
      }
      if (bValid == false) {
        s = new String(objField[iFieldCounter].title);
        s = s.replace(/_/g, " ");
        alert('Please review the value you entered for ' + s);
        objField[iFieldCounter].select();
        objField[iFieldCounter].focus();
        return false;
      }
    }
  }
  return true;
}

function isString(strValue) {
  return (typeof strValue == 'string' && strValue != '' && isNaN(strValue));
}

function isNumber(strValue) {
  return (!isNaN(strValue) && strValue != '');
}

function isChecked(blnChecked) {
  return blnChecked;
}

function isTelephone(strValue) {
  return (strValue != '');
}

function isPassword(strValue) {
  return (strValue != '');
}

function updateDiscountLine() { /*start of discount update function */
  $.getJSON('/ajax/getDiscountAmount/', function (data) {
    if (data['action'] == 'true') {
      if (data['discount_inc'] == 0 && $('.discount')[0]) {
        //discount is zero and discount tr exists. remove
        $($('.discount')[0]).remove();
      } else {
        if ($('.discount')[0]) {
          var discount = $($('td', $($('.discount')[0]))[2]);
          discount.empty();
          discount.html(data['html']);
        } else {
          //create
          var basket_table = $('table[summary="Basket Contents"]');
          var tr = $('td:contains("Delivery")', basket_table).parent();
          if (tr.length && data['discount_inc'] != 0) {
            tr.after('<tr class="discount"><td class="align_right td_nowrap">Discount</td><td>&nbsp;</td><td class="align_right basket_price">' + data['html'] + '</td></tr>');
          }
        }
      }
      $('div.courier_cost:visible').each(function (i, e) {
        strID = $(e).attr('id');
        if (strID.substr(0, 14) == 'courier_total_') {
          $(e).html(data['total_html']);
        }
      });
    }
  }); /*end of discount update function */
}

function isEmail(strValue) {
  var objRE = /^[\w-\.\']{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]{2,}$/;
  return (strValue != '' && objRE.test(strValue));
}

function setCountry(iCountryID, blnUpdateDeliveryMethods, blnRender) {
  if (iCountryID > 0 && isNumber(iCountryID)) {
    $.ajax({
      async: false,
      type: 'POST',
      url: '/ajax/setCountryID/' + iCountryID,
      success: function () {
        updateDiscountLine();
      }
    });
    if (blnUpdateDeliveryMethods) {
      $('#courier_id').attr('disabled', false);
      if ($('#delivery_prompt').length > 0) {
        $('#delivery_prompt').hide();
      }
      if ($('#delivery_label').length > 0) {
        $('#delivery_label').show();
      }
      if (arrCouriersForCountry[iCountryID].length > 0) {
        var arrCourierIDs = arrCouriersForCountry[iCountryID].split(',');
        blnSelect = false;
        if (typeof (document.getElementById('delivery_country_id').options) != 'undefined') {
          arrCountryOptions = document.getElementById('delivery_country_id').options;
          for (var i = 0; i < arrCountryOptions.length; i++) {
            if (arrCountryOptions[i].value == '') {
              document.getElementById('delivery_country_id').remove(i);
            }
          }
        }
        if ($('#delivery_country_id').hasClass('error_border')) {
          $('#delivery_country_id').removeClass('error_border');
        }
        if (document.getElementById('courier_id').options && document.getElementById('courier_id').options.length > 0) {
          document.getElementById('courier_id').options.length = 0;
        }
        for (var i = 0; i < arrCourierIDs.length; i++) {
          if (typeof (arrCouriers[arrCourierIDs[i]]) != 'undefined') {
            var newoption = document.createElement('option');
            newoption.text = arrCouriers[arrCourierIDs[i]];
            newoption.value = arrCourierIDs[i];
            document.getElementById('courier_id').add(newoption, newoption.selectedIndex);
            if (!blnSelect) {
              if (typeof (blnRender) != 'undefined' && blnRender) {
                setCourier(iCountryID, arrCourierIDs[i], true);
              } else {
                setCourier(iCountryID, arrCourierIDs[i]);
              }
              blnSelect = true;
            }
          }
        }
      } else {
        $('#courier_id').attr('disabled', true);
        $(".courier_cost").hide();
        $(".courier_information").hide();
        if ($(".courier_cost_noship")) {
          $(".courier_cost_noship").show();
        }
      }
    }
  }
}

function setCourier(iCountryID, iCourierId, blnRender) {
  strPresonalisationQueryString = ''
  $(".courier_cost").hide();
  $("#courier_cost_" + iCountryID + '_' + iCourierId).show();
  $("#courier_vat_" + iCountryID + '_' + iCourierId).show();
  $("#courier_discounts_" + iCountryID + '_' + iCourierId).show();
  $("#courier_subtotal_" + iCountryID + '_' + iCourierId).show();
  $("#courier_total_" + iCountryID + '_' + iCourierId).show();
  if ($('#top_container_basket_cost').length != 0) {
    $('#top_container_basket_cost').html($("#courier_total_" + iCountryID + '_' + iCourierId).html());
  }
  $(".courier_information").hide();
  if ($("#courier_information_" + iCountryID + '_' + iCourierId).html() != '') {
    $("#courier_information_" + iCountryID + '_' + iCourierId).fadeIn();
  }
  if (typeof (blnRender) != 'undefined' && blnRender) {
    if ($('#basket_total').length == 0 || $('#basket_sub_total').length == 0) {
      $.ajax({
        async: false,
        type: 'POST',
        url: '/ajax/setCourierID/' + iCourierId + '?2',
        success: function (strData) {
          updateDiscountLine();
          $('#shipping_cost_container').html(strData);
        }
      });
    } else {
      $('#basket_page_loading').remove();
      $('#basket_page_right').append('<div id="basket_page_loading"></div>');
      $.getJSON('/ajax/setCourierID/' + iCourierId + '/' + iCountryID + '/true/true', function (strJSON) {
        $('#basket_delivery_price').html(strJSON.delivery);
        $('#basket_discount_price').html(strJSON.discount);
        $('#basket_sub_total').html(strJSON.sub_total);
        $('#basket_total').html(strJSON.total);
        $('#basket_page_loading').remove();
      });
    }
  } else {
    $.ajax({
      async: false,
      type: 'POST',
      url: '/ajax/setCourierID/' + iCourierId + '?1',
      success: function (strData) {
        updateDiscountLine();
      }
    });
  }
}

function getDeliveryDates(iCountryID, iCourierId) {
  if (document.getElementById('delivery_date').options && document.getElementById('delivery_date').options.length > 0) {
    document.getElementById('delivery_date').options.length = 0;
    if (document.getElementById('delivery_date').options.length != 0) {
      $('#delivery_date option').remove();
    }
  }
  $("#delivery_date_row").hide();
  $('#delivery_date_row').attr('disabled', true);
  var i = 0;
  $.post('/ajax/setShippingDate/');
  try {
    if (arrCourierDeliveryDates[iCourierId][iCountryID] && arrCourierDeliveryDates[iCourierId][iCountryID].length > 0) {
      var arrDeliveryDates = arrCourierDeliveryDates[iCourierId][iCountryID];
      $("#delivery_date_row").show();
      $('#delivery_date_row').attr('disabled', false);
      var keys = new Array();
      for (k in arrDeliveryDates) {
        keys.push(k);
      }
      keys.sort(function (a, b) {
        return (a > b) - (a < b);
      });
      $('#delivery_date').attr('disabled', true);
      var options = '';
      for (var i = 0; i < keys.length; i++) {
        var key = keys[i];
        var option;
        if (i == 0) {
          $.post('/ajax/setShippingDate/' + key);
          var setDate = new Date(key * 1000);
          if ($("#named_delivery_text").length) {
            sDatePrefix = 'th';
            if (setDate.getDate() == 1 || setDate.getDate() == 31) {
              sDatePrefix = 'st'
            } else if (setDate.getDate() == 2) {
              sDatePrefix = 'nd'
            } else if (setDate.getDate() == 3) {
              sDatePrefix = 'rd'
            }
            $("#named_delivery_text").text(setDate.getDayName() + ', ' + setDate.getDate() + sDatePrefix + ' ' + setDate.getMonthName())
          }
        }
        $("#delivery_date_row").show();
        option = $("<option></option>").attr("value", key).text(arrDeliveryDates[key]);
        options += $('<div>').append(option.clone()).remove().html();
      }
      $('#delivery_date').html(options);
      $('#delivery_date').attr('disabled', false);
    }
  } catch (err) {
    return false;
  }
}

function setDeliveryDate(iDeliveryDate) {
  if (iDeliveryDate != 'null') {
    $.post('/ajax/setShippingDate/' + iDeliveryDate);
  }
}

function setRegistrationDetails(blnRepopulate) {
  if ($('#delivery_address_no').attr('checked')) {
    $('.delivery').addClass('field_disabled');
    $('#delivery_full_name').val($('#full_name').val());
    $('#delivery_title').val($('#title').val());
    $('#delivery_firstname').val($('#firstname').val());
    $('#delivery_surname').val($('#surname').val());
    $('#delivery_postcode').val($('#postcode').val());
    $('#delivery_company_name').val($('#company_name').val());
    $('#delivery_house_number').val($('#house_number').val());
    $('#delivery_address1').val($('#address1').val());
    $('#delivery_address2').val($('#address2').val());
    $('#delivery_town').val($('#town').val());
    $('#delivery_county').val($('#county').val());
    $('#delivery_country').val($('#country').val());
    $('#delivery_telephone').val($('#telephone').val());
  } else {
    $('.delivery').removeClass('field_disabled');
  }
}

function mirrorRegistrationDetails() {
  if ($('#delivery_address_no').attr('checked')) {
    $('#full_name').blur(function () {
      if ($('#delivery_address_no').attr('checked')) {
        $('#delivery_full_name').val($('#full_name').val());
      }
    });
    $('#title').blur(function () {
      if ($('#delivery_address_no').attr('checked')) {
        $('#delivery_title').val($('#title').val());
      }
    });
    $('#firstname').blur(function () {
      if ($('#delivery_address_no').attr('checked')) {
        $('#delivery_firstname').val($('#firstname').val());
      }
    });
    $('#surname').blur(function () {
      if ($('#delivery_address_no').attr('checked')) {
        $('#delivery_surname').val($('#surname').val());
      }
    });
    $('#postcode').blur(function () {
      if ($('#delivery_address_no').attr('checked')) {
        $('#delivery_postcode').val($('#postcode').val());
      }
    });
    $('#company_name').blur(function () {
      if ($('#delivery_address_no').attr('checked')) {
        $('#delivery_company_name').val($('#company_name').val());
      }
    });
    $('#house_number').blur(function () {
      if ($('#delivery_address_no').attr('checked')) {
        $('#delivery_house_number').val($('#house_number').val());
      }
    });
    $('#address1').blur(function () {
      if ($('#delivery_address_no').attr('checked')) {
        $('#delivery_address1').val($('#address1').val());
      }
    });
    $('#address2').blur(function () {
      if ($('#delivery_address_no').attr('checked')) {
        $('#delivery_address2').val($('#address2').val());
      }
    });
    $('#town').blur(function () {
      if ($('#delivery_address_no').attr('checked')) {
        $('#delivery_town').val($('#town').val());
      }
    });
    $('#county').blur(function () {
      if ($('#delivery_address_no').attr('checked')) {
        $('#delivery_county').val($('#county').val());
      }
    });
    $('#country').blur(function () {
      if ($('#delivery_address_no').attr('checked')) {
        $('#delivery_country').val($('#country').val());
      }
    });
    $('#telephone').blur(function () {
      if ($('#delivery_address_no').attr('checked')) {
        $('#delivery_telephone').val($('#telephone').val());
      }
    });
  }
}
jQuery.fn.encHTML = function () {
  return this.each(function () {
    var me = jQuery(this);
    var html = me.html();
    me.html(html.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;'));
  });
};
jQuery.fn.decHTML = function () {
  return this.each(function () {
    var me = jQuery(this);
    var html = me.html();
    me.html(html.replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>'));
  });
};
jQuery.fn.isEncHTML = function (str) {
  if (str.search(/&amp;/g) != -1 || str.search(/&lt;/g) != -1 || str.search(/&gt;/g) != -1) return true;
  else return false;
};
jQuery.fn.decHTMLifEnc = function () {
  return this.each(function () {
    var me = jQuery(this);
    var html = me.html();
    if (jQuery.fn.isEncHTML(html)) me.html(html.replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>'));
  });
}

function URLDecode(url) {
  var HEXCHARS = "0123456789ABCDEFabcdef";
  var encoded = url;
  var plaintext = "";
  var i = 0;
  while (i < encoded.length) {
    var ch = encoded.charAt(i);
    if (ch == "+") {
      plaintext += " ";
      i++;
    } else if (ch == "%") {
      if (i < (encoded.length - 2) && HEXCHARS.indexOf(encoded.charAt(i + 1)) != -1 && HEXCHARS.indexOf(encoded.charAt(i + 2)) != -1) {
        plaintext += unescape(encoded.substr(i, 3));
        i += 3;
      } else {
        alert('Bad escape combination near ...' + encoded.substr(i));
        plaintext += "%[ERROR]";
        i++;
      }
    } else {
      plaintext += ch;
      i++;
    }
  }
  return plaintext;
};

function initVS3Ajax() {
  blnHideAutoComplete = true;
  $('.ajax_product_search').bind('blur', function () {
    runQuickOrderProductSearch(this.value, this.id);
  });
  $('.ajax_product_search').bind('blur', function () {
    if (blnHideAutoComplete) {
      $('#product_autocomplete').hide();
    }
  });
  $('.ajax_autocomplete').bind('mouseover', function () {
    blnHideAutoComplete = false;
  });
  $('.ajax_autocomplete').bind('mouseout', function () {
    blnHideAutoComplete = true;
  });
}

function runAJAXAddToBasket(blnSimplePersonalisation) {
  var arrPersonalisations = new Array();
  var strPersonalisations = '';
  var strPresonalisationQueryString = '';
  if (blnSimplePersonalisation == null) {
    blnSimplePersonalisation = false;
  }
  if ($('.personalisation_template').length > 0) {
    $('.personalisation_template:checked').each(function (i, objTickbox) {
      arrPersonalisations[i] = objTickbox.value;
      if (strPersonalisations != '') {
        strPersonalisations += ',';
      }
      strPersonalisations += objTickbox.value;
      strPresonalisationQueryString = '&personalisations[]=' + objTickbox.value;
    });
  }
  if (blnSimplePersonalisation && $('#personalisation').length > 0) {
    strPresonalisationQueryString = '&personalisation=' + $('#personalisation').val();
  }
  if ($('#personalise_checkbox:checked').length > 0) {
    strPresonalisationQueryString += '&personalisations[]=' + $('#personalise_checkbox:checked').val();
  }

  $.getJSON('/ajax/addtobasket/?product_id=' + $('#product_id').val() + '&quantity=' + $('#quantity').val() + strPresonalisationQueryString, function (strJSON) {
    updateMiniBasket(strJSON);
  });
  return false;
}

function updateMiniBasket(strJSON) {
  if (strJSON == null) {
    $.getJSON('/ajax/getbasket/true', function (strJSON) {
      updateMiniBasket(strJSON);
    });
  } else {
    $('#basket_items').hide();
    $('#mini_basket_num_items').text(strJSON.basket_num_items);
    $('#mini_basket_total').text('');
    $('#mini_basket_total').append(strJSON.product_total);
    $('#basket_items').fadeIn();
    $('#quick_buy_cancel').hide();
    if (strJSON.note != undefined && strJSON.note != '') {
      $('#add_note').remove();
      $('#added_to_basket').append('<span id="add_note"><strong>Please Note: ' + strJSON.note + '</strong></span>');
    }
    if (strJSON.strNewBasketHover != undefined && strJSON.strNewBasketHover != '') {
      $('#view_basket_hover').remove();
      $(strJSON.strNewBasketHover).insertAfter('#view_basket');
    }
    if (strJSON.strNewBasketHover != undefined && strJSON.strNewBasketHover != '' && strJSON.basket_num_items == 0) {
      $('#view_basket_hover').remove();
    }
    $('#added_to_basket').fadeIn();
    window.setTimeout("$('#added_to_basket').fadeOut()", 3500);
  }
}

function initModalProductPopup() {
  if ($('#modal_product_popup').length > 0) {
    $('#modal_product_popup').jqm({
      modal: false,
      trigger: 'a.modal_product_trigger',
      overlay: 1
    });
    $('.modal_product_trigger').bind('click', function () {
      runProductPopup($(this).attr('id'));
    });
  }
}

function runProductPopup(strID) {
  var strParentProductID = new String(strID);
  iParentProductID = strParentProductID.replace('modal_product_popup_', '');
  $.getJSON("/ajax/product_details/", {
    parent_product_id: iParentProductID
  }, function (strJSON) {
    if (strJSON.title != '') {
      $('#modal_product_popup_title').html('');
      $('#modal_product_popup_description').html('');
      $('#modal_product_popup_title').append('<h3>' + strJSON.title + '<h3>');
      $('#modal_product_popup_description').append(strJSON.description);
    }
  });
}

function initModalFAQPopup() {
  if ($('#modal_product_popup').length > 0) {
    $('#modal_product_popup').jqm({
      modal: false,
      trigger: 'a.modal_faq_trigger',
      overlay: 1
    });
    $('.modal_faq_trigger').bind('click', function () {
      runFAQPopup($(this).attr('id'));
    });
  }
}

function runFAQPopup(strID) {
  var strFAQID = new String(strID);
  iFAQID = strFAQID.replace('faq_popup_', '');
  $.getJSON("/ajax/faq/", {
    faq_id: iFAQID
  }, function (strJSON) {
    if (strJSON.title != '') {
      $('#modal_product_popup_title').html('');
      $('#modal_product_popup_description').html('');
      $('#modal_product_popup_title').append('<h3>' + strJSON.question + '<h3>');
      $('#modal_product_popup_description').append(strJSON.answer);
    }
  });
}

function initQuickBuy() {
  if ($('.thickbox').length > 0) {
    tb_init('a.thickbox, area.thickbox, input.thickbox');
  }
  if ($('#quick_buy').length > 0) {
    $('#quick_buy').jqm({
      modal: true,
      trigger: 'a.quick_buy_trigger',
      toTop: true
    });
    $('.quick_buy_trigger').bind('click', function (e) {
      if ($('#quick_buy:hidden')) {
        runQuickBuy($(this).attr('id'));
      }
      return false;
    });
    $('#quick_buy').jqmAddClose($('.modal_product_popup_close'));
  }
}

function runQuickBuy(strID) {
  $('#quick_buy_content').hide();
  $('#quick_buy_ok').hide();
  $('#quick_buy_loading').show();
  var strParentProductID = new String(strID);
  iParentProductID = strParentProductID.replace('quick_buy_', '');
  $.getJSON("/ajax/quickbuy/", {
    parent_product_id: iParentProductID
  }, function (strJSON) {
    $('#quick_buy_content_products').html('');
    strPersHTML = '';
    if (strJSON.num_available_personalisations) {
      blnPersonalise = true;
    } else {
      blnPersonalise = false;
    }
    if (strJSON.num_products == 1 && strJSON.delivery_per_product == 0 && 1 == 2) {
      var strIdent = '';
      $.post('/ajax/addtobasket/', {
        product_id: strJSON.products[0].product_id
      }, function (strJSON2) {
        strIdent = strJSON2.latest_identifier;
      });
      $('#quick_buy_content_img').attr('src', strJSON.products[0].thumb);
      if (typeof (strJSON.product_parent.added_to_basket_text) != undefined && typeof (strJSON.product_parent.added_to_basket_text) != 'undefined') {
        strMessage = '<p>' + strJSON.product_parent.added_to_basket_text + '</p>';
      } else {
        strMessage = '<p>' + strJSON.product_parent.title + ' has been added to your shopping basket</p>';
      }
      if (blnPersonalise) {
        strMessage += '<p class="quickbuy_personalise">Personalisation is available for this product. Click <a href="/personalisation/select_type/' + strIdent + '">here</a> to add them.</p>'
      }
      $('#quick_buy_content_products').append(strMessage);
      $('#quick_buy_content').show();
      $('#quick_buy_ok').show();
      $('#quick_buy_loading').hide();
    } else if (strJSON.num_products == 1 && strJSON.delivery_per_product == 1) {
      $('#quick_product_id').val(strJSON.products[0].product_id);
      $('#product_id').val(strJSON.products[0].product_id);
      $('#datepicker').show();
      $('#datepicker').css('z-index', 3500);
      $('#delivery_per_product_quickbuy').css('z-index', 3510);
      if ($('#product_delivery_stage0').length > 0) {
        $('#product_delivery_stage0').show();
        $('#product_delivery_stage1').hide();
      } else {
        $('#product_delivery_stage1').show();
      }
      $('#product_delivery_stage2').hide();
      $('#product_delivery_stage3').hide();
      if (typeof (strJSON.product_parent.added_to_basket_text) != undefined && typeof (strJSON.product_parent.added_to_basket_text) != 'undefined') {
        strMessage = '<p>' + strJSON.product_parent.added_to_basket_text + '</p>';
      } else {
        strMessage = '<p>' + strJSON.product_parent.title + ' has been added to your shopping basket</p>';
      }
      $('#quick_buy_content_products').append(strMessage);
    } else if (strJSON.num_products > 1) {
      strHTML = '<p><span class="choose_your">Choose your</span> <strong>' + strJSON.product_parent.title + '</strong>:</p><select name="product_id" id="quickbuy_options">';
      $.each(strJSON.products, function (i, product) {
        strHTML += '<option value=' + product.product_id + '">' + product.attribute_summary;
        if (product.model != '') {
          strHTML += ' (' + product.model + ')';
        }
        strHTML += '</option>';
      });
      strHTML += '</select>';
      strHTML += '<input type="submit" id="quick_buy_add_to_basket_submit" value="Add to Basket" onclick="$.post(\'/ajax/addtobasket/\', { product_id: $(\'#quickbuy_options\').val() });  $(\'#quick_buy_content_products\').text(\'\'); $(\'#quick_buy_content_products\').append(unescape(\'<p>' + escape(strJSON.product_parent.title.replace('"', "&quot;")) + ' has been added to your shopping basket</p>\')); $(\'#quick_buy_content\').show(); $(\'#quick_buy_ok\').show();return false;" />';
      strHTML += '<input type="image" id="quick_buy_add_to_basket_image" src="/images/quick_buy_add_to_basket.gif" value="Add to Basket" onclick="$.post(\'/ajax/addtobasket/\', { product_id: $(\'#quickbuy_options\').val() });  $(\'#quick_buy_content_products\').text(\'\'); $(\'#quick_buy_content_products\').append(unescape(\'<p>' + escape(strJSON.product_parent.title.replace('"', "&quot;")) + ' has been added to your shopping basket</p>\')); $(\'#quick_buy_content\').show(); $(\'#quick_buy_ok\').show();return false;" />';
      $('#quick_buy_content_products').append(strHTML);
      $('#quick_buy_content_img').attr('src', strJSON.product_parent.thumb);
      $('#quick_buy_content').show();
      $('#quick_buy_loading').hide();
    } else if (strJSON.num_products == 1) {
      strProductAttribute = '';
      strHiddenField = '';
      $.each(strJSON.products, function (i, product) {
        strHiddenField = '<input type="hidden" name="product_id" value=' + product.product_id + '">';
        strProductAttribute = product.attribute_summary;
        if (product.model != '' && strProductAttribute != '') {
          strProductAttribute += ' (' + product.model + ')';
        }
      });
      if (strProductAttribute == '') {
        var strIdent = '';
        var objRequest = null;
        $.ajax({
          type: "GET",
          url: "/ajax/addtobasket/",
          data: "product_id=" + strJSON.products[0].product_id,
          dataType: "json",
          success: function (objJSON) {
            $('#quick_buy_content_img').attr('src', strJSON.products[0].thumb);
            if (typeof (strJSON.product_parent.added_to_basket_text) != undefined && typeof (strJSON.product_parent.added_to_basket_text) != 'undefined') {
              strMessage = '<p>' + strJSON.product_parent.added_to_basket_text + '</p>';
            } else {
              strMessage = '<p>' + strJSON.product_parent.title + ' has been added to your shopping basket</p>';
            }
            if (blnPersonalise) {
              strMessage += '<p>Personalisation is available for this product. Click <a href="/personalisation/select_type/' + objJSON.latest_identifier + '/">here</a> to choose.</p>'
            }
            $('#quick_buy_content_products').append(strMessage);
            $('#quick_buy_content').show();
            $('#quick_buy_ok').show();
            $('#quick_buy_loading').hide();
          }
        });
      } else {
        strHTML = '<p><span class="choose_your">Choose your</span> <strong>' + strJSON.product_parent.title + '</strong>:</p>';
        strHTML += '<input type="hidden" name="product_id" value=' + strJSON.products[0].product_id + '">';
        strHTML += strProductAttribute;
        strHTML += '<input type="submit" id="quick_buy_add_to_basket_submit" value="Add to Basket" onclick="$.post(\'/ajax/addtobasket/\', { product_id: ' + strJSON.products[0].product_id + '});  $(\'#quick_buy_content_products\').text(\'\'); $(\'#quick_buy_content_products\').append(unescape(\'<p>' + escape(strJSON.product_parent.title.replace('"', "&quot;")) + ' has been added to your shopping basket</p>\')); $(\'#quick_buy_content\').show(); $(\'#quick_buy_ok\').show();return false;" />';
        strHTML += '<input type="image" id="quick_buy_add_to_basket_image" src="/images/quick_buy_add_to_basket.gif" value="Add to Basket" onclick="$.post(\'/ajax/addtobasket/\', { product_id: ' + strJSON.products[0].product_id + '});  $(\'#quick_buy_content_products\').text(\'\'); $(\'#quick_buy_content_products\').append(unescape(\'<p>' + escape(strJSON.product_parent.title.replace('"', "&quot;")) + ' has been added to your shopping basket</p>\')); $(\'#quick_buy_content\').show(); $(\'#quick_buy_ok\').show();return false;" />';
        $('#quick_buy_content_products').append(strHTML);
        $('#quick_buy_content_img').attr('src', strJSON.product_parent.thumb);
        $('#quick_buy_content').show();
        $('#quick_buy_loading').hide();
      }
    } else if (strJSON.num_products == 0) {
      $('#quick_buy').hide();
      $('.jqmOverlay').remove();
      alert('Unfortunately this product is not in stock, and cannot be added to your basket at the moment.');
    }
  });
  return false;
}

function switchBundleSelectBox(iSortOrder, iSelectionCount) {
  $('.bundle_product_' + iSortOrder).each(function (i) {
    objSelect = document.getElementById('bundle_product_' + iSortOrder + '_' + i);
    if (i == iSelectionCount) {
      strId = objSelect.options[objSelect.selectedIndex].value;
      if (strId.match(/_/)) {
        $('#product_popup_image_' + iSortOrder + '_' + i).hide();
      } else {
        $('#product_popup_image_' + iSortOrder + '_' + i).show();
        $('#product_popup_image_' + iSortOrder + '_' + i).show();
        $('> a', $('#prod_info_cell_' + iSortOrder + '_' + iSelectionCount)).attr("id", 'modal_product_popup_' + strId)
      }
    } else {
      objSelect.selectedIndex = 0;
      $('#product_popup_image_' + iSortOrder + '_' + i).hide();
    }
  });
}

function bookmark(url, title) {
  if ((navigator.appName == "Microsoft Internet Explorer") && (parseInt(navigator.appVersion) >= 4)) {
    window.external.AddFavorite(url, title);
  } else if (navigator.appName == "Netscape" && window.sidebar && window.sidebar.addPanel) {
    window.sidebar.addPanel(title, url, "");
  } else {
    alert("Press CTRL-D (Netscape) or CTRL-T (Opera) to bookmark");
  }
}

function replaceQueryString(url, param, value) {
  var re = new RegExp("([?|&])" + param + "=.*?(&|$)", "i");
  if (url.match(re)) return url.replace(re, '$1' + param + "=" + value + '$2');
  else return url + '?&' + param + "=" + value;
}
addEvent(window, 'load', initReviewStarRater);
addEvent(window, 'load', initReviewMultiStarRater);
addEvent(window, 'load', setupPopupLinks);
addEvent(window, 'load', setupConfirmationDialogs);
addEvent(window, 'load', setupVS3FormValidation);
addEvent(window, 'load', initVS3Ajax);
var jThickboxNewLink;

function tb_remove_open(reloadLink) {
  jThickboxNewLink = reloadLink;
  tb_remove();
  $("div[id^='TB_']")
  setTimeout('tb_open_new(jThickboxNewLink);', 1000);
  return false;
}

function tb_open_new(jThickboxNewLink) {
  tb_show(null, jThickboxNewLink, null);
}

function initReviewMultiStarRater() {
  if ($('#rating_star_1').length) {
    var iPointer = 1;

    while ($('#rating_star_' + iPointer).length) {
      $('#rating_star_' + iPointer + ' li>a').bind("click", function () {
        //parent().parent() is fine here as the html won't change.
        $(this).parent().parent().removeClass('onestar twostar threestar fourstar fivestar');

        //Set the answer to this question
        var strAnswerInput = $(this).parent().parent().attr('id').replace('rating_star_', 'review_answer_');
        $('#' + strAnswerInput).val(this.innerHTML);

        switch (this.innerHTML) {
        case "1":
          $(this).parent().parent().addClass('onestar');
          break;

        case "2":
          $(this).parent().parent().addClass('twostar');
          break;

        case "3":
          $(this).parent().parent().addClass('threestar');
          break;

        case "4":
          $(this).parent().parent().addClass('fourstar');
          break;

        case "5":
          $(this).parent().parent().addClass('fivestar');
          break;
        }

        return false;
      });

      iPointer++;

    }
  }
}

$(function () {
  $('#additional_delivery_information_new').blur(function () {
    $.getJSON('/ajax/setDeliveryNotes/' + $('#additional_delivery_information_new').val(), function (strJSON) {
      if (strJSON != 'OK') {
        alert('Your delivey details have not been updated. Please Try Again.');
      }
    });
  });
});

if(typeof String.prototype.trim !== 'function') {
  String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, '');
  }
}function setThumbImages(strImageMedium,strImageZoom){$("#product_zoom_image").show();$('#product_img embed').remove();if($('#product_img')){$('#img_border').show();$('#product_medium_image').show();$('.product_zoom_message').show();$('.gallery_img_options').show();$('#product_video_object').remove();$('div.product_hover').show();}
if($('#product_gallery_img')){$('#product_gallery_img #product_medium_image').show();$('#product_gallery_img .product_zoom_message').show();$('#product_gallery_img .gallery_img_options').show();$('#product_gallery_img #product_video_object').remove();}
if($('#download_hires_link').length>0){$('#download_hires_link').attr('href',(strImageZoom!=""?strImageZoom:strImageMedium));}
if($('#product_medium_image')&&strImageMedium!=""){$('#product_medium_image').attr("src",strImageMedium);$('.product_medium_image').attr("src",strImageMedium);}
if($('#product_zoom_image').hasClass('thickbox')){$('#product_zoom_image').attr("rel",strImageZoom);$('.product_zoom_image').attr("rel",strImageZoom);}else{if($('#product_zoom_image')&&strImageZoom!=""&&strImageZoom!="null"){$('#product_zoom_image').attr("href",strImageZoom);$('.product_zoom_image').attr("href",strImageZoom);}else{$('#product_zoom_image').attr("href","#");$('.product_zoom_image').attr("href","#");}}}
function setVideoImage(strVideoLink,strType){if(strVideoLink!=""){if($('#product_img')){$('#img_border').hide();$('#product_video_object').remove();$('#product_img embed').remove();$('#product_medium_image').hide();$('.product_zoom_message').hide();$('.gallery_img_options').hide();if(strType=='vimeo'){$('#product_img').append('<iframe id="product_video_object" src="http://player.vimeo.com/video/'+strVideoLink+'?title=0&amp;byline=0&amp;portrait=0" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>');}else{$('#product_img').append('<object id="product_video_object" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'"><param name="movie" value="http://www.youtube.com/v/'+strVideoLink+'&hl=en&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/'+strVideoLink+'&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'" wmode="transparent"></embed></object>');}$('div.product_hover').hide();}
if($('#product_gallery_img')){$('#img_border').hide();$('#product_gallery_img #product_video_object').remove();$('#product_gallery_img #product_medium_image').hide();$('#product_gallery_img .product_zoom_message').hide();$('#product_gallery_img .gallery_img_options').hide();$('#product_gallery_img').append('<object id="product_video_object" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'"><param name="movie" value="http://www.youtube.com/v/'+strVideoLink+'&hl=en&fs=1&rel=0&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/'+strVideoLink+'&hl=en&fs=1&rel=0&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'" wmode="transparent"></embed></object>');}}
return false;}
function setVideoPlaylist(strVideoPlaylistLink){if(strVideoPlaylistLink!=""){if($('#product_img')){$('#product_video_object').remove();$('#product_img embed').remove();$('#product_medium_image').hide();$('.product_zoom_message').hide();$('.gallery_img_options').hide();$('#product_img').append('<object id="product_video_object" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'"><param name="movie" value="http://www.youtube.com/p/'+strVideoPlaylistLink+'&hl=en&fs=1&rel=0&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/p/'+strVideoPlaylistLink+'&hl=en&fs=1&rel=0&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'" wmode="transparent"></embed></object>');}
if($('#product_gallery_img')){$('#product_gallery_img #product_video_object').remove();$('#product_gallery_img #product_medium_image').hide();$('#product_gallery_img .product_zoom_message').hide();$('#product_gallery_img .gallery_img_options').hide();$('#product_gallery_img').append('<object id="product_video_object" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'"><param name="movie" value="http://www.youtube.com/p/'+strVideoPlaylistLink+'&hl=en&fs=1&rel=0&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/p/'+strVideoPlaylistLink+'&hl=en&fs=1&rel=0&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'" wmode="transparent"></embed></object>');}}
return false;};
function setFlash(strFlashLink){if(strFlashLink != ""){$("#product_zoom_image").hide();$('#product_video_object').remove();$('#product_medium_image').hide();$('.product_zoom_message').hide();$('.gallery_img_options').hide();$('#product_img').append('<object id="product_video_object" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'"><param name="movie" value="'+strFlashLink+'"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><param name="wmode" value="transparent"></param><embed src="'+strFlashLink+'" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'" wmode="transparent"></embed></object>');}$('div.product_hover').hide();return false;}
/**
 * jQuery.ScrollTo - Easy element scrolling using jQuery.
 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 5/25/2009
 * @author Ariel Flesler
 * @version 1.4.2
 *
 * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
 */
;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
