// ddShared_ClientScripts
// initialise globals
if (typeof ddObject_Array !=  'object') {
	// ddObjectArray contains all the ddObjects for this page - only one per page
	ddObject_Array = new Array();
	// objObjectModifier contains the current object being modified by user mouse action (if any)
	// should always reference the top most occurence of objObjectModifier
	ddTopWindow = ddShared_GetTopWindow();
	if (window == ddTopWindow) {
		objObjectModifier = new Object();
		objObjectModifier.TargetObject = null;
		objObjectModifier.MouseMoveFunction = null;
		objObjectModifier.MouseUpFunction = null;
		objObjectModifier.ModifyType = 'None';
		objObjectModifier.ModifyVals = null;
		objObjectModifier.elementToHide = null;
	} else {
		objObjectModifier = ddTopWindow.objObjectModifier
	}
	// set document level event handlers
	document.onmousemove=ddTopWindow.ddShared_DoMouseMove;
	document.onmouseup=ddTopWindow.ddShared_DoMouseUp;
}
function ddShared_GetTopObjectModifier() {
	// works its way up the window hierarchy and returns the uppermost objObjectModifier it finds
	var theObjectModifier = null;
	var currentWindow = window;
	var topOfTheWorld = false;
	while (topOfTheWorld == false) {
		if (typeof objObjectModifier == 'object') {theObjectModifier=objObjectModifier}
		if (currentWindow == top) {topOfTheWorld = true}
		currentWindow=currentWindow.parent;
	}
	return theObjectModifier;
}
function ddShared_GetTopWindow() {
	// works its way up the window hierarchy and returns the uppermost window reference containing this script it finds
	var returnWindow = window;
	var currentWindow = window;
	var topOfTheWorld = false;
	while (topOfTheWorld == false) {
		if (typeof currentWindow.ddObject_Array ==  'object') {returnWindow=currentWindow}
		if (currentWindow == top) {topOfTheWorld = true}
		currentWindow=currentWindow.parent;
	}
	return returnWindow;
}
function ddShared_GetObject(ID){
	// utility function to grab a ddObject from ddObject_Array by its id
	for (var i=0; i<ddObject_Array.length; i++) {
		if (ddObject_Array[i].ID == ID) {
			return ddObject_Array[i];
		}
	}
}
function ddShared_RemoveObject(ID){
	// utility function to remove a ddObject from ddObject_Array by its id
	for (var i=0; i<ddObject_Array.length; i++) {
		if (ddObject_Array[i].ID == ID) {
			ddObject_Array.splice(i,1)
			return;
		}
	}
}
function ddShared_SetVisibilityOfElements(startWindow, tagName, visibility, finishWindow, recurseSubFrames) {
	if (startWindow != finishWindow) {
		arrSelectElems = startWindow.document.getElementsByTagName(tagName);
		for (var i=0; i<arrSelectElems.length; i++) {
			arrSelectElems[i].style.visibility=visibility;
		}
		if (recurseSubFrames) {
			for (var i=0; i<startWindow.frames.length ; i++) {
				ddShared_SetVisibilityOfElements(startWindow.frames[i], tagName, visibility, finishWindow, recurseSubFrames);
			}
		}
	}
}

