/**
 * @author: gsyn77
 * @version: 1.1.0
 * @create-date: 2008-04-24
 * @last-modified: 2008-06-12
 */
if (!JSDN) 
{
    var JSDN = {};
}
JSDN.Clip = function(id)
{
    this.handler = JSDN._$(id);
    if (!this.handler) 
        return;
    /**
     *	Scroll Left
     */
    this.X = function()
    {
        var leftX;
        
        if (this.handler.pageXOffset) 
        {
            leftX = this.handler.pageXOffset;
        }
        else if (this.handler.scrollLeft) 
        {
            leftX = this.handler.scrollLeft;
        }
        
        return leftX;
    };
    /**
     *	Scroll Top
     */
    this.Y = function()
    {
        var topY;
        if (this.handler.pageYOffset) 
        {
            topY = this.handler.pageYOffset;
        }
        else if (this.handler.scrollTop) 
        {
            topY = this.handler.scrollTop;
        }
        return topY;
    };
    /**
     *
     */
    this.Width = function()
    {
        var widthW;
        if (this.handler.innerWidth) 
        {
            widthW = this.handler.innerWidth;
        }
        else if (this.handler.clientWidth) 
        {
            widthW = this.handler.clientWidth;
        }
        return widthW;
    };
    /**
     *
     */
    this.Height = function()
    {
        var heightH;
        if (this.handler.innerHeight) 
        {
            heightH = this.handler.innerHeight;
        }
        else if (this.handler.clientHeight) 
        {
            heightH = this.handler.clientHeight;
        }
        return heightH;
    }
    
};
/**
 *
 */
