if(typeof(dojo)!='undefined'){dojo.provide('MochiKit.Color');dojo.require('MochiKit.Base');dojo.require('MochiKit.DOM');dojo.require('MochiKit.Style');}
if(typeof(JSAN)!='undefined'){JSAN.use("MochiKit.Base",[]);JSAN.use("MochiKit.DOM",[]);JSAN.use("MochiKit.Style",[]);}
try{if(typeof(MochiKit.Base)=='undefined'){throw"";}}catch(e){throw"MochiKit.Color depends on MochiKit.Base";}
try{if(typeof(MochiKit.Base)=='undefined'){throw"";}}catch(e){throw"MochiKit.Color depends on MochiKit.DOM";}
try{if(typeof(MochiKit.Base)=='undefined'){throw"";}}catch(e){throw"MochiKit.Color depends on MochiKit.Style";}
if(typeof(MochiKit.Color)=="undefined"){MochiKit.Color={};}
MochiKit.Color.NAME="MochiKit.Color";MochiKit.Color.VERSION="1.4";MochiKit.Color.__repr__=function(){return"["+this.NAME+" "+this.VERSION+"]";};MochiKit.Color.toString=function(){return this.__repr__();};MochiKit.Color.Color=function(red,green,blue,alpha){if(typeof(alpha)=='undefined'||alpha===null){alpha=1.0;}
this.rgb={r:red,g:green,b:blue,a:alpha};};MochiKit.Color.Color.prototype={__class__:MochiKit.Color.Color,colorWithAlpha:function(alpha){var rgb=this.rgb;var m=MochiKit.Color;return m.Color.fromRGB(rgb.r,rgb.g,rgb.b,alpha);},colorWithHue:function(hue){var hsl=this.asHSL();hsl.h=hue;var m=MochiKit.Color;return m.Color.fromHSL(hsl);},colorWithSaturation:function(saturation){var hsl=this.asHSL();hsl.s=saturation;var m=MochiKit.Color;return m.Color.fromHSL(hsl);},colorWithLightness:function(lightness){var hsl=this.asHSL();hsl.l=lightness;var m=MochiKit.Color;return m.Color.fromHSL(hsl);},darkerColorWithLevel:function(level){var hsl=this.asHSL();hsl.l=Math.max(hsl.l-level,0);var m=MochiKit.Color;return m.Color.fromHSL(hsl);},lighterColorWithLevel:function(level){var hsl=this.asHSL();hsl.l=Math.min(hsl.l+level,1);var m=MochiKit.Color;return m.Color.fromHSL(hsl);},blendedColor:function(other,fraction){if(typeof(fraction)=='undefined'||fraction===null){fraction=0.5;}
var sf=1.0-fraction;var s=this.rgb;var d=other.rgb;var df=fraction;return MochiKit.Color.Color.fromRGB((s.r*sf)+(d.r*df),(s.g*sf)+(d.g*df),(s.b*sf)+(d.b*df),(s.a*sf)+(d.a*df));},compareRGB:function(other){var a=this.asRGB();var b=other.asRGB();return MochiKit.Base.compare([a.r,a.g,a.b,a.a],[b.r,b.g,b.b,b.a]);},isLight:function(){return this.asHSL().b>0.5;},isDark:function(){return(!this.isLight());},toHSLString:function(){var c=this.asHSL();var ccc=MochiKit.Color.clampColorComponent;var rval=this._hslString;if(!rval){var mid=(ccc(c.h,360).toFixed(0)
+","+ccc(c.s,100).toPrecision(4)+"%"
+","+ccc(c.l,100).toPrecision(4)+"%");var a=c.a;if(a>=1){a=1;rval="hsl("+mid+")";}else{if(a<=0){a=0;}
rval="hsla("+mid+","+a+")";}
this._hslString=rval;}
return rval;},toRGBString:function(){var c=this.rgb;var ccc=MochiKit.Color.clampColorComponent;var rval=this._rgbString;if(!rval){var mid=(ccc(c.r,255).toFixed(0)
+","+ccc(c.g,255).toFixed(0)
+","+ccc(c.b,255).toFixed(0));if(c.a!=1){rval="rgba("+mid+","+c.a+")";}else{rval="rgb("+mid+")";}
this._rgbString=rval;}
return rval;},asRGB:function(){return MochiKit.Base.clone(this.rgb);},toHexString:function(){var m=MochiKit.Color;var c=this.rgb;var ccc=MochiKit.Color.clampColorComponent;var rval=this._hexString;if(!rval){rval=("#"+
m.toColorPart(ccc(c.r,255))+
m.toColorPart(ccc(c.g,255))+
m.toColorPart(ccc(c.b,255)));this._hexString=rval;}
return rval;},asHSV:function(){var hsv=this.hsv;var c=this.rgb;if(typeof(hsv)=='undefined'||hsv===null){hsv=MochiKit.Color.rgbToHSV(this.rgb);this.hsv=hsv;}
return MochiKit.Base.clone(hsv);},asHSL:function(){var hsl=this.hsl;var c=this.rgb;if(typeof(hsl)=='undefined'||hsl===null){hsl=MochiKit.Color.rgbToHSL(this.rgb);this.hsl=hsl;}
return MochiKit.Base.clone(hsl);},toString:function(){return this.toRGBString();},repr:function(){var c=this.rgb;var col=[c.r,c.g,c.b,c.a];return this.__class__.NAME+"("+col.join(", ")+")";}};MochiKit.Base.update(MochiKit.Color.Color,{fromRGB:function(red,green,blue,alpha){var Color=MochiKit.Color.Color;if(arguments.length==1){var rgb=red;red=rgb.r;green=rgb.g;blue=rgb.b;if(typeof(rgb.a)=='undefined'){alpha=undefined;}else{alpha=rgb.a;}}
return new Color(red,green,blue,alpha);},fromHSL:function(hue,saturation,lightness,alpha){var m=MochiKit.Color;return m.Color.fromRGB(m.hslToRGB.apply(m,arguments));},fromHSV:function(hue,saturation,value,alpha){var m=MochiKit.Color;return m.Color.fromRGB(m.hsvToRGB.apply(m,arguments));},fromName:function(name){var Color=MochiKit.Color.Color;if(name.charAt(0)=='"'){name=name.substr(1,name.length-2);}
var htmlColor=Color._namedColors[name.toLowerCase()];if(typeof(htmlColor)=='string'){return Color.fromHexString(htmlColor);}else if(name=="transparent"){return Color.transparentColor();}
return null;},fromString:function(colorString){var self=MochiKit.Color.Color;var three=colorString.substr(0,3);if(three=="rgb"){return self.fromRGBString(colorString);}else if(three=="hsl"){return self.fromHSLString(colorString);}else if(colorString.charAt(0)=="#"){return self.fromHexString(colorString);}
return self.fromName(colorString);},fromHexString:function(hexCode){if(hexCode.charAt(0)=='#'){hexCode=hexCode.substring(1);}
var components=[];var i,hex;if(hexCode.length==3){for(i=0;i<3;i++){hex=hexCode.substr(i,1);components.push(parseInt(hex+hex,16)/255.0);}}else{for(i=0;i<6;i+=2){hex=hexCode.substr(i,2);components.push(parseInt(hex,16)/255.0);}}
var Color=MochiKit.Color.Color;return Color.fromRGB.apply(Color,components);},_fromColorString:function(pre,method,scales,colorCode){if(colorCode.indexOf(pre)===0){colorCode=colorCode.substring(colorCode.indexOf("(",3)+1,colorCode.length-1);}
var colorChunks=colorCode.split(/\s*,\s*/);var colorFloats=[];for(var i=0;i<colorChunks.length;i++){var c=colorChunks[i];var val;var three=c.substring(c.length-3);if(c.charAt(c.length-1)=='%'){val=0.01*parseFloat(c.substring(0,c.length-1));}else if(three=="deg"){val=parseFloat(c)/360.0;}else if(three=="rad"){val=parseFloat(c)/(Math.PI*2);}else{val=scales[i]*parseFloat(c);}
colorFloats.push(val);}
return this[method].apply(this,colorFloats);},fromComputedStyle:function(elem,style){var d=MochiKit.DOM;var cls=MochiKit.Color.Color;for(elem=d.getElement(elem);elem;elem=elem.parentNode){var actualColor=MochiKit.Style.computedStyle.apply(d,arguments);if(!actualColor){continue;}
var color=cls.fromString(actualColor);if(!color){break;}
if(color.asRGB().a>0){return color;}}
return null;},fromBackground:function(elem){var cls=MochiKit.Color.Color;return cls.fromComputedStyle(elem,"backgroundColor","background-color")||cls.whiteColor();},fromText:function(elem){var cls=MochiKit.Color.Color;return cls.fromComputedStyle(elem,"color","color")||cls.blackColor();},namedColors:function(){return MochiKit.Base.clone(MochiKit.Color.Color._namedColors);}});MochiKit.Base.update(MochiKit.Color,{clampColorComponent:function(v,scale){v*=scale;if(v<0){return 0;}else if(v>scale){return scale;}else{return v;}},_hslValue:function(n1,n2,hue){if(hue>6.0){hue-=6.0;}else if(hue<0.0){hue+=6.0;}
var val;if(hue<1.0){val=n1+(n2-n1)*hue;}else if(hue<3.0){val=n2;}else if(hue<4.0){val=n1+(n2-n1)*(4.0-hue);}else{val=n1;}
return val;},hsvToRGB:function(hue,saturation,value,alpha){if(arguments.length==1){var hsv=hue;hue=hsv.h;saturation=hsv.s;value=hsv.v;alpha=hsv.a;}
var red;var green;var blue;if(saturation===0){red=0;green=0;blue=0;}else{var i=Math.floor(hue*6);var f=(hue*6)-i;var p=value*(1-saturation);var q=value*(1-(saturation*f));var t=value*(1-(saturation*(1-f)));switch(i){case 1:red=q;green=value;blue=p;break;case 2:red=p;green=value;blue=t;break;case 3:red=p;green=q;blue=value;break;case 4:red=t;green=p;blue=value;break;case 5:red=value;green=p;blue=q;break;case 6:case 0:red=value;green=t;blue=p;break;}}
return{r:red,g:green,b:blue,a:alpha};},hslToRGB:function(hue,saturation,lightness,alpha){if(arguments.length==1){var hsl=hue;hue=hsl.h;saturation=hsl.s;lightness=hsl.l;alpha=hsl.a;}
var red;var green;var blue;if(saturation===0){red=lightness;green=lightness;blue=lightness;}else{var m2;if(lightness<=0.5){m2=lightness*(1.0+saturation);}else{m2=lightness+saturation-(lightness*saturation);}
var m1=(2.0*lightness)-m2;var f=MochiKit.Color._hslValue;var h6=hue*6.0;red=f(m1,m2,h6+2);green=f(m1,m2,h6);blue=f(m1,m2,h6-2);}
return{r:red,g:green,b:blue,a:alpha};},rgbToHSV:function(red,green,blue,alpha){if(arguments.length==1){var rgb=red;red=rgb.r;green=rgb.g;blue=rgb.b;alpha=rgb.a;}
var max=Math.max(Math.max(red,green),blue);var min=Math.min(Math.min(red,green),blue);var hue;var saturation;var value=max;if(min==max){hue=0;saturation=0;}else{var delta=(max-min);saturation=delta/max;if(red==max){hue=(green-blue)/delta;}else if(green==max){hue=2+((blue-red)/delta);}else{hue=4+((red-green)/delta);}
hue/=6;if(hue<0){hue+=1;}
if(hue>1){hue-=1;}}
return{h:hue,s:saturation,v:value,a:alpha};},rgbToHSL:function(red,green,blue,alpha){if(arguments.length==1){var rgb=red;red=rgb.r;green=rgb.g;blue=rgb.b;alpha=rgb.a;}
var max=Math.max(red,Math.max(green,blue));var min=Math.min(red,Math.min(green,blue));var hue;var saturation;var lightness=(max+min)/2.0;var delta=max-min;if(delta===0){hue=0;saturation=0;}else{if(lightness<=0.5){saturation=delta/(max+min);}else{saturation=delta/(2-max-min);}
if(red==max){hue=(green-blue)/delta;}else if(green==max){hue=2+((blue-red)/delta);}else{hue=4+((red-green)/delta);}
hue/=6;if(hue<0){hue+=1;}
if(hue>1){hue-=1;}}
return{h:hue,s:saturation,l:lightness,a:alpha};},toColorPart:function(num){num=Math.round(num);var digits=num.toString(16);if(num<16){return'0'+digits;}
return digits;},__new__:function(){var m=MochiKit.Base;this.Color.fromRGBString=m.bind(this.Color._fromColorString,this.Color,"rgb","fromRGB",[1.0/255.0,1.0/255.0,1.0/255.0,1]);this.Color.fromHSLString=m.bind(this.Color._fromColorString,this.Color,"hsl","fromHSL",[1.0/360.0,0.01,0.01,1]);var third=1.0/3.0;var colors={black:[0,0,0],blue:[0,0,1],brown:[0.6,0.4,0.2],cyan:[0,1,1],darkGray:[third,third,third],gray:[0.5,0.5,0.5],green:[0,1,0],lightGray:[2*third,2*third,2*third],magenta:[1,0,1],orange:[1,0.5,0],purple:[0.5,0,0.5],red:[1,0,0],transparent:[0,0,0,0],white:[1,1,1],yellow:[1,1,0]};var makeColor=function(name,r,g,b,a){var rval=this.fromRGB(r,g,b,a);this[name]=function(){return rval;};return rval;};for(var k in colors){var name=k+"Color";var bindArgs=m.concat([makeColor,this.Color,name],colors[k]);this.Color[name]=m.bind.apply(null,bindArgs);}
var isColor=function(){for(var i=0;i<arguments.length;i++){if(!(arguments[i]instanceof Color)){return false;}}
return true;};var compareColor=function(a,b){return a.compareRGB(b);};m.nameFunctions(this);m.registerComparator(this.Color.NAME,isColor,compareColor);this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)};}});MochiKit.Color.EXPORT=["Color"];MochiKit.Color.EXPORT_OK=["clampColorComponent","rgbToHSL","hslToRGB","rgbToHSV","hsvToRGB","toColorPart"];MochiKit.Color.__new__();MochiKit.Base._exportSymbols(this,MochiKit.Color);MochiKit.Color.Color._namedColors={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};