function ddShared_ChangeIFrameLocation(iframe,url) {
	if (iframe.contentDocument) {
		iframe.contentDocument.location=url;
	} else {
		iframe.contentWindow.document.location=url;
	}
}
// resizing functions
function ddShared_BeginResize(objToResize, resizeType, elementToHide, evt) {
	if (window.event) {evt=event}	
	objObjectModifier.TargetObject = objToResize;
	objObjectModifier.ModifyType = 'resize';
	var objModifyVals = new Object();
	objModifyVals.originalWidth = ddShared_GetObjectWidth(objToResize);
	objModifyVals.originalHeight = ddShared_GetObjectHeight(objToResize);
	objModifyVals.originalMouseX = evt.screenX;
	objModifyVals.originalMouseY = evt.screenY;
	objModifyVals.resizeType = resizeType;
	objObjectModifier.ModifyVals = objModifyVals;
	switch (resizeType) {
		case 'width':
		document.body.style.cursor = 'w-resize';
		break;
		case 'height':
		document.body.style.cursor = 'n-resize';
		break;
		case 'all':
		document.body.style.cursor = 'nw-resize';
		break;
	}
	// ddDialog specific code: hide dialog content(interferes with mouse events if it contains an iframe)
	if (elementToHide != null) {
		objObjectModifier.elementToHide = elementToHide;
		objObjectModifier.elementToHide.style.visibility='hidden';
	} else {
		objObjectModifier.elementToHide = null;
	}
}
function ddShared_BeginDrag(objToDrag, elementToHide, evt) {
	if (window.event) {evt=event}	
	objObjectModifier.TargetObject = objToDrag;
	objObjectModifier.ModifyType = 'drag';
	var objModifyVals = new Object();
	objModifyVals.originalX = ddShared_GetObjectX(objToDrag);
	objModifyVals.originalY = ddShared_GetObjectY(objToDrag);
	objModifyVals.maxX = ddShared_GetInsideWindowWidth-ddShared_GetObjectWidth(objToDrag);
	objModifyVals.maxY = ddShared_GetInsideWindowHeight-ddShared_GetObjectHeight(objToDrag);
	objModifyVals.originalMouseX = evt.screenX;
	objModifyVals.originalMouseY = evt.screenY;
	objObjectModifier.ModifyVals = objModifyVals;
	// ddDialog specific code: hide dialog content(interferes with mouse events if it contains an iframe)
	if (elementToHide != null) {
		objObjectModifier.elementToHide = elementToHide;
		objObjectModifier.elementToHide.style.visibility='hidden';
	} else {
		objObjectModifier.elementToHide = null;
	}
}
function ddShared_DoMouseMove(evt, referredFromSubWindow) {
	//document.getElementById('testStuff').innerHTML = ''+objObjectModifier.TargetObject;
	if (referredFromSubWindow != true) {
		if (window.event) {evt=event}
	}
	if (objObjectModifier.TargetObject != null) {
		// cancel any selectinos that occur while draggin/resizing
		if (document.selection) {
			document.selection.empty();
		} else if (window.getSelection) {
			window.getSelection().removeAllRanges();
		}
		if (objObjectModifier.ModifyType == 'resize') {
			ddShared_DoResize(evt);
		} else if (objObjectModifier.ModifyType == 'drag') {
			ddShared_DoDrag(evt);
		}
		if (objObjectModifier.MouseMoveFunction != null) {
			objObjectModifier.MouseMoveFunction(evt);
		}
	}
}
function ddShared_DoDrag(evt) {
	if (window.event) {evt=event}
	var newX = objObjectModifier.ModifyVals.originalX+(evt.screenX-objObjectModifier.ModifyVals.originalMouseX);
	var newY = objObjectModifier.ModifyVals.originalY+(evt.screenY-objObjectModifier.ModifyVals.originalMouseY);
	if (newX < 1) {newX = 1}
	if (newX > objObjectModifier.ModifyVals.maxX) {newX = objObjectModifier.ModifyVals.maxX}
	if (newY < 1) {newY = 1}
	if (newY > objObjectModifier.ModifyVals.maxY) {newY = objObjectModifier.ModifyVals.maxY}	
	ddShared_MoveObjectToCoordinates(objObjectModifier.TargetObject,newX,newY);
}
function ddShared_DoResize(evt) {
	if (window.event) {evt=event}
	if (objObjectModifier.ModifyVals.resizeType == 'width' || objObjectModifier.ModifyVals.resizeType == 'all') {
		var newWidth = evt.screenX - objObjectModifier.ModifyVals.originalMouseX;
		newWidth = newWidth + objObjectModifier.ModifyVals.originalWidth;
		if (newWidth > 100) {
			objObjectModifier.TargetObject.style.width = newWidth+'px';
		}
	}
	if (objObjectModifier.ModifyVals.resizeType == 'height' || objObjectModifier.ModifyVals.resizeType == 'all') {
		var newHeight = evt.screenY - objObjectModifier.ModifyVals.originalMouseY;
		newHeight = newHeight + objObjectModifier.ModifyVals.originalHeight;
		if (newHeight > 100) {
			objObjectModifier.TargetObject.style.height = newHeight+'px';
			//force redraw for IE - grrr
			objObjectModifier.TargetObject.style.display='none';
			objObjectModifier.TargetObject.style.display='';
		}
	}
}
function ddShared_DoMouseUp(evt) {
	if (window.event) {evt=event}
	if (objObjectModifier.MouseUpFunction != null) {
		objObjectModifier.MouseUpFunction(evt, objObjectModifier.TargetObject);
	}
	// ddDialog specific code: unhide dialog content 
	if (objObjectModifier.elementToHide != null) {
		objObjectModifier.elementToHide.style.visibility='visible';
		// hack to get Firefox to redrew the container
		objObjectModifier.elementToHide.style.display='none';
		objObjectModifier.elementToHide.style.display='';
		objObjectModifier.elementToHide=null;
		objObjectModifier.MouseUpFunction=null;
		objObjectModifier.MouseMoveFunction=null;
	}
	objObjectModifier.TargetObject = null;
	objObjectModifier.ModifyType = 'None';
	objObjectModifier.ModifyVals = null;
	objObjectModifier.MouseUpFunction=null;
	objObjectModifier.MouseMoveFunction=null;
	document.body.style.cursor = 'auto';
}

