devdaily home | apple | java | perl | unix | directory | blog

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

//--Global declaration
var gxmlDoc = null;
var garrLayoutParts = new Array();
var arrParts = new Array("HPFrameHL", "HPFrameDL");
var blnIE5    = false;
var blnBorder = false;
var blnTrack  = false;
var blnDebug  = false;
var blnMoved  = false;

var userAgent = navigator.userAgent;
var MSIEIndex = userAgent.indexOf("MSIE");
if (userAgent.indexOf("Win")  != -1 &&
	userAgent.indexOf("MSIE") != -1 &&
	userAgent.substring((MSIEIndex + 5),(MSIEIndex + 6)) > 4)
{
	blnIE5 = true;
}

//--Object declaration
function objPart(strPartName, strState, strOrder)
{
	this.name	= strPartName;
	this.state	= strState;
	this.order	= strOrder;
}

function loadPage(nthTrack,nthBorder)
{
	var sFile = new String(window.document.location);
	var blnDefault = (sFile.toLowerCase().indexOf("morenews") == -1);

	blnDebug = (QueryString('dbg') != "");
	var s = QueryString("border");
	if (s != "") nthBorder = parseInt(s);
	s = QueryString("track");
	if (s != "") nthTrack = parseInt(s);

	//--Determine whether to track.
	if (nthTrack > 0)
	{
		var td = new Date();
		var xval = 67890;
		var yval = ((Math.round(Math.abs(Math.cos(td.getTime()))*xval)%xval));
		if ((yval % nthTrack) == 0)
			blnTrack = true;
	}

	if (blnIE5)
	{
		if (blnDefault)
		{  
			for (var i = 0; i < arrParts.length; i++)
				garrLayoutParts[i] = new objPart(arrParts[i], "EXPAND", i);

			//--Initialize part display state
			RearrangePartPos();
			loadSavedShowHide();

			//--Initialize mouse even handlers
			window.document.onmousedown = Document_OnMouseDown;
			window.document.onmousemove = Document_OnMouseMove;
			window.document.onmouseup   = Document_OnMouseUp;

			//--Determine whether to show border.
			if (nthBorder > 0)
			{
				var td = new Date();
				var xval = 12345;
				var yval = ((Math.round(Math.abs(Math.cos(td.getTime()))*xval)%xval));
				if ((yval % nthBorder) == 0)
				{
					blnBorder = true;
					document.all("HPFrameHLContent").style.borderColor = "#cccccc";
					document.all("HPFrameDLContent").style.borderColor = "#cccccc";
				}
			}
		}
	}
	else
	{
		//--Enable collapse/expand for IE4+
		if (blnDefault &&
		    userAgent.indexOf("MSIE") != -1 &&
		    userAgent.substring((MSIEIndex + 5),(MSIEIndex + 6)) > 3)
		{
			document.all('HPFrameHLTab3').src = "/library/homepage/images/collapse.gif";
			document.all('HPFrameDLTab3').src = "/library/homepage/images/collapse.gif";
		}
	}
}

function saveState()
{
	var udoLayout = document.all("oLayout");

	for (var i = 0; i < garrLayoutParts.length; i++)
		udoLayout.setAttribute(garrLayoutParts[i].name, (garrLayoutParts[i].state + "," + garrLayoutParts[i].order));
	
	udoLayout.save("HPLayoutStore");
}

function loadSavedShowHide()
{
	var udoLayout = document.all("oLayout");
	if (!udoLayout)
		return;

	udoLayout.load("HPLayoutStore");
		
	for (var i = 0; i < garrLayoutParts.length; i++)
	{
		var strAttr = udoLayout.getAttribute(garrLayoutParts[i].name);
		if (strAttr)
		{
			var strstate = strAttr.split(',')[0];
			if (strstate)
			{
				if (strstate == "EXPAND")
					showHideContent(garrLayoutParts[i].name, true);
				else if (strstate == "COLLAPSE")
					showHideContent(garrLayoutParts[i].name, false);
			}
		}
	}
}

