//Public javascript functions

/*
Script: IframeShim.js
	Defines IframeShim, a class for obscuring select lists and flash objects in IE.

License:
	http://clientside.cnet.com/wiki/cnet-libraries#license
*/	
var IframeShim=new Class({Implements:[Options,Events],options:{name:'',className:'iframeShim',display:false,zindex:null,margin:0,offset:{x:0,y:0},browsers:(Browser.Engine.trident4||(Browser.Engine.gecko&&!Browser.Engine.gecko19&&Browser.Platform.mac))},initialize:function(element,options){this.setOptions(options);if(this.options.offset&&this.options.offset.top)this.options.offset.y=this.options.offset.top;if(this.options.offset&&this.options.offset.left)this.options.offset.x=this.options.offset.left;this.element=$(element);this.makeShim();return;},makeShim:function(){this.shim=new Element('iframe');this.id=this.options.name||new Date().getTime()+"_shim";if(this.element.getStyle('z-Index').toInt()<1||isNaN(this.element.getStyle('z-Index').toInt()))
this.element.setStyle('z-Index',5);var z=this.element.getStyle('z-Index')-1;if($chk(this.options.zindex)&&this.element.getStyle('z-Index').toInt()>this.options.zindex)
z=this.options.zindex;this.shim.setStyles({'position':'absolute','zIndex':z,'border':'none','filter':'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)'}).setProperties({'src':'javascript:void(0);','frameborder':'0','scrolling':'no','id':this.id}).addClass(this.options.className);this.element.store('shim',this);var inject=function(){this.shim.inject(this.element,'after');if(this.options.display)this.show();else this.hide();this.fireEvent('onInject');};if(this.options.browsers){if(Browser.Engine.trident&&!IframeShim.ready){window.addEvent('load',inject.bind(this));}else{inject.run(null,this);}}},position:function(shim){if(!this.options.browsers||!IframeShim.ready)return this;var before=this.element.getStyles('display','visibility','position');this.element.setStyles({display:'block',position:'absolute',visibility:'hidden'});var size=this.element.getSize();this.element.setStyles(before);if($type(this.options.margin)){size.x=size.x-(this.options.margin*2);size.y=size.y-(this.options.margin*2);this.options.offset.x+=this.options.margin;this.options.offset.y+=this.options.margin;}
this.shim.setStyles({'width':size.x,'height':size.y}).setPosition({relativeTo:this.element,offset:this.options.offset});return this;},hide:function(){if(this.options.browsers)this.shim.setStyle('display','none');return this;},show:function(){if(!this.options.browsers)return this;this.shim.setStyle('display','block');return this.position();},dispose:function(){if(this.options.browsers)this.shim.dispose();return this;}});window.addEvent('load',function(){IframeShim.ready=true;});




/***
 * MooRainbow
 *
 * @version		1.2b2
 * @license		MIT-style license
 * @author		Djamil Legato - < djamil [at] djamil.it >
 * @infos		http://moorainbow.woolly-sheep.net
 * @copyright	Author
 * 
 *
 */

