web/wp-includes/js/colorpicker.dev.js
changeset 136 bde1974c263b
equal deleted inserted replaced
135:53cff4b4a802 136:bde1974c263b
       
     1 // ===================================================================
       
     2 // Author: Matt Kruse <matt@mattkruse.com>
       
     3 // WWW: http://www.mattkruse.com/
       
     4 //
       
     5 // NOTICE: You may use this code for any purpose, commercial or
       
     6 // private, without any further permission from the author. You may
       
     7 // remove this notice from your final code if you wish, however it is
       
     8 // appreciated by the author if at least my web site address is kept.
       
     9 //
       
    10 // You may *NOT* re-distribute this code in any way except through its
       
    11 // use. That means, you can include it in your product, or your web
       
    12 // site, or any other form where the code is actually being used. You
       
    13 // may not put the plain javascript up on your site for download or
       
    14 // include it in your javascript libraries for download. 
       
    15 // If you wish to share this code with others, please just point them
       
    16 // to the URL instead.
       
    17 // Please DO NOT link directly to my .js files from your site. Copy
       
    18 // the files to your server and use them there. Thank you.
       
    19 // ===================================================================
       
    20 
       
    21 
       
    22 /* SOURCE FILE: AnchorPosition.js */
       
    23 
       
    24 /* 
       
    25 AnchorPosition.js
       
    26 Author: Matt Kruse
       
    27 Last modified: 10/11/02
       
    28 
       
    29 DESCRIPTION: These functions find the position of an <A> tag in a document,
       
    30 so other elements can be positioned relative to it.
       
    31 
       
    32 COMPATABILITY: Netscape 4.x,6.x,Mozilla, IE 5.x,6.x on Windows. Some small
       
    33 positioning errors - usually with Window positioning - occur on the 
       
    34 Macintosh platform.
       
    35 
       
    36 FUNCTIONS:
       
    37 getAnchorPosition(anchorname)
       
    38   Returns an Object() having .x and .y properties of the pixel coordinates
       
    39   of the upper-left corner of the anchor. Position is relative to the PAGE.
       
    40 
       
    41 getAnchorWindowPosition(anchorname)
       
    42   Returns an Object() having .x and .y properties of the pixel coordinates
       
    43   of the upper-left corner of the anchor, relative to the WHOLE SCREEN.
       
    44 
       
    45 NOTES:
       
    46 
       
    47 1) For popping up separate browser windows, use getAnchorWindowPosition. 
       
    48    Otherwise, use getAnchorPosition
       
    49 
       
    50 2) Your anchor tag MUST contain both NAME and ID attributes which are the 
       
    51    same. For example:
       
    52    <A NAME="test" ID="test"> </A>
       
    53 
       
    54 3) There must be at least a space between <A> </A> for IE5.5 to see the 
       
    55    anchor tag correctly. Do not do <A></A> with no space.
       
    56 */ 
       
    57 
       
    58 // getAnchorPosition(anchorname)
       
    59 //   This function returns an object having .x and .y properties which are the coordinates
       
    60 //   of the named anchor, relative to the page.
       
    61 function getAnchorPosition(anchorname) {
       
    62 	// This function will return an Object with x and y properties
       
    63 	var useWindow=false;
       
    64 	var coordinates=new Object();
       
    65 	var x=0,y=0;
       
    66 	// Browser capability sniffing
       
    67 	var use_gebi=false, use_css=false, use_layers=false;
       
    68 	if (document.getElementById) { use_gebi=true; }
       
    69 	else if (document.all) { use_css=true; }
       
    70 	else if (document.layers) { use_layers=true; }
       
    71 	// Logic to find position
       
    72  	if (use_gebi && document.all) {
       
    73 		x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
       
    74 		y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);
       
    75 		}
       
    76 	else if (use_gebi) {
       
    77 		var o=document.getElementById(anchorname);
       
    78 		x=AnchorPosition_getPageOffsetLeft(o);
       
    79 		y=AnchorPosition_getPageOffsetTop(o);
       
    80 		}
       
    81  	else if (use_css) {
       
    82 		x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
       
    83 		y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);
       
    84 		}
       
    85 	else if (use_layers) {
       
    86 		var found=0;
       
    87 		for (var i=0; i<document.anchors.length; i++) {
       
    88 			if (document.anchors[i].name==anchorname) { found=1; break; }
       
    89 			}
       
    90 		if (found==0) {
       
    91 			coordinates.x=0; coordinates.y=0; return coordinates;
       
    92 			}
       
    93 		x=document.anchors[i].x;
       
    94 		y=document.anchors[i].y;
       
    95 		}
       
    96 	else {
       
    97 		coordinates.x=0; coordinates.y=0; return coordinates;
       
    98 		}
       
    99 	coordinates.x=x;
       
   100 	coordinates.y=y;
       
   101 	return coordinates;
       
   102 	}
       
   103 
       
   104 // getAnchorWindowPosition(anchorname)
       
   105 //   This function returns an object having .x and .y properties which are the coordinates
       
   106 //   of the named anchor, relative to the window
       
   107 function getAnchorWindowPosition(anchorname) {
       
   108 	var coordinates=getAnchorPosition(anchorname);
       
   109 	var x=0;
       
   110 	var y=0;
       
   111 	if (document.getElementById) {
       
   112 		if (isNaN(window.screenX)) {
       
   113 			x=coordinates.x-document.body.scrollLeft+window.screenLeft;
       
   114 			y=coordinates.y-document.body.scrollTop+window.screenTop;
       
   115 			}
       
   116 		else {
       
   117 			x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
       
   118 			y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;
       
   119 			}
       
   120 		}
       
   121 	else if (document.all) {
       
   122 		x=coordinates.x-document.body.scrollLeft+window.screenLeft;
       
   123 		y=coordinates.y-document.body.scrollTop+window.screenTop;
       
   124 		}
       
   125 	else if (document.layers) {
       
   126 		x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
       
   127 		y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;
       
   128 		}
       
   129 	coordinates.x=x;
       
   130 	coordinates.y=y;
       
   131 	return coordinates;
       
   132 	}
       
   133 
       
   134 // Functions for IE to get position of an object
       
   135 function AnchorPosition_getPageOffsetLeft (el) {
       
   136 	var ol=el.offsetLeft;
       
   137 	while ((el=el.offsetParent) != null) { ol += el.offsetLeft; }
       
   138 	return ol;
       
   139 	}
       
   140 function AnchorPosition_getWindowOffsetLeft (el) {
       
   141 	return AnchorPosition_getPageOffsetLeft(el)-document.body.scrollLeft;
       
   142 	}
       
   143 function AnchorPosition_getPageOffsetTop (el) {
       
   144 	var ot=el.offsetTop;
       
   145 	while((el=el.offsetParent) != null) { ot += el.offsetTop; }
       
   146 	return ot;
       
   147 	}
       
   148 function AnchorPosition_getWindowOffsetTop (el) {
       
   149 	return AnchorPosition_getPageOffsetTop(el)-document.body.scrollTop;
       
   150 	}
       
   151 
       
   152 /* SOURCE FILE: PopupWindow.js */
       
   153 
       
   154 /* 
       
   155 PopupWindow.js
       
   156 Author: Matt Kruse
       
   157 Last modified: 02/16/04
       
   158 
       
   159 DESCRIPTION: This object allows you to easily and quickly popup a window
       
   160 in a certain place. The window can either be a DIV or a separate browser
       
   161 window.
       
   162 
       
   163 COMPATABILITY: Works with Netscape 4.x, 6.x, IE 5.x on Windows. Some small
       
   164 positioning errors - usually with Window positioning - occur on the 
       
   165 Macintosh platform. Due to bugs in Netscape 4.x, populating the popup 
       
   166 window with <STYLE> tags may cause errors.
       
   167 
       
   168 USAGE:
       
   169 // Create an object for a WINDOW popup
       
   170 var win = new PopupWindow(); 
       
   171 
       
   172 // Create an object for a DIV window using the DIV named 'mydiv'
       
   173 var win = new PopupWindow('mydiv'); 
       
   174 
       
   175 // Set the window to automatically hide itself when the user clicks 
       
   176 // anywhere else on the page except the popup
       
   177 win.autoHide(); 
       
   178 
       
   179 // Show the window relative to the anchor name passed in
       
   180 win.showPopup(anchorname);
       
   181 
       
   182 // Hide the popup
       
   183 win.hidePopup();
       
   184 
       
   185 // Set the size of the popup window (only applies to WINDOW popups
       
   186 win.setSize(width,height);
       
   187 
       
   188 // Populate the contents of the popup window that will be shown. If you 
       
   189 // change the contents while it is displayed, you will need to refresh()
       
   190 win.populate(string);
       
   191 
       
   192 // set the URL of the window, rather than populating its contents
       
   193 // manually
       
   194 win.setUrl("http://www.site.com/");
       
   195 
       
   196 // Refresh the contents of the popup
       
   197 win.refresh();
       
   198 
       
   199 // Specify how many pixels to the right of the anchor the popup will appear
       
   200 win.offsetX = 50;
       
   201 
       
   202 // Specify how many pixels below the anchor the popup will appear
       
   203 win.offsetY = 100;
       
   204 
       
   205 NOTES:
       
   206 1) Requires the functions in AnchorPosition.js
       
   207 
       
   208 2) Your anchor tag MUST contain both NAME and ID attributes which are the 
       
   209    same. For example:
       
   210    <A NAME="test" ID="test"> </A>
       
   211 
       
   212 3) There must be at least a space between <A> </A> for IE5.5 to see the 
       
   213    anchor tag correctly. Do not do <A></A> with no space.
       
   214 
       
   215 4) When a PopupWindow object is created, a handler for 'onmouseup' is
       
   216    attached to any event handler you may have already defined. Do NOT define
       
   217    an event handler for 'onmouseup' after you define a PopupWindow object or
       
   218    the autoHide() will not work correctly.
       
   219 */ 
       
   220 
       
   221 // Set the position of the popup window based on the anchor
       
   222 function PopupWindow_getXYPosition(anchorname) {
       
   223 	var coordinates;
       
   224 	if (this.type == "WINDOW") {
       
   225 		coordinates = getAnchorWindowPosition(anchorname);
       
   226 		}
       
   227 	else {
       
   228 		coordinates = getAnchorPosition(anchorname);
       
   229 		}
       
   230 	this.x = coordinates.x;
       
   231 	this.y = coordinates.y;
       
   232 	}
       
   233 // Set width/height of DIV/popup window
       
   234 function PopupWindow_setSize(width,height) {
       
   235 	this.width = width;
       
   236 	this.height = height;
       
   237 	}
       
   238 // Fill the window with contents
       
   239 function PopupWindow_populate(contents) {
       
   240 	this.contents = contents;
       
   241 	this.populated = false;
       
   242 	}
       
   243 // Set the URL to go to
       
   244 function PopupWindow_setUrl(url) {
       
   245 	this.url = url;
       
   246 	}
       
   247 // Set the window popup properties
       
   248 function PopupWindow_setWindowProperties(props) {
       
   249 	this.windowProperties = props;
       
   250 	}
       
   251 // Refresh the displayed contents of the popup
       
   252 function PopupWindow_refresh() {
       
   253 	if (this.divName != null) {
       
   254 		// refresh the DIV object
       
   255 		if (this.use_gebi) {
       
   256 			document.getElementById(this.divName).innerHTML = this.contents;
       
   257 			}
       
   258 		else if (this.use_css) { 
       
   259 			document.all[this.divName].innerHTML = this.contents;
       
   260 			}
       
   261 		else if (this.use_layers) { 
       
   262 			var d = document.layers[this.divName]; 
       
   263 			d.document.open();
       
   264 			d.document.writeln(this.contents);
       
   265 			d.document.close();
       
   266 			}
       
   267 		}
       
   268 	else {
       
   269 		if (this.popupWindow != null && !this.popupWindow.closed) {
       
   270 			if (this.url!="") {
       
   271 				this.popupWindow.location.href=this.url;
       
   272 				}
       
   273 			else {
       
   274 				this.popupWindow.document.open();
       
   275 				this.popupWindow.document.writeln(this.contents);
       
   276 				this.popupWindow.document.close();
       
   277 			}
       
   278 			this.popupWindow.focus();
       
   279 			}
       
   280 		}
       
   281 	}
       
   282 // Position and show the popup, relative to an anchor object
       
   283 function PopupWindow_showPopup(anchorname) {
       
   284 	this.getXYPosition(anchorname);
       
   285 	this.x += this.offsetX;
       
   286 	this.y += this.offsetY;
       
   287 	if (!this.populated && (this.contents != "")) {
       
   288 		this.populated = true;
       
   289 		this.refresh();
       
   290 		}
       
   291 	if (this.divName != null) {
       
   292 		// Show the DIV object
       
   293 		if (this.use_gebi) {
       
   294 			document.getElementById(this.divName).style.left = this.x + "px";
       
   295 			document.getElementById(this.divName).style.top = this.y;
       
   296 			document.getElementById(this.divName).style.visibility = "visible";
       
   297 			}
       
   298 		else if (this.use_css) {
       
   299 			document.all[this.divName].style.left = this.x;
       
   300 			document.all[this.divName].style.top = this.y;
       
   301 			document.all[this.divName].style.visibility = "visible";
       
   302 			}
       
   303 		else if (this.use_layers) {
       
   304 			document.layers[this.divName].left = this.x;
       
   305 			document.layers[this.divName].top = this.y;
       
   306 			document.layers[this.divName].visibility = "visible";
       
   307 			}
       
   308 		}
       
   309 	else {
       
   310 		if (this.popupWindow == null || this.popupWindow.closed) {
       
   311 			// If the popup window will go off-screen, move it so it doesn't
       
   312 			if (this.x<0) { this.x=0; }
       
   313 			if (this.y<0) { this.y=0; }
       
   314 			if (screen && screen.availHeight) {
       
   315 				if ((this.y + this.height) > screen.availHeight) {
       
   316 					this.y = screen.availHeight - this.height;
       
   317 					}
       
   318 				}
       
   319 			if (screen && screen.availWidth) {
       
   320 				if ((this.x + this.width) > screen.availWidth) {
       
   321 					this.x = screen.availWidth - this.width;
       
   322 					}
       
   323 				}
       
   324 			var avoidAboutBlank = window.opera || ( document.layers && !navigator.mimeTypes['*'] ) || navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled );
       
   325 			this.popupWindow = window.open(avoidAboutBlank?"":"about:blank","window_"+anchorname,this.windowProperties+",width="+this.width+",height="+this.height+",screenX="+this.x+",left="+this.x+",screenY="+this.y+",top="+this.y+"");
       
   326 			}
       
   327 		this.refresh();
       
   328 		}
       
   329 	}
       
   330 // Hide the popup
       
   331 function PopupWindow_hidePopup() {
       
   332 	if (this.divName != null) {
       
   333 		if (this.use_gebi) {
       
   334 			document.getElementById(this.divName).style.visibility = "hidden";
       
   335 			}
       
   336 		else if (this.use_css) {
       
   337 			document.all[this.divName].style.visibility = "hidden";
       
   338 			}
       
   339 		else if (this.use_layers) {
       
   340 			document.layers[this.divName].visibility = "hidden";
       
   341 			}
       
   342 		}
       
   343 	else {
       
   344 		if (this.popupWindow && !this.popupWindow.closed) {
       
   345 			this.popupWindow.close();
       
   346 			this.popupWindow = null;
       
   347 			}
       
   348 		}
       
   349 	}
       
   350 // Pass an event and return whether or not it was the popup DIV that was clicked
       
   351 function PopupWindow_isClicked(e) {
       
   352 	if (this.divName != null) {
       
   353 		if (this.use_layers) {
       
   354 			var clickX = e.pageX;
       
   355 			var clickY = e.pageY;
       
   356 			var t = document.layers[this.divName];
       
   357 			if ((clickX > t.left) && (clickX < t.left+t.clip.width) && (clickY > t.top) && (clickY < t.top+t.clip.height)) {
       
   358 				return true;
       
   359 				}
       
   360 			else { return false; }
       
   361 			}
       
   362 		else if (document.all) { // Need to hard-code this to trap IE for error-handling
       
   363 			var t = window.event.srcElement;
       
   364 			while (t.parentElement != null) {
       
   365 				if (t.id==this.divName) {
       
   366 					return true;
       
   367 					}
       
   368 				t = t.parentElement;
       
   369 				}
       
   370 			return false;
       
   371 			}
       
   372 		else if (this.use_gebi && e) {
       
   373 			var t = e.originalTarget;
       
   374 			while (t.parentNode != null) {
       
   375 				if (t.id==this.divName) {
       
   376 					return true;
       
   377 					}
       
   378 				t = t.parentNode;
       
   379 				}
       
   380 			return false;
       
   381 			}
       
   382 		return false;
       
   383 		}
       
   384 	return false;
       
   385 	}
       
   386 
       
   387 // Check an onMouseDown event to see if we should hide
       
   388 function PopupWindow_hideIfNotClicked(e) {
       
   389 	if (this.autoHideEnabled && !this.isClicked(e)) {
       
   390 		this.hidePopup();
       
   391 		}
       
   392 	}
       
   393 // Call this to make the DIV disable automatically when mouse is clicked outside it
       
   394 function PopupWindow_autoHide() {
       
   395 	this.autoHideEnabled = true;
       
   396 	}
       
   397 // This global function checks all PopupWindow objects onmouseup to see if they should be hidden
       
   398 function PopupWindow_hidePopupWindows(e) {
       
   399 	for (var i=0; i<popupWindowObjects.length; i++) {
       
   400 		if (popupWindowObjects[i] != null) {
       
   401 			var p = popupWindowObjects[i];
       
   402 			p.hideIfNotClicked(e);
       
   403 			}
       
   404 		}
       
   405 	}
       
   406 // Run this immediately to attach the event listener
       
   407 function PopupWindow_attachListener() {
       
   408 	if (document.layers) {
       
   409 		document.captureEvents(Event.MOUSEUP);
       
   410 		}
       
   411 	window.popupWindowOldEventListener = document.onmouseup;
       
   412 	if (window.popupWindowOldEventListener != null) {
       
   413 		document.onmouseup = new Function("window.popupWindowOldEventListener(); PopupWindow_hidePopupWindows();");
       
   414 		}
       
   415 	else {
       
   416 		document.onmouseup = PopupWindow_hidePopupWindows;
       
   417 		}
       
   418 	}
       
   419 // CONSTRUCTOR for the PopupWindow object
       
   420 // Pass it a DIV name to use a DHTML popup, otherwise will default to window popup
       
   421 function PopupWindow() {
       
   422 	if (!window.popupWindowIndex) { window.popupWindowIndex = 0; }
       
   423 	if (!window.popupWindowObjects) { window.popupWindowObjects = new Array(); }
       
   424 	if (!window.listenerAttached) {
       
   425 		window.listenerAttached = true;
       
   426 		PopupWindow_attachListener();
       
   427 		}
       
   428 	this.index = popupWindowIndex++;
       
   429 	popupWindowObjects[this.index] = this;
       
   430 	this.divName = null;
       
   431 	this.popupWindow = null;
       
   432 	this.width=0;
       
   433 	this.height=0;
       
   434 	this.populated = false;
       
   435 	this.visible = false;
       
   436 	this.autoHideEnabled = false;
       
   437 
       
   438 	this.contents = "";
       
   439 	this.url="";
       
   440 	this.windowProperties="toolbar=no,location=no,status=no,menubar=no,scrollbars=auto,resizable,alwaysRaised,dependent,titlebar=no";
       
   441 	if (arguments.length>0) {
       
   442 		this.type="DIV";
       
   443 		this.divName = arguments[0];
       
   444 		}
       
   445 	else {
       
   446 		this.type="WINDOW";
       
   447 		}
       
   448 	this.use_gebi = false;
       
   449 	this.use_css = false;
       
   450 	this.use_layers = false;
       
   451 	if (document.getElementById) { this.use_gebi = true; }
       
   452 	else if (document.all) { this.use_css = true; }
       
   453 	else if (document.layers) { this.use_layers = true; }
       
   454 	else { this.type = "WINDOW"; }
       
   455 	this.offsetX = 0;
       
   456 	this.offsetY = 0;
       
   457 	// Method mappings
       
   458 	this.getXYPosition = PopupWindow_getXYPosition;
       
   459 	this.populate = PopupWindow_populate;
       
   460 	this.setUrl = PopupWindow_setUrl;
       
   461 	this.setWindowProperties = PopupWindow_setWindowProperties;
       
   462 	this.refresh = PopupWindow_refresh;
       
   463 	this.showPopup = PopupWindow_showPopup;
       
   464 	this.hidePopup = PopupWindow_hidePopup;
       
   465 	this.setSize = PopupWindow_setSize;
       
   466 	this.isClicked = PopupWindow_isClicked;
       
   467 	this.autoHide = PopupWindow_autoHide;
       
   468 	this.hideIfNotClicked = PopupWindow_hideIfNotClicked;
       
   469 	}
       
   470 
       
   471 /* SOURCE FILE: ColorPicker2.js */
       
   472 
       
   473 /* 
       
   474 Last modified: 02/24/2003
       
   475 
       
   476 DESCRIPTION: This widget is used to select a color, in hexadecimal #RRGGBB 
       
   477 form. It uses a color "swatch" to display the standard 216-color web-safe 
       
   478 palette. The user can then click on a color to select it.
       
   479 
       
   480 COMPATABILITY: See notes in AnchorPosition.js and PopupWindow.js.
       
   481 Only the latest DHTML-capable browsers will show the color and hex values
       
   482 at the bottom as your mouse goes over them.
       
   483 
       
   484 USAGE:
       
   485 // Create a new ColorPicker object using DHTML popup
       
   486 var cp = new ColorPicker();
       
   487 
       
   488 // Create a new ColorPicker object using Window Popup
       
   489 var cp = new ColorPicker('window');
       
   490 
       
   491 // Add a link in your page to trigger the popup. For example:
       
   492 <A HREF="#" onClick="cp.show('pick');return false;" NAME="pick" ID="pick">Pick</A>
       
   493 
       
   494 // Or use the built-in "select" function to do the dirty work for you:
       
   495 <A HREF="#" onClick="cp.select(document.forms[0].color,'pick');return false;" NAME="pick" ID="pick">Pick</A>
       
   496 
       
   497 // If using DHTML popup, write out the required DIV tag near the bottom
       
   498 // of your page.
       
   499 <SCRIPT LANGUAGE="JavaScript">cp.writeDiv()</SCRIPT>
       
   500 
       
   501 // Write the 'pickColor' function that will be called when the user clicks
       
   502 // a color and do something with the value. This is only required if you
       
   503 // want to do something other than simply populate a form field, which is 
       
   504 // what the 'select' function will give you.
       
   505 function pickColor(color) {
       
   506 	field.value = color;
       
   507 	}
       
   508 
       
   509 NOTES:
       
   510 1) Requires the functions in AnchorPosition.js and PopupWindow.js
       
   511 
       
   512 2) Your anchor tag MUST contain both NAME and ID attributes which are the 
       
   513    same. For example:
       
   514    <A NAME="test" ID="test"> </A>
       
   515 
       
   516 3) There must be at least a space between <A> </A> for IE5.5 to see the 
       
   517    anchor tag correctly. Do not do <A></A> with no space.
       
   518 
       
   519 4) When a ColorPicker object is created, a handler for 'onmouseup' is
       
   520    attached to any event handler you may have already defined. Do NOT define
       
   521    an event handler for 'onmouseup' after you define a ColorPicker object or
       
   522    the color picker will not hide itself correctly.
       
   523 */ 
       
   524 ColorPicker_targetInput = null;
       
   525 function ColorPicker_writeDiv() {
       
   526 	document.writeln("<DIV ID=\"colorPickerDiv\" STYLE=\"position:absolute;visibility:hidden;\"> </DIV>");
       
   527 	}
       
   528 
       
   529 function ColorPicker_show(anchorname) {
       
   530 	this.showPopup(anchorname);
       
   531 	}
       
   532 
       
   533 function ColorPicker_pickColor(color,obj) {
       
   534 	obj.hidePopup();
       
   535 	pickColor(color);
       
   536 	}
       
   537 
       
   538 // A Default "pickColor" function to accept the color passed back from popup.
       
   539 // User can over-ride this with their own function.
       
   540 function pickColor(color) {
       
   541 	if (ColorPicker_targetInput==null) {
       
   542 		alert("Target Input is null, which means you either didn't use the 'select' function or you have no defined your own 'pickColor' function to handle the picked color!");
       
   543 		return;
       
   544 		}
       
   545 	ColorPicker_targetInput.value = color;
       
   546 	}
       
   547 
       
   548 // This function is the easiest way to popup the window, select a color, and
       
   549 // have the value populate a form field, which is what most people want to do.
       
   550 function ColorPicker_select(inputobj,linkname) {
       
   551 	if (inputobj.type!="text" && inputobj.type!="hidden" && inputobj.type!="textarea") { 
       
   552 		alert("colorpicker.select: Input object passed is not a valid form input object"); 
       
   553 		window.ColorPicker_targetInput=null;
       
   554 		return;
       
   555 		}
       
   556 	window.ColorPicker_targetInput = inputobj;
       
   557 	this.show(linkname);
       
   558 	}
       
   559 
       
   560 // This function runs when you move your mouse over a color block, if you have a newer browser
       
   561 function ColorPicker_highlightColor(c) {
       
   562 	var thedoc = (arguments.length>1)?arguments[1]:window.document;
       
   563 	var d = thedoc.getElementById("colorPickerSelectedColor");
       
   564 	d.style.backgroundColor = c;
       
   565 	d = thedoc.getElementById("colorPickerSelectedColorValue");
       
   566 	d.innerHTML = c;
       
   567 	}
       
   568 
       
   569 function ColorPicker() {
       
   570 	var windowMode = false;
       
   571 	// Create a new PopupWindow object
       
   572 	if (arguments.length==0) {
       
   573 		var divname = "colorPickerDiv";
       
   574 		}
       
   575 	else if (arguments[0] == "window") {
       
   576 		var divname = '';
       
   577 		windowMode = true;
       
   578 		}
       
   579 	else {
       
   580 		var divname = arguments[0];
       
   581 		}
       
   582 
       
   583 	if (divname != "") {
       
   584 		var cp = new PopupWindow(divname);
       
   585 		}
       
   586 	else {
       
   587 		var cp = new PopupWindow();
       
   588 		cp.setSize(225,250);
       
   589 		}
       
   590 
       
   591 	// Object variables
       
   592 	cp.currentValue = "#FFFFFF";
       
   593 
       
   594 	// Method Mappings
       
   595 	cp.writeDiv = ColorPicker_writeDiv;
       
   596 	cp.highlightColor = ColorPicker_highlightColor;
       
   597 	cp.show = ColorPicker_show;
       
   598 	cp.select = ColorPicker_select;
       
   599 
       
   600 	// Code to populate color picker window
       
   601 	var colors = new Array(	"#4180B6","#69AEE7","#000000","#000033","#000066","#000099","#0000CC","#0000FF","#330000","#330033","#330066","#330099",
       
   602 							"#3300CC","#3300FF","#660000","#660033","#660066","#660099","#6600CC","#6600FF","#990000","#990033","#990066","#990099",
       
   603 							"#9900CC","#9900FF","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#FF0000","#FF0033","#FF0066","#FF0099",
       
   604 							"#FF00CC","#FF00FF","#7FFFFF","#7FFFFF","#7FF7F7","#7FEFEF","#7FE7E7","#7FDFDF","#7FD7D7","#7FCFCF","#7FC7C7","#7FBFBF",
       
   605 							"#7FB7B7","#7FAFAF","#7FA7A7","#7F9F9F","#7F9797","#7F8F8F","#7F8787","#7F7F7F","#7F7777","#7F6F6F","#7F6767","#7F5F5F",
       
   606 							"#7F5757","#7F4F4F","#7F4747","#7F3F3F","#7F3737","#7F2F2F","#7F2727","#7F1F1F","#7F1717","#7F0F0F","#7F0707","#7F0000",
       
   607 
       
   608 							"#4180B6","#69AEE7","#003300","#003333","#003366","#003399","#0033CC","#0033FF","#333300","#333333","#333366","#333399",
       
   609 							"#3333CC","#3333FF","#663300","#663333","#663366","#663399","#6633CC","#6633FF","#993300","#993333","#993366","#993399",
       
   610 							"#9933CC","#9933FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#FF3300","#FF3333","#FF3366","#FF3399",
       
   611 							"#FF33CC","#FF33FF","#FF7FFF","#FF7FFF","#F77FF7","#EF7FEF","#E77FE7","#DF7FDF","#D77FD7","#CF7FCF","#C77FC7","#BF7FBF",
       
   612 							"#B77FB7","#AF7FAF","#A77FA7","#9F7F9F","#977F97","#8F7F8F","#877F87","#7F7F7F","#777F77","#6F7F6F","#677F67","#5F7F5F",
       
   613 							"#577F57","#4F7F4F","#477F47","#3F7F3F","#377F37","#2F7F2F","#277F27","#1F7F1F","#177F17","#0F7F0F","#077F07","#007F00",
       
   614 
       
   615 							"#4180B6","#69AEE7","#006600","#006633","#006666","#006699","#0066CC","#0066FF","#336600","#336633","#336666","#336699",
       
   616 							"#3366CC","#3366FF","#666600","#666633","#666666","#666699","#6666CC","#6666FF","#996600","#996633","#996666","#996699",
       
   617 							"#9966CC","#9966FF","#CC6600","#CC6633","#CC6666","#CC6699","#CC66CC","#CC66FF","#FF6600","#FF6633","#FF6666","#FF6699",
       
   618 							"#FF66CC","#FF66FF","#FFFF7F","#FFFF7F","#F7F77F","#EFEF7F","#E7E77F","#DFDF7F","#D7D77F","#CFCF7F","#C7C77F","#BFBF7F",
       
   619 							"#B7B77F","#AFAF7F","#A7A77F","#9F9F7F","#97977F","#8F8F7F","#87877F","#7F7F7F","#77777F","#6F6F7F","#67677F","#5F5F7F",
       
   620 							"#57577F","#4F4F7F","#47477F","#3F3F7F","#37377F","#2F2F7F","#27277F","#1F1F7F","#17177F","#0F0F7F","#07077F","#00007F",
       
   621 
       
   622 							"#4180B6","#69AEE7","#009900","#009933","#009966","#009999","#0099CC","#0099FF","#339900","#339933","#339966","#339999",
       
   623 							"#3399CC","#3399FF","#669900","#669933","#669966","#669999","#6699CC","#6699FF","#999900","#999933","#999966","#999999",
       
   624 							"#9999CC","#9999FF","#CC9900","#CC9933","#CC9966","#CC9999","#CC99CC","#CC99FF","#FF9900","#FF9933","#FF9966","#FF9999",
       
   625 							"#FF99CC","#FF99FF","#3FFFFF","#3FFFFF","#3FF7F7","#3FEFEF","#3FE7E7","#3FDFDF","#3FD7D7","#3FCFCF","#3FC7C7","#3FBFBF",
       
   626 							"#3FB7B7","#3FAFAF","#3FA7A7","#3F9F9F","#3F9797","#3F8F8F","#3F8787","#3F7F7F","#3F7777","#3F6F6F","#3F6767","#3F5F5F",
       
   627 							"#3F5757","#3F4F4F","#3F4747","#3F3F3F","#3F3737","#3F2F2F","#3F2727","#3F1F1F","#3F1717","#3F0F0F","#3F0707","#3F0000",
       
   628 
       
   629 							"#4180B6","#69AEE7","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#33CC00","#33CC33","#33CC66","#33CC99",
       
   630 							"#33CCCC","#33CCFF","#66CC00","#66CC33","#66CC66","#66CC99","#66CCCC","#66CCFF","#99CC00","#99CC33","#99CC66","#99CC99",
       
   631 							"#99CCCC","#99CCFF","#CCCC00","#CCCC33","#CCCC66","#CCCC99","#CCCCCC","#CCCCFF","#FFCC00","#FFCC33","#FFCC66","#FFCC99",
       
   632 							"#FFCCCC","#FFCCFF","#FF3FFF","#FF3FFF","#F73FF7","#EF3FEF","#E73FE7","#DF3FDF","#D73FD7","#CF3FCF","#C73FC7","#BF3FBF",
       
   633 							"#B73FB7","#AF3FAF","#A73FA7","#9F3F9F","#973F97","#8F3F8F","#873F87","#7F3F7F","#773F77","#6F3F6F","#673F67","#5F3F5F",
       
   634 							"#573F57","#4F3F4F","#473F47","#3F3F3F","#373F37","#2F3F2F","#273F27","#1F3F1F","#173F17","#0F3F0F","#073F07","#003F00",
       
   635 
       
   636 							"#4180B6","#69AEE7","#00FF00","#00FF33","#00FF66","#00FF99","#00FFCC","#00FFFF","#33FF00","#33FF33","#33FF66","#33FF99",
       
   637 							"#33FFCC","#33FFFF","#66FF00","#66FF33","#66FF66","#66FF99","#66FFCC","#66FFFF","#99FF00","#99FF33","#99FF66","#99FF99",
       
   638 							"#99FFCC","#99FFFF","#CCFF00","#CCFF33","#CCFF66","#CCFF99","#CCFFCC","#CCFFFF","#FFFF00","#FFFF33","#FFFF66","#FFFF99",
       
   639 							"#FFFFCC","#FFFFFF","#FFFF3F","#FFFF3F","#F7F73F","#EFEF3F","#E7E73F","#DFDF3F","#D7D73F","#CFCF3F","#C7C73F","#BFBF3F",
       
   640 							"#B7B73F","#AFAF3F","#A7A73F","#9F9F3F","#97973F","#8F8F3F","#87873F","#7F7F3F","#77773F","#6F6F3F","#67673F","#5F5F3F",
       
   641 							"#57573F","#4F4F3F","#47473F","#3F3F3F","#37373F","#2F2F3F","#27273F","#1F1F3F","#17173F","#0F0F3F","#07073F","#00003F",
       
   642 
       
   643 							"#4180B6","#69AEE7","#FFFFFF","#FFEEEE","#FFDDDD","#FFCCCC","#FFBBBB","#FFAAAA","#FF9999","#FF8888","#FF7777","#FF6666",
       
   644 							"#FF5555","#FF4444","#FF3333","#FF2222","#FF1111","#FF0000","#FF0000","#FF0000","#FF0000","#EE0000","#DD0000","#CC0000",
       
   645 							"#BB0000","#AA0000","#990000","#880000","#770000","#660000","#550000","#440000","#330000","#220000","#110000","#000000",
       
   646 							"#000000","#000000","#000000","#001111","#002222","#003333","#004444","#005555","#006666","#007777","#008888","#009999",
       
   647 							"#00AAAA","#00BBBB","#00CCCC","#00DDDD","#00EEEE","#00FFFF","#00FFFF","#00FFFF","#00FFFF","#11FFFF","#22FFFF","#33FFFF",
       
   648 							"#44FFFF","#55FFFF","#66FFFF","#77FFFF","#88FFFF","#99FFFF","#AAFFFF","#BBFFFF","#CCFFFF","#DDFFFF","#EEFFFF","#FFFFFF",
       
   649 
       
   650 							"#4180B6","#69AEE7","#FFFFFF","#EEFFEE","#DDFFDD","#CCFFCC","#BBFFBB","#AAFFAA","#99FF99","#88FF88","#77FF77","#66FF66",
       
   651 							"#55FF55","#44FF44","#33FF33","#22FF22","#11FF11","#00FF00","#00FF00","#00FF00","#00FF00","#00EE00","#00DD00","#00CC00",
       
   652 							"#00BB00","#00AA00","#009900","#008800","#007700","#006600","#005500","#004400","#003300","#002200","#001100","#000000",
       
   653 							"#000000","#000000","#000000","#110011","#220022","#330033","#440044","#550055","#660066","#770077","#880088","#990099",
       
   654 							"#AA00AA","#BB00BB","#CC00CC","#DD00DD","#EE00EE","#FF00FF","#FF00FF","#FF00FF","#FF00FF","#FF11FF","#FF22FF","#FF33FF",
       
   655 							"#FF44FF","#FF55FF","#FF66FF","#FF77FF","#FF88FF","#FF99FF","#FFAAFF","#FFBBFF","#FFCCFF","#FFDDFF","#FFEEFF","#FFFFFF",
       
   656 
       
   657 							"#4180B6","#69AEE7","#FFFFFF","#EEEEFF","#DDDDFF","#CCCCFF","#BBBBFF","#AAAAFF","#9999FF","#8888FF","#7777FF","#6666FF",
       
   658 							"#5555FF","#4444FF","#3333FF","#2222FF","#1111FF","#0000FF","#0000FF","#0000FF","#0000FF","#0000EE","#0000DD","#0000CC",
       
   659 							"#0000BB","#0000AA","#000099","#000088","#000077","#000066","#000055","#000044","#000033","#000022","#000011","#000000",
       
   660 							"#000000","#000000","#000000","#111100","#222200","#333300","#444400","#555500","#666600","#777700","#888800","#999900",
       
   661 							"#AAAA00","#BBBB00","#CCCC00","#DDDD00","#EEEE00","#FFFF00","#FFFF00","#FFFF00","#FFFF00","#FFFF11","#FFFF22","#FFFF33",
       
   662 							"#FFFF44","#FFFF55","#FFFF66","#FFFF77","#FFFF88","#FFFF99","#FFFFAA","#FFFFBB","#FFFFCC","#FFFFDD","#FFFFEE","#FFFFFF",
       
   663 
       
   664 							"#4180B6","#69AEE7","#FFFFFF","#FFFFFF","#FBFBFB","#F7F7F7","#F3F3F3","#EFEFEF","#EBEBEB","#E7E7E7","#E3E3E3","#DFDFDF",
       
   665 							"#DBDBDB","#D7D7D7","#D3D3D3","#CFCFCF","#CBCBCB","#C7C7C7","#C3C3C3","#BFBFBF","#BBBBBB","#B7B7B7","#B3B3B3","#AFAFAF",
       
   666 							"#ABABAB","#A7A7A7","#A3A3A3","#9F9F9F","#9B9B9B","#979797","#939393","#8F8F8F","#8B8B8B","#878787","#838383","#7F7F7F",
       
   667 							"#7B7B7B","#777777","#737373","#6F6F6F","#6B6B6B","#676767","#636363","#5F5F5F","#5B5B5B","#575757","#535353","#4F4F4F",
       
   668 							"#4B4B4B","#474747","#434343","#3F3F3F","#3B3B3B","#373737","#333333","#2F2F2F","#2B2B2B","#272727","#232323","#1F1F1F",
       
   669 							"#1B1B1B","#171717","#131313","#0F0F0F","#0B0B0B","#070707","#030303","#000000","#000000","#000000","#000000","#000000");
       
   670 	var total = colors.length;
       
   671 	var width = 72;
       
   672 	var cp_contents = "";
       
   673 	var windowRef = (windowMode)?"window.opener.":"";
       
   674 	if (windowMode) {
       
   675 		cp_contents += "<html><head><title>Select Color</title></head>";
       
   676 		cp_contents += "<body marginwidth=0 marginheight=0 leftmargin=0 topmargin=0><span style='text-align: center;'>";
       
   677 		}
       
   678 	cp_contents += "<table style='border: none;' cellspacing=0 cellpadding=0>";
       
   679 	var use_highlight = (document.getElementById || document.all)?true:false;
       
   680 	for (var i=0; i<total; i++) {
       
   681 		if ((i % width) == 0) { cp_contents += "<tr>"; }
       
   682 		if (use_highlight) { var mo = 'onMouseOver="'+windowRef+'ColorPicker_highlightColor(\''+colors[i]+'\',window.document)"'; }
       
   683 		else { mo = ""; }
       
   684 		cp_contents += '<td style="background-color: '+colors[i]+';"><a href="javascript:void()" onclick="'+windowRef+'ColorPicker_pickColor(\''+colors[i]+'\','+windowRef+'window.popupWindowObjects['+cp.index+']);return false;" '+mo+'>&nbsp;</a></td>';
       
   685 		if ( ((i+1)>=total) || (((i+1) % width) == 0)) { 
       
   686 			cp_contents += "</tr>";
       
   687 			}
       
   688 		}
       
   689 	// If the browser supports dynamically changing TD cells, add the fancy stuff
       
   690 	if (document.getElementById) {
       
   691 		var width1 = Math.floor(width/2);
       
   692 		var width2 = width = width1;
       
   693 		cp_contents += "<tr><td colspan='"+width1+"' style='background-color: #FFF;' ID='colorPickerSelectedColor'>&nbsp;</td><td colspan='"+width2+"' style='text-align: center;' id='colorPickerSelectedColorValue'>#FFFFFF</td></tr>";
       
   694 		}
       
   695 	cp_contents += "</table>";
       
   696 	if (windowMode) {
       
   697 		cp_contents += "</span></body></html>";
       
   698 		}
       
   699 	// end populate code
       
   700 
       
   701 	// Write the contents to the popup object
       
   702 	cp.populate(cp_contents+"\n");
       
   703 	// Move the table down a bit so you can see it
       
   704 	cp.offsetY = 25;
       
   705 	cp.autoHide();
       
   706 	return cp;
       
   707 	}