
/* *******************************************
*	Copyright © 2002-2009 ExpoCharger International, Inc. All rights reserved
* ****************************************** */


	var _fullViewLoaded = false;
	var _fvInitialized = false;

	function animateMove(){
		return true;;
	}
	function fv_page_load(){
		if(!(document.createElement && document.getElementById)){
			//not capable
			return false;
		}
		var fullViewImage = ECI.getElement("fullViewImage");
		if(!fullViewImage){
			//not capable
			return false;
		}
		initMousedrag();
		var vdir = ECI.ECgetVdir(false);
		if(!allowFvCache()){
			fullViewImage.src = vdir + "EC/forms/image.aspx?image=fullview&type=5&designator=true&title=true&status=true&nocache=1";	
		} else {
			fullViewImage.src = vdir + "EC/forms/image.aspx?image=fullview&type=5&designator=true&title=true&status=true";	
		}
		ECI.setItemVisible(ECI.getElement("fvLoading"),true,"inline");
		fullViewImage.onload = fullViewLoaded;
		fullViewImage.onerror = fullViewLoadError;
		fullViewImage.onabort = fullViewLoadError;
		
		//set fv toolbar background to page bg
		var bg = document.body.bgColor?document.body.bgColor:document.bgColor;
		if(bg){
			var fullViewContainer = ECI.getElement("fullViewContainer");
			fullViewContainer.style.backgroundColor = bg;
		}	
	}
	function fullViewLoaded(ev){
		ECI.setItemVisible(ECI.getElement("fvLoading"),false,"inline");
		var showFullScreen = ECI.getElement("showFullScreen");//enable "Full Screen" button only after big img is loaded successfully.
		ECI.setItemVisible(showFullScreen,true,"inline");
		_fullViewLoaded=true;
		/*
		addHotSpots(ECI.getElement("fvDragHandle"),true);
		*/
		if(addHotSpots) setTimeout(function(){
			addHotSpots(ECI.getElement("fvDragHandle"),true);
			},1);
	}
	function fullViewLoadError(ev){
		try{
		ECI.setItemVisible(ECI.getElement("fvLoading"),false);
		ECI.setItemVisible(ECI.getElement("showFullScreen"),false);
		} catch(e){}		
	}
	function showHideFullView(sender)
	{
		var fullViewContainer = ECI.getElement("fullViewContainer");
		if(!fullViewContainer)
			return false;
		for(var i=0;i<_hideItemIds.length;i++){
			ECI.setItemVisible( ECI.getElement(_hideItemIds[i]) , ECI.isItemVisible(fullViewContainer));//hide scrolling divs for safari/mac
		}
		if(!_fvInitialized){
			initFv(fullViewContainer);
			ECI.getElement("btnFindFvCo").disabled=false;
			window.scroll(0,0);
			return false;
		}
		if(!ECI.isItemVisible(fullViewContainer)){
			ECI.setItemVisible(fullViewContainer,true);
			ECI.getElement("btnFindFvCo").disabled=false;
			window.scroll(0,0);
		}
		else if(fullViewContainer){
			ECI.setItemVisible(fullViewContainer,false);
			ECI.getElement("btnFindFvCo").disabled=true;
		}
		return false;		
	}
	
	function initFv(fullViewContainer){
		//initialize
		ECI.setItemVisible(fullViewContainer,true);//ie requires visible in order to measure img width		
		var fullViewImage = ECI.getElement("fullViewImage");
		var fvDragHandle = ECI.getElement("fvDragHandle");
		var fullViewToolbar = ECI.getElement("fullViewToolbar");
		var fullViewDragBackground = ECI.getElement("fullViewDragBackground");		
		makeDraggable(fvDragHandle);
		fullViewContainer.style.width = fullViewImage.width + "px";
		fullViewContainer.style.height = fullViewImage.height + fullViewToolbar.offsetHeight + "px";
		fullViewDragBackground.style.top = fullViewToolbar.offsetHeight;
		fvDragHandle.style.cursor="move";
		setStartPosition(fvDragHandle);
		//match booths highlighted on floorplan
		if(tagBooths) tagBooths(fvDragHandle,getServerTaggedBooths());
		//add tooltips/ <area> simulators
		//if(addHotSpots) addHotSpots(fvDragHandle,true);	//* [moved to fullviewLoaded()]
		
		//myexpo
		if(!_myExpoLoggedIn){
			ECI.setItemVisible(ECI.getElement("spnMyExpo"),false);
		}	else {
			var chkShowMyExpo = ECI.getElement("chkShowMyExpo");
			if(chkShowMyExpo){
				var fp = ECI.getElement(_normalFloorplanClientID);
				if(fp){
					chkShowMyExpo.checked=(fp.src.toLowerCase().indexOf("myexpo=true")>-1)?true:false;
				}
				showMyExpo(chkShowMyExpo);
			}
		}
		//localize
		applyLocData();
		_fvInitialized = true; 		
	}
	
	function getServerTaggedBooths(){
		//find booths highlighted on floorplan
		try{
			//get booths to highlight from standard floorplan img src
			var fp = ECI.getElement(_normalFloorplanClientID);
			if(fp){
				var pattern = /boothdata=[^\x26]+/i;
				var boothdata = fp.src.match(pattern);
				if(boothdata && boothdata.length>0){
					var boothstr = boothdata[0].substr(boothdata[0].indexOf("=")+1);
					return boothstr.split(",").sort(_boothsort);
				} 
			}
		} catch(e){}
		return [];		
	}
	function _boothsort(b1,b2){
		if(b1==b2) return 0;
		if(!(isNaN(b1) || isNaN(b2))){
			return b1-b2;
		} else {
			return (b1<b2)?-1:1;
		}
	}
	
	function snickNW(){
		var fvDragHandle = ECI.getElement("fvDragHandle");
		if(!fvDragHandle)
			return false;
		ECI.ECmoveSpecial(fvDragHandle,0,0,animateMove());

	}
	function snickSW(){
		var fvDragHandle = ECI.getElement("fvDragHandle");
		if(!fvDragHandle)
			return false;
		var fullViewImage = ECI.getElement("fullViewImage");
		var fullViewToolbar = ECI.getElement("fullViewToolbar");
		var fullViewContainer = ECI.getElement("fullViewContainer");
		//var targetTop = document.body.clientHeight - fvDragHandle.height;
		var targetTop = document.body.clientHeight - fullViewToolbar.offsetHeight - fullViewContainer.offsetTop - fullViewImage.height;
		//todo -- cant we just use fullviewcontainer.clienthieght?
		
		ECI.ECmoveSpecial(fvDragHandle,0,targetTop,animateMove());

	}
	
	function snickCenter(){
		var fvDragHandle = ECI.getElement("fvDragHandle");
		if(!fvDragHandle)
			return false;
		var fullViewImage = ECI.getElement("fullViewImage");
		var viewCenterX = document.body.clientWidth / 2;//center of screen
		var viewCenterY = document.body.clientHeight / 2;
		var targetLeft = viewCenterX - fullViewImage.width / 2;//move img.left = screenCenter - imgCenter
		var targetTop = viewCenterY - fullViewImage.height / 2;
		ECI.ECmoveSpecial(fvDragHandle,targetLeft,targetTop,animateMove());
	}
	
	function snickNE(){
		var fvDragHandle = ECI.getElement("fvDragHandle");
		if(!fvDragHandle)
			return false;
		var fullViewImage = ECI.getElement("fullViewImage");
		var viewWidth = document.body.clientWidth + document.body.scrollLeft;
		var targetLeft = (viewWidth - fullViewImage.width);
		
		ECI.ECmoveSpecial(fvDragHandle,targetLeft,0,animateMove());
	}	
	function snickSE(){
		var fullViewImage = ECI.getElement("fullViewImage");
		if(!fullViewImage)
			return false;			
		var fullViewToolbar = ECI.getElement("fullViewToolbar");
		var fullViewContainer = ECI.getElement("fullViewContainer");
		var viewWidth = document.body.clientWidth + document.body.scrollLeft;
		var targetLeft = (viewWidth - fullViewImage.width);
		var targetTop = document.body.clientHeight - fullViewToolbar.offsetHeight - fullViewContainer.offsetTop - fullViewImage.height;
		
		var fvDragHandle = ECI.getElement("fvDragHandle");
		ECI.ECmoveSpecial(fvDragHandle,targetLeft,targetTop,animateMove());
	}
	
	function findCo(co){
		if(!co || co.length < 2){
			if(locdata){
				alert(locdata.searchCharCount);
			} else {
				alert("Please enter at least 2 characters to search for.");
			}
			return;			
		}
		var rsrvns = findReservations(co);
		if(!(rsrvns && rsrvns.length>0)){
			if(locdata){
				alert(locdata.companyNotFound.replace(/%search%/g,co));
			} else {
				alert("[" + co + "] not found.");
			}
			return;
		}
		var fvDragHandle = ECI.getElement("fvDragHandle");
		var areas = new Array();
		for(var i=0;i<rsrvns.length;i++){
			areas.push(findBoothArea(rsrvns[i].boothNumber));
			areas[areas.length-1].dv = tagBooth(fvDragHandle,areas[i]);
		}
		//recenter
		//var boothArea = findBoothArea(rsrvns[0].boothNumber);
		var boothCenterX = areas[0].left+areas[0].width/2;
		var boothCenterY = areas[0].top+areas[0].height/2;
		var viewCenterX = document.body.clientWidth / 2;
		var viewCenterY = document.body.clientHeight / 2;
		var targetLeft = viewCenterX - boothCenterX;
		var targetTop = viewCenterY - boothCenterY;		
		ECI.ECmoveSpecial(fvDragHandle,targetLeft,targetTop,animateMove(),areas[0].dv.tickle,null);
	
	}
	
	function printFv(){
		var tags = "";
		if(getTaggedBoothString){
			var tags = getTaggedBoothString();
		}
		var url = "floorplanPrint.aspx?tags="+tags;
		var w = window.open(url,"print", "menubar,scrollBars,resizable,location");
		if(w.focus) w.focus();
	}