var Rainbows=[];var MooRainbow=new Class({options:{id:'mooRainbow',prefix:'moor-',imgPath:'http://www.artworksonline.com.au/_themes/public/images/',startColor:[255,0,0],wheel:false,onComplete:$empty,onChange:$empty},initialize:function(el,options){this.element=$(el);if(!this.element)return;this.setOptions(options);this.sliderPos=0;this.pickerPos={x:0,y:0};this.backupColor=this.options.startColor;this.currentColor=this.options.startColor;this.sets={rgb:[],hsb:[],hex:[]};this.pickerClick=this.sliderClick=false;if(!this.layout)this.doLayout();this.OverlayEvents();this.sliderEvents();this.backupEvent();if(this.options.wheel)this.wheelEvents();this.element.addEvent('click',function(e){this.toggle(e);}.bind(this));this.layout.overlay.setStyle('background-color',this.options.startColor.rgbToHex());this.layout.backup.setStyle('background-color',this.backupColor.rgbToHex());this.pickerPos.x=this.snippet('curPos').l+this.snippet('curSize','int').w;this.pickerPos.y=this.snippet('curPos').t+this.snippet('curSize','int').h;this.manualSet(this.options.startColor);this.pickerPos.x=this.snippet('curPos').l+this.snippet('curSize','int').w;this.pickerPos.y=this.snippet('curPos').t+this.snippet('curSize','int').h;this.sliderPos=this.snippet('arrPos')-this.snippet('arrSize','int');if(window.khtml)this.hide();},toggle:function(){if(this.visible){this.hide();}else{this.show();}},show:function(){this.rePosition();this.layout.setStyle('display','block');this.visible=true;},hide:function(){this.layout.setStyles({'display':'none'});this.visible=false;this.fireEvent('onComplete',[this.sets,this]);},closeAll:function(){Rainbows.each(function(obj){obj.hide();});return this;},manualSet:function(color,type){if(!type||(type!='hsb'&&type!='hex'))type='rgb';var rgb,hsb,hex;if(type=='rgb'){rgb=color;hsb=color.rgbToHsb();hex=color.rgbToHex();}
else if(type=='hsb'){hsb=color;rgb=color.hsbToRgb();hex=rgb.rgbToHex();}
else{hex=color;rgb=color.hexToRgb(true);hsb=rgb.rgbToHsb();}
this.setMooRainbow(rgb);this.autoSet(hsb);},autoSet:function(hsb){var curH=this.snippet('curSize','int').h;var curW=this.snippet('curSize','int').w;var oveH=this.layout.overlay.height;var oveW=this.layout.overlay.width;var sliH=this.layout.slider.height;var arwH=this.snippet('arrSize','int');var hue;var posx=Math.round(((oveW*hsb[1])/100)-curW);var posy=Math.round(-((oveH*hsb[2])/100)+oveH-curH);var c=Math.round(((sliH*hsb[0])/360));c=(c==360)?0:c;var position=sliH-c+this.snippet('slider')-arwH;hue=[this.sets.hsb[0],100,100].hsbToRgb().rgbToHex();this.layout.cursor.setStyles({'top':posy,'left':posx});this.layout.arrows.setStyle('top',position);this.layout.overlay.setStyle('background-color',hue);this.sliderPos=this.snippet('arrPos')-arwH;this.pickerPos.x=this.snippet('curPos').l+curW;this.pickerPos.y=this.snippet('curPos').t+curH;},setMooRainbow:function(color,type){if(!type||(type!='hsb'&&type!='hex'))type='rgb';var rgb,hsb,hex;if(type=='rgb'){rgb=color;hsb=color.rgbToHsb();hex=color.rgbToHex();}
else if(type=='hsb'){hsb=color;rgb=color.hsbToRgb();hex=rgb.rgbToHex();}
else{hex=color;rgb=color.hexToRgb();hsb=rgb.rgbToHsb();}
this.sets={rgb:rgb,hsb:hsb,hex:hex};if(!$chk(this.pickerPos.x))
this.autoSet(hsb);this.RedInput.value=rgb[0];this.GreenInput.value=rgb[1];this.BlueInput.value=rgb[2];this.HueInput.value=hsb[0];this.SatuInput.value=hsb[1];this.BrighInput.value=hsb[2];this.hexInput.value=hex;this.currentColor=rgb;this.chooseColor.setStyle('background-color',rgb.rgbToHex());},parseColors:function(x,y,z){var s=Math.round((x*100)/this.layout.overlay.width);var b=100-Math.round((y*100)/this.layout.overlay.height);var h=360-Math.round((z*360)/this.layout.slider.height)+this.snippet('slider')-this.snippet('arrSize','int');h-=this.snippet('arrSize','int');h=(h>=360)?0:(h<0)?0:h;s=(s>100)?100:(s<0)?0:s;b=(b>100)?100:(b<0)?0:b;return[h,s,b];},OverlayEvents:function(){var lim,curH,curW,inputs;curH=this.snippet('curSize','int').h;curW=this.snippet('curSize','int').w;inputs=$A(this.arrRGB).concat(this.arrHSB,this.hexInput);document.addEvent('click',function(){if(this.visible)this.hide(this.layout);}.bind(this));inputs.each(function(el){el.addEvent('keydown',this.eventKeydown.bindWithEvent(this,el));el.addEvent('keyup',this.eventKeyup.bindWithEvent(this,el));},this);[this.element,this.layout].each(function(el){el.addEvents({'click':function(e){new Event(e).stop();},'keyup':function(e){e=new Event(e);if(e.key=='esc'&&this.visible)this.hide(this.layout);}.bind(this)},this);},this);lim={x:[0-curW,(this.layout.overlay.width-curW)],y:[0-curH,(this.layout.overlay.height-curH)]};this.layout.drag=new Drag(this.layout.cursor,{limit:lim,onBeforeStart:this.overlayDrag.bind(this),onStart:this.overlayDrag.bind(this),onDrag:this.overlayDrag.bind(this),snap:0});this.layout.overlay2.addEvent('mousedown',function(e){e=new Event(e);this.layout.cursor.setStyles({'top':e.page.y-this.layout.overlay.getTop()-curH,'left':e.page.x-this.layout.overlay.getLeft()-curW});this.layout.drag.start(e);}.bind(this));this.okButton.addEvent('click',function(){if(this.currentColor==this.options.startColor){this.hide();this.fireEvent('onComplete',[this.sets,this]);}
else{this.backupColor=this.currentColor;this.layout.backup.setStyle('background-color',this.backupColor.rgbToHex());this.hide();this.fireEvent('onComplete',[this.sets,this]);}}.bind(this));this.transp.addEvent('click',function(){this.hide();this.fireEvent('onComplete',['transparent',this]);}.bind(this));},overlayDrag:function(){var curH=this.snippet('curSize','int').h;var curW=this.snippet('curSize','int').w;this.pickerPos.x=this.snippet('curPos').l+curW;this.pickerPos.y=this.snippet('curPos').t+curH;this.setMooRainbow(this.parseColors(this.pickerPos.x,this.pickerPos.y,this.sliderPos),'hsb');this.fireEvent('onChange',[this.sets,this]);},sliderEvents:function(){var arwH=this.snippet('arrSize','int'),lim;lim=[0+this.snippet('slider')-arwH,this.layout.slider.height-arwH+this.snippet('slider')];this.layout.sliderDrag=new Drag(this.layout.arrows,{limit:{y:lim},modifiers:{x:false},onBeforeStart:this.sliderDrag.bind(this),onStart:this.sliderDrag.bind(this),onDrag:this.sliderDrag.bind(this),snap:0});this.layout.slider.addEvent('mousedown',function(e){e=new Event(e);this.layout.arrows.setStyle('top',e.page.y-this.layout.slider.getTop()+this.snippet('slider')-arwH);this.layout.sliderDrag.start(e);}.bind(this));},sliderDrag:function(){var arwH=this.snippet('arrSize','int'),hue;this.sliderPos=this.snippet('arrPos')-arwH;this.setMooRainbow(this.parseColors(this.pickerPos.x,this.pickerPos.y,this.sliderPos),'hsb');hue=[this.sets.hsb[0],100,100].hsbToRgb().rgbToHex();this.layout.overlay.setStyle('background-color',hue);this.fireEvent('onChange',[this.sets,this]);},backupEvent:function(){this.layout.backup.addEvent('click',function(){this.manualSet(this.backupColor);this.fireEvent('onChange',[this.sets,this]);}.bind(this));},wheelEvents:function(){var arrColors=$A(this.arrRGB).extend(this.arrHSB);arrColors.each(function(el){el.addEvents({'mousewheel':this.eventKeys.bindWithEvent(this,el),'keydown':this.eventKeys.bindWithEvent(this,el)});},this);[this.layout.arrows,this.layout.slider].each(function(el){el.addEvents({'mousewheel':this.eventKeys.bindWithEvent(this,[this.arrHSB[0],'slider']),'keydown':this.eventKeys.bindWithEvent(this,[this.arrHSB[0],'slider'])});},this);},eventKeys:function(e,el,id){var wheel,type;id=(!id)?el.id:this.arrHSB[0];if(e.type=='keydown'){if(e.key=='up')wheel=1;else if(e.key=='down')wheel=-1;else return;}else if(e.type==Element.Events.mousewheel.base)wheel=(e.wheel>0)?1:-1;if(this.arrRGB.contains(el))type='rgb';else if(this.arrHSB.contains(el))type='hsb';else type='hsb';if(type=='rgb'){var rgb=this.sets.rgb,hsb=this.sets.hsb,prefix=this.options.prefix,pass;var value=(el.value.toInt()||0)+wheel;value=(value>255)?255:(value<0)?0:value;switch(el.className){case prefix+'rInput':pass=[value,rgb[1],rgb[2]];break;case prefix+'gInput':pass=[rgb[0],value,rgb[2]];break;case prefix+'bInput':pass=[rgb[0],rgb[1],value];break;default:pass=rgb;}
this.manualSet(pass);this.fireEvent('onChange',[this.sets,this]);}else{var rgb=this.sets.rgb,hsb=this.sets.hsb,prefix=this.options.prefix,pass;var value=(el.value.toInt()||0)+wheel;if(el.className.test(/(HueInput)/))value=(value>359)?0:(value<0)?0:value;else value=(value>100)?100:(value<0)?0:value;switch(el.className){case prefix+'HueInput':pass=[value,hsb[1],hsb[2]];break;case prefix+'SatuInput':pass=[hsb[0],value,hsb[2]];break;case prefix+'BrighInput':pass=[hsb[0],hsb[1],value];break;default:pass=hsb;}
this.manualSet(pass,'hsb');this.fireEvent('onChange',[this.sets,this]);}
e.stop();},eventKeydown:function(e,el){var n=e.code,k=e.key;if((!el.className.test(/hexInput/)&&!(n>=48&&n<=57))&&(k!='backspace'&&k!='tab'&&k!='delete'&&k!='left'&&k!='right'))
e.stop();},eventKeyup:function(e,el){var n=e.code,k=e.key,pass,prefix,chr=el.value.charAt(0);if(!$chk(el.value))return;if(el.className.test(/hexInput/)){if(chr!="#"&&el.value.length!=6)return;if(chr=='#'&&el.value.length!=7)return;}else{if(!(n>=48&&n<=57)&&(!['backspace','tab','delete','left','right'].contains(k))&&el.value.length>3)return;}
prefix=this.options.prefix;if(el.className.test(/(rInput|gInput|bInput)/)){if(el.value<0||el.value>255)return;switch(el.className){case prefix+'rInput':pass=[el.value,this.sets.rgb[1],this.sets.rgb[2]];break;case prefix+'gInput':pass=[this.sets.rgb[0],el.value,this.sets.rgb[2]];break;case prefix+'bInput':pass=[this.sets.rgb[0],this.sets.rgb[1],el.value];break;default:pass=this.sets.rgb;}
this.manualSet(pass);this.fireEvent('onChange',[this.sets,this]);}
else if(!el.className.test(/hexInput/)){if(el.className.test(/HueInput/)&&el.value<0||el.value>360)return;else if(el.className.test(/HueInput/)&&el.value==360)el.value=0;else if(el.className.test(/(SatuInput|BrighInput)/)&&el.value<0||el.value>100)return;switch(el.className){case prefix+'HueInput':pass=[el.value,this.sets.hsb[1],this.sets.hsb[2]];break;case prefix+'SatuInput':pass=[this.sets.hsb[0],el.value,this.sets.hsb[2]];break;case prefix+'BrighInput':pass=[this.sets.hsb[0],this.sets.hsb[1],el.value];break;default:pass=this.sets.hsb;}
this.manualSet(pass,'hsb');this.fireEvent('onChange',[this.sets,this]);}else{pass=el.value.hexToRgb(true);if(isNaN(pass[0])||isNaN(pass[1])||isNaN(pass[2]))return;if($chk(pass)){this.manualSet(pass);this.fireEvent('onChange',[this.sets,this]);}}},doLayout:function(){var id=this.options.id,prefix=this.options.prefix;var idPrefix=id+' .'+prefix;this.layout=new Element('div',{'styles':{'display':'block','position':'absolute'},'id':id}).inject(document.body);Rainbows.push(this);var box=new Element('div',{'styles':{'position':'relative'},'class':prefix+'box'}).inject(this.layout);var div=new Element('div',{'styles':{'position':'absolute','overflow':'hidden'},'class':prefix+'overlayBox'}).inject(box);var ar=new Element('div',{'styles':{'position':'absolute','zIndex':1},'class':prefix+'arrows'}).inject(box);ar.width=ar.getStyle('width').toInt();ar.height=ar.getStyle('height').toInt();var ov=new Element('img',{'styles':{'background-color':'#fff','position':'relative','zIndex':2},'src':this.options.imgPath+'moor_woverlay.png','class':prefix+'overlay'}).inject(div);var ov2=new Element('img',{'styles':{'position':'absolute','top':0,'left':0,'zIndex':2},'src':this.options.imgPath+'moor_boverlay.png','class':prefix+'overlay'}).inject(div);if(window.ie6){div.setStyle('overflow','');var src=ov.src;ov.src=this.options.imgPath+'blank.gif';ov.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+src+"', sizingMethod='scale')";src=ov2.src;ov2.src=this.options.imgPath+'blank.gif';ov2.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+src+"', sizingMethod='scale')";}
ov.width=ov2.width=div.getStyle('width').toInt();ov.height=ov2.height=div.getStyle('height').toInt();var cr=new Element('div',{'styles':{'overflow':'hidden','position':'absolute','zIndex':3},'class':prefix+'cursor'}).inject(div);cr.width=cr.getStyle('width').toInt();cr.height=cr.getStyle('height').toInt();var sl=new Element('img',{'styles':{'position':'absolute','z-index':3},'src':this.options.imgPath+'moor_slider.png','class':prefix+'slider'}).inject(box);this.layout.slider=document.getElement('#'+idPrefix+'slider');sl.width=sl.getStyle('width').toInt();sl.height=sl.getStyle('height').toInt();new Element('div',{'styles':{'position':'absolute'},'class':prefix+'colorBox'}).inject(box);new Element('div',{'styles':{'zIndex':2,'position':'absolute'},'class':prefix+'chooseColor'}).inject(box);this.layout.backup=new Element('div',{'styles':{'zIndex':2,'position':'absolute','cursor':'pointer'},'class':prefix+'currentColor'}).inject(box);var R=new Element('label').inject(box).setStyle('position','absolute');var G=R.clone().inject(box).addClass(prefix+'gLabel').appendText('G: ');var B=R.clone().inject(box).addClass(prefix+'bLabel').appendText('B: ');R.appendText('R: ').addClass(prefix+'rLabel');var inputR=new Element('input');var inputG=inputR.clone().inject(G).addClass(prefix+'gInput');var inputB=inputR.clone().inject(B).addClass(prefix+'bInput');inputR.inject(R).addClass(prefix+'rInput');var HU=new Element('label').inject(box).setStyle('position','absolute');var SA=HU.clone().inject(box).addClass(prefix+'SatuLabel').appendText('S: ');var BR=HU.clone().inject(box).addClass(prefix+'BrighLabel').appendText('B: ');HU.appendText('H: ').addClass(prefix+'HueLabel');var inputHU=new Element('input');var inputSA=inputHU.clone().inject(SA).addClass(prefix+'SatuInput');var inputBR=inputHU.clone().inject(BR).addClass(prefix+'BrighInput');inputHU.inject(HU).addClass(prefix+'HueInput');SA.appendText(' %');BR.appendText(' %');new Element('span',{'styles':{'position':'absolute'},'class':prefix+'ballino'}).set('html'," °").injectAfter(HU);var hex=new Element('label').inject(box).setStyle('position','absolute').addClass(prefix+'hexLabel').appendText('#hex: ').adopt(new Element('input').addClass(prefix+'hexInput'));var ok=new Element('input',{'styles':{'position':'absolute'},'type':'button','value':'Select','class':prefix+'okButton'}).inject(box);var transp=new Element('a',{'style':{'position':'absolute'},'href':'#','class':prefix+'transp'}).inject(box);this.rePosition();var overlays=$$('#'+idPrefix+'overlay');this.layout.overlay=overlays[0];this.layout.overlay2=overlays[1];this.layout.cursor=document.getElement('#'+idPrefix+'cursor');this.layout.arrows=document.getElement('#'+idPrefix+'arrows');this.chooseColor=document.getElement('#'+idPrefix+'chooseColor');this.layout.backup=document.getElement('#'+idPrefix+'currentColor');this.RedInput=document.getElement('#'+idPrefix+'rInput');this.GreenInput=document.getElement('#'+idPrefix+'gInput');this.BlueInput=document.getElement('#'+idPrefix+'bInput');this.HueInput=document.getElement('#'+idPrefix+'HueInput');this.SatuInput=document.getElement('#'+idPrefix+'SatuInput');this.BrighInput=document.getElement('#'+idPrefix+'BrighInput');this.hexInput=document.getElement('#'+idPrefix+'hexInput');this.arrRGB=[this.RedInput,this.GreenInput,this.BlueInput];this.arrHSB=[this.HueInput,this.SatuInput,this.BrighInput];this.okButton=document.getElement('#'+idPrefix+'okButton');this.transp=box.getElement('.'+prefix+'transp');if(!window.khtml)this.hide();},rePosition:function(){var coords=this.element.getCoordinates();this.layout.setStyles({'left':coords.left,'top':coords.top+coords.height+1});},snippet:function(mode,type){var size;type=(type)?type:'none';switch(mode){case'arrPos':var t=this.layout.arrows.getStyle('top').toInt();size=t;break;case'arrSize':var h=this.layout.arrows.height;h=(type=='int')?(h/2).toInt():h;size=h;break;case'curPos':var l=this.layout.cursor.getStyle('left').toInt();var t=this.layout.cursor.getStyle('top').toInt();size={'l':l,'t':t};break;case'slider':var t=this.layout.slider.getStyle('marginTop').toInt();size=t;break;default:var h=this.layout.cursor.height;var w=this.layout.cursor.width;h=(type=='int')?(h/2).toInt():h;w=(type=='int')?(w/2).toInt():w;size={w:w,h:h};};return size;}});MooRainbow.implement(new Options);MooRainbow.implement(new Events);

