/***
 * MooRainbow
 *
 * @version		1.11
 * @license		MIT-style license
 * @author		w00fz - < w00fzIT [at] gmail.com >
 * @infos		http://moorainbow.woolly-sheep.net
 * @copyright	Author
 * 
 *
 */
var MooRainbow=new Class({options:{id:"mooRainbow",prefix:"moor-",imgPath:"images/",startColor:[255,0,0],wheel:false,onComplete:Class.empty,onChange:Class.empty},initialize:function(B,A){this.element=$(B);
if(!this.element){return }this.setOptions(A);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(C){this.toggle(C)
}.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()}},ElementEvent2:function(A){A.addEvents({click:function(B){new Event(B).stop()},keyup:function(B){B=new Event(B);
if(B.key=="esc"&&this.visible){this.hide(this.layout)}}.bind(this)},this)},ChangeElement:function(A){this.element.removeEvents();this.element=$("b"+A);this.element2=$(A);this.ElementEvent2(this.element)
},toggle:function(){this[this.visible?"hide":"show"]()},show:function(){this.rePosition();this.layout.setStyle("display","block");this.visible=true},hide:function(){this.layout.setStyles({display:"none"});
this.visible=false},setStartColor:function(A,B){this.manualSet(A,B);this.backupColor=this.currentColor;this.layout.backup.setStyle("background-color",this.backupColor.rgbToHex())},manualSet:function(B,D){var C,A,E;
try{if(!D||(D!="hsb"&&D!="hex")){D="rgb"}if(D=="rgb"){C=B;A=B.rgbToHsb();E=B.rgbToHex()}else{if(D=="hsb"){A=B;C=B.hsbToRgb();E=C.rgbToHex()}else{E=B;C=B.hexToRgb(true);A=C.rgbToHsb()}}this.setMooRainbow(C);
this.autoSet(A)}catch(F){D="hex";B="#ffffff";C=B.hexToRgb(true);A=C.rgbToHsb();this.setMooRainbow(C);this.autoSet(A)}},autoSet:function(B){var K=this.snippet("curSize","int").h;var A=this.snippet("curSize","int").w;
var C=this.layout.overlay.height;var I=this.layout.overlay.width;var J=this.layout.slider.height;var L=this.snippet("arrSize","int");var E;var H=Math.round(((I*B[1])/100)-A);var F=Math.round(-((C*B[2])/100)+C-K);
var G=Math.round(((J*B[0])/360));G=(G==360)?0:G;var D=J-G+this.snippet("slider")-L;E=[this.sets.hsb[0],100,100].hsbToRgb().rgbToHex();this.layout.cursor.setStyles({top:F,left:H});this.layout.arrows.setStyle("top",D);
this.layout.overlay.setStyle("background-color",E);this.sliderPos=this.snippet("arrPos")-L;this.pickerPos.x=this.snippet("curPos").l+A;this.pickerPos.y=this.snippet("curPos").t+K},setMooRainbow:function(B,D){if(!D||(D!="hsb"&&D!="hex")){D="rgb"
}var C,A,E;if(D=="rgb"){C=B;A=B.rgbToHsb();E=B.rgbToHex()}else{if(D=="hsb"){A=B;C=B.hsbToRgb();E=C.rgbToHex()}else{E=B;C=B.hexToRgb();A=C.rgbToHsb()}}this.sets={rgb:C,hsb:A,hex:E};if(!$chk(this.pickerPos.x)){this.autoSet(A)
}this.RedInput.value=C[0];this.GreenInput.value=C[1];this.BlueInput.value=C[2];this.HueInput.value=A[0];this.SatuInput.value=A[1];this.BrighInput.value=A[2];this.hexInput.value=E;this.currentColor=C;this.chooseColor.setStyle("background-color",C.rgbToHex())
},parseColors:function(B,F,E){var D=Math.round((B*100)/this.layout.overlay.width);var A=100-Math.round((F*100)/this.layout.overlay.height);var C=360-Math.round((E*360)/this.layout.slider.height)+this.snippet("slider")-this.snippet("arrSize","int");
C-=this.snippet("arrSize","int");C=(C>=360)?0:(C<0)?0:C;D=(D>100)?100:(D<0)?0:D;A=(A>100)?100:(A<0)?0:A;return[C,D,A]},OverlayEvents:function(){var D,C,B,A;C=this.snippet("curSize","int").h;B=this.snippet("curSize","int").w;
A=this.arrRGB.copy().concat(this.arrHSB,this.hexInput);document.addEvent("click",function(E){if(this.element==(E.target||E.srcElement)){return }if(this.visible){this.hide(this.layout)}}.bind(this));A.each(function(E){E.addEvent("keydown",this.eventKeydown.bindWithEvent(this,E));
E.addEvent("keyup",this.eventKeyup.bindWithEvent(this,E))},this);[this.element,this.layout].each(function(E){this.ElementEvent2(E)},this);D={x:[0-B,(this.layout.overlay.width-B)],y:[0-C,(this.layout.overlay.height-C)]};
this.layout.drag=new Drag.Base(this.layout.cursor,{limit:D,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()-C,left:E.page.x-this.layout.overlay.getLeft()-B});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.cancelButton.addEvent("click",function(){this.hide()}.bind(this))},overlayDrag:function(){var B=this.snippet("curSize","int").h;var A=this.snippet("curSize","int").w;this.pickerPos.x=this.snippet("curPos").l+A;
this.pickerPos.y=this.snippet("curPos").t+B;this.setMooRainbow(this.parseColors(this.pickerPos.x,this.pickerPos.y,this.sliderPos),"hsb");this.fireEvent("onChange",[this.sets,this])},sliderEvents:function(){var A=this.snippet("arrSize","int"),B;
B=[0+this.snippet("slider")-A,this.layout.slider.height-A+this.snippet("slider")+1];this.layout.sliderDrag=new Drag.Base(this.layout.arrows,{limit:{y:B},modifiers:{x:false},onStart:this.sliderDrag.bind(this),onDrag:this.sliderDrag.bind(this),snap:0});
this.layout.slider.addEvent("mousedown",function(C){C=new Event(C);this.layout.arrows.setStyle("top",C.page.y-this.layout.slider.getTop()+this.snippet("slider")-A);this.layout.sliderDrag.start(C)}.bind(this))
},sliderDrag:function(){var A=this.snippet("arrSize","int"),B;this.sliderPos=this.snippet("arrPos")-A;this.setMooRainbow(this.parseColors(this.pickerPos.x,this.pickerPos.y,this.sliderPos),"hsb");B=[this.sets.hsb[0],100,100].hsbToRgb().rgbToHex();
this.layout.overlay.setStyle("background-color",B);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 A=this.arrRGB.copy().extend(this.arrHSB);A.each(function(B){B.addEvents({mousewheel:this.eventKeys.bindWithEvent(this,B),keydown:this.eventKeys.bindWithEvent(this,B)})
},this);[this.layout.arrows,this.layout.slider].each(function(B){B.addEvents({mousewheel:this.eventKeys.bindWithEvent(this,[this.arrHSB[0],"slider"]),keydown:this.eventKeys.bindWithEvent(this,[this.arrHSB[0],"slider"])})
},this)},eventKeys:function(E,B,A){var F,G;A=(!A)?B.id:this.arrHSB[0];if(E.type=="keydown"){if(E.key=="up"){F=1}else{if(E.key=="down"){F=-1}else{return }}}else{if(E.type==Element.Events.mousewheel.type){F=(E.wheel>0)?1:-1
}}if(this.arrRGB.test(B)){G="rgb"}else{if(this.arrHSB.test(B)){G="hsb"}else{G="hsb"}}if(G=="rgb"){var H=this.sets.rgb,C=this.sets.hsb,D=this.options.prefix,J;var I=B.value.toInt()+F;I=(I>255)?255:(I<0)?0:I;
switch(B.className){case D+"rInput":J=[I,H[1],H[2]];break;case D+"gInput":J=[H[0],I,H[2]];break;case D+"bInput":J=[H[0],H[1],I];break;default:J=H}this.manualSet(J);this.fireEvent("onChange",[this.sets,this])
}else{var H=this.sets.rgb,C=this.sets.hsb,D=this.options.prefix,J;var I=B.value.toInt()+F;if(B.className.test(/(HueInput)/)){I=(I>359)?0:(I<0)?0:I}else{I=(I>100)?100:(I<0)?0:I}switch(B.className){case D+"HueInput":J=[I,C[1],C[2]];
break;case D+"SatuInput":J=[C[0],I,C[2]];break;case D+"BrighInput":J=[C[0],C[1],I];break;default:J=C}this.manualSet(J,"hsb");this.fireEvent("onChange",[this.sets,this])}E.stop()},eventKeydown:function(C,B){var D=C.code,A=C.key;
if((!B.className.test(/hexInput/)&&!(D>=48&&D<=57))&&(A!="backspace"&&A!="tab"&&A!="delete"&&A!="left"&&A!="right")){C.stop()}},eventKeyup:function(F,C){var G=F.code,A=F.key,D,E,B=C.value.charAt(0);if(!$chk(C.value)){return 
}if(C.className.test(/hexInput/)){if(B!="#"&&C.value.length!=6){return }if(B=="#"&&C.value.length!=7){return }}else{if(!(G>=48&&G<=57)&&(!["backspace","tab","delete","left","right"].test(A))&&C.value.length>3){return 
}}E=this.options.prefix;if(C.className.test(/(rInput|gInput|bInput)/)){if(C.value<0||C.value>255){return }switch(C.className){case E+"rInput":D=[C.value,this.sets.rgb[1],this.sets.rgb[2]];break;case E+"gInput":D=[this.sets.rgb[0],C.value,this.sets.rgb[2]];
break;case E+"bInput":D=[this.sets.rgb[0],this.sets.rgb[1],C.value];break;default:D=this.sets.rgb}this.manualSet(D);this.fireEvent("onChange",[this.sets,this])}else{if(!C.className.test(/hexInput/)){if(C.className.test(/HueInput/)&&C.value<0||C.value>360){return 
}else{if(C.className.test(/HueInput/)&&C.value==360){C.value=0}else{if(C.className.test(/(SatuInput|BrighInput)/)&&C.value<0||C.value>100){return }}}switch(C.className){case E+"HueInput":D=[C.value,this.sets.hsb[1],this.sets.hsb[2]];
break;case E+"SatuInput":D=[this.sets.hsb[0],C.value,this.sets.hsb[2]];break;case E+"BrighInput":D=[this.sets.hsb[0],this.sets.hsb[1],C.value];break;default:D=this.sets.hsb}this.manualSet(D,"hsb");this.fireEvent("onChange",[this.sets,this])
}else{D=C.value.hexToRgb(true);if(isNaN(D[0])||isNaN(D[1])||isNaN(D[2])){return }if($chk(D)){this.manualSet(D);this.fireEvent("onChange",[this.sets,this])}}}},doLayout:function(){var T=this.options.id,Y=this.options.prefix;
var D=T+" ."+Y;this.layout=new Element("div",{styles:{display:"block",position:"absolute"},id:T}).inject(document.body);var L=new Element("div",{styles:{position:"relative"},"class":Y+"box"}).inject(this.layout);
var P=new Element("div",{styles:{position:"absolute",overflow:"hidden"},"class":Y+"overlayBox"}).inject(L);var Q=new Element("div",{styles:{position:"absolute",zIndex:1},"class":Y+"arrows"}).inject(L);
Q.width=Q.getStyle("width").toInt();Q.height=Q.getStyle("height").toInt();var I=new Element("img",{styles:{"background-color":"#fff",position:"relative",zIndex:2},src:this.options.imgPath+"moor_woverlay.png","class":Y+"overlay"}).inject(P);
var O=new Element("img",{styles:{position:"absolute",top:0,left:0,zIndex:2},src:this.options.imgPath+"moor_boverlay.png","class":Y+"overlay"}).inject(P);if(window.ie6){P.setStyle("overflow","");var J=I.src;
I.src=this.options.imgPath+"blank.gif";I.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+J+"', sizingMethod='scale')";J=O.src;O.src=this.options.imgPath+"blank.gif";O.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+J+"', sizingMethod='scale')"
}I.width=O.width=P.getStyle("width").toInt();I.height=O.height=P.getStyle("height").toInt();var H=new Element("div",{styles:{overflow:"hidden",position:"absolute",zIndex:2},"class":Y+"cursor"}).inject(P);
H.width=H.getStyle("width").toInt();H.height=H.getStyle("height").toInt();var a=new Element("img",{styles:{position:"absolute","z-index":2},src:this.options.imgPath+"moor_slider.png","class":Y+"slider"}).inject(L);
this.layout.slider=$E("#"+D+"slider");a.width=a.getStyle("width").toInt();a.height=a.getStyle("height").toInt();new Element("div",{styles:{position:"absolute"},"class":Y+"colorBox"}).inject(L);new Element("div",{styles:{zIndex:2,position:"absolute"},"class":Y+"chooseColor"}).inject(L);
this.layout.backup=new Element("div",{styles:{zIndex:2,position:"absolute",cursor:"pointer"},"class":Y+"currentColor"}).inject(L);var F=new Element("label").inject(L).setStyle("position","absolute");var M=F.clone().inject(L).addClass(Y+"gLabel").appendText("G:");
var S=F.clone().inject(L).addClass(Y+"bLabel").appendText("B:");F.appendText("R:").addClass(Y+"rLabel");var d=new Element("br").inject(F);d.clone().inject(M);d.clone().inject(S);var c=new Element("input");
var A=c.clone().inject(M).addClass(Y+"gInput");var E=c.clone().inject(S).addClass(Y+"bInput");c.inject(F).addClass(Y+"rInput");var W=new Element("label").inject(L).setStyle("position","absolute");var b=W.clone().inject(L).addClass(Y+"SatuLabel").appendText("S: %");
var X=W.clone().inject(L).addClass(Y+"BrighLabel").appendText("B: %");W.appendText("H: \260").addClass(Y+"HueLabel");var d=new Element("br").inject(W);d.clone().inject(b);d.clone().inject(X);var U=new Element("input");
var Z=U.clone().inject(b).addClass(Y+"SatuInput");var V=U.clone().inject(X).addClass(Y+"BrighInput");U.inject(W).addClass(Y+"HueInput");var K=new Element("label").inject(L).setStyle("position","absolute").addClass(Y+"hexLabel").appendText("hex: ").adopt(new Element("input").addClass(Y+"hexInput"));
var C=new Element("input",{styles:{position:"absolute"},type:"button",value:"Cancel","class":Y+"cancelButton"}).inject(L);var N=new Element("input",{styles:{position:"absolute"},type:"button",value:"Select","class":Y+"okButton"}).inject(L);
this.rePosition();var e=$$("#"+D+"overlay");this.layout.overlay=e[0];this.layout.overlay2=e[1];this.layout.cursor=$E("#"+D+"cursor");this.layout.arrows=$E("#"+D+"arrows");this.chooseColor=$E("#"+D+"chooseColor");
this.layout.backup=$E("#"+D+"currentColor");this.RedInput=$E("#"+D+"rInput");this.GreenInput=$E("#"+D+"gInput");this.BlueInput=$E("#"+D+"bInput");this.HueInput=$E("#"+D+"HueInput");this.SatuInput=$E("#"+D+"SatuInput");
this.BrighInput=$E("#"+D+"BrighInput");this.hexInput=$E("#"+D+"hexInput");this.arrRGB=[this.RedInput,this.GreenInput,this.BlueInput];this.arrHSB=[this.HueInput,this.SatuInput,this.BrighInput];this.okButton=$E("#"+D+"okButton");
this.cancelButton=$E("#"+D+"cancelButton");if(!window.khtml){this.hide()}},rePosition:function(){var A=(this.element2||this.element).getCoordinates();this.layout.setStyles({left:A.left,top:A.top+A.height+1})
},snippet:function(G,F){var D;F=(F)?F:"none";switch(G){case"arrPos":var C=this.layout.arrows.getStyle("top").toInt()-16;D=C;break;case"arrSize":var E=this.layout.arrows.height;E=(F=="int")?(E/2).toInt():E;
D=E;break;case"curPos":var B=this.layout.cursor.getStyle("left").toInt();var C=this.layout.cursor.getStyle("top").toInt();D={l:B,t:C};break;case"slider":var C=this.layout.slider.getStyle("marginTop").toInt();
D=C;break;default:var E=this.layout.cursor.height;var A=this.layout.cursor.width;E=(F=="int")?(E/2).toInt():E;A=(F=="int")?(A/2).toInt():A;D={w:A,h:E}}return D}});MooRainbow.implement(new Options);MooRainbow.implement(new Events);
