(function colorPickerNamespace(){ var cp = null; var imgBase = pre + 'imgs/colorpicker/'; // so we can convert names to hex codes var colorNames = {'aliceblue':'F0F8FF','darkslategray':'2F4F4F','lightsalmon':'FFA07A','palevioletred':'DB7093','antiquewhite':'FAEBD7','darkturquoise':'00CED1','lightseagreen':'20B2AA','papayawhip':'FFEFD5','aqua':'00FFFF','darkviolet':'9400D3','lightskyblue':'87CEFA','peachpuff':'FFDAB9','aquamarine':'7FFFD4','deeppink':'FF1493','lightslategray':'778899','peru':'CD853F','azure':'F0FFFF','deepskyblue':'00BFFF','lightsteelblue':'B0C4DE','pink':'FFC0CB','beige':'F5F5DC','dimgray':'696969','lightyellow':'FFFFE0','plum':'DDA0DD','bisque':'FFE4C4','dodgerblue':'1E90FF','lime':'00FF00','powderblue':'B0E0E6','black':'000000','firebrick':'B22222','limegreen':'32CD32','purple':'800080','blanchedalmond':'FFEBCD','floralwhite':'FFFAF0','linen':'FAF0E6','red':'FF0000','blue':'0000FF','forestgreen':'228B22','magenta':'FF00FF','rosybrown':'BC8F8F','blueviolet':'8A2BE2','fuchsia':'FF00FF','maroon':'800000','royalblue':'4169E1','brown':'A52A2A','gainsboro':'DCDCDC','mediumaquamarine':'66CDAA','saddlebrown':'8B4513','burlywood':'DEB887','ghostwhite':'F8F8FF','mediumblue':'0000CD','salmon':'FA8072','cadetblue':'5F9EA0','gold':'FFD700','mediumorchid':'BA55D3','sandybrown':'F4A460','chartreuse':'7FFF00','goldenrod':'DAA520','mediumpurple':'9370DB','seagreen':'2E8B57','chocolate':'D2691E','gray':'808080','mediumseagreen':'3CB371','seashell':'FFF5EE','coral':'FF7F50','green':'008000','mediumslateblue':'7B68EE','sienna':'A0522D','cornflowerblue':'6495ED','greenyellow':'ADFF2F','mediumspringgreen':'00FA9A','silver':'C0C0C0','cornsilk':'FFF8DC','honeydew':'F0FFF0','mediumturquoise':'48D1CC','skyblue':'87CEEB','crimson':'DC143C','hotpink':'FF69B4','mediumvioletred':'C71585','slateblue':'6A5ACD','cyan':'00FFFF','indianred':'CD5C5C','midnightblue':'191970','slategray':'708090','darkblue':'00008B','indigo':'4B0082','mintcream':'F5FFFA','snow':'FFFAFA','darkcyan':'008B8B','ivory':'FFFFF0','mistyrose':'FFE4E1','springgreen':'00FF7F','darkgoldenrod':'B8860B','khaki':'F0E68C','moccasin':'FFE4B5','steelblue':'4682B4','darkgray':'A9A9A9','lavender':'E6E6FA','navajowhite':'FFDEAD','tan':'D2B48C','darkgreen':'006400','lavenderblush':'FFF0F5','navy':'000080','teal':'008080','darkkhaki':'BDB76B','lawngreen':'7CFC00','oldlace':'FDF5E6','thistle':'D8BFD8','darkmagenta':'8B008B','lemonchiffon':'FFFACD','olive':'808000','tomato':'FD6347','darkolivegreen':'556B2F','lightblue':'ADD8E6','olivedrab':'6B8E23','turquoise':'40E0D0','darkorange':'FF8C00','lightcoral':'F08080','orange':'FFA500','violet':'EE82EE','darkorchid':'9932CC','lightcyan':'E0FFFF','orangered':'FF4500','wheat':'F5DEB3','darkred':'8B0000','lightgoldenrodyellow':'FAFAD2','orchid':'DA70D6','white':'FFFFFF','darksalmon':'E9967A','lightgreen':'90EE90','palegoldenrod':'EEE8AA','whitesmoke':'F5F5F5','darkseagreen':'8FBC8F','lightgrey':'D3D3D3','palegreen':'98FB98','yellow':'FFFF00','darkslateblue':'483D8B','lightpink':'FFB6C1','paleturquoise':'AFEEEE','yellowgreen':'9ACD32'}; function hex(c){ c=parseInt(c).toString(16); return c.length<2?"0"+c:c } function mouseCoordinates(ev){ ev = ev || window.event; if(ev.pageX || ev.pageY) return {x:ev.pageX, y:ev.pageY}; return {x:ev.clientX + document.body.scrollLeft - document.body.clientLeft, y:ev.clientY + document.body.scrollTop - document.body.clientTop}; } function getPosition(obj){ var left = 0; var top = 0; while (obj.offsetParent){ left += obj.offsetLeft; top += obj.offsetTop; obj = obj.offsetParent; } left += obj.offsetLeft; top += obj.offsetTop; return {x:left, y:top}; } function $DOM(A){ var aL = A.length, node, child, ref={}, bRef=false; if(aL>=1){ node = cE(A[0]); if(aL>=2){ for(var arg in A[1]){ if(arg.indexOf('on')==0){ node[arg] = A[1][arg]; }else if(arg=='ref'){ ref[A[1][arg]] = node; ref['DOM'] = node; bRef = true; }else{ if(arg=='style'){ node.style.cssText = A[1][arg]; } else if(arg.toLowerCase()=='classname'){ node.style.className = A[1][arg]; } else { node.setAttribute(arg, A[1][arg]); } } } } for(var i=2; i=sWidth*6){ r=g=b=255-l; } else { h=255-l; r=C(height/2)){ var base = (height-R)/(height/2); r=r*base; g=g*base; b=b*base; } } return hex(r)+hex(g)+hex(b); } function getVertColor(i, sZ){ var n=sZ/6, j=sZ/n, C=i, c=C%n; r=C255?255:x; y = y<0?0:y>255?255:y; var r = Math.round((1-(1-(Base.r/255))*(x/255))*(255-y)); var g = Math.round((1-(1-(Base.g/255))*(x/255))*(255-y)); var b = Math.round((1-(1-(Base.b/255))*(x/255))*(255-y)); return {r:r, g:g, b:b}; } function getWebSafeColor(color){ var rMod = color.r % 51; var gMod = color.g % 51; var bMod = color.b % 51; if((rMod==0) && (gMod==0) && (bMod==0)) return false; var wsColor={}; wsColor.r=(rMod<=25?Math.floor(color.r/51)*51:Math.ceil(color.r/51)*51); wsColor.g=(gMod<=25?Math.floor(color.g/51)*51:Math.ceil(color.g/51)*51); wsColor.b=(bMod<=25?Math.floor(color.b/51)*51:Math.ceil(color.b/51)*51); return wsColor; } function hColorPickerMouseMove(ev){ ev = ev || window.event; var hCPImg = ev.target || ev.srcElement; var mousePos = mouseCoordinates(ev); cp.colorPos = getPosition(hCPImg); var x = mousePos.x-cp.colorPos.x; var y = mousePos.y-cp.colorPos.y; var width = parseInt(hCPImg.offsetWidth); var height = parseInt(hCPImg.offsetHeight); var color = getHorizColor(y*width+x, width, height); cp.hColorDiv.style.backgroundColor = cp.cpColor = '#'+color; } function hColorPickerMouseDown(){ if(cp.cpColor.r || (cp.cpColor.r===0)) cp.cpColor = '#'+hex(cp.cpColor.r)+hex(cp.cpColor.g)+hex(cp.cpColor.b); cp.cpInput.value = cp.cpColor; hideColorPicker(); } function attachColorPicker(input, noLg){ createColorPicker(); document.onmousedown = documentMouseDown; document.onmouseup = documentMouseUp; if(noLg) input.setAttribute('noLg', '1'); input.onfocus = showColorPicker; input.onblur = tryHideColorPicker; input.onclick = showColorPicker; } function showSmColorPicker(ev){ cp.clicked = true; showColorPicker(ev, 's'); } function showLgColorPicker(ev){ cp.clicked = true; showColorPicker(ev, 'l'); } function showColorPicker(ev, size){ ev = ev || window.event; var input = ev.target || ev.srcElement; size = size || (cp.fColorPicker.style.display=='block'?'l':'s'); cp.ColorPicker.style.display = 'block'; if(input.nodeName=='INPUT'){ cp.cpInput = input; } cp.hColorIcon.style.display = cp.cpInput.getAttribute('noLg')=='1'?'none':'inline'; var inpPos = getPosition(cp.cpInput); cp.ColorPicker.style.left = inpPos.x; cp.ColorPicker.style.top = inpPos.y+parseInt(cp.cpInput.offsetHeight); cp.hColorPicker.style.display = cp.fColorPicker.style.display = 'none'; (size=='s'?cp.hColorPicker:cp.fColorPicker)['style'].display = 'block'; if(size!='s'){ cp.baseColor = parseColor(cp.cpInput.value); setCPColor(cp.fColorImg.style.backgroundColor = cp.origColor = cp.OrigColorDiv.style.backgroundColor = '#'+hex(cp.baseColor.r)+hex(cp.baseColor.g)+hex(cp.baseColor.b)); cp.sliderPos = getPosition(cp.colorSlider); } } function tryHideColorPicker(){ if(!cp.clicked) hideColorPicker(); } function hideColorPicker(){ cp.ColorPicker.style.display = 'none'; } function cpMouseDown(ev){ cp.cpPos = getPosition(cp.fColorImg); cp.cpMouseDown = true; return false; } function cpMouseUp(ev){ cp.cpMouseDown = false; } function cpSliderMouseDown(ev){ cp.csPos = getPosition(cp.colorSlider); cp.SliderMouseDown = true; return false; } function cpSliderMouseUp(ev){ cp.SliderMouseDown = false; } function cpSliderClick(ev){ ev = ev || window.event; var mousePos = mouseCoordinates(ev); var y = mousePos.y-cp.sliderPos.y-4; cpSliderSetColor(y); } function cpMouseClick(ev){ ev = ev || window.event; var mousePos = mouseCoordinates(ev); var x = mousePos.x-cp.cpPos.x-1; var y = mousePos.y-cp.cpPos.y-1; setCPColor(getGradientColor(x, y, cp.baseColor)); } function cpMouseMove(ev){ // fired when mouse moves over the color picker if(cp.cpMouseDown){ cpMouseClick(ev); } // fired when mouse moves over the color slider if(cp.SliderMouseDown){ cpSliderClick(ev); } return false; } function cpSliderSetColor(y){ y = y<0?0:y>255?255:y; cp.Arrows.style.top = (y+18)+'px'; var color = cp.baseColor = getVertColor(y, 256); cp.fColorImg.style.backgroundColor = '#'+hex(color.r)+hex(color.g)+hex(color.b); } function selectWebSafeColor(){ setCPColor(getWebSafeColor(cp.cpColor)); } function resetColor(){ setCPColor(cp.origColor); } function setCPColor(color){ if(color.srcElement || color.target) color=null; if(color && (!color.r && (color.r!=0))) color = parseColor(color); if(!color){ color = { r:parseInt(cp.rInput.value), g:parseInt(cp.gInput.value), b:parseInt(cp.bInput.value) } } var wsColor = getWebSafeColor(color) if(wsColor && !cp.websafeCheckbox.checked){ cp.websafeImg.style.display = 'block'; cp.websafeImg.style.backgroundColor = '#'+hex(wsColor.r)+hex(wsColor.g)+hex(wsColor.b); }else{ if(wsColor && cp.websafeCheckbox.checked) color = wsColor; cp.websafeImg.style.display = 'none'; } cp.rInput.value = color.r; cp.gInput.value = color.g; cp.bInput.value = color.b; cp.cpColor = color; cp.curColorDiv.style.backgroundColor = '#'+hex(color.r)+hex(color.g)+hex(color.b); } function parseColor(text){ if(colorNames[text.toLowerCase()]) text = colorNames[text.toLowerCase()]; if(/^\#?[0-9A-F]{6}$/i.test(text)){ return { r: eval('0x'+text.substr(text.length==6?0:1, 2)), g: eval('0x'+text.substr(text.length==6?2:3, 2)), b: eval('0x'+text.substr(text.length==6?4:5, 2)) } } return {r:255, g:0, b:0}; } function documentMouseDown(ev){ ev = ev || window.event; var target = ev.srcElement || ev.target; while(target){ if(target==cp.ColorPicker) return; target = target.parentNode; } cp.ColorPicker.style.display = 'none'; } function documentMouseUp(ev){ cpMouseUp(ev); cpSliderMouseUp(ev); } window.attachColorPicker = attachColorPicker; })();