/*
	Slimbox v1.7 - The ultimate lightweight Lightbox clone
	(c) 2007-2009 Christophe Beyls <http://www.digitalia.be>
	MIT-style license.
*/
var Slimbox=(function(){var F=window,n=Browser.Engine.trident4,u,g,G=-1,o,w,E,v,y,M,s,m={},t=new Image(),K=new Image(),I,a,h,q,J,e,H,c,A,L,x,i,d,C;F.addEvent("domready",function(){$(document.body).adopt($$(I=new Element("div",{id:"lbOverlay",events:{click:D}}),a=new Element("div",{id:"lbCenter"}),H=new Element("div",{id:"lbBottomContainer"})).setStyle("display","none"));h=new Element("div",{id:"lbImage"}).injectInside(a).adopt(q=new Element("div",{styles:{position:"relative"}}).adopt(J=new Element("a",{id:"lbPrevLink",href:"#",events:{click:B}}),e=new Element("a",{id:"lbNextLink",href:"#",events:{click:f}})));c=new Element("div",{id:"lbBottom"}).injectInside(H).adopt(new Element("a",{id:"lbCloseLink",href:"#",events:{click:D}}),A=new Element("div",{id:"lbCaption"}),L=new Element("div",{id:"lbNumber"}),new Element("div",{styles:{clear:"both"}}))});function z(){var N=F.getScroll(),O=F.getSize();$$(a,H).setStyle("left",N.x+(O.x/2));if(v){I.setStyles({left:N.x,top:N.y,width:O.x,height:O.y})}}function l(N){["object",n?"select":"embed"].forEach(function(P){Array.forEach(document.getElementsByTagName(P),function(Q){if(N){Q._slimbox=Q.style.visibility}Q.style.visibility=N?"hidden":Q._slimbox})});I.style.display=N?"":"none";var O=N?"addEvent":"removeEvent";F[O]("scroll",z)[O]("resize",z);document[O]("keydown",p)}function p(O){var N=O.code;return u.closeKeys.contains(N)?D():u.nextKeys.contains(N)?f():u.previousKeys.contains(N)?B():false}function B(){return b(w)}function f(){return b(E)}function b(N){if(N>=0){G=N;o=g[N][0];w=(G||(u.loop?g.length:0))-1;E=((G+1)%g.length)||(u.loop?0:-1);r();a.className="lbLoading";m=new Image();m.onload=k;m.src=o}return false}function k(){a.className="";d.set(0);h.setStyles({backgroundImage:"url("+o+")",display:""});q.setStyle("width",m.width);$$(q,J,e).setStyle("height",m.height);A.set("html",g[G][1]||"");L.set("html",(((g.length>1)&&u.counterText)||"").replace(/{x}/,G+1).replace(/{y}/,g.length));if(w>=0){t.src=g[w][0]}if(E>=0){K.src=g[E][0]}M=h.offsetWidth;s=h.offsetHeight;var P=Math.max(0,y-(s/2)),N=0,O;if(a.offsetHeight!=s){N=i.start({height:s,top:P})}if(a.offsetWidth!=M){N=i.start({width:M,marginLeft:-M/2})}O=function(){H.setStyles({width:M,top:P+s,marginLeft:-M/2,visibility:"hidden",display:""});d.start(1)};if(N){i.chain(O)}else{O()}}function j(){if(w>=0){J.style.display=""}if(E>=0){e.style.display=""}C.set(-c.offsetHeight).start(0);H.style.visibility=""}function r(){m.onload=$empty;m.src=t.src=K.src=o;i.cancel();d.cancel();C.cancel();$$(J,e,h,H).setStyle("display","none")}function D(){if(G>=0){r();G=w=E=-1;a.style.display="none";x.cancel().chain(l).start(0)}return false}Element.implement({slimbox:function(N,O){$$(this).slimbox(N,O);return this}});Elements.implement({slimbox:function(N,Q,P){Q=Q||function(R){return[R.href,R.title]};P=P||function(){return true};var O=this;O.removeEvents("click").addEvent("click",function(){var R=O.filter(P,this);return Slimbox.open(R.map(Q),R.indexOf(this),N)});return O}});return{open:function(P,O,N){u=$extend({loop:false,overlayOpacity:0.8,overlayFadeDuration:400,resizeDuration:400,resizeTransition:false,initialWidth:250,initialHeight:250,imageFadeDuration:400,captionAnimationDuration:400,counterText:"Image {x} of {y}",closeKeys:[27,88,67],previousKeys:[37,80],nextKeys:[39,78]},N||{});x=new Fx.Tween(I,{property:"opacity",duration:u.overlayFadeDuration});i=new Fx.Morph(a,$extend({duration:u.resizeDuration,link:"chain"},u.resizeTransition?{transition:u.resizeTransition}:{}));d=new Fx.Tween(h,{property:"opacity",duration:u.imageFadeDuration,onComplete:j});C=new Fx.Tween(c,{property:"margin-top",duration:u.captionAnimationDuration});if(typeof P=="string"){P=[[P,O]];O=0}y=F.getScrollTop()+(F.getHeight()/2);M=u.initialWidth;s=u.initialHeight;a.setStyles({top:Math.max(0,y-(s/2)),width:M,height:s,marginLeft:-M/2,display:""});v=n||(I.currentStyle&&(I.currentStyle.position!="fixed"));if(v){I.style.position="absolute"}x.set(0).start(u.overlayOpacity);z();l(1);g=P;u.loop=u.loop&&(g.length>1);return b(O)}}})();