function showHideContent(id,bOn)
{
	var bMO = false;
	var oContent = document.all.item(id+"Content");
	var oImage   = document.all.item(id+"Tab3");
	if (!oContent || !oImage) return;

	if (event.srcElement)
	{
		bMO = (event.srcElement.src.toLowerCase().indexOf("_mo.gif") != -1);
		bOn = (oContent.style.display.toLowerCase() == "none");
	}

	if (bOn == false)
	{
		oContent.style.display = "none";
		oImage.src = "/library/homepage/images/expand" + (bMO? "_mo.gif" : ".gif");
	}
	else
	{
		oContent.style.display = "";
		oImage.src = "/library/homepage/images/collapse" + (bMO? "_mo.gif" : ".gif");
	}

	for (var i = 0; i < garrLayoutParts.length; i++)
	{
		if (id == garrLayoutParts[i].name)
			garrLayoutParts[i].state = bOn ? "EXPAND" : "COLLAPSE";
	}

	if (event.srcElement)
		saveState();
}

function setBorder(id,bOn)
{
	var oTab    = document.all.item(id+"Tab");
	var oTab1   = document.all.item(id+"Tab1");
	var oTab2   = document.all.item(id+"Tab2");
	var oTab3   = document.all.item(id+"Tab3");
	var oBorder = document.all.item(id+"Content");

	if (!oTab || !oTab1 || !oTab2 || !oTab3 || !oBorder) 
		return;

	if (bOn)
	{
		oBorder.style.borderColor = "#cccccc";
		oTab.bgColor = "#3366CC";
		oTab1.src    = "/library/homepage/images/curve_mo.gif";
		oTab2.color  = "#FFFFFF";
		if (oBorder.style.display == "none")
			oTab3.src = "/library/homepage/images/expand_mo.gif";
		else
			oTab3.src = "/library/homepage/images/collapse_mo.gif";
	}
	else
	{
		oBorder.style.borderColor = blnBorder? "#cccccc" : "#ffffff";
		oTab.bgColor = "#CCCCCC";
		oTab1.src	 = "/library/homepage/images/curve.gif";
		oTab2.color  = "#336699";
		if (oBorder.style.display == "none")
			oTab3.src = "/library/homepage/images/expand.gif";
		else
			oTab3.src = "/library/homepage/images/collapse.gif";
	}
}

function trackInfo(obj, param)
{
	if (blnTrack)
	{
		var sUrl = "http://www.microsoft.com/isapi/hpredir.asp"
			+ ("?type=CT&source=WWW&sPage=" + param + "&tPage=" + obj.href);
		if (blnDebug) alert(sUrl);
		obj.href = sUrl;
	}
}

function trackSearch(qu, param)
{
	if (!qu) 
		return;

	var sUrl = "http://search.microsoft.com/us/SearchMS25.asp?qu="+ escape(qu.value) + "&so=RECCNT&boolean=ALL&intCat=0&intCat=1&intCat=2&intCat=3&intCat=4&intCat=5&intCat=6&intCat=7&intCat=8&intCat=9&nq=NEW&p=1";
	if (blnTrack)
	{
		sUrl = "http://www.microsoft.com/isapi/hpredir.asp" 
			+ ("?type=CT&source=WWW&sPage=" + param + "&tPage=" + sUrl);
		if (blnDebug) alert(sUrl);
	}
	location.href = sUrl;
}

function trackInfoForm(param)
{
	if (blnTrack)
	{
		var sUrl = "http://c.microsoft.com/trans_pixel.gif";
		
		if (blnDebug) alert(sUrl);

//		TrackForm.sPage.value = param;
//		TrackForm.action = sUrl;
//		TrackForm.submit();
	}
}

//-----------------------------------------------
var partMover = null;
var isPosition = false;
var orgTop;
var orgLeft;
var frmholder = null;
var zoneLeft = -1;
var zoneTop = -1;
var m_zoneElement = null;

