Hacked By AnonymousFox

Current Path : C:/AppServ/www/stat1/lib/toolman/
Upload File :
Current File : C:/AppServ/www/stat1/lib/toolman/dragdrop.js

/**********************************************************
 Adapted from the sortable lists example by Tim Taylor
 http://tool-man.org/examples/sorting.html
 Modified by Tom Westcott : http://www.cyberdummy.co.uk 
 **********************************************************/

var DragDrop = {
			firstContainer : null,
			lastContainer : null,
			parent_id : null,
			parent_group : null,
			makeListContainer : function(list, group) {
			if (this.firstContainer == null) {
				this.firstContainer = this.lastContainer = list;
				list.previousContainer = null;
				list.nextContainer = null;
			} else {
				list.previousContainer = this.lastContainer;
				list.nextContainer = null;
				this.lastContainer.nextContainer = list;
				this.lastContainer = list;
			}
			list.onDragOver = new Function();
			list.onDragOut = new Function();
			list.onDragDrop = new Function();
			list.group = group;

			var items = list.getElementsByTagName( "li" );	
			for (var i = 0; i < items.length; i++) {
				DragDrop.makeItemDragable(items[i]);
			}
	},
	
	serData : function ( group, theid ) {
			var container = DragDrop.firstContainer;
			var j = 0;
			var string = "";
			while (container != null) {
				if(theid != null && container.id != theid) {
					container = container.nextContainer;
					continue;
				}
				if(group != null && container.group != group) {
					container = container.nextContainer;
					continue;
				}
				j ++;
				if(j > 1) {
					string += ":";
				}
				string += container.id;

				var items = container.getElementsByTagName( "li" );
				string += "(";
				for (var i = 0; i < items.length; i++) {
					if(i > 0) {
						string += ",";
					}
					string += items[i].id;
				}
				string += ")";
				container = container.nextContainer;
			}
			return string;   
	},

	makeItemDragable : function(item) {
			Drag.makeDraggable(item);
			item.setDragThreshold(5);
			// tracks if the item is currently outside all containers
			item.isOutside = false;
			item.onDragStart = DragDrop.onDragStart;
			item.onDrag = DragDrop.onDrag;
			item.onDragEnd = DragDrop.onDragEnd;
	},

	onDragStart : function(nwPosition, sePosition, nwOffset, seOffset) {
			// update all container bounds, since they may have changed
			// on a previous drag
			// could be more smart about when to do this
			var container = DragDrop.firstContainer;
			while (container != null) {
				container.northwest = Coordinates.northwestOffset( container, true );
				container.southeast = Coordinates.southeastOffset( container, true );
				container = container.nextContainer;
			}
			// item starts out over current parent
			this.parentNode.onDragOver();
			parent_id = this.parentNode.id;
			parent_group = this.parentNode.group;
	},

	onDrag : function(nwPosition, sePosition, nwOffset, seOffset) {
			// check if we were nowhere
			if (this.isOutside) {
				// check each container to see if in its bounds
				var container = DragDrop.firstContainer;
				while (container != null) {
						if ((nwOffset.inside( container.northwest, container.southeast ) || seOffset.inside( container.northwest, container.southeast )) && container.group == parent_group) {
							// we're inside this one
							container.onDragOver();
							this.isOutside = false;
							// since isOutside was true, the current parent is a
							// temporary clone of some previous container node and
							// it needs to be removed from the document
							var tempParent = this.parentNode;
							tempParent.removeChild( this );
							container.appendChild( this );
							tempParent.parentNode.removeChild( tempParent );
							break;
						}
						container = container.nextContainer;
				}
				// we're still not inside the bounds of any container
				if (this.isOutside) return;
				// check if we're outside our parent's bounds

			} else if (!(nwOffset.inside( this.parentNode.northwest, this.parentNode.southeast ) || seOffset.inside( this.parentNode.northwest, this.parentNode.southeast ))) {

				this.parentNode.onDragOut();
				this.isOutside = true;

				// check if we're inside a new container's bounds
				var container = DragDrop.firstContainer;
				while (container != null) {
					if ((nwOffset.inside( container.northwest, container.southeast ) || seOffset.inside( container.northwest, container.southeast )) && container.group == parent_group) {
						// we're inside this one
						container.onDragOver();
						this.isOutside = false;
						this.parentNode.removeChild( this );
						container.appendChild( this );
						break;
					}
					container = container.nextContainer;
				}
				// if we're not in any container now, make a temporary clone of
				// the previous container node and add it to the document
				if (this.isOutside) {
					var tempParent = this.parentNode.cloneNode( false );
					this.parentNode.removeChild( this );
					tempParent.appendChild( this );
					// body puts a border or item at bottom of page if do not have this
					tempParent.style.border = 0;
					document.getElementsByTagName( "body" ).item(0).appendChild( tempParent );
					return;
				}
			}

			// if we get here, we're inside some container bounds, so we do
			// everything the original dragsort script did to swap us into the
			// correct position
			var parent = this.parentNode;
			var item = this;
			var next = DragUtils.nextItem(item);
			while (next != null && this.offsetTop >= next.offsetTop - 2) {
				var item = next;
				var next = DragUtils.nextItem(item);
			}
			if (this != item) {
				DragUtils.swap(this, next);
				return;
			}
			var item = this;
			var previous = DragUtils.previousItem(item);
			while (previous != null && this.offsetTop <= previous.offsetTop + 2) {
				var item = previous;
				var previous = DragUtils.previousItem(item);
			}
			if (this != item) {
				DragUtils.swap(this, item);
				return;
			}
	},

	onDragEnd : function(nwPosition, sePosition, nwOffset, seOffset) {
		// if the drag ends and we're still outside all containers
		// it's time to remove ourselves from the document or add 
                // to the trash bin
		if (this.isOutside) {
                        var container = DragDrop.firstContainer;
                        while (container != null) {
                           if(container.id == parent_id)
                           {
                             break;
                           }
                           container = container.nextContainer;
                        }
						this.isOutside = false;
						this.parentNode.removeChild( this );
						container.appendChild( this );
						this.style["top"] = "0px";
						this.style["left"] = "0px";
                        //var container = DragDrop.firstContainer;
                        //container.appendChild( this );
			return;
		}
		this.parentNode.onDragOut();
		this.parentNode.onDragDrop();
		this.style["top"] = "0px";
		this.style["left"] = "0px";
	}
};

var DragUtils = {
		swap : function(item1, item2) {
			var parent = item1.parentNode;
			parent.removeChild(item1);
			parent.insertBefore(item1, item2);

			item1.style["top"] = "0px";
			item1.style["left"] = "0px";
		},

		nextItem : function(item) {
			var sibling = item.nextSibling;
			while (sibling != null) {
				if (sibling.nodeName == item.nodeName) return sibling;
				sibling = sibling.nextSibling;
			}
			return null;
		},

		previousItem : function(item) {
			var sibling = item.previousSibling;
			while (sibling != null) {
				if (sibling.nodeName == item.nodeName) return sibling;
				sibling = sibling.previousSibling;
			}
			return null;
		}		
};

Hacked By AnonymousFox1.0, Coded By AnonymousFox