// AUTOLOAD CODE BLOCK (MAY BE CHANGED OR REMOVED)
Slimbox.scanPage = function() {
	$$(document.links).filter(function(el) {
		return el.rel && el.rel.test(/^lightbox/i);
	}).slimbox({/* Put custom options here */}, null, function(el) {
		return (this == el) || ((this.rel.length > 8) && (this.rel == el.rel));
	});
};
window.addEvent("domready", Slimbox.scanPage);


/* ----------------------------------------------------------------------------------------------- End third party classes */



/* ----------------------------------------------------------------------------------------------- modalBox class */

//Display modal overlay box
var modalBox = new Class({
	
	Implements: Options,

	options: {
		closeOnClick:   true,
		showCloseButton:true,
		overlayOpacity: 0.8,
		titleText:      'Message',
		content:        $empty,
		width:          '500px'
	},
	
	
	initialize: function(options){
		this.setOptions(options);
		this.closeOnClick    = this.options.closeOnClick;
		this.showCloseButton = this.options.showCloseButton;
		this.overlayOpacity  = this.options.overlayOpacity;
		this.titleText       = this.options.titleText;
		this.width           = this.options.width;
		this.overlay         = $empty;
		this.contentBox      = $empty;
	},
	
	
	//Show the current modalBox
	show: function(){
		
		//Create an overlay
		this.overlay = new Element('div',{
		'id':'modalOverlay', 
		'class':'modalOverlay', 
		'styles':{
			'width':'100%',
			'height':window.getScrollSize().y,
			'position':'absolute',
			'top':0,
			'left':0,
			'z-index':1000,
			'opacity':0
			}
		});
		
		//Inject overlay into document body
		this.overlay.inject(document.body);
		
		//Create title bar
		var titleBar = new Element('div',{'id':'modalTitleBar'});
		
		//Create title
		var title = new Element('h1',{'id':'modalTitle','html':this.titleText});
		
		//Check if including close button
		if(this.showCloseButton){
		
			//Create close button
			var closeButton = new Element('a',{
				'id':'modalCloseButton',
				'href':'#',
				'html':'<span>Close</span>',
				'events':{
					'click': function(e){
						e.stop();
						this.hide();
					}.bind(this)
				}
			});
			//Inject close button into title bar
			titleBar.adopt(title, closeButton);
		}
		
		//Create content box
		this.contentBox = new Element('div',{
		'id':'modalContentBox',
		'styles':{
			'width':this.width,
			'position':'absolute',
			'z-index':1001
			}
		});
		
		//Inject title bar
		this.contentBox.adopt(titleBar);
		
		//Check if content is just a string
		if($type(this.options.content) == "string"){
			this.options.content = '<p>'+this.options.content+'</p>';
		}
		
		//Inject content into box
		this.contentBox.adopt(this.options.content);
		
		//Inject content box into document body
		this.contentBox.inject(document.body);
		
		//Get size of content box
		var contentBoxSize = this.contentBox.getSize();

		//Update content box position
		this.contentBox.setStyles({
			'top': (window.getScroll().y+((window.getSize().y/2)-(contentBoxSize.y/2))),
			'left': (window.getSize().x/2)-((this.width).toInt()/2)
		});
		
		//Hide things like select lists and embeded flash
		this.iframeShim(0);

		//Show the overlay
		this.overlay.set('opacity',this.overlayOpacity);
		
		//If closeOnClick is set to true
		if(this.closeOnClick){
			//Add click event to overlay
			this.overlay.addEvent('click',function(el){
				this.hide();
			}.bind(this));
		}
	
	},//End show the current modalBox
	
	
	//Hide (destroy) modalBox
	hide: function(){
		//Destroy content and overlay
		this.contentBox.destroy();
		this.overlay.destroy();
		//Bring select lists and embeded flash back
		this.iframeShim(1);
	},
	
	
	//Set the opacity of iframe shim objects
	iframeShim: function(overlayOpacity){
		if(Browser.Engine.trident4 || (Browser.Engine.gecko && Browser.Platform.mac)) {
			$$('select').each(function(select){
				select.setStyle('opacity', overlayOpacity);
			});
		}
	}
	
});//End modalBox


