<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wbex.ru/index.php?action=history&amp;feed=atom&amp;title=JavaScript_Tutorial%2FDrag_Drop%2FDrag_Drop</id>
		<title>JavaScript Tutorial/Drag Drop/Drag Drop - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wbex.ru/index.php?action=history&amp;feed=atom&amp;title=JavaScript_Tutorial%2FDrag_Drop%2FDrag_Drop"/>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=JavaScript_Tutorial/Drag_Drop/Drag_Drop&amp;action=history"/>
		<updated>2026-04-05T18:28:27Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://wbex.ru/index.php?title=JavaScript_Tutorial/Drag_Drop/Drag_Drop&amp;diff=9353&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=JavaScript_Tutorial/Drag_Drop/Drag_Drop&amp;diff=9353&amp;oldid=prev"/>
				<updated>2010-05-26T08:24:59Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 08:24, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://wbex.ru/index.php?title=JavaScript_Tutorial/Drag_Drop/Drag_Drop&amp;diff=9352&amp;oldid=prev</id>
		<title> в 18:52, 25 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=JavaScript_Tutorial/Drag_Drop/Drag_Drop&amp;diff=9352&amp;oldid=prev"/>
				<updated>2010-05-25T18:52:56Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Simulated Drag And Drop with zEvents Library and zDragDrop Library==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Simulated Drag And Drop Example&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;        &lt;br /&gt;
/*------------------------------------------------------------------------------&lt;br /&gt;
 * JavaScript zEvents Library&lt;br /&gt;
 * Version 1.1&lt;br /&gt;
 * by Nicholas C. Zakas, http://www.nczonline.net/&lt;br /&gt;
 * Copyright (c) 2004-2005 Nicholas C. Zakas. All Rights Reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * This program is free software; you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU Lesser General Public License as published by&lt;br /&gt;
 * the Free Software Foundation; either version 2.1 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This program is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU Lesser General Public License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public License&lt;br /&gt;
 * along with this program; if not, write to the Free Software&lt;br /&gt;
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA&lt;br /&gt;
 *------------------------------------------------------------------------------&lt;br /&gt;
 */  &lt;br /&gt;
/**&lt;br /&gt;
 * Encapsulates information about an event.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @class&lt;br /&gt;
 */&lt;br /&gt;