// ******************************************

function setStartPosition(dragHandle){
//center fullview on current floorplan view or highlighted booth
	var currentThumbnailCenter = ECI.getElement(_currentThumbnailCenterClientID);
	if(currentThumbnailCenter){
		try{
			var container = ECI.getElement("fullViewContainer");
			if(container){
				ECI.setItemVisible(container,true);// ie7 doesnt know img width if not visible.  need thumbnail and fullview img widths in order to re-scale.
			}
			var thumbPt = currentThumbnailCenter.value.split(",");
			var normalFloorplan = ECI.getElement(_normalFloorplanClientID);
			var targetLeft = ECI.getOffsetLeft(normalFloorplan);
			var targetTop = ECI.getOffsetTop(normalFloorplan);
			targetLeft = targetLeft - ECI.getOffsetLeft(dragHandle); 
			targetTop = targetTop - ECI.getOffsetTop(dragHandle); 			
			//find thumbnailimage point on the fullviewimage
			var fullViewPoint = scaleThumbPoint2FullViewPoint({x:thumbPt[0],y:thumbPt[1]});
			if(!fullViewPoint)
				return;
			centerOnPoint(dragHandle,fullViewPoint.x,fullViewPoint.y,targetLeft,targetTop);
		} catch(e){}				
	} 
}
function centerOnPoint(elemmentToMove,elementPointX,elementPointY,targetX,targetY){
//elementPointX,Y = point on image,targetX,Y = location (in the element's positioning context) to move the point to.
	//move the fullviewimage point to the target position
	var newLeft = Math.min(0,(targetX - elementPointX));
	var newTop = Math.min(0,(targetY - elementPointY));
	
	elemmentToMove.style.left=newLeft + "px";
	elemmentToMove.style.top=newTop + "px";
	
}

