var YAHOO=function(){return{util:{}}}();YAHOO.util.Color=new function(){this.hsv2rgb=function(d,n,k){var c,e,j;if(n==0){c=k*255;e=k*255;j=k*255}else{var i=d*6;if(i==6){i=0}var f=Math.floor(i);var a=k*(1-n);var m=k*(1-n*(i-f));var l=k*(1-n*(1-(i-f)));if(f==0){var_r=k;var_g=l;var_b=a}else{if(f==1){var_r=m;var_g=k;var_b=a}else{if(f==2){var_r=a;var_g=k;var_b=l}else{if(f==3){var_r=a;var_g=m;var_b=k}else{if(f==4){var_r=l;var_g=a;var_b=k}else{var_r=k;var_g=a;var_b=m}}}}}c=var_r*255;e=var_g*255;j=var_b*255}return[Math.round(c),Math.round(e),Math.round(j)]};this.rgb2hsv=function(a,i,j){var a=(a/255);var i=(i/255);var j=(j/255);var e=Math.min(a,i,j);var k=Math.max(a,i,j);deltaMax=k-e;var l=k;var n,f;var m,c,d;if(deltaMax==0){f=0;n=0}else{n=deltaMax/k;m=(((k-a)/6)+(deltaMax/2))/deltaMax;c=(((k-i)/6)+(deltaMax/2))/deltaMax;d=(((k-j)/6)+(deltaMax/2))/deltaMax;if(a==k){f=d-c}else{if(i==k){f=(1/3)+m-d}else{if(j==k){f=(2/3)+c-m}}}if(f<0){f+=1}if(f>1){f-=1}}return[f,n,l]};this.rgb2hex=function(d,c,a){return this.toHex(d)+this.toHex(c)+this.toHex(a)};this.hexchars="0123456789ABCDEF";this.toHex=function(a){a=a||0;a=parseInt(a,10);if(isNaN(a)){a=0}a=Math.round(Math.min(Math.max(0,a),255));return this.hexchars.charAt((a-a%16)/16)+this.hexchars.charAt(a%16)};this.toDec=function(a){return this.hexchars.indexOf(a.toUpperCase())};this.hex2rgb=function(b){var a=[];a[0]=(this.toDec(b.substr(0,1))*16)+this.toDec(b.substr(1,1));a[1]=(this.toDec(b.substr(2,1))*16)+this.toDec(b.substr(3,1));a[2]=(this.toDec(b.substr(4,1))*16)+this.toDec(b.substr(5,1));return a};this.isValidRGB=function(b){if((!b[0]&&b[0]!=0)||isNaN(b[0])||b[0]<0||b[0]>255){return false}if((!b[1]&&b[1]!=0)||isNaN(b[1])||b[1]<0||b[1]>255){return false}if((!b[2]&&b[2]!=0)||isNaN(b[2])||b[2]<0||b[2]>255){return false}return true}};if(!Control){var Control={}}Control.colorPickers=[];Control.ColorPicker=Class.create();Control.ColorPicker.activeColorPicker;Control.ColorPicker.CONTROL;Control.ColorPicker.prototype={initialize:function(d,b){var a=this;Control.colorPickers.push(a);this.field=$(d);this.fieldName=this.field.name||this.field.id;this.options=Object.extend({IMAGE_BASE:"img/"},b||{});this.swatch=$(this.options.swatch)||this.field;this.rgb={};this.hsv={};this.isOpen=false;if(!Control.ColorPicker.CONTROL){Control.ColorPicker.CONTROL={};if(!$("colorpicker")){var c=Builder.node("div",{id:"colorpicker"});c.innerHTML='<div id="colorpicker-div">'+((/MSIE ((6)|(5\.5))/gi.test(navigator.userAgent)&&/windows/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent))?'<img id="colorpicker-bg" src="'+this.options.IMAGE_BASE+'blank.gif" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\''+this.options.IMAGE_BASE+"pickerbg.png', sizingMethod='scale')\" alt=\"\">":'<img id="colorpicker-bg" src="'+this.options.IMAGE_BASE+'pickerbg.png" alt="">')+'<div id="colorpicker-bg-overlay" style="z-index: 5002;"></div><div id="colorpicker-selector"><img src="'+this.options.IMAGE_BASE+'select.gif" width="11" height="11" alt="" /></div></div><div id="colorpicker-hue-container"><img src="'+this.options.IMAGE_BASE+'hue.png" id="colorpicker-hue-bg-img"><div id="colorpicker-hue-slider"><div id="colorpicker-hue-thumb"><img src="'+this.options.IMAGE_BASE+'hline.png"></div></div></div><div id="colorpicker-footer"><span id="colorpicker-value">#<input type="text" onclick="this.select()" id="colorpicker-value-input" name="colorpicker-value" value=""></input></span><button id="colorpicker-okbutton">OK</button></div>';document.body.appendChild(c)}Control.ColorPicker.CONTROL={popUp:$("colorpicker"),pickerArea:$("colorpicker-div"),selector:$("colorpicker-selector"),okButton:$("colorpicker-okbutton"),value:$("colorpicker-value"),input:$("colorpicker-value-input"),picker:new Draggable($("colorpicker-selector"),{snap:function(e,f){return[Math.min(Math.max(e,0),Control.ColorPicker.activeColorPicker.control.pickerArea.offsetWidth),Math.min(Math.max(f,0),Control.ColorPicker.activeColorPicker.control.pickerArea.offsetHeight)]},zindex:1009,change:function(e){var f=e.currentDelta();Control.ColorPicker.activeColorPicker.update(f[0],f[1])}}),hueSlider:new Control.Slider("colorpicker-hue-thumb","colorpicker-hue-slider",{axis:"vertical",onChange:function(e){Control.ColorPicker.activeColorPicker.updateHue(e)}})};Element.hide($("colorpicker"))}this.control=Control.ColorPicker.CONTROL;this.toggleOnClickListener=this.toggle.bindAsEventListener(this);this.updateOnChangeListener=this.updateFromFieldValue.bindAsEventListener(this);this.closeOnClickOkListener=this.close.bindAsEventListener(this);this.updateOnClickPickerListener=this.updateSelector.bindAsEventListener(this);Event.observe(this.swatch,"click",this.toggleOnClickListener);Event.observe(this.field,"change",this.updateOnChangeListener);Event.observe(this.control.input,"change",this.updateOnChangeListener);this.updateSwatch()},toggle:function(a){if((a.pointerY()!=0)&&(a.pointerX()!=0)){this[(this.isOpen)?"close":"open"](a);Event.stop(a)}},open:function(a){Control.colorPickers.each(function(c){c.close()});Control.ColorPicker.activeColorPicker=this;this.isOpen=true;Element.show(this.control.popUp);if(this.options.getPopUpPosition){var b=this.options.getPopUpPosition.bind(this)(a)}else{var b=Position.cumulativeOffset(this.swatch||this.field);b[0]=(b[0]+(this.swatch||this.field).offsetWidth+10)}if((b[1]+this.control.popUp.getHeight())>document.viewport.getHeight()){b[1]=document.viewport.getHeight()-this.control.popUp.getHeight()}this.control.popUp.style.left=(b[0])+"px";this.control.popUp.style.top=(b[1])+"px";this.updateFromFieldValue();Event.observe(this.control.okButton,"click",this.closeOnClickOkListener);Event.observe(this.control.pickerArea,"mousedown",this.updateOnClickPickerListener);if(this.options.onOpen){this.options.onOpen.bind(this)(a)}},close:function(a){if(Control.ColorPicker.activeColorPicker==this){Control.ColorPicker.activeColorPicker=null}this.isOpen=false;Element.hide(this.control.popUp);Event.stopObserving(this.control.okButton,"click",this.closeOnClickOkListener);Event.stopObserving(this.control.pickerArea,"mousedown",this.updateOnClickPickerListener);if(this.options.onClose){this.options.onClose.bind(this)()}},updateHue:function(a){var c=(this.control.pickerArea.offsetHeight-a*100)/this.control.pickerArea.offsetHeight;if(c==1){c=0}var b=YAHOO.util.Color.hsv2rgb(c,1,1);if(!YAHOO.util.Color.isValidRGB(b)){return}this.control.pickerArea.style.backgroundColor="rgb("+b[0]+", "+b[1]+", "+b[2]+")";this.update()},updateFromFieldValue:function(c){if(!this.isOpen){return}var d=(c&&Event.findElement(c,"input"))||this.field;var b=YAHOO.util.Color.hex2rgb(d.value);if(!YAHOO.util.Color.isValidRGB(b)){return}var a=YAHOO.util.Color.rgb2hsv(b[0],b[1],b[2]);this.control.selector.style.left=Math.round(a[1]*this.control.pickerArea.offsetWidth)+"px";this.control.selector.style.top=Math.round((1-a[2])*this.control.pickerArea.offsetWidth)+"px";this.control.hueSlider.setValue((1-a[0]))},updateSelector:function(b){var c=Event.pointerX(b);var a=Event.pointerY(b);var d=Position.cumulativeOffset($("colorpicker-bg"));this.control.selector.style.left=(c-d[0]-6)+"px";this.control.selector.style.top=(a-d[1]-6)+"px";this.update((c-d[0]),(a-d[1]));this.control.picker.initDrag(b)},updateSwatch:function(){var b=YAHOO.util.Color.hex2rgb(this.field.value);if(!YAHOO.util.Color.isValidRGB(b)){return}this.swatch.style.backgroundColor="rgb("+b[0]+", "+b[1]+", "+b[2]+")";var a=YAHOO.util.Color.rgb2hsv(b[0],b[1],b[2]);this.swatch.style.color=(a[2]>0.65)?"#000000":"#FFFFFF"},update:function(a,d){if(!a){a=this.control.picker.currentDelta()[0]}if(!d){d=this.control.picker.currentDelta()[1]}var c=(this.control.pickerArea.offsetHeight-this.control.hueSlider.value*100)/this.control.pickerArea.offsetHeight;if(c==1){c=0}this.hsv={hue:1-this.control.hueSlider.value,saturation:a/this.control.pickerArea.offsetWidth,brightness:(this.control.pickerArea.offsetHeight-d)/this.control.pickerArea.offsetHeight};var b=YAHOO.util.Color.hsv2rgb(this.hsv.hue,this.hsv.saturation,this.hsv.brightness);this.rgb={red:b[0],green:b[1],blue:b[2]};this.field.value=YAHOO.util.Color.rgb2hex(b[0],b[1],b[2]);this.control.input.value=this.field.value;this.updateSwatch();if(this.options.onUpdate){this.options.onUpdate.bind(this)(this.field.value)}}};