JSDN.FlyLayer = 
{
    _interval_: 100,
    _currentMovingLayer_: 
    {
        handler: null,
        id: ""
    },
    _currentDragLayer_: 
    {
        handler: null,
        id: ""
    },
    _MoveClip_CurrentX_: 0,
    _MoveClip_CurrentY_: 0,
    Layers: [],
    
    _FlyerClass_: function(id)
    {
    
        this.id = id;
        this.X = -1;
        this.Y = -1;
        var _handler_ = JSDN._$(id);
        var _clip_ = new JSDN.Clip(id);
        
        this.Arrange = function()
        {
            var left = this.X > 0 ? JSDN.ClientArea.X() + this.X : JSDN.ClientArea.X() + JSDN.ClientArea.Width() - _clip_.Width() - 20;
            var top = this.Y > 0 ? JSDN.ClientArea.Y() + this.Y : JSDN.ClientArea.Y() + JSDN.ClientArea.Height() - _clip_.Height() - 20;
            _handler_.style.top = top + "px";
            _handler_.style.left = left + "px";
        };
    },
    _Fly_: function()
    {
        if (typeof JSDN.FlyLayer.Layers == "undefined") 
        {
            return;
        }
        
        var iLen = JSDN.FlyLayer.Layers.length;
        if (iLen == 0) 
        {
            return;
        }
        var arr = JSDN.FlyLayer.Layers;
        var elements = new Array();
        var handlee = null;
        handlee = arr.shift();
        while (handlee) 
        {
            if (typeof handlee == "object" && handlee["handler"].Arrange) 
            {
                handlee["handler"].Arrange();
            }
            elements.push(handlee);
            
            handlee = arr.shift();
        }
        JSDN.FlyLayer.Layers = elements;
    },
    /**
     *
     * @param {Object} id
     * @param {Object} interval
     */
    New: function(id, interval)
    {
        var oFlyer = new JSDN.FlyLayer._FlyerClass_(id);
        var oFlyerGroup = 
        {
            "id": oFlyer.id,
            "handler": oFlyer
        };
        JSDN.FlyLayer.Layers.push(oFlyerGroup);
        if (interval) 
        {
            try 
            {
                JSDN.FlyLayer._interval_ = parseInt(interval);
            } 
            catch (e) 
            {
            }
            
        }
        return oFlyer;
    },
    SetFlyStart: function()
    {
        window.setInterval("JSDN.FlyLayer._Fly_()", JSDN.FlyLayer._interval_);
    },
    /** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
     * 	Drag & Drop
     * 	created in 2007 - 09 - 19
     * 	By : gsyn77
     * 	Test - proved :
     * 		ie_7.0(7.0.5730.11)
     * 		firefox_2.0.0.7
     * 		opera_9.22
     * 	WITH
     * 		<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd" >
     * 		<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" >
     ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
    SetDraggable: function(id)
    {
        JSDN.FlyLayer._currentDragLayer_.handler = JSDN._$(id);
        JSDN.FlyLayer._currentDragLayer_.id = id;
    },
    /**
     *
     * @param {Object} evt
     */
    _Move_: function(evt)
    {
        var e = evt || event;
        var _mover_ = JSDN.FlyLayer._currentMovingLayer_.handler;
        var _client_ = JSDN.ClientArea;
        /*
         if (!_mover_)
         {
         return false;
         }
         */
        var newX = (parseInt(e.clientX) + _client_.X());
        var newY = (parseInt(e.clientY) + _client_.Y());
        var distanceX = (newX - JSDN.FlyLayer._MoveClip_CurrentX_);
        var distanceY = (newY - JSDN.FlyLayer._MoveClip_CurrentY_);
        JSDN.FlyLayer._MoveClip_CurrentX_ = newX;
        JSDN.FlyLayer._MoveClip_CurrentY_ = newY;
        
        _mover_.style.left = (parseInt(_mover_.style.left) + distanceX).toString() + "px";
        _mover_.style.top = (parseInt(_mover_.style.top) + distanceY).toString() + "px";
        
        if (parseInt(_mover_.style.top) < _client_.Y()) 
        {
            _mover_.style.top = _client_.Y() + "px";
        }
        if (parseInt(_mover_.style.left) < _client_.X()) 
        {
            _mover_.style.left = _client_.X() + "px";
        }
        
        if (parseInt(_mover_.offsetLeft) > _client_.Width() - _client_.X() - parseInt(_mover_.style.width) - 20) 
        {
            _mover_.style.left = (_client_.Width() - parseInt(_mover_.style.width) - 20).toString() + "px";
        }
        if (parseInt(_mover_.offsetTop) > _client_.Height() + _client_.Y() - parseInt(_mover_.style.height) - 5) 
        {
            _mover_.style.top = (_client_.Height() + _client_.Y() - parseInt(_mover_.style.height) - 5).toString() + "px";
        }
        
        e.returnValue = false;
    },
    _Drop_: function()
    {
        if (!document.attachEvent) 
        {
            window.releaseEvents(Event.MOUSEMOVE | Event.MOUSEDOWN | Event.MOUSEUP);
        }
        var _mover_ = JSDN.FlyLayer._currentMovingLayer_.handler;
        var _dragger_ = JSDN.FlyLayer._currentDragLayer_.handler;
        var _moverclip_ = new JSDN.Clip(JSDN.FlyLayer._currentMovingLayer_.id);
        _dragger_.style.left = _mover_.offsetLeft + "px";
        _dragger_.style.top = _mover_.offsetTop + "px";
        
        document.onmousemove = null;
        document.onmouseup = null;
        
        _mover_.style.display = "none";
    	
		var sDropId = _dragger_.id;        
        var iLen = JSDN.FlyLayer.Layers.length;
			
        for (var i = 0; i < iLen; i++) 
        {
            var layer = JSDN.FlyLayer.Layers[i];
            if (layer["id"] == sDropId) 
            {
                layer["handler"].X = parseInt(_mover_.style.left);
                layer["handler"].Y =  parseInt(_mover_.style.top);
            }
        }        
		
		JSDN.FlyLayer._currentMovingLayer_.handler = null;
        //JSDN.FlyLayer._currentDragLayer_.handler = null;
        return true;
    },
    _Drag_: function(evt)
    {
        ///
        /// Proved for : ie_7.0(7.0.5730.11) firefox_2.0.0.7 opera_9.22
        ///
        var layer = document.createElement("DIV");
        layer.id = new String(JSDN._$Rnd());
        with (layer.style) 
        {
            zIndex = "99999";
            border = "2px solid #444444";
            cursor = "move";
            display = "none";
            position = "absolute";
        }
        document.body.insertBefore(layer, document.body.firstChild);
        JSDN.FlyLayer._currentMovingLayer_.handler = JSDN._$(layer.id);
        JSDN.FlyLayer._currentMovingLayer_.id = layer.id;
        layer = null;
        
        var e = evt || event;
        var oTarget = e.srcElement;
        if (oTarget && !JSDN.FlyLayer._currentDragLayer_.handler) 
        {
            JSDN.FlyLayer._currentDragLayer_.handler = oTarget;
        }
        
        var _clip_ = new JSDN.Clip(JSDN.FlyLayer._currentDragLayer_.id);
        var _mover_ = JSDN.FlyLayer._currentMovingLayer_.handler;
        var _dragger_ = JSDN.FlyLayer._currentDragLayer_.handler;
        var _client_ = JSDN.ClientArea;
        with (_mover_.style) 
        {
            border = "2px solid #444444";
            top = _dragger_.offsetTop + "px";
            left = _dragger_.offsetLeft + "px";
            width = _dragger_.clientWidth + "px";
            height = _dragger_.clientHeight + "px";
            display = "block";
        }
        
        JSDN.FlyLayer._MoveClip_CurrentX_ = (parseInt(e.clientX) + _client_.X());
        JSDN.FlyLayer._MoveClip_CurrentY_ = (parseInt(e.clientY) + _client_.Y());
        
        if (!document.attachEvent) 
        {
            window.captureEvents(Event.MOUSEMOVE | Event.MOUSEDOWN | Event.MOUSEUP);
        }
        document.onmousemove = JSDN.FlyLayer._Move_;
        document.onmouseup = JSDN.FlyLayer._Drop_;
        
        return true;
    }
};
