    currentX = currentY = 0;
    dragWhichEl = null;
    
    function grabEl(e) {
        if (IE4) {
            dragWhichEl = event.srcElement;
            while (dragWhichEl.id.indexOf("DRAG") == -1) {
                dragWhichEl = dragWhichEl.parentElement;
                if (dragWhichEl == null) { return }
            }

        } else {
            mouseX = e.pageX;
            mouseY = e.pageY;
            for ( i=0; i<document.layers.length; i++ ) {
            tempLayer = document.layers[i];
                if ( tempLayer.id.indexOf("DRAG") == -1 ) { continue }
                if ( (mouseX > tempLayer.left) && (mouseX < (tempLayer.left + tempLayer.clip.width)) && (mouseY > tempLayer.top) && (mouseY < (tempLayer.top + tempLayer.clip.height)) ) {
                    dragWhichEl = tempLayer;
                }
            } 
            if (dragWhichEl == null) { 
				event.returnValue = true; // keep processing
				return;
			}
        }

        if (IE4) {
            currentX = (event.clientX + document.body.scrollLeft);
            currentY = (event.clientY + document.body.scrollTop); 
        }
        else {
            currentX = e.pageX;
            currentY = e.pageY;
    
            activeEl.captureEvents(Event.MOUSEMOVE);
            activeEl.onmousemove = moveEl;
        }
    }
    
    function moveEl(e) {
        if (dragWhichEl == null) { 
			event.returnValue = true; // keep processing
			return;
		}
 		
        if (IE4) {
			if (event.button != 1)  { dropEl(); return };
            newX = (event.clientX + document.body.scrollLeft);
            newY = (event.clientY + document.body.scrollTop);
        }
        else {
			if (e.button != 1)  {  dropEl(); return };
            newX = e.pageX;
            newY = e.pageY;
        }
		parentLeft = getAbsoluteLeft(activeEl.parentElement);
		distanceX = (newX - currentX) - parentLeft;
        currentX = newX;
        currentY = newY;
    	minsx = SliderStartDrag;
		maxsx = SliderEndDrag;
        if (IE4) {
			//window.status=parentLeft+" "+event.clientX
			tmpx = event.clientX-parentLeft-SliderHalfWidth
			tmpx = (tmpx>maxsx) ? maxsx : (tmpx<minsx) ? minsx : tmpx;
			activeEl.style.pixelLeft = tmpx;
			activeEl.style.pixelTop = SliderTop;
			scrollstrip((tmpx-minsx)/(maxsx));
            event.returnValue = false;
        }
        else 
		{ 
			dragWhichEl.moveBy(distanceX,0) 
		}
		
		scrollstrip((tmpx-minsx)/(maxsx-minsx));
    }
	
	function getAbsoluteLeft(oNode){
		var oCurrentNode=oNode;
		var iLeft=0;
		while(oCurrentNode.tagName!="BODY"){
			iLeft+=oCurrentNode.offsetLeft;
			oCurrentNode=oCurrentNode.offsetParent;
	    }
		//alert("Left: " + oNode.offsetLeft + "\nAbsolute Left: " + iLeft);
		return iLeft;
	}
	
    function checkEl() {
        if (dragWhichEl!=null) { return false }
    }
    
    function overEl() {
        sliderdotImage.src = imageDotOn.src;
    }
    function outEl() {
        if (dragWhichEl==null) document.all.sliderdotImage.src = imageDotOff.src;
    }
    
    function dropEl() {
        if (NS4) { activeEl.releaseEvents(Event.MOUSEMOVE) }
        dragWhichEl = null;
		sliderdotImage.src = imageDotOff.src;
    }

    function cursEl() {
	window.status=event.srcElement.id
        if (event.srcElement.id.indexOf("DRAG") != -1) {
            event.srcElement.style.cursor = "move"
        }
    }
    
	
var gImageLoadAttempts;    
function displayProject(slot)
{
//alert(slot+sliderOffset)
window.location=(aProjUrls[slot+sliderOffset-1])
/*
	indx = slot+sliderOffset;
	if (indx<=iKeyImageCount) {
		if (SelectedProject == indx) {
			setProjectVisibility(indx, false);
			SelectedProject = 0;
			setProjectVisibility(0, true);
		} else {
			setProjectVisibility(SelectedProject, false);
			SelectedProject = indx;
			var isLoaded = eval("is"+SelectedProject+"Loaded");
			if (!isLoaded)
			{
				var strName, strURL;
				var myImageGroup = new imageGroup();
				var imgCount = aProjImageGroupCount[SelectedProject-1];
				for(i=1; i<=imgCount; i++)
				{
					strName = "image"+SelectedProject+"_"+i;
					strURL = "projImages/"+strName+".jpg";
					myImageGroup.AddImage(strName, strURL);
				}
				myImageGroup.total = imgCount;
				ht_loadGroup(myImageGroup); 
				if (isNS)
				{
					//The permanent access to this object is through the
					//cacheArray array.
					ht_cacheImages(myImageGroup);
				}
				//eventually display a temp layer with a loading images message.
				//settimer to  set project visibility once images are loaded
				//ToDo: save timeout id so we can cancel later if we want to.
				gImageLoadAttempts = 0;
				var strArg = 'waitForImagesToLoad('+eval(SelectedProject)+', '+eval(myImageGroup.index)+');'
				setTimeout(strArg, 1000);
			}
			else
			{
				setProjectVisibility(SelectedProject, true);
			}
		}
	}
	*/
	return false;
}