// ==========================================
// generic css positooning utility functions
// ==========================================
function ddShared_GetInsideWindowWidth() {
	if (window.innerWidth) {
		return window.innerWidth;
	} else if (document.body.parentElement.clientWidth) {
		return document.body.parentElement.clientWidth;
	} else {
		return 0;
	}
}
function ddShared_GetInsideWindowHeight() {
	if (window.innerWidth) {
		return window.innerHeight;
	} else if (document.body.parentElement.clientHeight) {
		return document.body.parentElement.clientHeight;
	} else {
		return 0;
	}
}
function ddShared_GetObjectX(elem) {
	return parseInt(elem.style.left);
}
function ddShared_GetObjectY(elem) {
	return parseInt(elem.style.top);
}
function ddShared_GetObjectWidth(elem) {
	var  result=0;
	if (elem.offsetWidth) {
		if (elem.scrollWidth && (elem.offsetWidth != elem.scrollWidth)) {
			result = elem.scrollWidth;
		} else {
			result = elem.offsetWidth;
		}
	} else if (elem.clip && elem.clip.width) {
		result = elem.clip.width;
	} else if (elem.style && elem.style.pixelWidth) {
		result = elem.style.pixelWidth;
	}
	return parseInt(result);
}
function ddShared_GetObjectHeight(elem) {
	var  result=0;
	if (elem.offsetHeight) {
		result = elem.offsetHeight;
	} else if (elem.clip && elem.clip.height) {
		result = elem.clip.height;
	} else if (elem.style && elem.style.pixelHeight) {
		result = elem.style.pixelHeight;
	}
	return parseInt(result);
}
function ddShared_MoveObjectToCoordinates(elem,x,y) {
	elem.style.left = parseInt(x) + "px";
	elem.style.top = parseInt(y) + "px";
}
function ddShared_CenterObjectInWindow(objToCenter) {
	var x = Math.round((ddShared_GetInsideWindowWidth()/2) - (ddShared_GetObjectWidth(objToCenter)/2));
	var y = Math.round((ddShared_GetInsideWindowHeight()/2) - (ddShared_GetObjectHeight(objToCenter)/2));
	ddShared_MoveObjectToCoordinates(objToCenter,x,y);
}


// ==========================================
// componentArt specfic utility functions
// ==========================================
function ddShared_DisableComponentArtContextMenuItemById(oContextMenu, Id){
	var cmItems = oContextMenu.Items();
	for (var i=0; i<cmItems.length;i++) {
		if (cmItems[i].ID==Id) {
			var oObj = document.getElementById(oContextMenu.ControlId +'_'+i);
			oObj.className = 'MenuItemDisabled';
			//oObj.onmousedown.style.color='#ffffff';
			oObj.onmousedown= function(){};
			oObj.onmouseup=function(){};
			oObj.onclick=function(){};
			oObj.onmouseover=function(){};
			oObj.onmouseout=function(){};
		}
	}
}
function ddShared_HideComponentArtContextMenuItemById(oContextMenu, Id){
	var cmItems = oContextMenu.Items();
	for (var i=0; i<cmItems.length;i++) {
		if (cmItems[i].ID==Id) {
			document.getElementById(oContextMenu.ControlId +'_'+i).style.display='none';
		}
	}
}
function ddShared_HideComponentArtContextMenuItemByIndex(sContextMenuClientId, iIndex){
	document.getElementById(sContextMenuClientId+'_'+iIndex).style.display='none';
}
function ddShared_ShowComponentArtContextMenuItemByIndex(sContextMenuClientId, iIndex){
	document.getElementById(sContextMenuClientId+'_'+iIndex).style.display='';
}
function ddShared_DisableComponentArtContextMenuItemByIndex(sContextMenuClientId, iIndex){
	var oObj = document.getElementById(sContextMenuClientId+'_'+iIndex);
	oObj.className = 'MenuItemDisabled';
	oObj.onmousedown= function(){};
	oObj.onmouseup=function(){};
	oObj.onclick=function(){};
	oObj.onmouseover=function(){};
	oObj.onmouseout=function(){};
}


