/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.8.0r4
 */
if (!YAHOO.util.DragDropMgr) {
	YAHOO.util.DragDropMgr = function() {
		var A = YAHOO.util.Event, B = YAHOO.util.Dom;
		return {
			useShim : false,
			_shimActive : false,
			_shimState : false,
			_debugShim : false,
			_createShim : function() {
				var C = document.createElement("div");
				C.id = "yui-ddm-shim";
				if (document.body.firstChild) {
					document.body.insertBefore(C, document.body.firstChild);
				} else {
					document.body.appendChild(C);
				}
				C.style.display = "none";
				C.style.backgroundColor = "red";
				C.style.position = "absolute";
				C.style.zIndex = "99999";
				B.setStyle(C, "opacity", "0");
				this._shim = C;
				A.on(C, "mouseup", this.handleMouseUp, this, true);
				A.on(C, "mousemove", this.handleMouseMove, this, true);
				A.on(window, "scroll", this._sizeShim, this, true);
			},
			_sizeShim : function() {
				if (this._shimActive) {
					var C = this._shim;
					C.style.height = B.getDocumentHeight() + "px";
					C.style.width = B.getDocumentWidth() + "px";
					C.style.top = "0";
					C.style.left = "0";
				}
			},
			_activateShim : function() {
				if (this.useShim) {
					if (!this._shim) {
						this._createShim();
					}
					this._shimActive = true;
					var C = this._shim, D = "0";
					if (this._debugShim) {
						D = ".5";
					}
					B.setStyle(C, "opacity", D);
					this._sizeShim();
					C.style.display = "block";
				}
			},
			_deactivateShim : function() {
				this._shim.style.display = "none";
				this._shimActive = false;
			},
			_shim : null,
			ids : {},
			handleIds : {},
			dragCurrent : null,
			dragOvers : {},
			deltaX : 0,
			deltaY : 0,
			preventDefault : true,
			stopPropagation : true,
			initialized : false,
			locked : false,
			interactionInfo : null,
			init : function() {
				this.initialized = true;
			},
			POINT : 0,
			INTERSECT : 1,
			STRICT_INTERSECT : 2,
			mode : 0,
			_execOnAll : function(E, D) {
				for ( var F in this.ids) {
					for ( var C in this.ids[F]) {
						var G = this.ids[F][C];
						if (!this.isTypeOfDD(G)) {
							continue;
						}
						G[E].apply(G, D);
					}
				}
			},
			_onLoad : function() {
				this.init();
				A.on(document, "mouseup", this.handleMouseUp, this, true);
				A.on(document, "mousemove", this.handleMouseMove, this, true);
				A.on(window, "unload", this._onUnload, this, true);
				A.on(window, "resize", this._onResize, this, true);
			},
			_onResize : function(C) {
				this._execOnAll("resetConstraints", []);
			},
			lock : function() {
				this.locked = true;
			},
			unlock : function() {
				this.locked = false;
			},
			isLocked : function() {
				return this.locked;
			},
			locationCache : {},
			useCache : true,
			clickPixelThresh : 3,
			clickTimeThresh : 1000,
			dragThreshMet : false,
			clickTimeout : null,
			startX : 0,
			startY : 0,
			fromTimeout : false,
			regDragDrop : function(D, C) {
				if (!this.initialized) {
					this.init();
				}
				if (!this.ids[C]) {
					this.ids[C] = {};
				}
				this.ids[C][D.id] = D;
			},
			removeDDFromGroup : function(E, C) {
				if (!this.ids[C]) {
					this.ids[C] = {};
				}
				var D = this.ids[C];
				if (D && D[E.id]) {
					delete D[E.id];
				}
			},
			_remove : function(E) {
				for ( var D in E.groups) {
					if (D) {
						var C = this.ids[D];
						if (C && C[E.id]) {
							delete C[E.id];
						}
					}
				}
				delete this.handleIds[E.id];
			},
			regHandle : function(D, C) {
				if (!this.handleIds[D]) {
					this.handleIds[D] = {};
				}
				this.handleIds[D][C] = C;
			},
			isDragDrop : function(C) {
				return (this.getDDById(C)) ? true : false;
			},
			getRelated : function(H, D) {
				var G = [];
				for ( var F in H.groups) {
					for ( var E in this.ids[F]) {
						var C = this.ids[F][E];
						if (!this.isTypeOfDD(C)) {
							continue;
						}
						if (!D || C.isTarget) {
							G[G.length] = C;
						}
					}
				}
				return G;
			},
			isLegalTarget : function(G, F) {
				var D = this.getRelated(G, true);
				for ( var E = 0, C = D.length; E < C; ++E) {
					if (D[E].id == F.id) {
						return true;
					}
				}
				return false;
			},
			isTypeOfDD : function(C) {
				return (C && C.__ygDragDrop);
			},
			isHandle : function(D, C) {
				return (this.handleIds[D] && this.handleIds[D][C]);
			},
			getDDById : function(D) {
				for ( var C in this.ids) {
					if (this.ids[C][D]) {
						return this.ids[C][D];
					}
				}
				return null;
			},
			handleMouseDown : function(E, D) {
				this.currentTarget = YAHOO.util.Event.getTarget(E);
				this.dragCurrent = D;
				var C = D.getEl();
				this.startX = YAHOO.util.Event.getPageX(E);
				this.startY = YAHOO.util.Event.getPageY(E);
				this.deltaX = this.startX - C.offsetLeft;
				this.deltaY = this.startY - C.offsetTop;
				this.dragThreshMet = false;
				this.clickTimeout = setTimeout( function() {
					var F = YAHOO.util.DDM;
					F.startDrag(F.startX, F.startY);
					F.fromTimeout = true;
				}, this.clickTimeThresh);
			},
			startDrag : function(C, E) {
				if (this.dragCurrent && this.dragCurrent.useShim) {
					this._shimState = this.useShim;
					this.useShim = true;
				}
				this._activateShim();
				clearTimeout(this.clickTimeout);
				var D = this.dragCurrent;
				if (D && D.events.b4StartDrag) {
					D.b4StartDrag(C, E);
					D.fireEvent("b4StartDragEvent", {
						x : C,
						y : E
					});
				}
				if (D && D.events.startDrag) {
					D.startDrag(C, E);
					D.fireEvent("startDragEvent", {
						x : C,
						y : E
					});
				}
				this.dragThreshMet = true;
			},
			handleMouseUp : function(C) {
				if (this.dragCurrent) {
					clearTimeout(this.clickTimeout);
					if (this.dragThreshMet) {
						if (this.fromTimeout) {
							this.fromTimeout = false;
							this.handleMouseMove(C);
						}
						this.fromTimeout = false;
						this.fireEvents(C, true);
					} else {
					}
					this.stopDrag(C);
					this.stopEvent(C);
				}
			},
			stopEvent : function(C) {
				if (this.stopPropagation) {
					YAHOO.util.Event.stopPropagation(C);
				}
				if (this.preventDefault) {
					YAHOO.util.Event.preventDefault(C);
				}
			},
			stopDrag : function(E, D) {
				var C = this.dragCurrent;
				if (C && !D) {
					if (this.dragThreshMet) {
						if (C.events.b4EndDrag) {
							C.b4EndDrag(E);
							C.fireEvent("b4EndDragEvent", {
								e : E
							});
						}
						if (C.events.endDrag) {
							C.endDrag(E);
							C.fireEvent("endDragEvent", {
								e : E
							});
						}
					}
					if (C.events.mouseUp) {
						C.onMouseUp(E);
						C.fireEvent("mouseUpEvent", {
							e : E
						});
					}
				}
				if (this._shimActive) {
					this._deactivateShim();
					if (this.dragCurrent && this.dragCurrent.useShim) {
						this.useShim = this._shimState;
						this._shimState = false;
					}
				}
				this.dragCurrent = null;
				this.dragOvers = {};
			},
			handleMouseMove : function(F) {
				var C = this.dragCurrent;
				if (C) {
					if (YAHOO.util.Event.isIE && !F.button) {
						this.stopEvent(F);
						return this.handleMouseUp(F);
					} else {
						if (F.clientX < 0 || F.clientY < 0) {
						}
					}
					if (!this.dragThreshMet) {
						var E = Math.abs(this.startX
								- YAHOO.util.Event.getPageX(F));
						var D = Math.abs(this.startY
								- YAHOO.util.Event.getPageY(F));
						if (E > this.clickPixelThresh
								|| D > this.clickPixelThresh) {
							this.startDrag(this.startX, this.startY);
						}
					}
					if (this.dragThreshMet) {
						if (C && C.events.b4Drag) {
							C.b4Drag(F);
							C.fireEvent("b4DragEvent", {
								e : F
							});
						}
						if (C && C.events.drag) {
							C.onDrag(F);
							C.fireEvent("dragEvent", {
								e : F
							});
						}
						if (C) {
							this.fireEvents(F, false);
						}
					}
					this.stopEvent(F);
				}
			},
			fireEvents : function(V, L) {
				var a = this.dragCurrent;
				if (!a || a.isLocked() || a.dragOnly) {
					return;
				}
				var N = YAHOO.util.Event.getPageX(V), M = YAHOO.util.Event
						.getPageY(V), P = new YAHOO.util.Point(N, M), K = a
						.getTargetCoord(P.x, P.y), F = a.getDragEl(), E = [
						"out", "over", "drop", "enter" ], U = new YAHOO.util.Region(
						K.y, K.x + F.offsetWidth, K.y + F.offsetHeight, K.x), I = [], D = {}, Q = [], c = {
					outEvts : [],
					overEvts : [],
					dropEvts : [],
					enterEvts : []
				};
				for ( var S in this.dragOvers) {
					var d = this.dragOvers[S];
					if (!this.isTypeOfDD(d)) {
						continue;
					}
					if (!this.isOverTarget(P, d, this.mode, U)) {
						c.outEvts.push(d);
					}
					I[S] = true;
					delete this.dragOvers[S];
				}
				for ( var R in a.groups) {
					if ("string" != typeof R) {
						continue;
					}
					for (S in this.ids[R]) {
						var G = this.ids[R][S];
						if (!this.isTypeOfDD(G)) {
							continue;
						}
						if (G.isTarget && !G.isLocked() && G != a) {
							if (this.isOverTarget(P, G, this.mode, U)) {
								D[R] = true;
								if (L) {
									c.dropEvts.push(G);
								} else {
									if (!I[G.id]) {
										c.enterEvts.push(G);
									} else {
										c.overEvts.push(G);
									}
									this.dragOvers[G.id] = G;
								}
							}
						}
					}
				}
				this.interactionInfo = {
					out : c.outEvts,
					enter : c.enterEvts,
					over : c.overEvts,
					drop : c.dropEvts,
					point : P,
					draggedRegion : U,
					sourceRegion : this.locationCache[a.id],
					validDrop : L
				};
				for ( var C in D) {
					Q.push(C);
				}
				if (L && !c.dropEvts.length) {
					this.interactionInfo.validDrop = false;
					if (a.events.invalidDrop) {
						a.onInvalidDrop(V);
						a.fireEvent("invalidDropEvent", {
							e : V
						});
					}
				}
				for (S = 0; S < E.length; S++) {
					var Y = null;
					if (c[E[S] + "Evts"]) {
						Y = c[E[S] + "Evts"];
					}
					if (Y && Y.length) {
						var H = E[S].charAt(0).toUpperCase() + E[S].substr(1), X = "onDrag"
								+ H, J = "b4Drag" + H, O = "drag" + H + "Event", W = "drag"
								+ H;
						if (this.mode) {
							if (a.events[J]) {
								a[J](V, Y, Q);
								a.fireEvent(J + "Event", {
									event : V,
									info : Y,
									group : Q
								});
							}
							if (a.events[W]) {
								a[X](V, Y, Q);
								a.fireEvent(O, {
									event : V,
									info : Y,
									group : Q
								});
							}
						} else {
							for ( var Z = 0, T = Y.length; Z < T; ++Z) {
								if (a.events[J]) {
									a[J](V, Y[Z].id, Q[0]);
									a.fireEvent(J + "Event", {
										event : V,
										info : Y[Z].id,
										group : Q[0]
									});
								}
								if (a.events[W]) {
									a[X](V, Y[Z].id, Q[0]);
									a.fireEvent(O, {
										event : V,
										info : Y[Z].id,
										group : Q[0]
									});
								}
							}
						}
					}
				}
			},
			getBestMatch : function(E) {
				var G = null;
				var D = E.length;
				if (D == 1) {
					G = E[0];
				} else {
					for ( var F = 0; F < D; ++F) {
						var C = E[F];
						if (this.mode == this.INTERSECT && C.cursorIsOver) {
							G = C;
							break;
						} else {
							if (!G
									|| !G.overlap
									|| (C.overlap && G.overlap.getArea() < C.overlap
											.getArea())) {
								G = C;
							}
						}
					}
				}
				return G;
			},
			refreshCache : function(D) {
				var F = D || this.ids;
				for ( var C in F) {
					if ("string" != typeof C) {
						continue;
					}
					for ( var E in this.ids[C]) {
						var G = this.ids[C][E];
						if (this.isTypeOfDD(G)) {
							var H = this.getLocation(G);
							if (H) {
								this.locationCache[G.id] = H;
							} else {
								delete this.locationCache[G.id];
							}
						}
					}
				}
			},
			verifyEl : function(D) {
				try {
					if (D) {
						var C = D.offsetParent;
						if (C) {
							return true;
						}
					}
				} catch (E) {
				}
				return false;
			},
			getLocation : function(H) {
				if (!this.isTypeOfDD(H)) {
					return null;
				}
				var F = H.getEl(), K, E, D, M, L, N, C, J, G;
				try {
					K = YAHOO.util.Dom.getXY(F);
				} catch (I) {
				}
				if (!K) {
					return null;
				}
				E = K[0];
				D = E + F.offsetWidth;
				M = K[1];
				L = M + F.offsetHeight;
				N = M - H.padding[0];
				C = D + H.padding[1];
				J = L + H.padding[2];
				G = E - H.padding[3];
				return new YAHOO.util.Region(N, C, J, G);
			},
			isOverTarget : function(K, C, E, F) {
				var G = this.locationCache[C.id];
				if (!G || !this.useCache) {
					G = this.getLocation(C);
					this.locationCache[C.id] = G;
				}
				if (!G) {
					return false;
				}
				C.cursorIsOver = G.contains(K);
				var J = this.dragCurrent;
				if (!J || (!E && !J.constrainX && !J.constrainY)) {
					return C.cursorIsOver;
				}
				C.overlap = null;
				if (!F) {
					var H = J.getTargetCoord(K.x, K.y);
					var D = J.getDragEl();
					F = new YAHOO.util.Region(H.y, H.x + D.offsetWidth, H.y
							+ D.offsetHeight, H.x);
				}
				var I = F.intersect(G);
				if (I) {
					C.overlap = I;
					return (E) ? true : C.cursorIsOver;
				} else {
					return false;
				}
			},
			_onUnload : function(D, C) {
				this.unregAll();
			},
			unregAll : function() {
				if (this.dragCurrent) {
					this.stopDrag();
					this.dragCurrent = null;
				}
				this._execOnAll("unreg", []);
				this.ids = {};
			},
			elementCache : {},
			getElWrapper : function(D) {
				var C = this.elementCache[D];
				if (!C || !C.el) {
					C = this.elementCache[D] = new this.ElementWrapper(
							YAHOO.util.Dom.get(D));
				}
				return C;
			},
			getElement : function(C) {
				return YAHOO.util.Dom.get(C);
			},
			getCss : function(D) {
				var C = YAHOO.util.Dom.get(D);
				return (C) ? C.style : null;
			},
			ElementWrapper : function(C) {
				this.el = C || null;
				this.id = this.el && C.id;
				this.css = this.el && C.style;
			},
			getPosX : function(C) {
				return YAHOO.util.Dom.getX(C);
			},
			getPosY : function(C) {
				return YAHOO.util.Dom.getY(C);
			},
			swapNode : function(E, C) {
				if (E.swapNode) {
					E.swapNode(C);
				} else {
					var F = C.parentNode;
					var D = C.nextSibling;
					if (D == E) {
						F.insertBefore(E, C);
					} else {
						if (C == E.nextSibling) {
							F.insertBefore(C, E);
						} else {
							E.parentNode.replaceChild(C, E);
							F.insertBefore(E, D);
						}
					}
				}
			},
			getScroll : function() {
				var E, C, F = document.documentElement, D = document.body;
				if (F && (F.scrollTop || F.scrollLeft)) {
					E = F.scrollTop;
					C = F.scrollLeft;
				} else {
					if (D) {
						E = D.scrollTop;
						C = D.scrollLeft;
					} else {
					}
				}
				return {
					top : E,
					left : C
				};
			},
			getStyle : function(D, C) {
				return YAHOO.util.Dom.getStyle(D, C);
			},
			getScrollTop : function() {
				return this.getScroll().top;
			},
			getScrollLeft : function() {
				return this.getScroll().left;
			},
			moveToEl : function(C, E) {
				var D = YAHOO.util.Dom.getXY(E);
				YAHOO.util.Dom.setXY(C, D);
			},
			getClientHeight : function() {
				return YAHOO.util.Dom.getViewportHeight();
			},
			getClientWidth : function() {
				return YAHOO.util.Dom.getViewportWidth();
			},
			numericSort : function(D, C) {
				return (D - C);
			},
			_timeoutCount : 0,
			_addListeners : function() {
				var C = YAHOO.util.DDM;
				if (YAHOO.util.Event && document) {
					C._onLoad();
				} else {
					if (C._timeoutCount > 2000) {
					} else {
						setTimeout(C._addListeners, 10);
						if (document && document.body) {
							C._timeoutCount += 1;
						}
					}
				}
			},
			handleWasClicked : function(C, E) {
				if (this.isHandle(E, C.id)) {
					return true;
				} else {
					var D = C.parentNode;
					while (D) {
						if (this.isHandle(E, D.id)) {
							return true;
						} else {
							D = D.parentNode;
						}
					}
				}
				return false;
			}
		};
	}();
	YAHOO.util.DDM = YAHOO.util.DragDropMgr;
	YAHOO.util.DDM._addListeners();
}
( function() {
	var A = YAHOO.util.Event;
	var B = YAHOO.util.Dom;
	YAHOO.util.DragDrop = function(E, C, D) {
		if (E) {
			this.init(E, C, D);
		}
	};
	YAHOO.util.DragDrop.prototype = {
		events : null,
		on : function() {
			this.subscribe.apply(this, arguments);
		},
		id : null,
		config : null,
		dragElId : null,
		handleElId : null,
		invalidHandleTypes : null,
		invalidHandleIds : null,
		invalidHandleClasses : null,
		startPageX : 0,
		startPageY : 0,
		groups : null,
		locked : false,
		lock : function() {
			this.locked = true;
		},
		unlock : function() {
			this.locked = false;
		},
		isTarget : true,
		padding : null,
		dragOnly : false,
		useShim : false,
		_domRef : null,
		__ygDragDrop : true,
		constrainX : false,
		constrainY : false,
		minX : 0,
		maxX : 0,
		minY : 0,
		maxY : 0,
		deltaX : 0,
		deltaY : 0,
		maintainOffset : false,
		xTicks : null,
		yTicks : null,
		primaryButtonOnly : true,
		available : false,
		hasOuterHandles : false,
		cursorIsOver : false,
		overlap : null,
		b4StartDrag : function(C, D) {
		},
		startDrag : function(C, D) {
		},
		b4Drag : function(C) {
		},
		onDrag : function(C) {
		},
		onDragEnter : function(C, D) {
		},
		b4DragOver : function(C) {
		},
		onDragOver : function(C, D) {
		},
		b4DragOut : function(C) {
		},
		onDragOut : function(C, D) {
		},
		b4DragDrop : function(C) {
		},
		onDragDrop : function(C, D) {
		},
		onInvalidDrop : function(C) {
		},
		b4EndDrag : function(C) {
		},
		endDrag : function(C) {
		},
		b4MouseDown : function(C) {
		},
		onMouseDown : function(C) {
		},
		onMouseUp : function(C) {
		},
		onAvailable : function() {
		},
		getEl : function() {
			if (!this._domRef) {
				this._domRef = B.get(this.id);
			}
			return this._domRef;
		},
		getDragEl : function() {
			return B.get(this.dragElId);
		},
		init : function(F, C, D) {
			this.initTarget(F, C, D);
			A.on(this._domRef || this.id, "mousedown", this.handleMouseDown,
					this, true);
			for ( var E in this.events) {
				this.createEvent(E + "Event");
			}
		},
		initTarget : function(E, C, D) {
			this.config = D || {};
			this.events = {};
			this.DDM = YAHOO.util.DDM;
			this.groups = {};
			if (typeof E !== "string") {
				this._domRef = E;
				E = B.generateId(E);
			}
			this.id = E;
			this.addToGroup((C) ? C : "default");
			this.handleElId = E;
			A.onAvailable(E, this.handleOnAvailable, this, true);
			this.setDragElId(E);
			this.invalidHandleTypes = {
				A : "A"
			};
			this.invalidHandleIds = {};
			this.invalidHandleClasses = [];
			this.applyConfig();
		},
		applyConfig : function() {
			this.events = {
				mouseDown : true,
				b4MouseDown : true,
				mouseUp : true,
				b4StartDrag : true,
				startDrag : true,
				b4EndDrag : true,
				endDrag : true,
				drag : true,
				b4Drag : true,
				invalidDrop : true,
				b4DragOut : true,
				dragOut : true,
				dragEnter : true,
				b4DragOver : true,
				dragOver : true,
				b4DragDrop : true,
				dragDrop : true
			};
			if (this.config.events) {
				for ( var C in this.config.events) {
					if (this.config.events[C] === false) {
						this.events[C] = false;
					}
				}
			}
			this.padding = this.config.padding || [ 0, 0, 0, 0 ];
			this.isTarget = (this.config.isTarget !== false);
			this.maintainOffset = (this.config.maintainOffset);
			this.primaryButtonOnly = (this.config.primaryButtonOnly !== false);
			this.dragOnly = ((this.config.dragOnly === true) ? true : false);
			this.useShim = ((this.config.useShim === true) ? true : false);
		},
		handleOnAvailable : function() {
			this.available = true;
			this.resetConstraints();
			this.onAvailable();
		},
		setPadding : function(E, C, F, D) {
			if (!C && 0 !== C) {
				this.padding = [ E, E, E, E ];
			} else {
				if (!F && 0 !== F) {
					this.padding = [ E, C, E, C ];
				} else {
					this.padding = [ E, C, F, D ];
				}
			}
		},
		setInitPosition : function(F, E) {
			var G = this.getEl();
			if (!this.DDM.verifyEl(G)) {
				if (G && G.style && (G.style.display == "none")) {
				} else {
				}
				return;
			}
			var D = F || 0;
			var C = E || 0;
			var H = B.getXY(G);
			this.initPageX = H[0] - D;
			this.initPageY = H[1] - C;
			this.lastPageX = H[0];
			this.lastPageY = H[1];
			this.setStartPosition(H);
		},
		setStartPosition : function(D) {
			var C = D || B.getXY(this.getEl());
			this.deltaSetXY = null;
			this.startPageX = C[0];
			this.startPageY = C[1];
		},
		addToGroup : function(C) {
			this.groups[C] = true;
			this.DDM.regDragDrop(this, C);
		},
		removeFromGroup : function(C) {
			if (this.groups[C]) {
				delete this.groups[C];
			}
			this.DDM.removeDDFromGroup(this, C);
		},
		setDragElId : function(C) {
			this.dragElId = C;
		},
		setHandleElId : function(C) {
			if (typeof C !== "string") {
				C = B.generateId(C);
			}
			this.handleElId = C;
			this.DDM.regHandle(this.id, C);
		},
		setOuterHandleElId : function(C) {
			if (typeof C !== "string") {
				C = B.generateId(C);
			}
			A.on(C, "mousedown", this.handleMouseDown, this, true);
			this.setHandleElId(C);
			this.hasOuterHandles = true;
		},
		unreg : function() {
			A.removeListener(this.id, "mousedown", this.handleMouseDown);
			this._domRef = null;
			this.DDM._remove(this);
		},
		isLocked : function() {
			return (this.DDM.isLocked() || this.locked);
		},
		handleMouseDown : function(J, I) {
			var D = J.which || J.button;
			if (this.primaryButtonOnly && D > 1) {
				return;
			}
			if (this.isLocked()) {
				return;
			}
			var C = this.b4MouseDown(J), F = true;
			if (this.events.b4MouseDown) {
				F = this.fireEvent("b4MouseDownEvent", J);
			}
			var E = this.onMouseDown(J), H = true;
			if (this.events.mouseDown) {
				H = this.fireEvent("mouseDownEvent", J);
			}
			if ((C === false) || (E === false) || (F === false)
					|| (H === false)) {
				return;
			}
			this.DDM.refreshCache(this.groups);
			var G = new YAHOO.util.Point(A.getPageX(J), A.getPageY(J));
			if (!this.hasOuterHandles && !this.DDM.isOverTarget(G, this)) {
			} else {
				if (this.clickValidator(J)) {
					this.setStartPosition();
					this.DDM.handleMouseDown(J, this);
					this.DDM.stopEvent(J);
				} else {
				}
			}
		},
		clickValidator : function(D) {
			var C = YAHOO.util.Event.getTarget(D);
			return (this.isValidHandleChild(C) && (this.id == this.handleElId || this.DDM
					.handleWasClicked(C, this.id)));
		},
		getTargetCoord : function(E, D) {
			var C = E - this.deltaX;
			var F = D - this.deltaY;
			if (this.constrainX) {
				if (C < this.minX) {
					C = this.minX;
				}
				if (C > this.maxX) {
					C = this.maxX;
				}
			}
			if (this.constrainY) {
				if (F < this.minY) {
					F = this.minY;
				}
				if (F > this.maxY) {
					F = this.maxY;
				}
			}
			C = this.getTick(C, this.xTicks);
			F = this.getTick(F, this.yTicks);
			return {
				x : C,
				y : F
			};
		},
		addInvalidHandleType : function(C) {
			var D = C.toUpperCase();
			this.invalidHandleTypes[D] = D;
		},
		addInvalidHandleId : function(C) {
			if (typeof C !== "string") {
				C = B.generateId(C);
			}
			this.invalidHandleIds[C] = C;
		},
		addInvalidHandleClass : function(C) {
			this.invalidHandleClasses.push(C);
		},
		removeInvalidHandleType : function(C) {
			var D = C.toUpperCase();
			delete this.invalidHandleTypes[D];
		},
		removeInvalidHandleId : function(C) {
			if (typeof C !== "string") {
				C = B.generateId(C);
			}
			delete this.invalidHandleIds[C];
		},
		removeInvalidHandleClass : function(D) {
			for ( var E = 0, C = this.invalidHandleClasses.length; E < C; ++E) {
				if (this.invalidHandleClasses[E] == D) {
					delete this.invalidHandleClasses[E];
				}
			}
		},
		isValidHandleChild : function(F) {
			var E = true;
			var H;
			try {
				H = F.nodeName.toUpperCase();
			} catch (G) {
				H = F.nodeName;
			}
			E = E && !this.invalidHandleTypes[H];
			E = E && !this.invalidHandleIds[F.id];
			for ( var D = 0, C = this.invalidHandleClasses.length; E && D < C; ++D) {
				E = !B.hasClass(F, this.invalidHandleClasses[D]);
			}
			return E;
		},
		setXTicks : function(F, C) {
			this.xTicks = [];
			this.xTickSize = C;
			var E = {};
			for ( var D = this.initPageX; D >= this.minX; D = D - C) {
				if (!E[D]) {
					this.xTicks[this.xTicks.length] = D;
					E[D] = true;
				}
			}
			for (D = this.initPageX; D <= this.maxX; D = D + C) {
				if (!E[D]) {
					this.xTicks[this.xTicks.length] = D;
					E[D] = true;
				}
			}
			this.xTicks.sort(this.DDM.numericSort);
		},
		setYTicks : function(F, C) {
			this.yTicks = [];
			this.yTickSize = C;
			var E = {};
			for ( var D = this.initPageY; D >= this.minY; D = D - C) {
				if (!E[D]) {
					this.yTicks[this.yTicks.length] = D;
					E[D] = true;
				}
			}
			for (D = this.initPageY; D <= this.maxY; D = D + C) {
				if (!E[D]) {
					this.yTicks[this.yTicks.length] = D;
					E[D] = true;
				}
			}
			this.yTicks.sort(this.DDM.numericSort);
		},
		setXConstraint : function(E, D, C) {
			this.leftConstraint = parseInt(E, 10);
			this.rightConstraint = parseInt(D, 10);
			this.minX = this.initPageX - this.leftConstraint;
			this.maxX = this.initPageX + this.rightConstraint;
			if (C) {
				this.setXTicks(this.initPageX, C);
			}
			this.constrainX = true;
		},
		clearConstraints : function() {
			this.constrainX = false;
			this.constrainY = false;
			this.clearTicks();
		},
		clearTicks : function() {
			this.xTicks = null;
			this.yTicks = null;
			this.xTickSize = 0;
			this.yTickSize = 0;
		},
		setYConstraint : function(C, E, D) {
			this.topConstraint = parseInt(C, 10);
			this.bottomConstraint = parseInt(E, 10);
			this.minY = this.initPageY - this.topConstraint;
			this.maxY = this.initPageY + this.bottomConstraint;
			if (D) {
				this.setYTicks(this.initPageY, D);
			}
			this.constrainY = true;
		},
		resetConstraints : function() {
			if (this.initPageX || this.initPageX === 0) {
				var D = (this.maintainOffset) ? this.lastPageX - this.initPageX
						: 0;
				var C = (this.maintainOffset) ? this.lastPageY - this.initPageY
						: 0;
				this.setInitPosition(D, C);
			} else {
				this.setInitPosition();
			}
			if (this.constrainX) {
				this.setXConstraint(this.leftConstraint, this.rightConstraint,
						this.xTickSize);
			}
			if (this.constrainY) {
				this.setYConstraint(this.topConstraint, this.bottomConstraint,
						this.yTickSize);
			}
		},
		getTick : function(I, F) {
			if (!F) {
				return I;
			} else {
				if (F[0] >= I) {
					return F[0];
				} else {
					for ( var D = 0, C = F.length; D < C; ++D) {
						var E = D + 1;
						if (F[E] && F[E] >= I) {
							var H = I - F[D];
							var G = F[E] - I;
							return (G > H) ? F[D] : F[E];
						}
					}
					return F[F.length - 1];
				}
			}
		},
		toString : function() {
			return ("DragDrop " + this.id);
		}
	};
	YAHOO.augment(YAHOO.util.DragDrop, YAHOO.util.EventProvider);
})();
YAHOO.util.DD = function(C, A, B) {
	if (C) {
		this.init(C, A, B);
	}
};
YAHOO.extend(YAHOO.util.DD, YAHOO.util.DragDrop, {
	scroll : true,
	autoOffset : function(C, B) {
		var A = C - this.startPageX;
		var D = B - this.startPageY;
		this.setDelta(A, D);
	},
	setDelta : function(B, A) {
		this.deltaX = B;
		this.deltaY = A;
	},
	setDragElPos : function(C, B) {
		var A = this.getDragEl();
		this.alignElWithMouse(A, C, B);
	},
	alignElWithMouse : function(C, G, F) {
		var E = this.getTargetCoord(G, F);
		if (!this.deltaSetXY) {
			var H = [ E.x, E.y ];
			YAHOO.util.Dom.setXY(C, H);
			var D = parseInt(YAHOO.util.Dom.getStyle(C, "left"), 10);
			var B = parseInt(YAHOO.util.Dom.getStyle(C, "top"), 10);
			this.deltaSetXY = [ D - E.x, B - E.y ];
		} else {
			YAHOO.util.Dom.setStyle(C, "left", (E.x + this.deltaSetXY[0])
					+ "px");
			YAHOO.util.Dom
					.setStyle(C, "top", (E.y + this.deltaSetXY[1]) + "px");
		}
		this.cachePosition(E.x, E.y);
		var A = this;
		setTimeout( function() {
			A.autoScroll.call(A, E.x, E.y, C.offsetHeight, C.offsetWidth);
		}, 0);
	},
	cachePosition : function(B, A) {
		if (B) {
			this.lastPageX = B;
			this.lastPageY = A;
		} else {
			var C = YAHOO.util.Dom.getXY(this.getEl());
			this.lastPageX = C[0];
			this.lastPageY = C[1];
		}
	},
	autoScroll : function(J, I, E, K) {
		if (this.scroll) {
			var L = this.DDM.getClientHeight();
			var B = this.DDM.getClientWidth();
			var N = this.DDM.getScrollTop();
			var D = this.DDM.getScrollLeft();
			var H = E + I;
			var M = K + J;
			var G = (L + N - I - this.deltaY);
			var F = (B + D - J - this.deltaX);
			var C = 40;
			var A = (document.all) ? 80 : 30;
			if (H > L && G < C) {
				window.scrollTo(D, N + A);
			}
			if (I < N && N > 0 && I - N < C) {
				window.scrollTo(D, N - A);
			}
			if (M > B && F < C) {
				window.scrollTo(D + A, N);
			}
			if (J < D && D > 0 && J - D < C) {
				window.scrollTo(D - A, N);
			}
		}
	},
	applyConfig : function() {
		YAHOO.util.DD.superclass.applyConfig.call(this);
		this.scroll = (this.config.scroll !== false);
	},
	b4MouseDown : function(A) {
		this.setStartPosition();
		this.autoOffset(YAHOO.util.Event.getPageX(A), YAHOO.util.Event
				.getPageY(A));
	},
	b4Drag : function(A) {
		this.setDragElPos(YAHOO.util.Event.getPageX(A), YAHOO.util.Event
				.getPageY(A));
	},
	toString : function() {
		return ("DD " + this.id);
	}
});
YAHOO.util.DDProxy = function(C, A, B) {
	if (C) {
		this.init(C, A, B);
		this.initFrame();
	}
};
YAHOO.util.DDProxy.dragElId = "ygddfdiv";
YAHOO.extend(YAHOO.util.DDProxy, YAHOO.util.DD, {
	resizeFrame : true,
	centerFrame : false,
	createFrame : function() {
		var B = this, A = document.body;
		if (!A || !A.firstChild) {
			setTimeout( function() {
				B.createFrame();
			}, 50);
			return;
		}
		var F = this.getDragEl(), E = YAHOO.util.Dom;
		if (!F) {
			F = document.createElement("div");
			F.id = this.dragElId;
			var D = F.style;
			D.position = "absolute";
			D.visibility = "hidden";
			D.cursor = "move";
			D.border = "2px solid #aaa";
			D.zIndex = 999;
			D.height = "25px";
			D.width = "25px";
			var C = document.createElement("div");
			E.setStyle(C, "height", "100%");
			E.setStyle(C, "width", "100%");
			E.setStyle(C, "background-color", "#ccc");
			E.setStyle(C, "opacity", "0");
			F.appendChild(C);
			A.insertBefore(F, A.firstChild);
		}
	},
	initFrame : function() {
		this.createFrame();
	},
	applyConfig : function() {
		YAHOO.util.DDProxy.superclass.applyConfig.call(this);
		this.resizeFrame = (this.config.resizeFrame !== false);
		this.centerFrame = (this.config.centerFrame);
		this.setDragElId(this.config.dragElId || YAHOO.util.DDProxy.dragElId);
	},
	showFrame : function(E, D) {
		var C = this.getEl();
		var A = this.getDragEl();
		var B = A.style;
		this._resizeProxy();
		if (this.centerFrame) {
			this.setDelta(Math.round(parseInt(B.width, 10) / 2), Math
					.round(parseInt(B.height, 10) / 2));
		}
		this.setDragElPos(E, D);
		YAHOO.util.Dom.setStyle(A, "visibility", "visible");
	},
	_resizeProxy : function() {
		if (this.resizeFrame) {
			var H = YAHOO.util.Dom;
			var B = this.getEl();
			var C = this.getDragEl();
			var G = parseInt(H.getStyle(C, "borderTopWidth"), 10);
			var I = parseInt(H.getStyle(C, "borderRightWidth"), 10);
			var F = parseInt(H.getStyle(C, "borderBottomWidth"), 10);
			var D = parseInt(H.getStyle(C, "borderLeftWidth"), 10);
			if (isNaN(G)) {
				G = 0;
			}
			if (isNaN(I)) {
				I = 0;
			}
			if (isNaN(F)) {
				F = 0;
			}
			if (isNaN(D)) {
				D = 0;
			}
			var E = Math.max(0, B.offsetWidth - I - D);
			var A = Math.max(0, B.offsetHeight - G - F);
			H.setStyle(C, "width", E + "px");
			H.setStyle(C, "height", A + "px");
		}
	},
	b4MouseDown : function(B) {
		this.setStartPosition();
		var A = YAHOO.util.Event.getPageX(B);
		var C = YAHOO.util.Event.getPageY(B);
		this.autoOffset(A, C);
	},
	b4StartDrag : function(A, B) {
		this.showFrame(A, B);
	},
	b4EndDrag : function(A) {
		YAHOO.util.Dom.setStyle(this.getDragEl(), "visibility", "hidden");
	},
	endDrag : function(D) {
		var C = YAHOO.util.Dom;
		var B = this.getEl();
		var A = this.getDragEl();
		C.setStyle(A, "visibility", "");
		C.setStyle(B, "visibility", "hidden");
		YAHOO.util.DDM.moveToEl(B, A);
		C.setStyle(A, "visibility", "hidden");
		C.setStyle(B, "visibility", "");
	},
	toString : function() {
		return ("DDProxy " + this.id);
	}
});
YAHOO.util.DDTarget = function(C, A, B) {
	if (C) {
		this.initTarget(C, A, B);
	}
};
YAHOO.extend(YAHOO.util.DDTarget, YAHOO.util.DragDrop, {
	toString : function() {
		return ("DDTarget " + this.id);
	}
});
YAHOO.register("dragdrop", YAHOO.util.DragDropMgr, {
	version : "2.8.0r4",
	build : "2446"
});