function waitForImagesToLoad(indexProject, indexCache)
{
	if (cacheArray[indexCache].rollovers)
	{
		setProjectVisibility(indexProject, true);
	}
	else
	{
		gImageLoadAttempts++;
		if (gImageLoadAttempts < 5)
		{
			var strArg = 'waitForImagesToLoad('+eval(indexProject)+', '+eval(indexCache)+');'
			setTimeout(strArg, 1000);
		}
		else
		{
			//failed to load images...set visible anyway
			setProjectVisibility(indexProject, true);
		}
	}
}

function setProjectVisibility(indx, bVisible)
{
	cObj = aProjContentObjectT[indx];
	if (bVisible)
	{
		if (cObj==null) 
		{
			cObj = ht_getLayerObj('contentDiv'+indx+"_T", null);
			aProjContentObjectT[indx] = cObj;
			ht_setLayerContent(cObj, aProjContentStringT[indx]);
			cObj = ht_getLayerObj('contentDiv'+indx+"_I", null);
			aProjContentObjectI[indx] = cObj;
			ht_setLayerContent(cObj, aProjContentStringI[indx]);
			eval('loadLayout'+indx+"();");
		}
		ht_setLayerVisiblility(aProjContentObjectT[indx], true);
		ht_setLayerVisiblility(aProjContentObjectI[indx], true);
	}
	else
	{
		if (cObj!=null) {
		ht_setLayerVisiblility(aProjContentObjectT[indx], false);
		ht_setLayerVisiblility(aProjContentObjectI[indx], false);

		}
	}	
} 


function scrollstrip(percent) {
	//window.status = imageStrip.style.clip;
	// clip and slide approach
	//imageStrip.style.left = stripContainer.offsetLeft-312-(percent*312);
	//imageStrip.style.clip = "rect( 0 "+(312+percent*312)+" 36 "+(percent*312)+" )";
	
	// move pictures
	var slidei = (aProjPhotos.length -SliderPictureCnt);
	if (slidei<0) {
		return;
	} else {
		slidei = Math.round(slidei*percent);
	}
	//window.status = slidei;
	setTimeout("slideImage( "+slidei+");",0);
}

function slideImage( slidei)
{
	if (iKeyImageCount>=slidei+SliderPictureCnt-1) {
		sliderOffset = slidei
		for (i=0; i<SliderPictureCnt; i++) {
			eval("P"+(i+1)+".src = aProjPhotos[ "+i+" + slidei].src;");
			eval("P"+(i+1)+".width = aProjPhotos[ "+i+" + slidei].width;");
		}
	}
}

function hideImage( imaName )
{
	if (NS4) {
		//eval(imaName+'.style.visibility = "visible"');
	} else {
		imaObj = eval(imaName);
		imaObj.style.visibility = "hidden";
	}
}

function fadeIn( imaName, zopacity, timestep )
{
	if (NS4) {
		//?eval('contentDiv.document.'+imaName+'.style.visibility = "visible"');
	} else {
		imaObj = eval(imaName);

		imaObj.style.filter = 'alpha(opacity='+ zopacity +')';
		imaObj.style.visibility = '';
		if (zopacity>=100) {
			imaObj.style.filter = '';
			return;
		}
		zopacity += 10;
		setTimeout('fadeIn( "'+imaName+'", '+zopacity+', '+timestep+' )', timestep);
	}
}

var pnTimer=null;

function fadePN(pct)
{
	if (pct<10) {
		ht_setLayerContent( ht_getLayerObj('projName', null), " ");
	} else {
		ht_getLayerObj('projName', null).style.filter = 'alpha(opacity='+ pct +')';
		pnTimer = setTimeout("fadePN("+(pct-10)+")", 50);
	}
}

function setProjName(indx)
{
	if (pnTimer) clearTimeout(pnTimer);
	if (iKeyImageCount>(indx-1 + sliderOffset)) {
		ht_getLayerObj('projName', null).style.filter = '';
		ht_setLayerContent( ht_getLayerObj('projName', null), SliderTitleFormatBegin+aProjNames[ indx-1 + sliderOffset]+SliderTitleFormatEnd);
		pnTimer = setTimeout("fadePN(90)", 1500);
   	}
	
}

function offProjName()
{
	if (pnTimer) clearTimeout(pnTimer);
	ht_setLayerContent( ht_getLayerObj('projName', null), " ");
}