function Document_OnMouseUp()
{
	if (!partMover) return;

	isPosition = false;
	partMover.releaseCapture();
	partMover.style.position = 'static';
	var m_prtSrc = window.event.srcElement;
	if (!CheckXPos(m_zoneElement) || !CheckYPos(m_zoneElement) || !blnMoved)
	{
		trackInfoForm(("HP_WPFound_"+(blnBorder? "BorderOn" : "BorderOff")));
		SetBorderOff();
		return;
	}

	PartSwap();
	saveState();
	blnMoved = false;
	trackInfoForm(("HP_WPSwap_"+(blnBorder? "BorderOn" : "BorderOff")));

	SetBorderOff();
	
	event.cancelBubble = true;
}

function RearrangePartPos()
{
	m_zoneElement = document.all.item("DashZoneRight");

	if (m_zoneElement)
	{
		var udoLayout = m_zoneElement.document.all("oLayout");

		if (!udoLayout)
			return false;

		udoLayout.load("HPLayoutStore");
	
		for (var i = 0; i < garrLayoutParts.length; i++)
		{
			var strAttr = udoLayout.getAttribute(garrLayoutParts[i].name);
	
			if (strAttr)
			{
				var strorder = strAttr.split(',')[1];	
				if (strorder)
				{
					if (strorder != garrLayoutParts[i].order)
					{
						PartSwap();	
						return true;
					}
				}
			}
		}
	}
	return true;
}

function PartSwap()
{
	var oPart= null;
	var oPartHolder = null;
	var oPartSpacer = null;
	var strOriginalLabel = "";
	var strReplacingLabel = "";

	outerloop:
	for (var i=0; i < m_zoneElement.children.length; i++)
	{  
		innerloop:
		for (var j=0; j < arrParts.length; j++)
		{
			var holderDiv = m_zoneElement.all.item(arrParts[j] + "Holder");
			strOriginalLabel = arrParts[j];
			var replacingDiv = null;
			if (j==0) 
			{
				replacingDiv = m_zoneElement.all.item(arrParts[j+1] + "Holder");
				strReplacingLabel = arrParts[j+1];
			}
			else
			{
				replacingDiv = m_zoneElement.all.item(arrParts[0] + "Holder");
				strReplacingLabel = arrParts[0];
			}
			
			if (holderDiv)
			{	
				if (m_zoneElement.children.item(i).id == holderDiv.id)
				{   
					var holdernext = holderDiv.nextSibling;
					var replacingnext = replacingDiv.nextSibling;
					var holdernextnext = holdernext.nextSibling;
					var replacingnextnext = replacingnext.nextSibling;

					oPartHolder = m_zoneElement.replaceChild(
											replacingDiv, holderDiv);

					oPart = m_zoneElement.replaceChild(
											replacingnext, holdernext);
											
					oPartSpacer = m_zoneElement.replaceChild(
											replacingnextnext, holdernextnext);
					break outerloop;
				}
			}
		}
	} 

	m_zoneElement.appendChild(oPartHolder);
	m_zoneElement.appendChild(oPart);
	m_zoneElement.appendChild(oPartSpacer);

	for (var i = 0; i < garrLayoutParts.length; i++)
	{
		if (strReplacingLabel == garrLayoutParts[i].name)
			garrLayoutParts[i].order = "0";
		if (strOriginalLabel == garrLayoutParts[i].name)
			garrLayoutParts[i].order = "1";
	}
}

function CheckXPos(obj)
{
	if ((partMover.style.pixelLeft + partMover.offsetWidth) < zoneLeft)
		return false;

	if (partMover.style.pixelLeft > (zoneLeft + obj.offsetWidth))
		return false;

	return true;
}

function CheckYPos(obj)
{
	var movingpart = null;
	var part = null;
	var partLeft = -1;
	var partTop = -1;

	for (var k = 0; k < arrParts.length; k++)
	{
		movingpart = partMover.all.item(arrParts[k]);

		if (movingpart)
		{
			for(var j = 0; j < arrParts.length; j++)
			{
				part = obj.all.item(arrParts[j]);

				if (part && (part != movingpart))
				{	
					partTop = GetAbsoluteTop(part);
					if ((partMover.style.pixelTop + 2*partMover.offsetHeight) < partTop)
						return false;

					if (partMover.style.pixelTop > (partTop + part.offsetHeight))
						return false;
				}
			}

			break;
		}	
	}
	return true;
}