function scaleThumbPoint2FullViewPoint(thumbPoint){
	var thumbSize = getThumbSize();
	if(!thumbSize)
		return;
	var fullViewSize = getFullViewSize();
	if(!fullViewSize)
		return; 
	var newPoint = {
								x:thumbPoint.x * (fullViewSize.width / thumbSize.width),
								y:thumbPoint.y * (fullViewSize.height / thumbSize.height)
								};
	return newPoint;
}

function getThumbSize(){
	//clientID of thumbnail: passed to js on floorplan.ascx as _thumbClientID
	var thumbImage = ECI.getElement(_thumbClientID);
	if(!thumbImage)
		return null;
	return {height:thumbImage.clientHeight,width:thumbImage.clientWidth};
}

function getFullViewSize(){
	if(!_fullViewLoaded)
		return null;
	var fullViewImage = ECI.getElement("fullViewImage");
	if(!fullViewImage)
		return null;
	return {height:fullViewImage.height,width:fullViewImage.width};
}
// ******************************************
function showNextHLBooth(){
	var hl_id = cycleHLid();
	if(!hl_id){
		if(locdata){
			alert(locdata.noTaggedBooths);
		} else {
			alert("No booths are tagged.");
		}
	}
	if(hl_id){
		var dv = ECI.getElement(hl_id);
		if(!dv) return;
		var viewCenterX = document.body.clientWidth / 4;
		var viewCenterY = document.body.clientHeight / 4;
		var fvDragHandle = ECI.getElement("fvDragHandle");
		var left=parseInt(dv.style.left);
		var top=parseInt(dv.style.top);
		//centerOnPoint(fvDragHandle,left,top,viewCenterX,viewCenterY);
		//tickle(dv);
		var targetLeft = viewCenterX - parseInt(dv.style.left);
		var targetTop = viewCenterY - parseInt(dv.style.top);
		ECI.ECmoveSpecial(fvDragHandle,targetLeft,targetTop,animateMove(),dv.tickle,null);
	}
}
function showMyExpo(chkShowMyExpo){
	if(!_myExpoLoggedIn)
		return;
	var fvDragHandle = ECI.getElement("fvDragHandle");
	if(chkShowMyExpo.checked){
		showMyExpoBooths(fvDragHandle,_myExpoBooths);
	} else {
		hideMyExpoBooths(fvDragHandle,_myExpoBooths);
	}
}
function allowFvCache(){
	var fp = ECI.getElement(_normalFloorplanClientID);
	if(!(fp && fp.src))
		return true;
	return (fp.src.indexOf("nocache")<0);
}
function isSalesMode(){
	return document.location.href.indexOf("indexSales.aspx")>-1?true:false;
}

function dbgPropString(obj){
	var s;
	for(var p in obj){
		s=s+"obj['"+p+"']="+obj[p]+"\n";
	}
	return s;
}