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:"/images/colorpicker/"},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: 1002;"></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){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)}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)}}};