// JavaScript Document

var colorPicker=Class.create({initialize:function(){var a=$A(arguments);this.el=$(a[0]);this.options=Object.extend({previewElement:false,inputElement:false,eventName:"click",onLoad:function(){return true},onShow:function(){return true},onBeforeShow:function(){return true},onHide:function(){return true},onChange:function(){return true},onSubmit:function(){return true},color:"000000",origColor:false,livePreview:true,hideOnSubmit:true,updateOnChange:true,flat:false,hasExtraInfo:false,extraInfo:function(){return true}},a[1]);this.ids={};this.fields=[];this.current={};this.inAction=false;this.charMin=65;this.visible=false;this.time=(new Date).getTime();this.id="colorpicker_"+this.time;var b="";var c='<div class="colorpicker_color"><div><div></div></div></div><div class="colorpicker_hue"><div></div></div><div class="colorpicker_new_color"></div><div class="colorpicker_current_color"></div><div class="colorpicker_hex"><input type="text" maxlength="6" size="6" /></div><div class="colorpicker_text">'+b+'</div><div class="colorpicker_rgb_r colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_rgb_g colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_rgb_b colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_h colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_s colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_b colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_submit"></div><div class="colorpicker_extra" style="display:none;"></div><div class="colorpicker_extrafill" style="display:none;"></div>';this.cp=$(document.createElement("DIV"));this.cp.writeAttribute("id",this.id).addClassName("colorpicker").setStyle({display:"none"}).insert(c);if(typeof this.options.color=="string"){this.color=this.HexToHSB(this.options.color)}else if(this.color.r!=undefined&&this.options.color.g!=undefined&&this.options.color.b!=undefined){this.color=this.RGBToHSB(this.options.color)}else if(this.options.color.h!=undefined&&this.options.color.s!=undefined&&this.options.color.b!=undefined){this.color=this.fixHSB(this.options.color)}else{return this}var d=this;this.options.origColor=this.options.color;if(this.options.flat){this.options.hideOnSubmit=false;this.cp.setStyle({position:"relative",display:"block"});this.el.insert({after:this.cp});this.cp.show()}else{document.body.appendChild(this.cp);$(this.el).observe(this.options.eventName,this.show.bind(this))}this.fields=$$("#"+this.id+" input");this.fields.each(function(a){a.observe("keyup",this.keyUp.bind(this));a.observe("change",function(a){this.change(a.element())}.bind(this));a.observe("blur",this.blur.bind(this));a.observe("focus",this.focus.bind(this))}.bind(this));$$("#"+this.id+" span").each(function(a){a.observe("mousedown",this.downIncrement.bind(this))}.bind(this));this.cp.down("div.colorpicker_current_color").observe("click",this.restoreOriginal.bind(this));this.selector=this.cp.down("div.colorpicker_color");this.selector.observe("mousedown",this.downSelector.bind(this));this.selectorIndic=this.selector.down("div").down("div");this.hue=this.cp.down("div.colorpicker_hue div");this.cp.down("div.colorpicker_hue").observe("mousedown",this.downHue.bind(this));this.newColor=this.cp.down("div.colorpicker_new_color");this.currentColor=this.cp.down("div.colorpicker_current_color");this.submit=this.cp.down("div.colorpicker_submit");this.submit.observe("mouseenter",this.enterSubmit.bind(this));this.submit.observe("mouseleave",this.leaveSubmit.bind(this));this.submit.observe("click",this.clickSubmit.bind(this));this.extra=this.cp.down("div.colorpicker_extra");this.extraInfo=this.cp.down("div.colorpicker_extrafill");if(this.options.hasExtraInfo==true){this.extra.show();this.options.extraInfo(this);this.extra.observe("mouseenter",function(a){a.element().addClassName("colorpicker_focus")});this.extra.observe("mouseleave",function(a){a.element().removeClassName("colorpicker_focus")});this.extra.observe("click",function(a){var b=this.extraInfo;if(b.visible())b.hide();else b.show()}.bind(this))}this.hexColor=this.getHexFromHSB(this.color);this.secondColor=this.getHexFromHSB(this.makeSecondCol(this.color));this.fillRGBFields(this.color);this.fillHSBFields(this.color);this.fillHexFields(this.color);this.setHue(this.color);this.setSelector(this.color);this.setCurrentColor(this.options.origColor?this.options.origColor:this.color);this.setNewColor(this.color);if($(this.options.previewElement))$(this.options.previewElement).setStyle({backgroundColor:"#"+this.HSBToHex(this.color)});this.options.onLoad(this);return this},getHexFromHSB:function(a){return this.HSBToHex(a).toUpperCase()},fillRGBFields:function(a){var b=this.HSBToRGB(a);this.fields[1].value=b.r;this.fields[2].value=b.g;this.fields[3].value=b.b},fillHSBFields:function(a){this.fields[4].value=parseInt(a.h);this.fields[5].value=parseInt(a.s);this.fields[6].value=parseInt(a.b)},fillHexFields:function(a){this.fields[0].value=this.HSBToHex(a).toUpperCase()},setSelector:function(a){this.selector.setStyle({backgroundColor:"#"+this.HSBToHex({h:a.h,s:100,b:100})});this.selectorIndic.setStyle({left:parseInt(150*a.s/100,10)+"px",top:parseInt(150*(100-a.b)/100,10)+"px"})},setHue:function(a){this.hue.setStyle({top:parseInt(150-150*a.h/360,10)+"px"})},setCurrentColor:function(a){this.currentColor.setStyle({backgroundColor:"#"+this.HSBToHex(a)});if(!this.options.origColor)this.options.origColor=a},setNewColor:function(a){this.newColor.setStyle({backgroundColor:"#"+this.HSBToHex(a)})},keyUp:function(a){var b=a.charCode||a.keyCode||-1;if(b>this.charMin&&b<=90||b==32){return false}if(this.options.livePreview===true){this.change(a.element())}},change:function(a){var b;if(a.up().className.indexOf("_hex")!=-1){this.color=b=this.HexToHSB(this.fixHex(a.value))}else if(a.up().className.indexOf("_rgb")!=-1){this.color=b=this.RGBToHSB(this.fixRGB({r:parseInt(this.fields[1].value,10),g:parseInt(this.fields[2].value,10),b:parseInt(this.fields[3].value,10)}))}else{this.color=b=this.fixHSB({h:parseInt(this.fields[4].value,10),s:parseInt(this.fields[5].value,10),b:parseInt(this.fields[6].value,10)})}this.setSelector(b);this.setHue(b);this.setNewColor(b);this.hexColor=this.getHexFromHSB(b);this.secondColor=this.getHexFromHSB(this.makeSecondCol(b));this.options.onChange(this);if(this.options.updateOnChange){if(this.el.nodeName=="INPUT")this.el.value=this.HSBToHex(b);if($(this.options.inputElement))$(this.options.inputElement).value=this.HSBToHex(b);if($(this.options.previewElement))$(this.options.previewElement).setStyle({backgroundColor:"#"+this.HSBToHex(b)})}},makeSecondCol:function(a){return{h:Math.min(360,Math.max(0,a.h)),s:8,b:Math.min(100,Math.max(0,a.b))}},blur:function(a){a.element().up().removeClassName("colorpicker_focus")},focus:function(a){this.charMin=a.element().hasClassName("_hex")>0?70:65;a.element().addClassName("colorpicker_focus")},downIncrement:function(a){var b=a.element().up();var c=b.down("input");c.focus();this.current={el:b.addClassName("colorpicker_slider"),max:b.className.indexOf("_hsb_h")!=-1?360:b.className.indexOf("_hsb")!=-1?100:255,y:a.pointerY(),field:c,val:parseInt(c.value,10),preview:this.options.livePreview};this.eventUpIncrement=this.upIncrement.bindAsEventListener(this);document.observe("mouseup",this.eventUpIncrement);this.eventMoveIncrement=this.moveIncrement.bindAsEventListener(this);document.observe("mousemove",this.eventMoveIncrement)},moveIncrement:function(a){this.current.field.value=Math.max(0,Math.min(this.current.max,parseInt(this.current.val+a.pointerY()-this.current.y,10)));if(this.current.preview){this.change(this.current.field)}return false},upIncrement:function(a){this.change(a.element());this.current.el.removeClassName("colorpicker_slider");this.current.el.down("input").focus();if(a.element().up().className.indexOf("_hsb")!=-1)this.fillRGBFields(this.color);else this.fillHSBFields(this.color);this.fillHexFields(this.color);Event.stopObserving(document,"mouseup",this.eventUpIncrement);Event.stopObserving(document,"mousemove",this.eventMoveIncrement);return false},downHue:function(a){this.current={y:a.element().cumulativeOffset().top,preview:this.options.livePreview};this.eventUpHue=this.upHue.bindAsEventListener(this);document.observe("mouseup",this.eventUpHue);this.eventMoveHue=this.moveHue.bindAsEventListener(this);document.observe("mousemove",this.eventMoveHue)},moveHue:function(a){this.fields[4].value=parseInt(360*(150-Math.max(0,Math.min(150,a.pointerY()-this.current.y)))/150,10);this.change(this.fields[4]);return false},upHue:function(a){this.fillRGBFields(this.color);this.fillHexFields(this.color);this.fields[4].value=parseInt(360*(150-Math.max(0,Math.min(150,a.pointerY()-this.current.y)))/150,10);this.change(this.fields[4]);Event.stopObserving(document,"mouseup",this.eventUpHue);Event.stopObserving(document,"mousemove",this.eventMoveHue);return false},downSelector:function(a){this.current={pos:a.element().cumulativeOffset(),preview:this.options.livePreview};this.eventUpSelector=this.upSelector.bindAsEventListener(this);document.observe("mouseup",this.eventUpSelector);this.eventMoveSelector=this.moveSelector.bindAsEventListener(this);document.observe("mousemove",this.eventMoveSelector)},moveSelector:function(a){this.fields[6].value=parseInt(100*(150-Math.max(0,Math.min(150,a.pointerY()-this.current.pos.top)))/150,10);this.fields[5].value=parseInt(100*Math.max(0,Math.min(150,a.pointerX()-this.current.pos.left))/150,10);this.change(a.element());return false},upSelector:function(a){this.moveSelector(a);this.fillRGBFields(this.color);this.fillHexFields(this.color);Event.stopObserving(document,"mouseup",this.eventUpSelector);Event.stopObserving(document,"mousemove",this.eventMoveSelector);return false},enterSubmit:function(a){a.element().addClassName("colorpicker_focus")},leaveSubmit:function(a){a.element().removeClassName("colorpicker_focus")},clickSubmit:function(a){var b=this.color;this.origColor=b;this.setCurrentColor(b);if(this.el.nodeName=="INPUT")this.el.value=this.HSBToHex(b);if($(this.options.inputElement))$(this.options.inputElement).value=this.HSBToHex(b);if($(this.options.previewElement))$(this.options.previewElement).setStyle({backgroundColor:"#"+this.HSBToHex(b)});this.options.onSubmit(this);if(this.options.hideOnSubmit)this.hidePicker()},show:function(a){this.options.onBeforeShow(this);this.positionPicker(a);if(this.options.onShow(this))this.cp.setStyle({display:"block"});this.eventHide=this.hide.bindAsEventListener(this);document.observe("mousedown",this.eventHide);return false},hide:function(a){var b=typeof a=="object"?a.element():$(document.body);if(!this.isChildOf(this.cp,b)){if(this.options.onHide(this))this.cp.setStyle({display:"none"});Event.stopObserving(document,"mousedown",this.eventHide)}},isChildOf:function(a,b){if(a==b){return true}return $(b).descendantOf(a)},getViewport:function(){return{l:document.viewport.getScrollOffsets().left,t:document.viewport.getScrollOffsets().top,w:document.viewport.getWidth(),h:document.viewport.getHeight()}},positionPicker:function(a){var b=a.element().cumulativeOffset();var c=this.getViewport();var d=b.top+a.element().getHeight();var e=b.left;if(d+176>c.t+c.h){d-=a.element().getHeight()+176}if(e+356>c.l+c.w){e-=356-this.el.getWidth()}this.cp.setStyle({left:e+"px",top:d+"px"})},fixHSB:function(a){return{h:Math.min(360,Math.max(0,a.h)),s:Math.min(100,Math.max(0,a.s)),b:Math.min(100,Math.max(0,a.b))}},fixRGB:function(a){return{r:Math.min(255,Math.max(0,a.r)),g:Math.min(255,Math.max(0,a.g)),b:Math.min(255,Math.max(0,a.b))}},fixHex:function(a){var b=6-a.length;if(b>0){var c=[];for(var d=0;d<b;d++){c.push("0")}c.push(a);a=c.join("")}return a},HexToRGB:function(a){var a=parseInt(a.indexOf("#")>-1?a.substring(1):a,16);return{r:a>>16,g:(a&65280)>>8,b:a&255}},HexToHSB:function(a){return this.RGBToHSB(this.HexToRGB(a))},RGBToHSB:function(a){var b={h:0,s:0,b:0};var c=Math.min(a.r,a.g,a.b);var d=Math.max(a.r,a.g,a.b);var e=d-c;b.b=d;if(d!=0){}b.s=d!=0?255*e/d:0;if(b.s!=0){if(a.r==d){b.h=(a.g-a.b)/e}else if(a.g==d){b.h=2+(a.b-a.r)/e}else{b.h=4+(a.r-a.g)/e}}else{b.h=-1}b.h*=60;if(b.h<0){b.h+=360}b.s*=100/255;b.b*=100/255;return b},HSBToRGB:function(a){var b={};var c=Math.round(a.h);var d=Math.round(a.s*255/100);var e=Math.round(a.b*255/100);if(d==0){b.r=b.g=b.b=e}else{var f=e;var g=(255-d)*e/255;var h=(f-g)*(c%60)/60;if(c==360)c=0;if(c<60){b.r=f;b.b=g;b.g=g+h}else if(c<120){b.g=f;b.b=g;b.r=f-h}else if(c<180){b.g=f;b.r=g;b.b=g+h}else if(c<240){b.b=f;b.r=g;b.g=f-h}else if(c<300){b.b=f;b.g=g;b.r=g+h}else if(c<360){b.r=f;b.g=g;b.b=f-h}else{b.r=0;b.g=0;b.b=0}}return{r:Math.round(b.r),g:Math.round(b.g),b:Math.round(b.b)}},RGBToHex:function(a){var b=[a.r.toString(16),a.g.toString(16),a.b.toString(16)];b.each(function(a,c){if(a.length==1){b[c]="0"+a}});return b.join("")},HSBToHex:function(a){return this.RGBToHex(this.HSBToRGB(a))},restoreOriginal:function(){var a=this.options.origColor;this.color=a;this.fillRGBFields(a);this.fillHexFields(a);this.fillHSBFields(a);this.setSelector(a);this.setHue(a);this.setNewColor(a)},showPicker:function(){this.cp.show()},hidePicker:function(){this.cp.hide()},setColor:function(a){if(typeof a=="string"){a=this.HexToHSB(a)}else if(a.r!=undefined&&a.g!=undefined&&a.b!=undefined){a=this.RGBToHSB(a)}else if(a.h!=undefined&&a.s!=undefined&&a.b!=undefined){a=fixHSB(a)}else{return this}this.color=a;this.origColor=a;this.fillRGBFields(a);this.fillHSBFields(a);this.fillHexFields(a);this.setHue(a);this.setSelector(a);this.setCurrentColor(a);this.setNewColor(a)}})