function SetBorderOff()
{
	for (var i = 0; i < arrParts.length; i++)
	{
		var frm = partMover.all.item(arrParts[i]);
		if (frm)
		{
			setBorder(arrParts[i],false);
			break;
		}
	}

	frmholder.style.display = "none";
	frmholder.style.height = 0;
}

function Document_OnMouseDown()
{	
	//--Reinitialize partMover variable
	partMover = null;

	var m_prtSrc = window.event.srcElement;
	var tagName = event.srcElement.tagName.toUpperCase();
	if (tagName == "IMG" || tagName == "A")
		return;

	var m_tabElement = TraverseToClassName(m_prtSrc, "HPFrameTab");
	if (!m_tabElement)
		return;

	var m_classElement = TraverseToClassName(m_prtSrc, "divMoveClass");
	if (m_classElement == null)
		return;

	var strFrame = null;
	partMover = m_classElement;
	for (var i = 0; i < arrParts.length; i++)
	{
		var divPart = partMover.all.item(arrParts[i]);
		if (divPart)
		{
			strFrame = divPart.id;
			break;
		}
	}
	
	m_zoneElement = TraverseToClassName(m_prtSrc, "DashZoneRight");
	
	if ((zoneLeft == -1) || (zoneTop == -1))
	{
		zoneLeft = GetAbsoluteLeft(m_zoneElement);
		zoneTop = GetAbsoluteTop(m_zoneElement);
	}

	frmholder =  m_zoneElement.all.item(strFrame + "Holder"); 
	frmholder.style.height = partMover.offsetHeight;
	frmholder.style.display = "inline";
	
	partMover.style.position = 'absolute';
	partMover.style.width = partMover.offsetWidth;
	partMover.style.pixelLeft = event.x;
	partMover.style.pixelTop = event.y;
	
	orgLeft = partMover.style.pixelLeft;
	orgTop = partMover.style.pixelTop;
	partMover.style.display = "block";

	event.cancelBubble = true;
    isPosition = true;
    partMover.setCapture();
}

function Document_OnMouseMove()
{
		if(!isPosition || !partMover)
			return;

		partMover.style.pixelLeft = event.x;
		partMover.style.pixelTop = event.y;
		event.cancelBubble = true;
		blnMoved = true;
}

function TraverseToClassName(srcElement,ClassName)
{
	while(srcElement.className != ClassName)
	{
		srcElement = srcElement.parentElement;
		if (srcElement == null)
			return null;
	}
	return srcElement;
}

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 QueryString(sName)
{	
	var sSource = String(window.document.location);
	var sReturn = "";
	var sQUS = "?";
	var sAMP = "&";
	var sEQ = "=";
	var iPos;
	
	iPos = sSource.indexOf(sQUS);

	var strQuery = sSource.substr(iPos, sSource.length - iPos);
	var strLCQuery = strQuery.toLowerCase();
	var strLCName = sName.toLowerCase();
	
	iPos = strLCQuery.indexOf(sQUS + strLCName + sEQ);
	if (iPos == -1)
	{
		iPos = strLCQuery.indexOf(sAMP + strLCName + sEQ);
		if (iPos == -1)
			return "";
	}

	sReturn = strQuery.substr(iPos + sName.length + 2, 
			  strQuery.length-(iPos + sName.length + 2));
			   
	var iPosAMP = sReturn.indexOf(sAMP);
	
	if (iPosAMP == -1)
		return sReturn;
	else
	{
		sReturn = sReturn.substr(0, iPosAMP);
	}			
	
	return sReturn;
}




Copyright 1998-2008 Alvin Alexander
All Rights Reserved.
 
devdaily.com is based in louisville, kentucky, and this web site is hosted by godaddy.com