// ==========================================
// ddDialog and ddModalDialog shared functions 
// ==========================================

function ddDialog_GetDialogObject(DialogId) {
	// utility function to grab a dialog object (modal or dialog) from by its id
	var theDialogObject = null;
	for (var i=0; i<ddModalDialog_Array.length;i++) {
		if (ddModalDialog_Array[i].ID == DialogId) {
			theDialogObject = ddModalDialog_Array[i];
			}
	}
	for (var i=0; i<ddDialog_Array.length;i++) {
		if (ddDialog_Array[i].ID == DialogId) {theDialogObject = ddDialog_Array[i]}
	}
	return theDialogObject;
}

function ddDialog_BeginDrag(DialogId,evt) {
	if (window.event) {evt=event}
	var objDialog = ddDialog_GetDialogObject(DialogId);
	objToDrag = objDialog.dragContainer;
	elementToHide = objDialog.contentContainer;
	// don't hide the content if already hidden (it knackers the works up)
	if (elementToHide.style.display=='none' || elementToHide.style.visibility=='hidden') {elementToHide=null}
	ddShared_BeginDrag(objToDrag, elementToHide, evt);
}
function ddDialog_BeginResize(DialogId, type, evt) {
	if (window.event) {evt=event}
	// exit if panel is collapsed - resizing a collapsed panel is a bad thing
	var objPanel = ddShared_GetObject(DialogId);
	if (!objPanel.expanded) {return}
	var objDialog = ddDialog_GetDialogObject(DialogId);
	objToResize = objDialog.resizeContainer;
	elementToHide = objDialog.contentContainer;
	// don't hide the content if already hidden (it knackers the works up)
	if (elementToHide.style.display=='none' || elementToHide.style.visibility=='hidden') {elementToHide=null}
	ddShared_BeginResize(objToResize, type, elementToHide, evt);
}
function ddDialog_DialogContainerResized(DialogContainer,DialogId) {
	objBackingIframe = document.getElementById('ddDialog_BackingIframe_'+DialogId);
	//alert(objBackingIframe.style.width + ',' + objBackingIframe.style.height);
	//alert(DialogContainer.style.width + ',' + DialogContainer.style.height);
	//objBackingIframe.style.width = ddShared_GetObjectWidth(DialogContainer)+'px';
	//objBackingIframe.style.height = ddShared_GetObjectHeight(DialogContainer)+'px';
	//objBackingIframe.style.width = ddShared_GetObjectWidth(DialogContainer)+'px';
	//objBackingIframe.style.height = ddShared_GetObjectHeight(DialogContainer)+'px';
	document.getElementById('testy').innerHTML = ddShared_GetObjectWidth(DialogContainer)+'px '+ddShared_GetObjectHeight(DialogContainer)+'px';
	objBackingIframe.style.width = '800px';
	objBackingIframe.style.height = '200px';
}

// ==========================================
// Remote Procedure Call shared functions 
// ==========================================

function ddShared_RemoteProcedureCall(targetURL){
	 var head=document.getElementsByTagName('head').item(0);
	 var old=document.getElementById('lastScript');
	 if(old) {head.removeChild(old)} else {script=document.createElement('script');head.appendChild(script);head.removeChild(script);};
	 script=document.createElement('script');
	 script.src=targetURL+'&random='+(Math.round((Math.random()*1000)+1));
	 script.type='text/javascript';
	 script.defer=true;
	 script.id='lastScript'
	 void(head.appendChild(script));
}

// ==========================================
// Project Specific shared functions 
// ==========================================

function ddAlert(sMsg){
	parent.ddOpenModalDialog('/admin/pages/common/alert.aspx?msg='+escape(sMsg), '', '600', '20', modalCallBack, null);
}

function ddFormatDateToUK(oDate){
	return oDate.getDate()+'/'+(parseInt(oDate.getMonth())+1)+'/'+oDate.getFullYear();
}

