/**
 *	This is the MAP javascript code which defines all of the dots and links on the
 *  map that's displayed on all of the pages.  Each map is made up of properties and
 *  highlighted state images.  See the map.inc.php for functions dealing with generating
 *  the map itself, then list.php for the map json code.
 *
 *  NOTE:  To modify the property images, see below where normal_ and kc_ property images
 *         are defined.
 *
 *	Created on Nov 26, 2008
 *	@author  dtw
 *	@version $Id: map2.js 541 2009-07-31 16:17:31Z nick $
 */
	var stateList = {
		"al": "Alabama",
		"ak": "Alaska",
		"az": "Arizona",
		"ar": "Arkansas",
		"ca": "California",
		"co": "Colorado",
		"ct": "Connecticut",
		"de": "Delaware",
		"dc": "District Of Columbia",
		"fl": "Florida",
		"ga": "Georgia",
		"hi": "Hawaii",
		"id": "Idaho",
		"il": "Illinois",
		"in": "Indiana",
		"ia": "Iowa",
		"ks": "Kansas",
		"ky": "Kentucky",
		"la": "Louisiana",
		"me": "Maine",
		"md": "Maryland",
		"ma": "Massachusetts",
		"mi": "Michigan",
		"mn": "Minnesota",
		"ms": "Mississippi",
		"mo": "Missouri",
		"mt": "Montana",
		"ne": "Nebraska",
		"nv": "Nevada",
		"nh": "New Hampshire",
		"nj": "New Jersey",
		"nm": "New Mexico",
		"ny": "New York",
		"nc": "North Carolina",
		"nd": "North Dakota",
		"oh": "Ohio",
		"ok": "Oklahoma",
		"or": "Oregon",
		"pa": "Pennsylvania",
		"ri": "Rhode Island",
		"sc": "South Carolina",
		"sd": "South Dakota",
		"tn": "Tennessee",
		"tx": "Texas",
		"ut": "Utah",
		"vt": "Vermont",
		"va": "Virginia",
		"wa": "Washington",
		"wv": "West Virginia",
		"wi": "Wisconsin",
		"wy": "Wyoming"
	};
	
	var intervalId;
	var running = false;
	var opening = false;
	var destroyPopup = false;
	var _rl = 0;
	var _rt = 1;
	var _rr = 2;
	var _rb = 3;
	
	function rect_in( r1, r2 )
	{
	 	return !(r2[_rl] > r1[_rr] || r2[_rr] < r1[_rl] || r2[_rt] > r1[_rb] || r2[_rb] < r1[_rt]);
	}
	
	function collision_chk(dobj, z)
	{
 		if( running )
	 		return false;
	 		
		var elms = dd.elements;
		var dttl = elms.dotTotal;
		var r1 = new Array((dobj.x*z),(dobj.y*z),((dobj.x*z)+dobj.w),((dobj.y*z)+dobj.h));
		var r_cnt = 0;
		
		running = true;
		
		for( var i = 0; i <= dttl; i++ )
		{
			if( elms[i].name.substr(0,5) == "prop_" && elms[i].name != dobj.name )
			{
				if( rect_in( r1, new Array((elms[i].x*z), (elms[i].y*z), ((elms[i].x*z)+elms[i].w), ((elms[i].y*z)+elms[i].h))) )
				{
					running = false;
					return true;
				}
			}
		}
		running = false;
		return false;
	}
	
	function closePopup()
	{
	 	if(dd.elements.mapPopup.visible && !opening && destroyPopup)
		{
	  		gO('mapPopup').removeChild(gO('mapFrame'));
	  		dd.elements.mapPopup.hide();
	 	}
	 	opening = false;
	}
	
	function my_PickFunc()
	{
		opening = true;
	 	dd.obj.defx = dd.obj.x;
	 	dd.obj.defy = dd.obj.y;
	}
	
	function my_DropFunc()
	{
		var z = .5;
		var rv = false;
		
		opening = true;
		
		var dobj = dd.obj;
		
		//alert('my_DropFunc');
		
		$("#mapBox").mouseenter( function(){ destroyPopup = false; } )
		$("#mapBox").mouseleave( function(){ destroyPopup = true; closePopup(); } );
		
		/*if( (dobj.name == "mapPopup" || dobj.name == "mapWrapper") && dd.elements.mapPopup.visible)
		{
			window.parent.closePopup();
			dd.obj = dobj;
			return true;
		}*/
		
		while( (rv = collision_chk(dobj, z)) )
			if( (z += 0.5) > 4)
				break;
				
		if( z > 0.5 )
		{
			//alert('z => ' + z);
			if( !dd.elements.mapPopup.visible )
			{
				/* x & y are relative to the sides of the main window.  We need to get the position
				* relative to the edge of the map.  If we calculate the x & y using what it was
				* moved by instead of its current position, we should be good... */
				var scrollLeftPx = (parseFloat(dobj.relativeX) * z) - 40;
				var scrollTopPx  = (parseFloat(dobj.relativeY) * z) - 40;
				var time = new Date().getTime();
				
				dd.elements.mapPopup.resizeTo(200, 150);
				
				gO("mapPopup").style.backgroundColor = "#008";
				gO("mapPopup").style.overflow = "hidden";
				gO("mapPopup").style.padding = 0;
				
				dd.elements.mapPopup.moveTo(dobj.x - 75, dobj.y - 100);
				
				var mapFrame = document.createElement('iframe');
				mapFrame.id = 'mapFrame';
				mapFrame.name = 'mapFrame';
				mapFrame.src = 'bigmap.php?z=' + escape(z) + '&left=' + scrollLeftPx + '&top=' + scrollTopPx + '&cruft=' + time;
				mapFrame.setAttribute('scrolling', 'no');
				mapFrame.setAttribute('marginWidth', '0');
				mapFrame.setAttribute('marginHeight', '0');
				mapFrame.setAttribute('frameBorder', '0');
				mapFrame.frameBorder = '0';
				mapFrame.marginHeight = '0';
				mapFrame.marginWidth = '0';
				mapFrame.style.margin = '0';
				mapFrame.style.border = '0';
				mapFrame.style.frameBorder = '0';
				mapFrame.style.borderStyle = 'none';
				mapFrame.style.width = '200px';
				mapFrame.style.height = '150px';
				mapFrame.style.position = "absolute";
				mapFrame.style.top = '0px';
				mapFrame.style.left = '0px';
				mapFrame.style.overflow = 'hidden';
				
				gO('mapPopup').appendChild(mapFrame);
				
				dd.elements.mapPopup.show();
				dd.elements.mapPopup.maximizeZ();
				
				gO("mapPopup").style.border = "1px solid black";
			}
		}
		// When the dot is clicked, and not collision.
		else
		{
			populatePopup(dobj.id);
		}
		
		if( dobj.x != dobj.defx || dobj.y != dobj.defy )
			dobj.moveTo(dobj.defx, dobj.defy);
		
		dd.obj = dobj;
		
		return true;
	}
	
	function stateDisplay(state)
	{
		var out = "";
		var elms = dd.elements;
		var dttl = elms.dotTotal;
		
		for( var i = 0; i <= dttl; i++)
			if( elms[i].name.substr(0,5) == "prop_" )
				if( elms[i].state == state)
					out +=	'<div><a href="detail.php?id=' + elms[i].id + '" onclick="populatePopup('+elms[i].id+');return false;" >'   + elms[i].pname + ', ' + elms[i].city + ', ' + elms[i].state + "</a></div>\n";
		
		if( out != "" )
			overlib(out, CAPTION, stateList[state.toLowerCase()], STICKY, STATUS, 'This is a sticky popup with a caption.');
			
	}