/* ----------------------------------------------------------------------------------------------- confirmationDialog class */

//Confirmation dialog, displays a modal box with a message and Yes/No buttons
var confirmationDialog = new Class({
	
	Implements: Options,

	options: {
		onConfirm: $empty,
		onDeny:    $empty
	},
	
	initialize: function(message,options){
		this.setOptions(options);
		this.message   = message;
		this.modal     = new modalBox({'closeOnClick':false,'titleText':'Are you sure?','width':'300px'});
	},
	
	
	//Show the dialog
	show: function(){

		var dialogWrapper = new Element('div');
		
		var messageContainer = new Element('p',{'html':this.message});
		
		var yesButton = new Element('button',{
			'id':'confirmButtonYes',
			'name':'confirmButtonYes',
			'class':'dialogButton',
			'html':'<span>Yes</span>',
			'events':{
				'click':this.options.onConfirm
			}
		});
		
		var noButton = new Element('button',{
			'id':'confirmButtonNo',
			'name':'confirmButtonNo',
			'class':'dialogButton',
			'html':'<span>No</span>',
			'events':{
				'click':this.options.onDeny
			}
		});

		messageContainer.inject(dialogWrapper);
		yesButton.inject(dialogWrapper);
		noButton.inject(dialogWrapper);
		
		this.modal.setOptions({'content':dialogWrapper});
		this.modal.show();
		
	},//End show the dialog
	
	
	//Hide (destroy) dialog
	hide: function(){
		this.modal.hide();
	}
	
});//End confirmationDialog