function zEvent() {&lt;br /&gt;
    /**&lt;br /&gt;
     * The type of event.&lt;br /&gt;
     * @scope public&lt;br /&gt;
     */&lt;br /&gt;
    this.type /*: String */   = null;&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * The object that caused the event.&lt;br /&gt;
     * @scope public&lt;br /&gt;
     */&lt;br /&gt;
    this.target /*: zEventTarget */ = null;&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * A secondary object related to the event.&lt;br /&gt;
     * @scope public&lt;br /&gt;
     */&lt;br /&gt;
    this.relatedTarget /*: zEventTarget */ = null;&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * Indicates whether or not the event can be canceled.&lt;br /&gt;
     * @scope public&lt;br /&gt;
     */&lt;br /&gt;
    this.cancelable /*: boolean */ = false;&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * The time that the event occurred.&lt;br /&gt;
     * @scope public&lt;br /&gt;
     */&lt;br /&gt;
    this.timeStamp /*: long */ = null;&lt;br /&gt;
    &lt;br /&gt;
    /*&lt;br /&gt;
     * Set to false to cancel event.&lt;br /&gt;
     * @scope public&lt;br /&gt;
     */&lt;br /&gt;
    this.returnValue /*: boolean */ = true;    &lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
 * Initializes the event object with information for the event.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @param sType The type of event encapsulated by the object.&lt;br /&gt;
 * @param bCancelable True if the event can be cancelled.&lt;br /&gt;
 */&lt;br /&gt;
zEvent.prototype.initEvent = function (sType /*: String */,&lt;br /&gt;
                                       bCancelable /*: boolean */) {&lt;br /&gt;
    this.type = sType;&lt;br /&gt;
    this.cancelable = bCancelable;&lt;br /&gt;
    this.timeStamp = (new Date()).getTime();&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Prevents the default behavior for an event.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 */&lt;br /&gt;
zEvent.prototype.preventDefault = function () {&lt;br /&gt;
    if (this.cancelable) {&lt;br /&gt;
        this.returnValue = false;&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Any class that wants to support events should inherit from this.&lt;br /&gt;
 * @class&lt;br /&gt;
 * @scope public&lt;br /&gt;
 */&lt;br /&gt;
function zEventTarget() {&lt;br /&gt;
    /**&lt;br /&gt;
     * Array of event handlers.&lt;br /&gt;
     * @scope private&lt;br /&gt;
     */&lt;br /&gt;
    this.eventhandlers /*: Object */ = new Object();&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
 * Adds an event listener function to handle the type of event.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @param sType The type of event to handle (i.e., &amp;quot;mousemove&amp;quot;, not &amp;quot;onmousemove&amp;quot;).&lt;br /&gt;
 * @param fnListener The listener function for the event.&lt;br /&gt;
 */&lt;br /&gt;
zEventTarget.prototype.addEventListener = function (sType /*: String */,&lt;br /&gt;
                                                    fnListener /*: Function */) {&lt;br /&gt;
    if (typeof this.eventhandlers[sType] == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
        this.eventhandlers[sType] = new Array;&lt;br /&gt;
    }   &lt;br /&gt;
    &lt;br /&gt;
    this.eventhandlers[sType][this.eventhandlers[sType].length] = fnListener;                                                    &lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Causes an event to fire.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @param oEvent The event object containing information about the event to fire.&lt;br /&gt;
 * @return True if the event should continue, false if not.&lt;br /&gt;
 */&lt;br /&gt;
zEventTarget.prototype.dispatchEvent = function (oEvent /*: zEvent */) /*: boolean */ {&lt;br /&gt;
    /*&lt;br /&gt;
     * Set the target of the event.&lt;br /&gt;
     */&lt;br /&gt;
    oEvent.target = this;&lt;br /&gt;
    /*&lt;br /&gt;
     * Call each event handler and pass in the event object.&lt;br /&gt;
     */&lt;br /&gt;
    if (typeof this.eventhandlers[oEvent.type] != &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
        for (var i=0; i &amp;lt; this.eventhandlers[oEvent.type].length; i++) {    &lt;br /&gt;
            this.eventhandlers[oEvent.type][i](oEvent);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    /*&lt;br /&gt;
     * Return the value of returnValue, which is changed to false&lt;br /&gt;
     * when preventDefault() is called.&lt;br /&gt;
     */&lt;br /&gt;
    return oEvent.returnValue;                                                   &lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Removes an event listener function from handling the type of event.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @param sType The type of event to remove from (i.e., &amp;quot;mousemove&amp;quot;, not &amp;quot;onmousemove&amp;quot;).&lt;br /&gt;
 * @param fnListener The listener function to remove.&lt;br /&gt;
 */&lt;br /&gt;
zEventTarget.prototype.removeEventListener = function (sType /*: String */,&lt;br /&gt;
                                                       fnListener /*: Function */) {&lt;br /&gt;
    if (typeof this.eventhandlers[sType] != &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
        var arrTemp = new Array;&lt;br /&gt;
        for (var i=0; i &amp;lt; this.eventhandlers[sType].length; i++) {&lt;br /&gt;
            if (this.eventhandlers[sType][i] != fnListener) {&lt;br /&gt;
                arrTemp[arrTemp.length] = this.eventhandlers[sType][i];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        this.eventhandlers[sType] = arrTemp;&lt;br /&gt;
    }   &lt;br /&gt;
                                                   &lt;br /&gt;
};&lt;br /&gt;
        &amp;lt;/script&amp;gt;        &lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
/*------------------------------------------------------------------------------&lt;br /&gt;
 * JavaScript zDragDrop Library&lt;br /&gt;
 * Version 1.1&lt;br /&gt;
 * by Nicholas C. Zakas, http://www.nczonline.net/&lt;br /&gt;
 * Copyright (c) 2004-2005 Nicholas C. Zakas. All Rights Reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * This program is free software; you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU Lesser General Public License as published by&lt;br /&gt;
 * the Free Software Foundation; either version 2.1 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This program is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU Lesser General Public License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public License&lt;br /&gt;
 * along with this program; if not, write to the Free Software&lt;br /&gt;
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA&lt;br /&gt;
 *------------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
 * This library requires the free zEvents library available from &lt;br /&gt;
 * http://www.nczonline.net/.&lt;br /&gt;
 */&lt;br /&gt;
/**&lt;br /&gt;
 * Contains global settings and methods for drag and drop functionality.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 */&lt;br /&gt;
function zDrag() {}&lt;br /&gt;
/**&lt;br /&gt;
 * The item currently being dragged.&lt;br /&gt;
 * @scope private&lt;br /&gt;
 */&lt;br /&gt;
zDrag.current /*: zDraggable */ = null;&lt;br /&gt;
/**&lt;br /&gt;
 * Indicates whether or not an item is being dragged.&lt;br /&gt;
 * @scope private&lt;br /&gt;
 */&lt;br /&gt;
zDrag.dragging /*: boolean */ = false;&lt;br /&gt;
/**&lt;br /&gt;
 * Returns true if an item is being dragged.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @return True if an item is being dragged, false if not.&lt;br /&gt;
 * @type boolean&lt;br /&gt;
 */&lt;br /&gt;
zDrag.isDragging = function () /*: boolean */ {&lt;br /&gt;
    return this.dragging;&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Sets the item being dragged.&lt;br /&gt;
 * @scope protected&lt;br /&gt;
 * @param {zDraggable} oDraggable The draggable item.&lt;br /&gt;
 * @type void&lt;br /&gt;
 */&lt;br /&gt;
zDrag.setCurrent = function (oDraggable /*: zDraggable */) {&lt;br /&gt;
    this.current = oDraggable;&lt;br /&gt;
    this.dragging = true;&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Returns the currently dragged item.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @return The currently dragged item.&lt;br /&gt;
 * @type zDraggable&lt;br /&gt;
 */&lt;br /&gt;
zDrag.getCurrent = function () /*: zDraggable */ {&lt;br /&gt;
    return this.current;&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Clears the currently dragged item from memory and sets the dragging&lt;br /&gt;
 * flag to false.&lt;br /&gt;
 * @scope protected&lt;br /&gt;
 * @type void&lt;br /&gt;
 */&lt;br /&gt;
zDrag.clearCurrent = function () {&lt;br /&gt;
    this.current = null;&lt;br /&gt;
    this.dragging = false;&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Encapsulates the functionality for a draggable element.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @extends zEventTarget&lt;br /&gt;
 * @class&lt;br /&gt;
 */&lt;br /&gt;
function zDraggable(oElement, iConstraints) {&lt;br /&gt;
    &lt;br /&gt;
    /*&lt;br /&gt;
     * Inherit properties from zEventTarget.&lt;br /&gt;
     */&lt;br /&gt;
    zEventTarget.call(this);&lt;br /&gt;
    &lt;br /&gt;
    /*&lt;br /&gt;
     * Call constructor.&lt;br /&gt;
     */&lt;br /&gt;
    this.construct(oElement, iConstraints);  &lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * The difference between the x cursor position and left edge of the element.&lt;br /&gt;
     * @scope private&lt;br /&gt;
     * @type int&lt;br /&gt;
     */  &lt;br /&gt;
    this.diffX /*: int */ = 0;&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * The difference between the y cursor position and top edge of the element.&lt;br /&gt;
     * @scope private&lt;br /&gt;
     * @type int&lt;br /&gt;
     */  &lt;br /&gt;
    this.diffY /*: int */ = 0;&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * Collection of drop targets for this item.&lt;br /&gt;
     * @scope private&lt;br /&gt;
     * @type Array&lt;br /&gt;
     */&lt;br /&gt;
    this.targets /*: Array */ = [];&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
 * Inherit methods from zEventTarget.&lt;br /&gt;
 */&lt;br /&gt;
zDraggable.prototype = new zEventTarget;&lt;br /&gt;
/**&lt;br /&gt;
 * Indicates the dragged item can be dragged along the X axis.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @type int&lt;br /&gt;
 * @final&lt;br /&gt;
 */&lt;br /&gt;
zDraggable.DRAG_X /*: int */ = 1;&lt;br /&gt;
/**&lt;br /&gt;
 * Indicates the dragged item can be dragged along the Y axis.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @type int&lt;br /&gt;
 * @final&lt;br /&gt;
 */&lt;br /&gt;
zDraggable.DRAG_Y /*: int */ = 2;&lt;br /&gt;
/**&lt;br /&gt;
 * Adds a new drop target to the draggable item.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @param {zDropTarget} oDropTarget The drop target to register for this item.&lt;br /&gt;
 * @type void&lt;br /&gt;
 */&lt;br /&gt;
zDraggable.prototype.addDropTarget = function (oDropTarget /*: zDropTarget */) {&lt;br /&gt;
    this.targets.push(oDropTarget);&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Creates a new instance based on the given element and the constraints.&lt;br /&gt;
 * @scope private&lt;br /&gt;
 * @constructor&lt;br /&gt;
 * @param {HTMLElement} oElement The DOM element to make draggable.&lt;br /&gt;
 * @param {int} iConstraints The rules for dragging.&lt;br /&gt;
 */&lt;br /&gt;
zDraggable.prototype.construct = function (oElement /*: HTMLElement */, &lt;br /&gt;
                                           iConstraints /*: int */) {&lt;br /&gt;
    /**&lt;br /&gt;
     * The element to make draggable.&lt;br /&gt;
     * @scope private&lt;br /&gt;
     * @type HTMLElement&lt;br /&gt;
     */&lt;br /&gt;
    this.element /*: HTMLElement */ = oElement;&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * The constraints indicating the rules for dragging.&lt;br /&gt;
     * @scope private&lt;br /&gt;
     * @type int&lt;br /&gt;
     */&lt;br /&gt;
    this.constraints /*: int */ = iConstraints;&lt;br /&gt;
    &lt;br /&gt;
    /*&lt;br /&gt;
     * Create a pointer to this object.&lt;br /&gt;
     */&lt;br /&gt;
    var oThis = this;&lt;br /&gt;
    &lt;br /&gt;
    /*&lt;br /&gt;
     * Create a temporary function named fnTemp.&lt;br /&gt;
     */&lt;br /&gt;
    var fnTemp = function () {&lt;br /&gt;
    &lt;br /&gt;
        /*&lt;br /&gt;
         * Create a dragstart event and fire it.&lt;br /&gt;
         */&lt;br /&gt;
        var oDragStartEvent = new zDragDropEvent();&lt;br /&gt;
        oDragStartEvent.initDragDropEvent(&amp;quot;dragstart&amp;quot;, true);&lt;br /&gt;
        &lt;br /&gt;
        /*&lt;br /&gt;
         * If the event isn&amp;quot;t cancelled, proceed.&lt;br /&gt;
         */&lt;br /&gt;
        if (oThis.dispatchEvent(oDragStartEvent)) {&lt;br /&gt;
            /*&lt;br /&gt;
             * Get the event objects, which is either the first&lt;br /&gt;
             * argument (for DOM-compliant browsers and Netscape 4.x)&lt;br /&gt;
             * or window.event (for IE).&lt;br /&gt;
             */    &lt;br /&gt;
            var oEvent = arguments[0] || window.event;&lt;br /&gt;
        &lt;br /&gt;
            /*&lt;br /&gt;
             * Get the difference between the clientX and clientY&lt;br /&gt;
             * and the position of the element.&lt;br /&gt;
             */&lt;br /&gt;
            oThis.diffX = oEvent.clientX - oThis.element.offsetLeft;&lt;br /&gt;
            oThis.diffY = oEvent.clientY - oThis.element.offsetTop;  &lt;br /&gt;
            /*&lt;br /&gt;
             * Add all DOM event handlers&lt;br /&gt;
             */&lt;br /&gt;
            oThis.attachEventHandlers();        &lt;br /&gt;
        &lt;br /&gt;
            /*&lt;br /&gt;
             * Set the currently dragged item.&lt;br /&gt;
             */&lt;br /&gt;
            zDrag.setCurrent(oThis);        &lt;br /&gt;
        }  &lt;br /&gt;
    };&lt;br /&gt;
    &lt;br /&gt;
    /*&lt;br /&gt;
     * Determine which method to use to add the event handler.&lt;br /&gt;
     */&lt;br /&gt;
    if (this.element.addEventListener) {&lt;br /&gt;
        this.element.addEventListener(&amp;quot;mousedown&amp;quot;, fnTemp, false);&lt;br /&gt;
    } else if (this.element.attachEvent) {&lt;br /&gt;
        this.element.attachEvent(&amp;quot;onmousedown&amp;quot;, fnTemp);&lt;br /&gt;
    } else {&lt;br /&gt;
        throw new Error(&amp;quot;zDrag not supported in this browser.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Attaches event handlers for the mousemove and mouseup events.&lt;br /&gt;
 * @scope private&lt;br /&gt;
 * @private&lt;br /&gt;
 * @type void&lt;br /&gt;
 */&lt;br /&gt;
zDraggable.prototype.attachEventHandlers = function () {&lt;br /&gt;
    &lt;br /&gt;
    /*&lt;br /&gt;
     * Create a pointer to this object.&lt;br /&gt;
     */&lt;br /&gt;
    var oThis = this;&lt;br /&gt;
    &lt;br /&gt;
    /*&lt;br /&gt;
     * Create a temporary function named tempMouseMove.&lt;br /&gt;
     */&lt;br /&gt;
    this.tempMouseMove = function () {&lt;br /&gt;
    &lt;br /&gt;
        /*&lt;br /&gt;
         * Get the event objects, which is either the first&lt;br /&gt;
         * argument (for DOM-compliant browsers and Netscape 4.x)&lt;br /&gt;
         * or window.event (for IE).&lt;br /&gt;
         */&lt;br /&gt;
        var oEvent = arguments[0] || window.event;&lt;br /&gt;
        &lt;br /&gt;
        /*&lt;br /&gt;
         * Get the new x and y coordinates for the dragged element by&lt;br /&gt;
         * subtracting the difference in the x and y direction from &lt;br /&gt;
         * the mouse position on the screen (clientX and clientY).&lt;br /&gt;
         */&lt;br /&gt;
        var iNewX = oEvent.clientX - oThis.diffX;&lt;br /&gt;
        var iNewY = oEvent.clientY - oThis.diffY;&lt;br /&gt;
        &lt;br /&gt;
        /*&lt;br /&gt;
         * Move the x coordinate if zDraggable.DRAG_X is an option.&lt;br /&gt;
         */&lt;br /&gt;
        if (oThis.constraints &amp;amp; zDraggable.DRAG_X) {&lt;br /&gt;
            oThis.element.style.left = iNewX + &amp;quot;px&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        /*&lt;br /&gt;
         * Move the y coordinate if zDraggable.DRAG_Y is an option.&lt;br /&gt;
         */&lt;br /&gt;
        if (oThis.constraints &amp;amp; zDraggable.DRAG_Y) {&lt;br /&gt;
            oThis.element.style.top = iNewY + &amp;quot;px&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        /*&lt;br /&gt;
         * Create and fire a drag event.&lt;br /&gt;
         */&lt;br /&gt;
        var oDragEvent = new zDragDropEvent();&lt;br /&gt;
        oDragEvent.initDragDropEvent(&amp;quot;drag&amp;quot;, false);&lt;br /&gt;
        oThis.dispatchEvent(oDragEvent);&lt;br /&gt;
    };&lt;br /&gt;
    &lt;br /&gt;
    /*&lt;br /&gt;
     * Create a temporary function for the mouseup event.&lt;br /&gt;
     */&lt;br /&gt;
    oThis.tempMouseUp = function () {   &lt;br /&gt;
    &lt;br /&gt;
        /*&lt;br /&gt;
         * Get the event object.&lt;br /&gt;
         */&lt;br /&gt;
        var oEvent = arguments[0] || window.event;&lt;br /&gt;
        &lt;br /&gt;
        /*&lt;br /&gt;
         * Determine if the mouse is over a drop target.&lt;br /&gt;
         */&lt;br /&gt;
        var oDropTarget = oThis.getDropTarget(oEvent.clientX, oEvent.clientY);&lt;br /&gt;
        if (oDropTarget != null) {&lt;br /&gt;
        &lt;br /&gt;
            /*&lt;br /&gt;
             * Fire the drop event.&lt;br /&gt;
             */&lt;br /&gt;
            var oDropEvent = new zDragDropEvent();&lt;br /&gt;
            oDropEvent.initDragDropEvent(&amp;quot;drop&amp;quot;, false, oThis);&lt;br /&gt;
            oDropTarget.dispatchEvent(oDropEvent);&lt;br /&gt;
        }    &lt;br /&gt;
        /*&lt;br /&gt;
         * Create and fire a dragend event.&lt;br /&gt;
         */&lt;br /&gt;
        var oDragEndEvent = new zDragDropEvent();&lt;br /&gt;
        oDragEndEvent.initDragDropEvent(&amp;quot;dragend&amp;quot;, false);&lt;br /&gt;
        oThis.dispatchEvent(oDragEndEvent);&lt;br /&gt;
            &lt;br /&gt;
        /*&lt;br /&gt;
         * Clear the currently dragged item.&lt;br /&gt;
         */ &lt;br /&gt;
        zDrag.clearCurrent();&lt;br /&gt;
                &lt;br /&gt;
        /*&lt;br /&gt;
         * Detach all of the event handlers.&lt;br /&gt;
         */&lt;br /&gt;
        oThis.detachEventHandlers();&lt;br /&gt;
    };&lt;br /&gt;
    &lt;br /&gt;
    /*&lt;br /&gt;
     * Determine which method to use to add the event handlers for&lt;br /&gt;
     * the mousemove and mouseup events.&lt;br /&gt;
     */&lt;br /&gt;
    if (document.addEventListener) {&lt;br /&gt;
        document.addEventListener(&amp;quot;mousemove&amp;quot;, this.tempMouseMove, false);&lt;br /&gt;
        document.addEventListener(&amp;quot;mouseup&amp;quot;, this.tempMouseUp, false);&lt;br /&gt;
    } else if (document.body.attachEvent) {&lt;br /&gt;
        document.body.attachEvent(&amp;quot;onmousemove&amp;quot;, this.tempMouseMove);&lt;br /&gt;
        document.body.attachEvent(&amp;quot;onmouseup&amp;quot;, this.tempMouseUp);&lt;br /&gt;
    } else {&lt;br /&gt;
        throw new Error(&amp;quot;zDrag doesn&amp;quot;t support this browser.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Detaches event handlers for the mousemove and mouseup events.&lt;br /&gt;
 * @scope private&lt;br /&gt;
 */&lt;br /&gt;
zDraggable.prototype.detachEventHandlers = function () {&lt;br /&gt;
    /*&lt;br /&gt;
     * Determine the method for removing the event handlers for the&lt;br /&gt;
     * mousemove and mouseup events.&lt;br /&gt;
     */&lt;br /&gt;
    if (document.removeEventListener) {&lt;br /&gt;
        document.removeEventListener(&amp;quot;mousemove&amp;quot;, this.tempMouseMove, false);&lt;br /&gt;
        document.removeEventListener(&amp;quot;mouseup&amp;quot;, this.tempMouseUp, false);&lt;br /&gt;
    } else if (document.body.detachEvent) {&lt;br /&gt;
        document.body.detachEvent(&amp;quot;onmousemove&amp;quot;, this.tempMouseMove);&lt;br /&gt;
        document.body.detachEvent(&amp;quot;onmouseup&amp;quot;, this.tempMouseUp);&lt;br /&gt;
    } else {&lt;br /&gt;
        throw new Error(&amp;quot;zDrag doesn&amp;quot;t support this browser.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Determines the drop target that the mouse is over.&lt;br /&gt;
 * @scope private&lt;br /&gt;
 * @param iX The x-coordinate of the mouse.&lt;br /&gt;
 * @param iY The y-coordinate of the mouse.&lt;br /&gt;
 * @return The drop target if the mouse is over one, null otherwise.&lt;br /&gt;
 */&lt;br /&gt;
zDraggable.prototype.getDropTarget = function (iX /*: int */, &lt;br /&gt;
                                               iY /*: int */) /*: zDropTarget */ {&lt;br /&gt;
    for (var i=0; i &amp;lt; this.targets.length; i++) {&lt;br /&gt;
        if (this.targets[i].isOver(iX, iY)) {&lt;br /&gt;
            return this.targets[i];&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return null;&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Moves the draggable element to a given position.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @param iX The x-coordinate to move to.&lt;br /&gt;
 * @param iY The y-coordinate to move to.&lt;br /&gt;
 */&lt;br /&gt;
zDraggable.prototype.moveTo = function (iX /*: int */, iY /*: int */) {&lt;br /&gt;
    this.element.style.left = iX + &amp;quot;px&amp;quot;;&lt;br /&gt;
    this.element.style.top = iY + &amp;quot;px&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Returns the left coordinate of the element.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @return The left coordinate of the element.&lt;br /&gt;
 */&lt;br /&gt;
zDraggable.prototype.getLeft = function () /*: int */ {&lt;br /&gt;
    return this.element.offsetLeft;&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Returns the top coordinate of the element.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @return The top coordinate of the element.&lt;br /&gt;
 */&lt;br /&gt;
zDraggable.prototype.getTop = function () /*: int */ {&lt;br /&gt;
    return this.element.offsetTop;&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Encapsulates information about a drag drop event.&lt;br /&gt;
 * @class&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @extends zEvent&lt;br /&gt;
 */&lt;br /&gt;
function zDragDropEvent() {&lt;br /&gt;
    /*&lt;br /&gt;
     * Inherit properties from zEvent.&lt;br /&gt;
     */&lt;br /&gt;
    zEvent.call(this);&lt;br /&gt;
} &lt;br /&gt;
/*&lt;br /&gt;
 * Inherit methods from zEvent.&lt;br /&gt;
 */&lt;br /&gt;
zDragDropEvent.prototype = new zEvent();&lt;br /&gt;
/**&lt;br /&gt;
 * Initializes the event object with information for the event.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @param sType The type of event encapsulated by the object.&lt;br /&gt;
 * @param bCancelable True if the event can be cancelled.&lt;br /&gt;
 * @param oRelatedTarget The alternate target related to the event.&lt;br /&gt;
 */&lt;br /&gt;
zDragDropEvent.prototype.initDragDropEvent = function(sType /*: String */,&lt;br /&gt;
                                                      bCancelable /*: boolean */,&lt;br /&gt;
                                                      oRelatedTarget /*: zEventTarget */) {&lt;br /&gt;
    /*&lt;br /&gt;
     * Call inherited method initEvent().&lt;br /&gt;
     */&lt;br /&gt;
    this.initEvent(sType, bCancelable);&lt;br /&gt;
    &lt;br /&gt;
    /*&lt;br /&gt;
     * Assign related target (may be null).&lt;br /&gt;
     */&lt;br /&gt;
    this.relatedTarget = oRelatedTarget;&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
 * A target for a zDraggable to be dropped.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @class&lt;br /&gt;
 * @extends zEventTarget&lt;br /&gt;
 */&lt;br /&gt;
function zDropTarget(oElement) {&lt;br /&gt;
    /*&lt;br /&gt;
     * Inherit properties from zEventTarget.&lt;br /&gt;
     */&lt;br /&gt;
    zEventTarget.call(this);&lt;br /&gt;
    /*&lt;br /&gt;
     * Call constructor.&lt;br /&gt;
     */&lt;br /&gt;
    this.construct(oElement);&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
 * Inherit methods from zEventTarget.&lt;br /&gt;
 */&lt;br /&gt;
zDropTarget.prototype = new zEventTarget;&lt;br /&gt;
/**&lt;br /&gt;
 * Creates a new instance based on the given DOM element.&lt;br /&gt;
 * @constructor&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @param oElement The DOM element to make into a drop target.&lt;br /&gt;
 */&lt;br /&gt;
zDropTarget.prototype.construct = function (oElement /*: HTMLElement */) {&lt;br /&gt;
    /**&lt;br /&gt;
     * The DOM element to use as a drop target.&lt;br /&gt;
     * @scope private&lt;br /&gt;
     */&lt;br /&gt;
    this.element = oElement;&lt;br /&gt;
    &lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Determines if a given set of coordinates is over the element.&lt;br /&gt;
 * @scope protected&lt;br /&gt;
 * @param iX The x-coordinate to check.&lt;br /&gt;
 * @param iY The y-coordinate to check.&lt;br /&gt;
 * @return True if the coordinates are over the element, false if not.&lt;br /&gt;
 */&lt;br /&gt;
zDropTarget.prototype.isOver = function (iX /*: int */, iY /*: int */) /*: boolean */ {&lt;br /&gt;
    var iX1 = this.element.offsetLeft;&lt;br /&gt;
    var iX2 = iX1 + this.element.offsetWidth;&lt;br /&gt;
    var iY1 = this.element.offsetTop;&lt;br /&gt;
    var iY2 = iY1 + this.element.offsetHeight;&lt;br /&gt;
    return (iX &amp;gt;= iX1 &amp;amp;&amp;amp; iX &amp;lt;= iX2 &amp;amp;&amp;amp; iY &amp;gt;= iY1 &amp;amp;&amp;amp; iY &amp;lt;= iY2);&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Returns the left coordinate of the drop target.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @return The left coordinate of the drop target.&lt;br /&gt;
 */&lt;br /&gt;
zDropTarget.prototype.getLeft = function () /*: int */ {&lt;br /&gt;
    return this.element.offsetLeft;&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Returns the top coordinate of the drop target.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @return The top coordinate of the drop target.&lt;br /&gt;
 */&lt;br /&gt;
zDropTarget.prototype.getTop = function () /*: int */{&lt;br /&gt;
    return this.element.offsetTop;&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Returns the height of the drop target.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @return The height of the drop target.&lt;br /&gt;
 */&lt;br /&gt;
zDropTarget.prototype.getHeight = function () /*: int */{&lt;br /&gt;
    return this.element.offsetHeight;&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Returns the width of the drop target.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @return The width of the drop target.&lt;br /&gt;
 */&lt;br /&gt;
zDropTarget.prototype.getWidth = function () /*: int */{&lt;br /&gt;
    return this.element.offsetWidth;&lt;br /&gt;
};        &lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
            function doLoad() {&lt;br /&gt;
                var oDraggable = new zDraggable(document.getElementById(&amp;quot;div1&amp;quot;), zDraggable.DRAG_X | zDraggable.DRAG_Y);&lt;br /&gt;
                var oDropTarget = new zDropTarget(document.getElementById(&amp;quot;divDropTarget&amp;quot;));&lt;br /&gt;
                oDraggable.addDropTarget(oDropTarget);&lt;br /&gt;
                oDropTarget.addEventListener(&amp;quot;drop&amp;quot;, function (oEvent) { &lt;br /&gt;
                    oEvent.relatedTarget.moveTo(oDropTarget.getLeft(), oDropTarget.getTop());&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            #div1 {&lt;br /&gt;
                background-color: red;&lt;br /&gt;
                height: 100px;&lt;br /&gt;
                width: 100px;&lt;br /&gt;
                position: absolute;&lt;br /&gt;
                z-index: 10;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            #divDropTarget {&lt;br /&gt;
                background-color: blue;&lt;br /&gt;
                height: 200px;&lt;br /&gt;
                width: 200px;&lt;br /&gt;
                position: absolute;&lt;br /&gt;
                left: 300px;                &lt;br /&gt;
            }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body onload=&amp;quot;doLoad()&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;P&amp;gt;Try dragging the red square onto the blue square.&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;div1&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;divDropTarget&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== System Drag And Drop between two text boxes==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;System Drag And Drop between two text boxes&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function handleDragDropEvent(oEvent) {&lt;br /&gt;
                var oTextbox = document.getElementById(&amp;quot;txt1&amp;quot;);&lt;br /&gt;
                oTextbox.value +=  oEvent.type + &amp;quot;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;P&amp;gt;Try dragging the text from the left textbox to the right one.&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;P&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; value=&amp;quot;drag this text&amp;quot;&lt;br /&gt;
                  ondragstart=&amp;quot;handleDragDropEvent(event)&amp;quot;&lt;br /&gt;
                  ondrag=&amp;quot;handleDragDropEvent(event)&amp;quot;&lt;br /&gt;
                  ondragend=&amp;quot;handleDragDropEvent(event)&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot;&lt;br /&gt;
               ondragenter=&amp;quot;handleDragDropEvent(event)&amp;quot;&lt;br /&gt;
               ondragover=&amp;quot;handleDragDropEvent(event)&amp;quot;&lt;br /&gt;
               ondragleave=&amp;quot;handleDragDropEvent(event)&amp;quot;&lt;br /&gt;
               ondrop=&amp;quot;handleDragDropEvent(event)&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;P&amp;gt;&amp;lt;textarea rows=&amp;quot;10&amp;quot; cols=&amp;quot;25&amp;quot; readonly=&amp;quot;readonly&amp;quot; id=&amp;quot;txt1&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>