var bMouseDown = false;	
var bMouseMoved = false;
var stateClicked;
var cxOffset = 0;
var cxOffsetBody = 0;
var cyOffset = 0;
var cyOffsetBody = 0
var ptrWPArea = null;
var ptrWPBody = null
var classNameSrc;
var ptrDrag = null;
var zoneLast = null;
var iInsert = 0;

var nodeParent = null;

//function Document_OnMouseDown(divWP,wp)
function Document_OnMouseDown()
{
	var obj;
	
	obj = window.event.srcElement;
	if( obj == null ) return;
	
	if( obj.className != 'WPSizerN' && obj.className != 'WPSizerW' && obj.className != 'WPSizerNW' && obj.className != 'WPMovedTitle' ) 
	{
		obj = GetPartElement(window.event.srcElement,'WPMovedTitle');
		if( obj == null ) return;
	}
	
	ptrWPArea = GetPartElement(window.event.srcElement,'WPArea');
	
	if( ptrWPArea == null ) return;
	
	classNameSrc = obj.className;
	
	switch(classNameSrc)
	{
		case 'WPMovedTitle':

			nodeParent = ptrWPArea.parentNode;
			ptrWPArea.swapNode(nodeParent.lastChild);

			cxOffset = window.event.clientX - GetAbsoluteLeft(window.event.srcElement) + document.body.scrollLeft;
			cyOffset = window.event.clientY - GetAbsoluteTop(window.event.srcElement) + document.body.scrollTop;
			
			ptrWPArea.style.filter = 'alpha(opacity=50)';
			ptrWPArea.style.scrollLeft = (window.event.x - cxOffset) + 'px';
			ptrWPArea.style.scrollTop = (window.event.y - cyOffset) + 'px';
			
		
			break;
			
		case 'WPSizerN':
		case 'WPSizerW':		
		case 'WPSizerNW':		
			ptrWPBody = eval('WebPart' + ptrWPArea.id);
			
			ptrWPArea.style.height = ptrWPArea.offsetHeight;
			ptrWPArea.style.width = ptrWPArea.offsetWidth;
			
			ptrWPBody.style.height = ptrWPBody.offsetHeight;
			ptrWPBody.style.width = ptrWPBody.offsetWidth;
			
			
			cxOffset = GetAbsoluteLeft(ptrWPBody);
			cyOffset = GetAbsoluteTop(ptrWPBody);
			

			//Gére la différence de pixel entre la partie scroll et le Body
			cxOffsetBody = ptrWPArea.offsetWidth - ptrWPBody.offsetWidth;
			cyOffsetBody = ptrWPArea.style.width - ptrWPBody.style.width;
			
		
			break;
		default:
			return;

	}	

	bMouseDown = true;
	ptrWPArea.setCapture();

}

function GetAbsoluteTop(elem)
{
	var topPosition = 0;
	while (elem)
	{
		if (elem.tagName == 'BODY')
			break;
		topPosition += elem.offsetTop;
		elem = elem.offsetParent;
	}
	return topPosition;
}

function GetAbsoluteLeft(elem)
{
	var leftPosition = 0;
	while (elem)
	{
		if (elem.tagName == 'BODY')
			break;
		leftPosition += elem.offsetLeft;
		elem = elem.offsetParent;
	}
	return leftPosition;
}

function GetPartElement(subElem,ClassName)
{
	var partFrame = subElem
	while (partFrame.className != ClassName)
	{
		partFrame = partFrame.parentElement;
		if (partFrame == null)
			break;
		
	}
	return partFrame;
}

function GetChildElement(subElem,ClassName)
{
	var returnValue = null;
	
	var partFrame = subElem;
	
	if( partFrame == null ) return null;
	if( partFrame.className == ClassName) return partFrame;
	if( partFrame.childNodes.lenght > 0 ) returnValue = GetChildElement(partFrame.childNodes[0],ClassName);
	if( returnValue == null ) returnValue = GetChildElement(partFrame.nextSibling,ClassName);
	
	return returnValue;
}


function Div_OnMouseMove()
{
	//alert('coucou');
	var x;
	var y;
	if (bMouseDown)
	{
		bMouseMoved = true;
		switch(classNameSrc)
		{
			case 'WPMovedTitle':
				
		
				ptrWPArea.style.left = ( window.event.x - cxOffset + document.body.scrollLeft ) + 'px';
				ptrWPArea.style.top = (window.event.y - cyOffset + document.body.scrollTop )+ 'px';
				break;
				
			default:
				
				if( classNameSrc == 'WPSizerN' || classNameSrc == 'WPSizerNW')
				{
				
					y = (window.event.clientY - cyOffset);
					if( y > 0 ) 
					{
						ptrWPBody.style.height =  y + 'px';
						ptrWPArea.style.height =  y + 'px';
					}
				}
				if( classNameSrc == 'WPSizerW' || classNameSrc == 'WPSizerNW' )
				{
					
					x = (window.event.clientX - cxOffset);
					if( x > 0 )
					{
						ptrWPBody.style.width = (x - cxOffsetBody) + 'px';
						ptrWPArea.style.width =  x + 'px';
						//if( (ptrWPArea.offsetWidth - ptrWPBody.offsetWidth) > cxOffsetBody ) ptrWPBody.style.width =  ptrWPArea.offsetWidth + 'px';
					}
				}
				
				break;

		}


	}        
}

function Div_OnMouseUp(part)
{
	if (bMouseDown)
	{			
		bMouseDown = false;

		/*if (bMouseMoved)
		{*/
			bMouseMoved = false;
			//ptrDrag.style.position = '';
			//ptrDrag.removeNode(true);
			ptrWPArea.releaseCapture();
			ptrWPArea.style.filter = 'alpha(opacity=100)';
			SavePosition(ptrWPArea,part);

			ptrWPBody = null;
			ptrWPArea = null;

//		}
	}
}

function GetZoneFromPoint(x, y, prtDrag)
{
	var OldZOrder = prtDrag.style.zIndex;

	prtDrag.style.zIndex = -1;
		
	var zone = document.elementFromPoint(x, y);
	prtDrag.style.zIndex = OldZOrder;

	if ((zone.className == 'HeaderSection') || (zone.className == 'BodySections')  || (zone.className == 'FooterSection'))
	{
		while ((!IsZone(zone)) && (zone.tagName != 'BODY'))
		{
			zone = zone.parentElement;
		}
	}

	// Last check is that we might be over the body or something
	// else that is not a zone at all. If the current return pointer
	// is not of className = "Zone" or "LayoutDropZone" then return Nothing
	if (!IsZone(zone))
	{
		zone = null;
	}
	return zone;
}

function IsZone(elem)
{
	var fRet = false;
	var strClass;
	var ich;
	
	if (elem)
	{
		strClass = elem.className;
		ich = strClass.indexOf(' ');
		if (ich != -1)
		{
			strClass = strClass.substr(0, ich);
		}
		
		fRet = strClass == 'DashZoneTop' || strClass == 'DashZoneLeft' || strClass == 'DashZoneCenter' || strClass == 'DashZoneRight' || strClass == 'DashZoneBottom';
	}
	return fRet;
}

function SavePosition(divPart,part)
{
	var varProp;

	varProp = part.properties.Add("Left");
	varProp.value = divPart.style.left;

	varProp = part.properties.Add("Top");
	varProp.value = divPart.style.top;
	
	varProp = part.properties.Add("Width");
	varProp.value = divPart.style.width;

	varProp = part.properties.Add("Height");
	varProp.value = divPart.style.height;
	part.save();

}