//Setup cs functions
var csFunctions = {//Start csFunctions

	
/* ----------------------------------------------------------------------------------------------- waitDialog function */
	
	//Display the please wait dialog
	waitDialog: function(triggers,message){
		
		//Stick message in paragraph
		var dialogMessage = new Element('p',{'html':message});
		
		//Create confirmation dialog
		var waitModal = new modalBox({'closeOnClick':false,'closeButton':false,'content':dialogMessage,'width':'100px'});
		
		triggers.each(function(el){
			el.addEvent('click',function(e){	
				waitModal.show();		   
			});					 
		});
	},
	
	

/* ----------------------------------------------------------------------------------------------- confirmDialog function */
	
	//Display a dialog confirming the user's choice
	confirmDialog: function(triggers,message){

		//Create confirmation dialog
		var confirmDialog = new confirmationDialog(message,{});
		
		triggers.each(function(el){
			el.addEvent('click',function(e){
				
				e.stop();
				
				confirmDialog.setOptions({
					'onConfirm':function(){ 
						//Continue to original link
						window.location = el.getProperty('href');
					},
					'onDeny':function(){ 
						confirmDialog.hide();
					}
				});
				
				confirmDialog.show();		   
			});					 
		});
		
	},//End confirmDialog
	
	
	
/* ----------------------------------------------------------------------------------------------- displayCartDetails function */
	
	//Display cart details drop down
	displayCartDetails: function(){
		
		//Get cart default wrapper (only exists if items in cart)
		var cartDefaultWrapper = $('cartDefaultWrapper');
		
		//Get header
		var header = $('header');
		
		//Check cart and header exists
		if(cartDefaultWrapper && header){//Start cart and header exists
			
			//Move to header
			header.grab(cartDefaultWrapper);
			
			//Change id to cartWrapper
			cartDefaultWrapper.set('id','cartWrapper');
			
			//Now get as cartWrapper
			var cartWrapper = $('cartWrapper');

			//Get cart edit wrapper
			var cartEditWrapper = $('cartEditWrapper');

			//Create toggle cart button
			var cartToggleButton = new Element('button',{'id':'toggleCart'});
			
			//Inject toggle button into header
			cartToggleButton.inject(header);
			
			//Set slide FX for cart drop down
			var cartDropDown = new Fx.Slide(cartEditWrapper,{transition:Fx.Transitions.Quart.easeOut});
			
			//Get cartToggleState cookie
			var cartToggleState = parseInt(Cookie.read('cartToggleState'));
			
			//Check initial toggle state
			if(cartToggleState){//Start check initial state
				
				//Is set
				
				//Show cart
				cartDropDown.show();
				
				//Set button text and toggle classes
				cartToggleButton.set('html','<span>Hide cart</span>');
				cartToggleButton.removeClass('cartOpen');
				cartToggleButton.addClass('cartClose');
				
			}else{//Else check initial state
				
				//Not set
				
				//Hide cart
				cartDropDown.hide();
				
				//Set button text and toggle classes
				cartToggleButton.set('html','<span>View cart</span>');
				cartToggleButton.removeClass('cartClose');
				cartToggleButton.addClass('cartOpen');
				
			}//End check initial state
			
			//Click event for cart toggle
			cartToggleButton.addEvent('click', function(e){//Start toggle click event
				
				//Check current state of cart container
				if(cartToggleState){//Start check state
					
					//Is open
					
					//Close container
					cartDropDown.slideOut();
					
					//Set internal state
					cartToggleState = 0;
					
					//Set cartToggleState cookie
					Cookie.write('cartToggleState','0',{duration: 1, path: "/"});
					
					//Set button text and toggle classes
					cartToggleButton.set('html','<span>View cart</span>');
					cartToggleButton.removeClass('cartClose');
					cartToggleButton.addClass('cartOpen');
	
				}else{//Else check state
					
					//Is closed
					
					//Open container
					cartDropDown.slideIn();
					
					//Set internal state
					cartToggleState = 1;
					
					//Set cartToggleState cookie
					Cookie.write('cartToggleState','1',{duration: 1, path: "/"});
					
					//Set button text and toggle classes
					cartToggleButton.set('html','<span>Hide cart</span>');
					cartToggleButton.removeClass('cartOpen');
					cartToggleButton.addClass('cartClose');
					
				}//End check state
				
				
			}.bind(this));//End toggle click event
	
		}//End cart and header exists
		
	},
	
	
	
/* ----------------------------------------------------------------------------------------------- changeWallColourPopup function */
	
	//Display change wall colour popup
	changeWallColourPopup: function(){//Start changeWallColourPopup	
	
		//Get productThumbWrapper
		var productThumbWrapper = $('productThumbWrapper');

		//If productThumbWrapper exists
		if(productThumbWrapper){//Start check for productThumbWrapper
			
			//Get existing wall colour cookie
			var wallColour = Cookie.read('bkgndWallColour');
			
			//Set wall colour default
			if(!$chk(wallColour)){
				var wallColour = '#FFFFFF';
			}
			
			//Set start colour
			startColour = new Color(wallColour,'rgb');
			
			//Create change wall colour icon
			var changeWallColour = new Element('p',{'id':'changeWallColour','html':'Wall colour'});
			
			//Inject into productThumbWrapper
			productThumbWrapper.grab(changeWallColour);
			
			//Create new mooRainbow instance
			var rainbow = new MooRainbow('changeWallColour',{
				'startColor': startColour,
				'onChange': function(color){
					wallColour = color.hex;
					productThumbWrapper.setStyle('background-color',wallColour);
				},
				'onComplete': function(){
					//Store wallColour in cookie
					var bkgndWallColourCookie = Cookie.write('bkgndWallColour', wallColour, {duration: 1, path: "/"});
				}
			});
			
			productThumbWrapper.setStyle('background-color',wallColour);
			
		}//End check for productThumbWrapper
	
	},//End changeWallColourPopup
	
	
/* ----------------------------------------------------------------------------------------------- toggleVGroove function */
	
	//Toggle v groove on an off
	toggleVGroove: function(){//Start toggleVGroove	
	
		//Get v groove span
		var vGroove = $('vGroove');
		
		//Get v groove checkbox
		var v_groove = $('v_groove');
		
		//Get matt outer
		var matOuter = $('matOuter');
		
		//If v groove and checkbox exist
		if(vGroove && v_groove && matOuter){//Start check exists
			
			//toggle classes
			var toggle = function(){
				
				//If v groove checked
				if(v_groove.checked){
					vGroove.removeClass('vGrooveDisabled');
					vGroove.addClass('vGrooveEnabled');
					matOuter.setStyle('padding',(matOuter.getStyle('padding').toInt()-3).round()+'px');
				}else{
					vGroove.removeClass('vGrooveEnabled');
					vGroove.addClass('vGrooveDisabled');
					matOuter.setStyle('padding',(matOuter.getStyle('padding').toInt()+3).round()+'px');
				}
				
				//Update frame price display
				this.calculateFramePrice();
			
			}.bind(this);
			
			//Determine inital
			toggle();
			
			//Add onclick event to checkbox
			v_groove.addEvent('click',function(e){
				toggle();
			}.bind(this));
			
		}//End check exists
		
	},//End toggleVGroove
	

/* ----------------------------------------------------------------------------------------------- toggleGlass function */
	
	//Toggle glass on an off
	toggleGlass: function(){//Start toggleGlass	
	
		//Get mat spans
		var matOuter = $('matOuter');
		var matInner = $('matInner');
		
		//Get glass checkbox
		var option_glass = $('option_glass');

		//If v groove and checkbox exist
		if(matOuter && matInner && option_glass){//Start check exists
			
			//toggle classes
			var toggle = function(){
				
				//If glass checked
				if(option_glass.checked){
					matOuter.removeClass('glassDisabled');
					matOuter.addClass('glassEnabled');
					matInner.removeClass('glassDisabled');
					matInner.addClass('glassEnabled');
				}else{
					matOuter.removeClass('glassEnabled');
					matOuter.addClass('glassDisabled');
					matInner.removeClass('glassEnabled');
					matInner.addClass('glassDisabled');
				}
				
				/*//Update frame price display
				this.calculateFramePrice();*/
			
			}.bind(this);
			
			//Determine inital
			toggle();
			
			//Add onclick event to checkbox
			option_glass.addEvent('click',function(e){
				toggle();
			}.bind(this));
			
		}//End check exists
		
	},//End toggleGlass
	
	
/* ----------------------------------------------------------------------------------------------- buildMatSlider function */
	
	//Converts mat input to slider and updates mat size
	buildMatSlider: function(matSpan,matInput,matLabel,vgroove){//Start buildOuterMatSlider	

		//Get v groove span
		var vGroove = $('vGroove');
		
		//Get v groove checkbox
		var v_groove = $('v_groove');
		
		//Check elements exist
		if(matSpan && matInput && matLabel && v_groove && vGroove){//Start check exists
		
			/*
			We need to swap outer mat input with a hidden field because IE throws an error when we try to change the field type to hidden
			*/
			
			//Get existing properties from outerMatInput
			var matInputProps = matInput.getProperties('id', 'name', 'value', 'class','style');
			
			//Create new hidden input
			var matHiddenInput = new Element('input',{'type':'hidden'});
			
			//Copy outerMatInput properties into new hidden input
			matHiddenInput.setProperties(matInputProps);
			
			//Replace old input with hidden input
			matHiddenInput.replaces(matInput);
			
			//Create new slider container
			var matSliderContainer = new Element('div',{'class':'matSliderContainer'});
			
			//Create new slider knob
			var matSliderKnob = new Element('div',{'class':'matSliderKnob'});
			
			//Inject knob into container
			matSliderKnob.inject(matSliderContainer);
			
			//Inject slider into document
			matSliderContainer.inject(matHiddenInput,'before');
			
			//Create the new slider instance
			var matSlider = new Slider(matSliderContainer, matSliderKnob, {
				snap: true,
				steps: 100,
				range: [0],	
				offset: 8,
				onChange: function(value){
					matLabel.set('html',value + ' mm');
					matHiddenInput.value = value;
					
					//If matt is less than 5mm remove vgroove
					if(vgroove && value<5){
						v_groove.checked = false;
						vGroove.removeClass('vGrooveEnabled');
						vGroove.addClass('vGrooveDisabled');
					}
					
					//If vgroove checked remove 7.5mm (3px)
					if(vgroove && v_groove.checked){
						value = value-7.5;
					}
					
					matSpan.tween('padding',(value*0.4).round()+'px');
					
				},
				onComplete: function(){
					//Update frame price display
					this.calculateFramePrice();
				}.bind(this)

			}).set(matHiddenInput.value);
			
		}//End check exists
		
	},//End buildMatSlider
	
	
/* ----------------------------------------------------------------------------------------------- setMatColour function */
	
	//Set the colour of the mat
	setMatColour: function(matSpan,matColourRadios){//Start setMatColour	


		//If span and radios exist
		if(matSpan && matColourRadios){//Start check exists
			
			//Select colour and deselect the rest
			var selectColour = function(selected){

				//Remove selected calss and uncheck all radion
				matColourRadios.each(function(el,index){
					el.getParent('li').removeClass('matSelected');
					el.setProperty('checked','');
				});
				
				//Set selected class and check selected radio
				selected.getParent('li').addClass('matSelected');
				selected.setProperty('checked','checked');
				
			}
			
			//Loop radios
			matColourRadios.each(function(el,index){
				
				//Hide the radio
				el.setStyle('display','none');

				//Get associated label
				var radioLabel = $(document.body).getElement('label[for='+el.get('id')+']');
				
				//Add on click event to label
				radioLabel.addEvent('click',function(e){
					
					//Update background colour of mat span
					matSpan.setStyle('background-color','#'+el.value);	
					
					//Toggle classes and check the slected radio
					selectColour(el);
					
				}.bind(this));

			}.bind(this));
			
		}//End check exists
		
	},//End setMatColour


/* ----------------------------------------------------------------------------------------------- setFrameStyle function */
	
	//Set the frame style
	setFrameStyle: function(){//Start setMatColour	
		
		//Get frame span elements
		var frameOuter            = $('frameOuter');
		var frameInner            = $('frameInner');
		var frameBottomLeftCorner = $('frameBottomLeftCorner');
		var frameTopRightCorner   = $('frameTopRightCorner');
		
		//Get all frame type radios
		var frameTypeRadios = $$('.frame_style');
		
		//URL to get frame type data from
		var requestUrl = 'http://www.artworksonline.com.au/ajax_get_frame_data';
		
		//Frame images folder
		var frameImagesFolder = 'http://www.artworksonline.com.au/_modules/frame_types/public/images/';

		//AJAX Request
		var req = new Request({//Start ajax request
			
			onSuccess: function(result){//Start get result
			
				//Decode resulting JSON string
				var frame_type_data = JSON.decode(result);
				
				//If frame type data returned
				if(frame_type_data){//Strat is frame type data
					
					//Set frame type data
					var frame_type_id           = frame_type_data.frame_type_id;
					var frame_type_key          = frame_type_data.frame_type_key;  
					var frame_type_name         = frame_type_data.frame_type_name;
					var frame_type_width        = frame_type_data.frame_type_width;
					var frame_type_image        = frame_type_data.frame_type_image;
					var frame_type_image_detail = frame_type_data.frame_type_image_detail;
					
					//Set new frame widths and background images
					frameOuter.setStyles({
						'padding':'0px '+(frame_type_width*4)+'px '+(frame_type_width*4)+'px 0px',
						'background-image':'url('+frameImagesFolder+frame_type_image+')'
					});
					
					frameInner.setStyles({
						 'padding':(frame_type_width*4)+'px 0px 0px '+(frame_type_width*4)+'px',
						 'background-image':'url('+frameImagesFolder+frame_type_image+')'
					});
					
					frameTopRightCorner.setStyles({
						'width':(frame_type_width*4)+'px',
						'height':(frame_type_width*4)+'px',
						'background-image':'url('+frameImagesFolder+frame_type_image+')'
					});
					
					frameBottomLeftCorner.setStyles({
						'width':(frame_type_width*4)+'px',
						'height':(frame_type_width*4)+'px',
						'background-image':'url('+frameImagesFolder+frame_type_image+')'
					});
					
					//Update frame price display
					this.calculateFramePrice();
					
				}//End is frame type data
			
			}.bind(this)//End get result
			
		});//End ajax request
			
		//If span and radios exist
		if(frameOuter && frameInner && frameBottomLeftCorner && frameTopRightCorner && frameTypeRadios){//Start check exists

			//Loop radios
			frameTypeRadios.each(function(el,index){
				
				//Add on click event to label
				el.addEvent('click',function(e){
					
					//Send AJAX request to get frame type data
					req.send({'url':requestUrl+'/'+(el.value).toInt()});
					
				}.bind(this));
				
				//Check for initally checked
				if(el.checked){
					//Send AJAX request to get frame type data
					req.send({'url':requestUrl+'/'+(el.value).toInt()});
				}

			}.bind(this));
			
		}//End check exists
		
	},//End setFrameStyle
	
	
/* ----------------------------------------------------------------------------------------------- calculateFramePrice function */
	
	//Calculate and display the frame price
	calculateFramePrice: function(){//Start calculateFramePrice	
		
		//Get framed price and product id
		var framedPrice = $('framedPrice');
		var productId   = $(document.body).getElement('input[name=product_id]').value.toInt();
		
		//If framed price and product id exist
		if(framedPrice && productId){//Start check exists
			
			//URL to get frame price from
			var requestUrl = 'http://www.artworksonline.com.au/ajax_get_frame_price';
			
			//Get elements
			var optionInnerMatSize = $('option_inner_mat_size');
			var optionOuterMatSize = $('option_outer_mat_size');
			var vGroove            = $('v_groove');
			
			//Get selected frame type
			var frameType = $$('input[name="product_options[frame_style]"]').filter(function(item){
				return item.checked;
			})[0].get('value');

			//Check values and set defaults
			if(!frameType){
				var frameType = 1;
			}
			
			if(optionInnerMatSize){
				var optionInnerMatSize = optionInnerMatSize.value.toInt();
			}else{
				var optionInnerMatSize = 0;
			}
			
			if(optionOuterMatSize){
				var optionOuterMatSize = optionOuterMatSize.value.toInt();
			}else{
				var optionOuterMatSize = 0;
			}
			
			if(vGroove && vGroove.checked){
				var vGroove = 'yes';
			}else{
				var vGroove = 'no';
			}

			//AJAX Request
			var req = new Request({//Start ajax request
				
				onSuccess: function(result){//Start get result
					//Update framed price
					framedPrice.set('html','$'+result);
				}.bind(this)//End get result
				
			});//End ajax request
			
			//Send AJAX request to get frame price
			req.send({'url':requestUrl+'/product/'+productId+'/frame_type/'+frameType+'/inner_mat_size/'+optionInnerMatSize+'/outer_mat_size/'+optionOuterMatSize+'/v_groove/'+vGroove});
			
		}//End check exists
		
	},//End calculateFramePrice
	
	
/* ----------------------------------------------------------------------------------------------- buildFrameOptions function */
	
	//Moves the frame options into tabs above product image
	buildFrameOptions: function(){//Start buildFrameOptions	
		
		//Get elements
		var framingOptions = $('framingOptions');
		var productThumbWrapper = $('productThumbWrapper');
		
		//Check elements exist
		if(productThumbWrapper && framingOptions){//Start check exists
			
			//Move framing options into product thumb wrapper
			framingOptions.inject(productThumbWrapper);
			
			//Get tabs
			var tabs = framingOptions.getElements('dt');
			
			//Get containers
			var containers = framingOptions.getElements('dd');
			
			//Check exists
			if(tabs && containers){//Start check tabs and containers exist
				
				//Show container function
				var showContainer = function(index){//Start show container
					
					//If matching container is visible
					if(containers[index].getStyle('display') == 'block'){//Start if visible
						
						//Hide container
						containers[index].setStyle('display','none');
						
					}else{//Else if visible
						
						//Hide all containers
						containers.each(function(container){
							container.setStyle('display','none');						 
						}.bind(this));
						
						//Display matching container
						containers[index].setStyle('display','block');
						
					}//End if visible
					
				}//End show container
				
				//Add on click for each tab
				tabs.each(function(tab,index){
					
					tab.addEvent('click',function(e){
						showContainer(index);						  
					}.bind(this));
					
				}.bind(this));
				
				
				//Close containers function, if clicking outside of containers and tabs close all containers
				var closeContainers = function(e){//Start closeContainers
					
					//Create new event
					e = new Event(e);
					
					//An array of elments that should not cause a close
					var noCloseElements = $$(tabs, 
						 containers, 
						 framingOptions.getElements('dd *'), 
						 '#lbOverlay', 
						 '#lbCenter', 
						 $('lbCenter').getElements('*'), 
						 '#lbBottomContainer', 
						 $('lbBottomContainer').getElements('*')
					);
					
					//Check if clicking in an no close element
					if(!noCloseElements.contains(e.target)){
						containers.each(function(container){
							container.setStyle('display','none');						 
						});
					}
					
				}//End closeContainers
				
				//When mousedown in document runu closeContainer function
				document.addEvent("mousedown", closeContainers.bind(this));
				
			}//End check tabs and containers exist
			
		}//End check exists
	
	},//End buildFrameOptions

/* ----------------------------------------------------------------------------------------------- latestProducts function */
	
	//Update latest products
	latestProducts: function(){//Start latestProducts
		
		//Get latest product thumbs
		var productThumbs = $$('.latestProductThumb');
		
		//Set ajax request url
		var requestURL = 'http://www.artworksonline.com.au/ajax_get_latest_product_thumb/';

		//If product thumbs exist
		if(productThumbs){//Start check exists
			
			//Get total number of thumbnails
			var numContainers = productThumbs.length;
				
			//Thumbnail update function
			var updateThumb = function() {
				
				//Set vars
				var container     = this.container;
				var requestURL    = this.requestURL;
				var startPosition = this.startPosition;
				var thumbnail     = this.container.getElement('a');
				var updateChain   = new Chain();
				
				//New thumbnail holder
				var newThumbnail;
				
				//New thumbnail request
				var requestThumb = new Request({
					method:    'get',
					onSuccess: function(html){
						//Get new content
						newThumbnail = html;
						//Fire update chain
						updateChain.callChain();
					}
				});
				
				//New conainer fx
				var containerFx = new Fx.Tween(container, {
					duration:   '1000',
					transition: 'sine:in:out',
					onComplete: function(){
						updateChain.callChain();
					}
				});
				 
				//Set update chain
				updateChain.chain(
					function(){ requestThumb.send({url:requestURL+startPosition}); },//Request new thumbnail
					function(){ containerFx.start('opacity',0); },//Fade container out
					function(){
						//Replace thumbnail
						container.set('html', newThumbnail);
						//Make sure new image has loaded
						container.getElement('img').addEvent('load',function(e){
							//Continue chain
							this.callChain();
						}.bind(this));
						
					},
					function(){
						containerFx.start('opacity',1);
					}//Fade container back in
				);
				
				//Call chain
				updateChain.callChain();

				//If limit reached
				if(this.startPosition < this.limit){
					//Start is number of thumbs + current start position
					this.startPosition = this.numContainers + this.startPosition;
				}else{
					//Return start to orignal position
					this.startPosition = this.index;
				}
				
			};
				
			//Loop each product thumb
			productThumbs.each(function(container,index){
				
				var wrapper = new Element('div');
				
				wrapper.wraps(container.getElement('a'));

				var args = new Hash({container: wrapper, requestURL: requestURL, startPosition: index+4, index: index, numContainers: numContainers, limit: index+50});
				
				var updatePeriodical = updateThumb.periodical(10000,args);

			}.bind(this));
			
		}//End check exists
		
	},//End latestProducts
	
	//Initialise cs functions
	init: function(){
		this.waitDialog($$('.waitModal'),'Please wait...');
		this.confirmDialog($$('.linkDelete'),'Are you sure you want to delete this?');
		this.displayCartDetails();
		this.buildMatSlider($('matInner'),$('option_inner_mat_size'),$('innerMatLabel'));
		this.buildMatSlider($('matOuter'),$('option_outer_mat_size'),$('outerMatLabel'),true);
		this.setMatColour($('matInner'),$$('.innerMatColourRadio'));
		this.setMatColour($('matOuter'),$$('.outerMatColourRadio'));
		this.setFrameStyle();
		this.toggleVGroove();	
		this.toggleGlass();
		this.changeWallColourPopup();
		this.buildFrameOptions();
		this.latestProducts();
				
		/*//Fix IE6 background image flicker
		if (Browser.Engine.trident && Browser.Engine.version <= 4) {
			try{
				document.execCommand("BackgroundImageCache",false,true);
			}catch(e){}
		}*/

	}
									 
};//End csFunctions


window.addEvent('domready', csFunctions.init.bind(csFunctions));


