var di;

function initDragItems()
{
    if( !document.di )
    {
        document.di = new dragItems();
        di = document.di;
    }
}

function dragItems()
{
    this.init();    
}

dragItems.prototype.init = function()
{
    this.selectedObj = false;
    this.elements = new Array();
	this.blockDiv = '';
	this.IEExists = false;
	
    this.offsetX = 0;
    this.offsetY = 0;
    
	if (getObj("notesBlockDiv"))
		this.blockDiv = "notesBlockDiv";
	if (/MSIE (5\.5|6\.)/.test(navigator.userAgent))
		this.IEExist = true;
		
    if (document.layers) 
    {
        // turn on event capture for these events in NN4 event model
        document.captureEvents( Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP );
        return;    
    } 
    else if ( document.body & document.body.addEventListener ) 
    {
        // turn on event capture for these events in W3C DOM event model
        document.addEventListener( "mousedown", this.engage, true );
        document.addEventListener( "mousemove", this.dragIt, true );
        document.addEventListener( "mouseup", this.releaseDrag, true );
        return;
    }
    
    document.onmousedown = this.engage;
    document.onmousemove = this.dragIt;
    document.onmouseup = this.releaseDrag;
    
    return;
} 


dragItems.prototype.dragSel = function( evt )
{   
	if( this.elements.length == 0 )
	   return;
	   
    var target = evt.target ? evt.target : evt.srcElement;
	
	if( !target || !target.tagName )
	   return;

    var tag = target.tagName;      
	   
	if ( tag == "SELECT" || tag == "INPUT" || tag == "TEXTAREA" || tag == 'IMG' )
		return;
		
    while ( tag !="BODY" )
	{
		var id = target.id ? target.id : '';
		
		for( var j = 0; j < this.elements.length; j++ )
		{
		    if( this.elements[ j ].id == id )
		    {
		        this.selectedObj = target;
		        this.selectedObj.oldZIndex = this.selectedObj.style.zIndex;
		        this.selectedObj.style.zIndex = 1000;
		        return;
		    }
		}
		
		target = target.parentNode;
		
		if( !target || !target.tagName )
		  return;
		  
		tag = target.tagName;
		
    }
    
    this.selectedObj = false;
    return;
}

dragItems.prototype.engage = function( evt )
{
    evt = (evt) ? evt : event;
    var di = document.di;
    
    di.dragSel( evt );
    
    if ( di.selectedObj ) {
        if ( document.body && document.body.setCapture )
		{
            // engage event capture in IE/Win
            document.body.setCapture();
        }
        
        if ( evt.pageX ) 
        {
            di.offsetX = evt.pageX - ( di.selectedObj.offsetLeft ? di.selectedObj.offsetLeft : di.selectedObj.left );
            di.offsetY = evt.pageY - ( di.selectedObj.offsetTop ? di.selectedObj.offsetTop : di.selectedObj.top);
        } 
        else if (typeof evt.offsetX != "undefined") 
        {
            di.offsetX = evt.offsetX - ( evt.offsetX < -2 ? 0 : document.body.scrollLeft );
            di.offsetX -= ( document.body.parentElement && document.body.parentElement.scrollLeft ) ? document.body.parentElement.scrollLeft : 0;
                     
            di.offsetY = evt.offsetY - ( evt.offsetY < -2 ? 0 : document.body.scrollTop );
            di.offsetY -= ( document.body.parentElement && document.body.parentElement.scrollTop ) ? document.body.parentElement.scrollTop : 0;
        }
        else if (typeof evt.clientX != "undefined") 
        {
            di.offsetX = evt.clientX - ( di.selectedObj.offsetLeft ? di.selectedObj.offsetLeft : 0 );
            di.offsetY = evt.clientY - ( di.selectedObj.offsetTop ? di.selectedObj.offsetTop : 0 );
        }
        
        return false;
    }    
}

dragItems.prototype.add = function( _obj )
{
    var obj;
    
    if( !( obj = getObj( _obj ) ) )
        return;

    if( !obj.id )
        obj.id = 'win' + parseInt( Math.round( Math.random() * 100000 ) );
        
    obj.style.position = 'absolute';
    obj.style.zIndex = 1000;
    obj.di = true;
    
    this.elements[ this.elements.length ] = obj;
	
	if (this.blockDiv != '')
	{
		block = getObj(this.blockDiv);
		if (this.IEExist)
		{
			fixBg (block);
			SwitchSelectsShow ();
		}
		ExpandDiv (this.blockDiv);
		block.style.display = "block";
	}
	
    return true;    
}

dragItems.prototype.remove = function( _obj )
{
    var obj;

	if (this.blockDiv != '')
	{
		getObj(this.blockDiv).style.display = "none";
	}

    if( !( obj = getObj( _obj ) ) )
        return;
        
    for( var i = 0; i < this.elements.length; i++ )
    {
        if( this.elements[i].id == obj.id )
        {
            hide( this.elements[i] );
            this.elements[i].innerHTML = '';
            this.elements[i].parentNode.removeChild( this.elements[i] );
            this.elements.unset( i );
        }
    }
	
}


dragItems.prototype.close = function( _obj )
{
    var obj;
    
    if( !( obj = getObj( _obj ) ) )
        return;
        
    while( !obj.di && obj.tagName != 'BODY' )
    {
        obj = obj.parentNode;
    }
    
    if( !obj.di )
        return;
    
    this.remove( obj );
    return true;
}


dragItems.prototype.dragIt = function( evt )
{
    evt = evt ? evt : event;
    var di = document.di;
    
    
    if ( di.selectedObj ) 
    {
        if (evt.pageX) 
        {
            di.selectedObj.style.left = ( evt.pageX - di.offsetX ) + 'px';
			di.selectedObj.style.top = ( evt.pageY - di.offsetY ) + 'px';
        } 
        else if (evt.clientX || evt.clientY) 
        {
            di.selectedObj.style.left = ( evt.clientX - di.offsetX) + 'px';
			di.selectedObj.style.top = ( evt.clientY - di.offsetY) + 'px';
        }

        return false;
    }    
}

dragItems.prototype.releaseDrag = function( evt )
{
    evt = evt ? evt : event;
    var di = document.di;

    if ( di.selectedObj ) 
    {
        if ( document.body && document.body.releaseCapture ) 
        {
            // stop event capture in IE/Win
            document.body.releaseCapture();
        }
        
        di.selectedObj.style.zIndex = di.selectedObj.oldZIndex;
        di.selectedObj = false;
    }    
}
