var dragapproved=false;
var z,x,y;

document.onmousedown=drags;
document.onmouseup=cancel_drag;
document.ondblclick = zoom_function;
window.onresize = set_poweredbybtt_location

var x_translation = 0;
var y_translation = 0;
var image_size = 256;//px
var current_step = 0.1;
var y_offset = 0;
var image_urls;
var temp1;
var temp2;

//REQUIREMENT: ROWS AND COLUMNS MUST BE AN ODD NUMBER//
var number_columns = 5;
var number_rows = 4;

var max_window_width = number_columns * image_size;
var max_window_height = number_rows * image_size;

var grid_array;
var event_button; 
var precision_digits;
var click_time;
var default_image_url = "no_maps.jpg";
var last_valid_latlon;
var traffic_layer_hash = new Object();//named array//
var traffic_temp1 = new Object();
var traffic_temp2 = new Object();
//map div drag params//
var map_div;
var outer_map_div;
var map_cell;
var map_div_left = 0;
var map_div_top = 0;

//traffic layer div drag params//
var traffic_layer_div; 
var traffic_layer_div_left = 0;
var traffic_layer_div_top = 0;
var map_top = 38;

//PopUp Global Params//
var title_popup = new Object();
var text_popup = new Object();
var speed_text_popup = new Object();
var cam_popup = new Object();
var ajax_cpt = 0;
var global_show = true;


//Drag Test Variables//
var img_top_most_y;
var img_bottom_most_y;
var top_most_y;
var bottom_most_y;
var img_left_most_x; 
var img_right_most_x;
var left_most_x;
var right_most_x; 
//End of Drag Test Variables//

var region_id = "-1";
//Zoom Variables//
var zoom_value = -1;

var ad_index = 2;
var showed_camera = false;
var show_ads = false;
var powered_btt_offset = 75;
//var camera_publish_code = 1;

var max_window_width = 1028;
var max_window_height = 1024;

function show_camera(title, p_link, t_link, camera_width, camera_height)
{
//alert(p_link + "," + t_link);

	if(title=="camera")
	{
	if(p_link != t_link)
	{
		if(global_show == true)
		{
		global_show = false;
		window.open(t_link,"mywindow");
		showed_camera = true;
		global_show = true;
		
		}
		}
	}
	else if(title=="current conditions")
	{
		var request_url = server_root +  "ajax/request/weather.aspx?type=seven_day_forecast&stationid=" + p_link + "&regionid=" + region_id;
		new Ajax.Request(request_url,{
		method: 'get',
		onCreate: function ajaxCreate()
		{
			show_data_div();
		},
		onSuccess: function ajaxResponse(Axresponse)
		{
			handleWeatherAjaxResponse(Axresponse);
		},
		onComplete: function ajaxComplete()
		{
			hide_data_div();
		}
		});
	}
	else
	{
		redirect_incident();
	}
	
	if(show_p_ad)
	{
		var p_ad_div = $("p_ad_div");
		p_ad_div.innerHTML = p_ad_url;
	}
	

}


function handleWeatherAjaxResponse(response)
{
	var ajaxResponse = null;
	var safari_index = navigator.userAgent.toLowerCase().indexOf("safari");
	if(safari_index > 0)
	{
		var xmlDocument = new DOMParser().parseFromString(response.responseText, 'text/xml');		
		ajaxResponse = xmlDocument.documentElement.childNodes[0];
	}
	else
		ajaxResponse = response.responseXML.childNodes[0].childNodes[0];
		
		var stationName = ajaxResponse.attributes[2].nodeValue;
		var camera_div_elem = $("camera_div");	
		var innerHTML = "<table class='forecast_table'>";
		
		for(k=0; k<ajaxResponse.childNodes.length; k++)
		{
			var currentNodeElem = ajaxResponse.childNodes[k];
			var day = currentNodeElem.attributes[0].nodeValue;
			var icon = currentNodeElem.attributes[1].nodeValue;
			var desc = currentNodeElem.attributes[2].nodeValue;
			var link = "<img src='/images/weather/" + icon + ".png'/>";
		
		
			innerHTML += "<tr><td>" + link +   "</td><td>" + day + " " + desc + "</td></tr>";	
		}
		
		innerHTML += "</table>";
		
	var infoDiv = $("notice_div");
	var outerDiv =  $("outer_map_div");
	
	infoDiv.innerHTML = "";
	
	var topHeadingDiv = document.createElement("div");
	topHeadingDiv.setAttribute("class","top_heading");
	topHeadingDiv.innerHTML = "7 Day Forecast for " + stationName + "<img id='x_off' onclick='hidenotice_hotspot()' src='/images/x_off.gif'>";
	
	var topDiv = document.createElement("div");
	topDiv.setAttribute("class","top");
	
	var middleMidDiv = document.createElement("div");
	middleMidDiv.setAttribute("class","middle_mid");
	middleMidDiv.innerHTML = "<br><br>" +  innerHTML;
	
	topDiv.appendChild(middleMidDiv);
	infoDiv.appendChild(topHeadingDiv);
	infoDiv.appendChild(topDiv);
	
	infoDiv.style.visibility = "visible";
	infoDiv.style.zIndex = 10000;
	infoDiv.style.width = 250;
	infoDiv.style.overflow = "auto";
	infoDiv.style.left = map_left + outerDiv.offsetWidth/2 - infoDiv.offsetWidth/2;
	infoDiv.style.top = map_top + 50;
	
	if(show_p_ad)
	{
		var p_ad_div = $("p_ad_div");
		p_ad_div.innerHTML = p_ad_url;
	}
	

		
		
}

function popup_incident(t)
{
//alert("hello");

	var infoDiv = document.getElementById("pop_up_div");
	var infoDivTest = document.getElementById("pop_up_div_test");
	
	infoDiv.innerHTML = "";
	infoDivTest.innerHTML = "";
	
	infoDiv.style.height = "";
	infoDiv.style.overflow = "hidden";
	

	
	var popup_array = text_popup[t.id];
	
	br=navigator.appName;
	brversion=parseInt(navigator.appVersion);	
	var sev_string = '_mid';
	
	var show_pointer = true;
	
	if (br=='Microsoft Internet Explorer')
	{	
		var outer_map_div_elem = document.getElementById('outer_map_div');
		var srcEvent = window.event;
		var theLeft = 0;
		var theTop = 0;
		if (document.documentElement && document.documentElement.scrollTop)
		{
			theTop = document.documentElement.scrollTop;
			theLeft = document.documentElement.scrollLeft;	
		}
		else if (document.body){
			theTop = document.body.scrollTop;
			theLeft = document.body.scrollLeft;
		}
		
		var html_string = "";
		var buff_div = document.createElement("div");
		buff_div.setAttribute("class","top_partner");
		
		for(i=0; i< popup_array.length; i++)
		{
			var type =  popup_array[i].type.replace("sig","");
			var desc = popup_array[i].desc;
			var p_link = popup_array[i].p_link;
			var t_link = popup_array[i].t_link;
			var camera_width = popup_array[i].width;
			var camera_height = popup_array[i].height;
			var severity = popup_array[i].severity;
			var camera_type = popup_array[i].ctype;
			
			if(severity <=5)
			{
				sev_string = "_max";
			}
			else if(severity <= 12)
			{
				sev_string = "_mid";
			}
			else
				sev_string = "_none";
			
			var heading_div = document.createElement("div");
			heading_div.setAttribute("class", "top" + sev_string);
			
			if(type=="camera")
			{
				heading_div.innerHTML = "Camera : " + desc;
			    if(p_link == t_link)
			        show_pointer = false;
			}
			else
				heading_div.innerHTML = type ;
			
			buff_div.appendChild(heading_div);
			
			var desc_div = document.createElement("div");
			desc_div.setAttribute("class", "middle_mid_ie");
			
	//alert("inside");
	
			var show_cam_string = "show_camera('" + type + "','" +  p_link + "','" + t_link + "','" + camera_width +"','" + camera_height +"');"
			desc_div.setAttribute("onclick", show_cam_string );
			
			
			if(type != "camera")
			{
			    show_pointer = true;
				desc_div.innerHTML = "<div class='" + type + "'></div>" + desc;
				infoDiv.style.width = "250px";
			}
			else
			{
				desc_div.setAttribute("class", "middle_mid_ie_camera");

				if(camera_type < 3)
				{
					var cam_download_img = document.getElementById("default_img_dl");
					desc_div.appendChild(cam_download_img.cloneNode(true));
					desc_div.childNodes[0].style.visibility = "visible";
					desc_div.childNodes[0].style.width = camera_width;
					desc_div.childNodes[0].style.height = camera_height;
					desc_div.childNodes[0].setAttribute("src", p_link + "&date=" +  new Date().getTime());
					
				}
				else
				{
				    show_pointer = false;
					desc_div.innerHTML = "<iframe src='" + p_link  + "' width=" + camera_width + " height=" + camera_height + " scrolling='no' >";
				}
				
				infoDiv.style.width = camera_width + "px";
			}
				
			buff_div.appendChild(desc_div);
			
			
		}
		var heading_text = "";
		if(popup_array.length > 1)
			 heading_text = "<DIV class='top_heading'>Powered by BeatTheTraffic.com<img src='/images/x_off.gif' id='x_off' onclick='hideInfo_hotspot()'></div><br><br>";
		
		infoDiv.style.visibility = 'visible';
		infoDiv.innerHTML = heading_text +  buff_div.outerHTML;
		
		
		infoDivTest.innerHTML =  heading_text +  buff_div.outerHTML;

		if(infoDivTest.offsetHeight > 300)
		{
			infoDiv.style.height = 300;
			infoDiv.style.overflow = "auto";
		}

    //infoDiv.innerHTML = "";
    
		infoDivTest.innerHTML = "";	
		if(srcEvent.clientX > (map_left + outer_map_div_elem.offsetWidth/2))
		{
			positionX = srcEvent.clientX + theLeft - infoDiv.offsetWidth - 15;
		}
		else
			positionX = srcEvent.clientX + theLeft +  15;
			
		if(srcEvent.clientY > (map_top + outer_map_div_elem.offsetHeight/2))
		{
			positionY = srcEvent.clientY + theTop - infoDiv.offsetHeight - 15;
		}
		else
			positionY = srcEvent.clientY + theTop;
		
		infoDiv.style.left = positionX + 'px';
		infoDiv.style.top = positionY + 'px';
		
		//alert(infoDiv.innerHTML);
		if(show_pointer)
		traffic_layer_div.style.cursor = "pointer";


	}
	else if(br=='Netscape')
	{
		var html_string = "";
		var outer_div = document.createElement("div");
		var buff_div = document.createElement("div");
		buff_div.setAttribute("class","top");

		for(i=0; i< popup_array.length; i++)
		{
			var type =  popup_array[i].type.replace("sig","");
			var desc = popup_array[i].desc;
			var p_link = popup_array[i].p_link;
			var t_link = popup_array[i].t_link;
			var camera_width = popup_array[i].width;
			var camera_height = popup_array[i].height;
			var severity = popup_array[i].severity;
			var camera_type = popup_array[i].ctype;
			
			if(severity <=5)
			{
				sev_string = "_max";
			}
			else if(severity <= 12)
			{
				sev_string = "_mid";
			}
			else
				sev_string = "_none";
				
			var heading_div = document.createElement("div");
			heading_div.setAttribute("class", "top" + sev_string);
			
			if(type=="camera")
			{
				heading_div.innerHTML = desc;
			     if(p_link == t_link)
			        show_pointer = false;
			}
			else	
				heading_div.innerHTML = type ;
			
			buff_div.appendChild(heading_div);
			
			var desc_div = document.createElement("div");
			
			desc_div.setAttribute("onclick", "show_camera('" + type + "','" +  p_link + "','" + t_link + "','" + camera_width +"','" + camera_height +"');");

			if(type != "camera")
			{
	            
			    //show_pointer = true;
			    
				desc_div.setAttribute("class", "middle_mid");
				desc_div.innerHTML = "<div class='" + type + "'></div>" + desc;
				infoDiv.style.width = "250px";
			}
			else
			{
				desc_div.setAttribute("class", "middle_mid_camera");
				if(camera_type < 3)
					desc_div.innerHTML = "<img src='" + p_link + "&date=" +  new Date().getTime() +  "' width=" + camera_width + " height=" + camera_height +" >";
				else
					desc_div.innerHTML = "<iframe src='" + p_link  + "' width=" + camera_width + " height=" + camera_height + " scrolling='no' >";
				
				infoDiv.style.width = camera_width + "px";
			}
			buff_div.appendChild(desc_div);
		}
		outer_div.appendChild(buff_div);
		
		var heading_text = "";
		if(popup_array.length > 1)
			heading_text = "<DIV class='top_heading'>Powered by BeatTheTraffic.com<img src='/images/x_off.gif' id='x_off' onclick='hideInfo_hotspot()'></div><br><br>";
		
		infoDiv.style.visibility = 'visible';
		infoDiv.style.zIndex = 10000;
		infoDiv.innerHTML = heading_text +  outer_div.innerHTML;// + "</div>";
		infoDivTest.innerHTML =  heading_text +  buff_div.outerHTML;
		
		if(infoDiv.offsetHeight > 300)
		{
			infoDiv.style.height = 300;
			infoDiv.style.overflow = "auto";
		}

		infoDivTest.innerHTML = "";
			
		var srcEvent = arguments.callee.caller.arguments[0];						
		var positionX  = 0;
		var positionY = 0;
	
		var outer_map_div_elem = document.getElementById('outer_map_div');
		if(srcEvent.pageX > (map_left + outer_map_div_elem.offsetWidth/2))
		{
			positionX = srcEvent.pageX - infoDiv.offsetWidth - 15;
		}
		else
		{
			positionX = srcEvent.pageX  + 10;
		}
		if(srcEvent.pageY > (map_top + outer_map_div_elem.offsetHeight/2))
		{
			positionY = srcEvent.pageY - infoDiv.offsetHeight;
		}
		else
		{
		positionY = srcEvent.pageY + 10; 
		}
		
		infoDiv.style.visibility='visible';
		infoDiv.style.left = positionX + 'px';
		infoDiv.style.top = positionY + 'px';
		if(show_pointer)
		traffic_layer_div.style.cursor = "pointer";
		
	}
	else
	{
		alert('Browser Not Defined');
	}
	
//	alert(infoDiv.outerHTML);
}	

function popup_speed(t)
{
	
	var infoDiv = document.getElementById("pop_up_incident_div");
	var text = speed_text_popup[t.id];
	var title = "Road Speed"
	var outer_map_div_elem = document.getElementById('outer_map_div');
	
	br=navigator.appName;
	brversion=parseInt(navigator.appVersion);	
	//serverity= low, mid, max
	var sev = '_low_speed';
	var mph_index = text.search("\\d+\\sMPH");
	if(mph_index >=0)
	{
		
		var mph = parseInt(text.substring(mph_index).replace(" MPH",""));
		title = title + ": " + mph + " MPH";
		if(mph <=25)
		{
			sev = '_max_speed';
		}
		else if(mph <= 45)
		{
			sev = '_mid_speed';
		}
	}
	
	if (br=='Microsoft Internet Explorer')
	{		
		var srcEvent = window.event;
		var theLeft = 0;
		var theTop = 0;
		if(title != ''){
			infoDiv.innerHTML = '<div class="top'+sev+'">' + title +'<div class="middle'+sev+'">'+ text+'<br><br><div class="bottom'+sev+'">Powered by BeatTheTraffic.com</div>' + '</div>' ;
			}
		else{
			infoDiv.innerHTML = '<div class="top'+sev+'"></div>' +'<div class="middle'+sev+'">'+ text+'<br><br></div><div class="bottom'+sev+'">Powered by BeatTheTraffic.com</div>';
			
			}
			
		if (document.documentElement && document.documentElement.scrollTop)
		{
			theTop = document.documentElement.scrollTop;
			theLeft = document.documentElement.scrollLeft;	
		}
		else if (document.body){
			theTop = document.body.scrollTop;
			theLeft = document.body.scrollLeft;
		}
		if(srcEvent.clientX > (map_left + outer_map_div_elem.offsetWidth/2))
		{
			positionX = srcEvent.clientX + theLeft - infoDiv.offsetWidth - 15;
		}
		else
			positionX = srcEvent.clientX + theLeft +  15;
			
		if(srcEvent.clientY > (map_top + outer_map_div_elem.offsetHeight/2))
		{
			positionY = srcEvent.clientY + theTop - infoDiv.offsetHeight;
		}
		else
			positionY = srcEvent.clientY + theTop;
		
			
		infoDiv.style.visibility = 'visible';	
		infoDiv.style.left = positionX + 'px';
		infoDiv.style.top = positionY + 'px';
	}
	else if(br=='Netscape')
	{
		
		var srcEvent = arguments.callee.caller.arguments[0];						
		var OffSets = getOffsets(srcEvent);
		var positionX  = 0;
		var positionY = 0;
		if(title != ''){
			infoDiv.innerHTML = '<div class="top'+sev+'">' + title +'<div class="middle'+sev+'">'+ text+'<br><br><div class="bottom'+sev+'">Powered by BeatTheTraffic.com</div>' + '</div>' ;
		
			}
		else{
			infoDiv.innerHTML = '<div class="top'+sev+'"></div>' +'<div class="middle'+sev+'">'+ text+'<br><br></div><div class="bottom'+sev+'">Powered by BeatTheTraffic.com</div>';

			}
			
		if(srcEvent.pageX > (map_left + outer_map_div_elem.offsetWidth/2))
		{
			positionX = srcEvent.pageX - infoDiv.offsetWidth - 15;
		}
		else
		{
			positionX = srcEvent.pageX + 10;
		}
		if(srcEvent.pageY > (map_top + outer_map_div_elem.offsetHeight/2))
		{
			positionY = srcEvent.pageY - 50;
		}
		else
		{
		positionY = srcEvent.pageY + 10; 
		}	
			
		infoDiv.style.visibility='visible';
		infoDiv.style.left = positionX + 'px';
		infoDiv.style.top = positionY + 'px';
		
	}
	else
	{
		alert('Browser Not Defined');
	}
	
}

var session_id = "";
var select_incidents_string = "all";
var show_cam = true;
var show_weather = true;
var current_lat_step;
var current_lon_step;
var precision_digits_lat;
var precision_digits_lon;
var x_trans = 0;
var y_trans = 0;
var cur_x_trans = 0;
var cur_y_trans = 0;
var scrolling = false;
var ajax_requests = 0;
var camera_publish_code = 1;
var flow_publish_code = 1;


//Class Camera
function HotSpot(_type, _width, _height, _plink,_tlink, _desc, _severity, _ctype) {
	this.type = _type;
	this.width = _width;
	this.height = _height;
	this.p_link = _plink;
	this.t_link = _tlink;
	this.desc = _desc;
	this.severity = _severity;
	this.ctype = _ctype;
}

function zoom_in(ev)
{
	zoom_value = 1;//zoom in//
	//Do not show radar at lower zoom levels//	
	zoom_function(ev, false);
}

function zoom_out(ev)
{
	zoom_value = 2;//zoom out//
	zoom_function(ev, false);
}

function saveUserViewCookie()
{
	var expiredays = 15;
	var c_xoff = (get_number_from_px(map_div.style.left) % image_size);
	var c_yoff = (get_number_from_px(map_div.style.top) % image_size);
	if(c_yoff > 0)
	{
		c_yoff = image_size - c_yoff;
		c_yoff = -1*c_yoff;
	}			
	if(c_xoff > 0)
	{
		c_xoff = image_size - c_xoff;
		c_xoff = -1*c_xoff;
	}	
	var top_left_im = document.images[grid_array[0]];
	var args = getArgs();
	
	var value = args.regionid + "," + current_lat_step + "," + c_xoff + "," + c_yoff + "," + top_left_im.id + "," + args.viewname;
	
	var exdate=new Date();
	exdate.setDate(exdate.getDate() + expiredays);
	document.cookie = "bttview=" + escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
	
}

function checkCookie()
{
	var c_value = "";
	var c_name = "bttview";
	if (document.cookie.length>0)
	{
		c_start=document.cookie.indexOf(c_name + "=");
		if (c_start!=-1)
		{ 
		c_start=c_start + c_name.length+1; 
		c_end=document.cookie.indexOf(";",c_start);
		if (c_end==-1) c_end=document.cookie.length;
		 c_value = unescape(document.cookie.substring(c_start,c_end));
		} 
	}
	var set_user_view = false;
	
	if(c_value.length > 0)
	{
		var c_split=c_value.split(",");
		
		var args = getArgs();
		
		if((c_split[0] == args.regionid)&&(c_split[5] == args.viewname))
		{
		setuserView(c_split[0], c_split[1], c_split[2], c_split[3], c_split[4], c_split[5]);
		current_lat_step = c_split[1];
		set_user_view = true;
		}
	}
	
	if(set_user_view == false)
	{
		
		var args = getArgs();
		var return_array = getcentertile();
		var outerDiv =  $("outer_map_div");
		var window_height = outerDiv.offsetHeight;
		var window_width = outerDiv.offsetWidth;
		var center_x = window_width/2;
		var center_y = window_height/2;
		
		var rows_above = Math.ceil( (center_y  - (image_size - return_array[4]))/image_size);
		var col_left = Math.ceil( (center_x - return_array[3])/image_size);	
		
		//alert(window_width + "," + window_height);
		current_lat_step = return_array[2];

		var base_lat = return_array[0] + rows_above * current_lat_step;
		var step_dig = get_lon_step_from_lat(current_lat_step);
		
		var base_lon = Math.abs(return_array[1]) + col_left * step_dig[1];
		var cent_x_tile = col_left * image_size + return_array[3];
		var cent_y_tile = (rows_above + 1)*image_size - return_array[4];
		 
		var c_imgname = String(base_lat).replace(".","_") + "N" + String(base_lon).replace(".","_");
		
		//TODO: CALCULATE CORRECT VALUES BASED ON CENTERLAT, CENTERLON
		
		setuserView(region_id, current_lat_step,  center_x - cent_x_tile, center_y - cent_y_tile ,c_imgname , args.viewname);
	}
}

function setuserView(c_regionid, c_latstep, c_xoff, c_yoff, c_imgname, c_viewname)
{	
		var step_dig = get_lon_step_from_lat(c_latstep);
		var c_lonstep = step_dig[1];
		var precision_digits_lon = step_dig[0];
		var lat_lon = get_lat_lon_from_id(c_imgname);
		var step_string_split = c_latstep.toString().split(".");
		var precision_digits_lat = step_string_split[1].length;
		//get all urls starting from base_grid_lat/base_grid_lon
		var current_index = 0;
		//alternate servers to take advantage of parallel downloading//
		
		for(row = 0; row < number_rows ; row++)
		{
			for(column = 0; column < number_columns; column++)
			{
				var lat = (lat_lon[0] - (row * c_latstep)).toFixed(precision_digits_lat);
				var lon = (lat_lon[1] - (column * c_lonstep)).toFixed(precision_digits_lon);
				
				lat = lat.toString().replace(".","_");
				lon = lon.toString().replace(".","_");
				
				var url = "zoom/" + c_regionid + "/" + c_latstep.toString().replace(".","_") + "/" + lat + "/" + lat + "N" + lon + ".jpg";
				if((current_index % 2)== 0)
					url = server1 + url;
				else
					url = server2 + url;

				//alert(url);
				
				document.images[grid_array[current_index]].src = url;
				document.images[grid_array[current_index]].id = lat + "N" + lon;	
				current_index++;	
			}
		}
		
		
		
		map_div.style.left =  c_xoff;
		map_div.style.top =  c_yoff;
		//MOVE TRAFFIC LAYER//
		traffic_layer_div.style.left =  c_xoff;
		traffic_layer_div.style.top =  c_yoff;
		
	
}

function show_radar_legend(visibility)
{
	var radar_legend_div = $("radar_image_div");
	radar_legend_div.style.visibility = visibility;
	
}

function update_incidents()
{
	show_cam = $("cameras_checkbox").checked;
	var show_acc = $("accidents_checkbox").checked;
	var show_rwrk = $("roadwork_checkbox").checked;
	show_weather = $("weather_checkbox").checked;
	
	if(show_acc && show_rwrk)
		select_incidents_string = "all";
	else if(show_acc)
		select_incidents_string = "work";
	else if(show_rwrk)
		select_incidents_string = "workonly";
	else
		select_incidents_string = "none";

	clear_traffic_layer();
	
	get_traffic_layer_data(0, number_columns, number_rows);	
		

}


var start_time = new Date();//current time// 

function startclock()
{
	if(window.location.toString().indexOf('map') >= 0)
	{
		var thetime=new Date();//time that has passed //
		var diff = thetime - start_time;//milliseconds//
		var minutes = Math.floor(diff/1000/60);
		var seconds = Math.round(diff/1000) % 60;//seconds//
		setTimeout('startclock()',120000);
		if(minutes >= 3)
		{
			refresh_page_dialog(minutes);
		}
	}
} 

function refresh_page_dialog(minutes)
{
	var infoDiv = $("notice_div");
	var outerDiv =  $("outer_map_div");
	
	infoDiv.innerHTML = "";
	
	var topHeadingDiv = document.createElement("div");
	topHeadingDiv.setAttribute("class","top_heading");
	topHeadingDiv.innerHTML = "Notice about traffic data<img id='x_off' onclick='hidenotice_hotspot()' src='/images/x_off.gif'>";
	
	var topDiv = document.createElement("div");
	topDiv.setAttribute("class","top");
	
	var middleMidDiv = document.createElement("div");
	middleMidDiv.setAttribute("class","middle_mid");
	middleMidDiv.innerHTML = "<div class='warning'></div>Information is more than " + minutes + " minutes old. Please <a href='' onclick='history.go()'>Refresh</a>";
	
	topDiv.appendChild(middleMidDiv);
	infoDiv.appendChild(topHeadingDiv);
	infoDiv.appendChild(topDiv);
	
	infoDiv.style.visibility = "visible";
	infoDiv.style.width = 200;
	infoDiv.style.height = 70;
	infoDiv.style.overflow = "auto";
	infoDiv.style.left = map_left + outerDiv.offsetWidth/2 - infoDiv.offsetWidth/2;
	infoDiv.style.top = map_top + 50;
}

function hidenotice_hotspot()
{
	var infoDiv = $("notice_div");
	infoDiv.innerHTML = "";
	infoDiv.style.visibility = "hidden";
}

function swap_images()
{
	while((top_most_y > (0)))//update image links and positions at the bottom -> switch them to the top//
	{	
		//Get Incident Info//
		var current_index = grid_array.length - 1;
		var new_index_array = new Array(number_columns);
		for(j= 0; j < number_columns ; j++)//
		{
			var im = document.images[grid_array[current_index]];
			new_index_array[number_columns - j - 1] = grid_array[current_index];
			im.style.top = parseInt(im.style.top.replace("px","")) - (image_size * (number_rows));
			var url_id = get_url_id("top",grid_array[current_index]);
			im.src = url_id[0];
			var old_id = im.id;
			im.id = url_id[1];	
			current_index--;
		}
		//update grid array
		grid_array = grid_array.slice(0, current_index+1);
		grid_array = new_index_array.concat(grid_array);
		
		//Ajax Request to get Traffic Layer Data//
		get_traffic_layer_data(0, number_columns , 1);
		img_top_most_y = get_number_from_px(document.images[grid_array[0]].style.top);
		top_most_y = get_number_from_px(map_div.style.top) + img_top_most_y;
		
	}
	while((bottom_most_y < ((number_rows-1)*image_size)  ))
	{
		var current_index = 0;
		var new_index_array = new Array(number_columns);
		for(j= 0; j < number_columns ; j++)
		{
			var im = document.images[grid_array[current_index]];
			new_index_array[j] = grid_array[current_index];
			im.style.top = parseInt(im.style.top.replace("px","")) + (image_size * (number_rows));
			var url_id = get_url_id("bottom",grid_array[current_index]);
			im.src = url_id[0];
			var old_id = im.id;
			im.id = url_id[1];
			current_index++;
		}
		
		//update grid array
		grid_array = grid_array.slice(current_index, grid_array.length);
		grid_array = grid_array.concat(new_index_array);
		
		//Make Ajax Request to get Bottom Block of Traffic Data//
		//TOP LEFT IMAGE//
		var left_index = grid_array.length - number_columns;
		get_traffic_layer_data(left_index, number_columns, 1);
		img_bottom_most_y = get_number_from_px(document.images[grid_array[grid_array.length-1]].style.top) + image_size;
		bottom_most_y = get_number_from_px(map_div.style.top) + img_bottom_most_y;
	
		
	}
	while((left_most_x > (0)))//scrolling to the right// update rightmost images to leftmost//
	{	
		var current_index = number_columns - 1;
		for(j= 0; j < number_rows ; j++)//
		{
			var im = document.images[grid_array[current_index]];
			im.style.left = parseInt(im.style.left.replace("px","")) - (image_size * (number_columns));
			
			var url_id = get_url_id("right",grid_array[current_index]);
			
			im.src = url_id[0];
			var old_id = im.id;			
			im.id = url_id[1];
			var temp_index = grid_array[current_index];
			grid_array.splice(current_index,1);//remove 
			grid_array.splice(current_index - number_columns + 1, 0, temp_index);
			
			current_index = current_index + number_columns;
		}
		
		get_traffic_layer_data(0, 1, number_rows);
		img_left_most_x  = get_number_from_px(document.images[grid_array[0]].style.left);//.replace("px","");
		left_most_x = get_number_from_px(map_div.style.left) + img_left_most_x;
	}
	
	while(right_most_x < ((number_columns - 1)*image_size) )//srolling to the left// update leftmost images to rightmost//
	{
		var current_index = 0;

		for(j= 0; j < number_rows ; j++)//
		{
			var im = document.images[grid_array[current_index]];
			im.style.left = parseInt(im.style.left.replace("px","")) + (image_size * (number_columns));
			var url_id = get_url_id("left",grid_array[current_index]);	
			im.src = url_id[0];
			var old_id = im.id;		
			im.id = url_id[1];

			var temp_index = grid_array[current_index];
			grid_array.splice(current_index,1);//remove 
			grid_array.splice(current_index + number_columns - 1, 0, temp_index);
			
			current_index = current_index + number_columns;
		}
		
		//Make Ajax Request to get Bottom Block of Traffic Data//
		//TOP LEFT IMAGE//
		var left_index = number_columns-1;
		get_traffic_layer_data(left_index, 1, number_rows);
		img_right_most_x = get_number_from_px(document.images[grid_array[number_columns-1]].style.left) + image_size;
		right_most_x = get_number_from_px(map_div.style.left) + img_right_most_x;
		
	}
		
}


function cancel_drag(ev)
{
	ev           = ev || window.event;
	var srcElement = ev.target || ev.srcElement;
	//Prevent IE 6+ From Freezing//
	if( (srcElement.id.charAt(0)=="c" ) || (srcElement.id.charAt(0) == "i") )
		return;
	
		dragapproved = false;
		event_button = null;
		if(navigator.appName=="Microsoft Internet Explorer")
		{
			//Prevents Nasty IE crash error//
			for(i=0; i< traffic_layer_div.childNodes.length; i++)
			{
				traffic_layer_div.childNodes[i].useMap = "#" + traffic_layer_div.childNodes[i].id.replace("t_","map_") + ".jpg";
			}
		}
		
		//IE Zoom Out Function//
		var dNow = new Date();
		var current_mouseup_down_interval = (dNow.getTime() - click_time);
		click_time = dNow.getTime();
		
		if((ev.button == 2) && (navigator.appName=='Microsoft Internet Explorer') &&((current_mouseup_down_interval) < 200) )
		{
			//zoom out//
			zoom_function(ev, false);
			return;
		}
		
		swap_images();
		
		map_div_left = get_number_from_px(map_div.style.left);
		map_div_top = get_number_from_px(map_div.style.top);
		traffic_layer_div_left = get_number_from_px(traffic_layer_div.style.left);
		traffic_layer_div_top = get_number_from_px(traffic_layer_div.style.top);
	
}

function UpdateIETrafficLayer(source ,  st_width,  st_height,  top_left_src_url,  top_latitude,  left_longitude)
{
	var im = document.images[grid_array[0]];
	var top_left_lat_lon =  get_lat_lon_from_id(im.id);
	var top_left_x = get_number_from_px(im.style.left);
	var top_left_y = get_number_from_px(im.style.top);
	var traffic_y = top_left_y + ( ((top_left_lat_lon[0] - top_latitude)/current_lat_step).toFixed() * image_size);
	var traffic_x = top_left_x + ( ((top_left_lat_lon[1] - left_longitude)/current_lon_step).toFixed() * image_size);

		var strFilter = "progid:DXImageTransform.Microsoft.AlphaImageLoader";
		var image_width = st_width * image_size;
		var image_height = st_height * image_size;
		
		var span_elem = document.createElement("span");
		span_elem.id = top_left_src_url.replace(".jpg","");
		span_elem.style.width = image_width;
		span_elem.style.height = image_height;
		span_elem.style.top = traffic_y;
		span_elem.style.left = traffic_x;
		span_elem.width = image_width;
		span_elem.height = image_height;
		span_elem.style.position = 'absolute';
		span_elem.className = "drag_traffic";
		span_elem.style.display = "inline-block";
		span_elem.style.filter = strFilter + "(src=\'" + source + "\', sizingMethod='scale')";

		traffic_layer_div.appendChild(span_elem);	
		
		//IE 5.5 and 6.+ Transparent Gif for Image Maps//
		var trans_gif = document.getElementById('transparent_gif').cloneNode(true);
		trans_gif.id = "t_" + span_elem.id;
		trans_gif.useMap = "#map_" + top_left_src_url;
		trans_gif.style.left = span_elem.style.left;
		trans_gif.style.top = span_elem.style.top;
		trans_gif.width = st_width * image_size;
		trans_gif.height = 	st_height * image_size;
		
		traffic_layer_div.appendChild(trans_gif);
		
		//alert(traffic_layer_div.innerHTML);
		
		//IMG TRANSPARENCY PROBLEM FOR IE 5.5 and IE 6.+//
		var arVersion = navigator.appVersion.split("MSIE");
		var version = parseFloat(arVersion[1]);
		
		//End of Transparency problem for IE5 and IE6
		//Add new traffic tile urls to traffic layer hash//
		for(k=0; k< st_width; k++)
		{
				for(l=0; l< st_height; l++)
				{
					var current_lat = (top_latitude - l*current_lat_step).toFixed(precision_digits_lat);
					var current_lon = (left_longitude - k*current_lon_step).toFixed(precision_digits_lon);
					var url_string = current_lat.toString().replace(".","_") + "N" + current_lon.toString().replace(".","_") + ".jpg";		
					traffic_layer_hash[url_string] = top_left_src_url;
				}
		}			
	
	
}


function UpdateNetscapeTrafficLayer(src, step_width, step_height, top_left_src, top_lat, left_lon)
{
	var im = document.images[grid_array[0]].cloneNode(true);
	var top_left_lat_lon =  get_lat_lon_from_id(im.id);
	var top_left_x = get_number_from_px(im.style.left);
	var top_left_y = get_number_from_px(im.style.top);
	var traffic_y = top_left_y + ( ((top_left_lat_lon[0] - top_lat)/current_lat_step).toFixed() * image_size);
	var traffic_x = top_left_x + ( ((top_left_lat_lon[1] - left_lon)/current_lon_step).toFixed() * image_size);

	im.style.left = traffic_x;
	im.style.top = traffic_y;	
	im.src = src;
	im.className = "drag_traffic";
	im.useMap = "#map_" + top_left_src;
	im.border = 0;
	im.id = top_left_src.replace(".jpg","");
	im.style.width = step_width * image_size;
	im.style.height = step_height * image_size;
	im.width = step_width * image_size;
	im.height = step_height * image_size;
	
	traffic_layer_div.appendChild(im);
	
	//Add new traffic tile urls to traffic layer hash//
	for(k=0; k< step_width; k++)
	{
			for(l=0; l< step_height; l++)
			{
				var current_lat = (top_lat - l*current_lat_step).toFixed(precision_digits_lat);
				var current_lon = (left_lon - k*current_lon_step).toFixed(precision_digits_lon);
				var url_string = current_lat.toString().replace(".","_") + "N" + current_lon.toString().replace(".","_") + ".jpg";		
				traffic_layer_hash[url_string] = top_left_src;
			}
	}
		


}

function getBaseURL() {
    var url = window.location.href;  // entire url including querystring - also: window.location.href;
   // alert(url);
    var baseURL = url.substring(0, url.indexOf('/', 14));


//    if (baseURL.indexOf('http://localhost') != -1) {
//        // Base Url for localhost
//        var url = location.href;  // window.location.href;
//        var pathname = location.pathname;  // window.location.pathname;
//        var index1 = url.indexOf(pathname);
//        var index2 = url.indexOf("/", index1 + 1);
//        var baseLocalUrl = url.substr(0, index2);

//        return baseLocalUrl + "/";
//    }
//    else {
        // Root Url for domain name
        
        return baseURL + "/";
   // }

}


function initialize_javascript()
{
  
  server_root = getBaseURL();

	var main_table = $("main_table");
	if(navigator.appName=="Microsoft Internet Explorer")
	{
		if(document.body.offsetWidth > max_window_width)
		{
			main_table.style.width = max_window_width;
		}
		
		if(document.body.offsetHeight > max_window_height)
		{
			main_table.style.height = max_window_height;
		}
	
	}
	else
	{
		if(window.innerWidth > max_window_width)
		{
			main_table.style.width = max_window_width;	
		}
		if(window.innerHeight  > max_window_height)
		{
			main_table.style.height = max_window_height;
		}
	
	}
	
		
	grid_array = new Array(number_columns * number_rows);

	for(i=0; i<document.images.length; i++)
	{
		if(document.images[i].className=="drag")
		{
			for(j=0; j< grid_array.length; j++)
			{
				grid_array[j] = j+i;
			}
			break;
		}
	}
	
	map_div = $('map_div');
	traffic_layer_div = $('traffic_layer_div');
	outer_map_div = $('outer_map_div');	
	
	var args = getArgs();
	region_id = args.regionid;

	checkCookie();
	
	camera_publish_code = getCameraPublishCode();
	
	flow_publish_code = getFlowPublishCode();
	
	//Get Region ID from Image Source//
	var step_dig = get_lon_step_from_lat(current_lat_step);
	
	current_lon_step = step_dig[1];
	precision_digits_lon = step_dig[0];
	
	map_div_left = get_number_from_px(map_div.style.left);
	map_div_top = get_number_from_px(map_div.style.top);
	traffic_layer_div_left = get_number_from_px(traffic_layer_div.style.left);
	traffic_layer_div_top = get_number_from_px(traffic_layer_div.style.top);
	
	var step_string_split = current_lat_step.toString().split(".");
	precision_digits_lat = step_string_split[1].length;
	
	var lat_lon = get_lat_lon_from_url(document.images[grid_array[0]].src);

	show_cam = $("cameras_checkbox").checked;
	var show_acc = $("accidents_checkbox").checked;
	var show_rwrk = $("roadwork_checkbox").checked;

	
	if(show_acc && show_rwrk)
	{
		select_incidents_string = "all";
	}
	else if(show_acc)
	{
		select_incidents_string = "work";
	}
	else if(show_rwrk)
	{
		select_incidents_string = "workonly";
	}
	else
	{
		select_incidents_string = "none";	
	}

	var show_radar = false;
	if((current_lat_step == 0.4)&& (show_weather == true))
	{
		show_radar = true;
		show_radar_legend("visible");
	}
		
	var request_url = server_root + "ajax/request/traffic.aspx?left_lon=" + lat_lon[1] + "&top_lat=" + lat_lon[0] + "&top_left_index=0" + "&step_lat=" + current_lat_step + "&step_lon=" + current_lon_step + "&width=" + number_columns +  "&height=" + number_rows + "&filter_string=" + select_incidents_string + "&pixel_size=" + image_size +  "&region_id=" + region_id + "&session_id=" + session_id + "&show_cam=" + show_cam + "&cam_code=" + camera_publish_code + "&show_weather=" + show_weather + "&show_radar=" + show_radar + "&flow_pc=" + flow_publish_code;

	
	new Ajax.Request(request_url,{
		method: 'get',
		
		onCreate: function ajaxCreate()
		{
			ajax_requests++;
			show_data_div();
		},
		onSuccess: function ajaxResponse(Axresponse)
		{
			handleAjaxResponse(Axresponse);
		},
		onComplete: function ajaxComplete()
		{
			ajax_requests--;
			hide_data_div();
		}
		});
		
	get_last_updated();
	
	set_poweredbybtt_location();
	
	select_pan_image();

	
	if(show_ads)
	refresh_ads();
	
	if(show_p_ad)
	{
		var p_ad_div = $("p_ad_div");
		p_ad_div.innerHTML = p_ad_url;
	}
	
	if(show_p_tt)
	{
		var p_tt_div = $("p_tt_div");
		p_tt_div.innerHTML = tt_url;
	}
	
	startclock();
	
	
	
}


function handleAjaxResponse(response)
{
			var ajaxResponse = null;
			var safari_index = navigator.userAgent.toLowerCase().indexOf("safari");
			if(safari_index > 0)
			{
				var xmlDocument = new DOMParser().parseFromString(response.responseText, 'text/xml');		
				ajaxResponse = xmlDocument.documentElement.childNodes[0];
			}
			else
				ajaxResponse = response.responseXML.childNodes[0].childNodes[0];
					
			ajax_cpt++;
			//Traffic Node//
			var node = ajaxResponse.childNodes[0];
			//SRC//
			var src = node.attributes[0].nodeValue;
			if(src.length == 0)
			{
				return;
			}
				
			//TOP LEFT SRC//
			var top_lat = node.attributes[1].nodeValue;
			var left_lon = node.attributes[2].nodeValue;
			var step_width = parseInt(node.attributes[3].nodeValue);
			var step_height = parseInt(node.attributes[4].nodeValue);
			var step_requested = parseFloat(node.attributes[6].nodeValue);
			
			//Don't Use this image if steps are not the same//
			if(step_requested != current_lat_step)
			{
				return;
			}
			
			var top_left_src = top_lat.toString().replace(".","_") + "N" + left_lon.toString().replace(".","_") + ".jpg";
			var right_lon = (parseFloat(left_lon) - step_width * current_lon_step).toFixed(precision_digits_lon);
			bottom_lat = (parseFloat(top_lat) - step_height * current_lat_step).toFixed(precision_digits_lat);
			
			var right_src;
			if(step_width > step_height)
			 	right_src = top_lat.toString().replace(".","_") + "N" + right_lon.toString().replace(".","_") + ".jpg";
			else
				right_src = bottom_lat.toString().replace(".","_")+ "N" + left_lon.toString().replace(".","_") + ".jpg"; 
			 
			//Create Different Functions for IE 5, 6// IE 7  and Firerox//
			if(navigator.appName=="Netscape")
			{	
				UpdateNetscapeTrafficLayer(src, step_width, step_height, top_left_src, top_lat, left_lon);
				
				var saved_map = document.getElementById("map_" + top_left_src);
				
				if(saved_map!=null)
				{
					document.body.removeChild(saved_map);
				}
				
				//Update Image Maps//
				var map_ = document.createElement("map");
				map_.setAttribute("name","map_" + top_left_src);
				map_.setAttribute("id","map_" + top_left_src);
			
				//incidents,cameras, and current conditions//
				var count = ajaxResponse.childNodes[1].childNodes.length;
				for(j=0; j< count ; j++)
				{	
					var area1 = document.createElement("area");
					var node = ajaxResponse.childNodes[1].childNodes[j];
					var coords_string = node.attributes[0].nodeValue;
					var pop_up_array = new Array();
					
					for(k=0; k< node.childNodes.length; k++)
					{
						var type = node.childNodes[k].attributes[0].nodeValue;
						var desc_pop = node.childNodes[k].attributes[1].nodeValue;
						
						if(type=="camera")
						{
							var p_link = node.childNodes[k].attributes[2].nodeValue;
							var t_link = node.childNodes[k].attributes[3].nodeValue;
							var c_width = node.childNodes[k].attributes[4].nodeValue;
							var c_height = node.childNodes[k].attributes[5].nodeValue;
							var c_type = node.childNodes[k].attributes[6].nodeValue;
							
							var hot_spot = new HotSpot(type, c_width, c_height,p_link,t_link, desc_pop,20,c_type);
							pop_up_array.push(hot_spot);
						}
						else if (type=="current conditions")
						{
							var severity = node.childNodes[k].attributes[3].nodeValue;
							var stationid = node.childNodes[k].attributes[2].nodeValue;
							var hot_spot = new HotSpot(type, 0, 0, stationid,"", desc_pop,severity,0);
							pop_up_array.push(hot_spot);
						}
						else
						{
							var severity = node.childNodes[k].attributes[2].nodeValue;
							var hot_spot = new HotSpot(type, 0, 0, "","", desc_pop,severity,0);
							pop_up_array.push(hot_spot);
						}
					
					}
      				area1.setAttribute("shape","rect");
      				area1.coords = coords_string;
      				area1.id = "i_" + top_left_src + j;
      				text_popup[area1.id] = pop_up_array;
					area1.setAttribute("onmouseover","javascript:popup_incident(this);");
					area1.setAttribute("onmouseout","javascript:check_hideIncident(this);");
					area1.setAttribute("onclick","javascript:popup_click(this);");
				
					map_.appendChild(area1);
				
				}
				
				if(count > 0)
				{
					document.body.appendChild(map_);
				}
				
				//speeds//
				for(j=0; j < ajaxResponse.childNodes[2].childNodes.length; j++)
				{	
					var node = ajaxResponse.childNodes[2].childNodes[j];
					var coords = node.attributes[0].nodeValue;
					var desc = node.attributes[1].nodeValue;
									
					var area1 = document.createElement("area");
			      	area1.setAttribute("shape","polygon");
			      	area1.coords = coords;
			      	area1.id = top_left_src + j;
			      	speed_text_popup[area1.id] = desc;
					area1.setAttribute("onmouseover","javascript:popup_speed(this);");
					area1.setAttribute("onmouseout","javascript:hideInfo_incident();");
							
					map_.appendChild(area1);
							
				}
				
			}
			else if(navigator.appName=="Microsoft Internet Explorer")
			{
				
				UpdateIETrafficLayer(src, step_width, step_height, top_left_src, top_lat, left_lon);
				
				//Update Incident and Speed Pop Ups//
				var map = document.getElementById("default_map_inc");
				var map_speed = document.getElementById("default_map_speed");
				//var map_camera = document.getElementById("default_map_camera");
				
				var map2 = document.createElement("map");
				map2.setAttribute("id","map_" + top_left_src);
				
				//incidents and cameras//
				for(j=0; j< ajaxResponse.childNodes[1].childNodes.length; j++)
				{
					//Hot Spot//
					var node = ajaxResponse.childNodes[1].childNodes[j];
					var coords_string = node.attributes[0].nodeValue;
					var pop_up_array = new Array();
					
					for(k=0; k< node.childNodes.length; k++)
					{
						var type = node.childNodes[k].attributes[0].nodeValue;
						var desc_pop = node.childNodes[k].attributes[1].nodeValue;
						if(type=="camera")
						{
							var p_link = node.childNodes[k].attributes[2].nodeValue;
							var t_link = node.childNodes[k].attributes[3].nodeValue;
							var c_width = node.childNodes[k].attributes[4].nodeValue;
							var c_height = node.childNodes[k].attributes[5].nodeValue;
							var c_type = node.childNodes[k].attributes[6].nodeValue;
							
							var hot_spot = new HotSpot(type, c_width, c_height,p_link,t_link, desc_pop, 20, c_type);
							pop_up_array.push(hot_spot);
						}
						else if (type=="current conditions")
						{
							var severity = node.childNodes[k].attributes[3].nodeValue;
							var stationid = node.childNodes[k].attributes[2].nodeValue;
							var hot_spot = new HotSpot(type, 0, 0, stationid,"", desc_pop,severity,0);
							pop_up_array.push(hot_spot);
						}
						else
						{
							var severity = node.childNodes[k].attributes[2].nodeValue;
							var hot_spot = new HotSpot(type, 0, 0, "","", desc_pop, severity, 0);
							pop_up_array.push(hot_spot);
						}
					}
				
					var area = map.areas[0].cloneNode();
					area.coords = coords_string;
					area.id = "i_" + top_left_src + j;
					map2.appendChild(area);
	      			text_popup[area.id] = pop_up_array;
				}//end of incident for loop//
					
				document.body.appendChild(map2);
				
				//speed pop ups//
				for(j=0; j < ajaxResponse.childNodes[2].childNodes.length; j++)
				{	
					var node = ajaxResponse.childNodes[2].childNodes[j];
					var coords = node.attributes[0].nodeValue;
					var desc = node.attributes[1].nodeValue;	
					var area_node = map_speed.areas[0].cloneNode();
					area_node.setAttribute("shape","poly");
					area_node.id =  top_left_src + j;
					speed_text_popup[area_node.id] = desc;	
					area_node.coords = coords;//
					map2.appendChild(area_node);
				}
			}
			else
				alert('Browser Not Defined. Only IE6+ and Firefox are supported.');
}

function set_poweredbybtt_location()
{
	var btt_div = $("powered_by_btt_div");
	var outer_map_div_elem = $('outer_map_div');
	btt_div.style.top = outer_map_div_elem.offsetHeight - powered_btt_offset;
	btt_div.style.visibility = 'visible';
	

	if( show_inrix_logo() == true )
	{
		var inrix_div = $("inrix_traffic_div");
		inrix_div.style.top = outer_map_div_elem.offsetHeight - powered_btt_offset - 56;
		inrix_div.style.left = outer_map_div_elem.offsetWidth - 90;
		inrix_div.style.visibility = 'visible';
		
		var cw_div = $("cw_div");
		cw_div.style.top = outer_map_div_elem.offsetHeight - powered_btt_offset - 90;
		cw_div.style.visibility = 'visible';
		cw_div.style.left = outer_map_div_elem.offsetWidth - 250;
	}
	else
	{
		var args = getArgs();
		var dot_div = $("dot_div");
		if(show_dot_logo==true)
		{
		dot_div.innerHTML = "<a href='/credits.aspx' target='_top'><img src='" + dot_logo_url + "'  oncontextmenu='return false' style='Z-INDEX: 10000' border='0'></a>";
		dot_div.style.top = outer_map_div_elem.offsetHeight - powered_btt_offset - dot_logo_height -90 ;
		dot_div.style.visibility = 'visible';
		dot_div.style.left = outer_map_div_elem.offsetWidth - dot_logo_width - 10;
		
		var cw_div = $("cw_div");
		cw_div.style.top = outer_map_div_elem.offsetHeight - powered_btt_offset - 90;
		cw_div.style.visibility = 'visible';
		cw_div.style.left = outer_map_div_elem.offsetWidth - dot_logo_width - 160;
		
		}
		else
		{
		dot_div.style.visibility = 'hidden';
		var cw_div = $("cw_div");
		cw_div.style.top = outer_map_div_elem.offsetHeight - powered_btt_offset - 90;
		cw_div.style.visibility = 'visible';
		cw_div.style.left = outer_map_div_elem.offsetWidth - 150;
		}
		
	}

}

function getArgs() { 
	var args = new Object(); 
	var query = location.search.substring(1); 
	var pairs = query.split("&"); 
	for(var i = 0; i < pairs.length; i++) { 
	var pos = pairs[i].indexOf('='); 
	if (pos == -1) continue; 
	var argname = pairs[i].substring(0,pos); 
	var value = pairs[i].substring(pos+1); 
	args[argname] = unescape(value); 
	} 
	return args; 
} 

function get_number_from_px(pixel_string)
{
	return parseInt(pixel_string.replace("px",""));
}

function show_pan_hand()
{
	var panning_bar_div = document.getElementById("panning_bar_div");
	panning_bar_div.style.cursor = "pointer";
}
function hide_pan_hand()
{
	var panning_bar_div = document.getElementById("panning_bar_div");
	panning_bar_div.style.cursor = "auto";
}

function popup_click(t)
{
	var popup_array = text_popup[t.id];
	var type = popup_array[0].type;
	if(type=="camera")
	{
		show_camera(popup_array[0].type, popup_array[0].p_link, popup_array[0].t_link, popup_array[0].width, popup_array[0].height, popup_array[0].ctype);
	}
	else if(type=="current conditions")
	{
	var stationid = popup_array[0].p_link.replace(/ /g, "");
		
	var request_url = server_root + "ajax/request/weather.aspx?type=seven_day_forecast&stationid=" + stationid + "&regionid=" + region_id;
	new Ajax.Request(request_url,{
		method: 'get',
		
		onCreate: function ajaxCreate()
		{
			show_data_div();
		},
		onSuccess: function ajaxResponse(Axresponse)
		{
			handleWeatherAjaxResponse(Axresponse);
		},
		onComplete: function ajaxComplete()
		{
			hide_data_div();
		}
		});
		
		
	}
	else
	{

		var args = getArgs();
		var query = window.location.search.substring(0);
		
		var eval_str = "window.location='/traffic/incidents.aspx" + query + "'";	
		eval(eval_str);
	}
}

function redirect_incident()
{
	var query = window.location.search.substring(0);	
	var eval_str = "window.location='/traffic/incidents.aspx" + query + "'";
		
	eval(eval_str);
}

function get_last_updated()
{
	var last_updated_div = document.getElementById("last_updated_div");
	if(navigator.appName == "Microsoft Internet Explorer")
	{
		var span_elem = document.createElement("span");
		var source = "/ajax/img/last_updated_" + region_id + ".png?"  + new Date().getTime();
		var strFilter = "progid:DXImageTransform.Microsoft.AlphaImageLoader";
		span_elem.style.width = 155;
		span_elem.style.height = 25;
		span_elem.style.top = 0;
		span_elem.style.left = 0;
		span_elem.style.position = 'relative';
		span_elem.style.display = "inline-block";
		span_elem.style.filter = strFilter + "(src=\'" + source + "\', sizingMethod='default')";
		last_updated_div.innerHTML = span_elem.outerHTML;
	}
	else
	{
		last_updated_div.innerHTML = "<img src='/ajax/img/last_updated_" + region_id + ".png?"  + new Date().getTime() + "'>";
		
	}

}

function check_hideIncident(t)
{
	var popup_array = text_popup[t.id];
	if(popup_array.length == 1)
	{
		var infoDiv = document.getElementById("pop_up_div");
		infoDiv.style.visibility = 'hidden';
		infoDiv.innerHTML = "";
		traffic_layer_div.style.cursor = "default";
	}

}
	
function hideInfo_hotspot()
{
	var infoDiv = $("pop_up_div");
	infoDiv.style.visibility = 'hidden';
	infoDiv.innerHTML = "";
	traffic_layer_div.style.cursor = "default";
}

function hideInfo_incident()
{			
	var infoDiv = $("pop_up_incident_div");
	infoDiv.style.visibility = 'hidden';
	traffic_layer_div.style.cursor = "default";
}

function refresh_ads()
{
	var total_index = 2;	
	ad_index = (ad_index + 1)%total_index;
	var ad_index_str = "ad_" + ad_index;
	var cameraMiddle = $("camera_sponsor");
	
	var args = getArgs();
	
	//if(ad_index < 2)
	//{
	
	if(ad_index == 0)
		cameraMiddle.innerHTML = "<iframe src=\"http://i.beatthetraffic.com/pub/yahoo_300_250.htm?" + args.viewname + " Traffic Map\" width=\"300px\" height=\"250px\" frameborder=\"0\" scrolling=\"no\" ></iframe>";
	else
		cameraMiddle.innerHTML = "<iframe src=\"http://i.beatthetraffic.com/pub/google_300_250.htm?" + args.viewname + " Traffic Map\" width=\"300px\" height=\"250px\" frameborder=\"0\" scrolling=\"no\" ></iframe>";
	
	//}
	//else
	//{
	//	cameraMiddle.innerHTML = get_ins_ad();
	//}
	
	right_ad_index = (right_ad_index + 1) %2;
	var rightAd = document.getElementById("right_side_ad");
	if(right_ad_index == 0)
		rightAd.innerHTML = "<iframe src=\"http://i.beatthetraffic.com/pub/google_160_600.htm?" + args.viewname + " Traffic Map\" width=\"160px\" height=\"600px\" frameborder=\"0\" scrolling=\"no\" ></iframe>";
	else
		rightAd.innerHTML = "<iframe src=\"http://i.beatthetraffic.com/pub/yahoo_160_600.htm?" + args.viewname + " Traffic Map\" width=\"160px\" height=\"600px\" frameborder=\"0\" scrolling=\"no\" ></iframe>";

}

function zoom_function(ev, use_last_latlon)
{
	//TODO: MAKE SURE YOU CLICKED SOMEWHERE INSIDE THE MAP//
	ev = ev || window.event;
	var calling_object = null;
	if((navigator.appName=="Microsoft Internet Explorer")&&(ev.srcElement != null))
	{
		calling_object = ev.srcElement.id;
		if(calling_object.indexOf("scroll_") >=0)
		{
			scroll(calling_object.replace("scroll_",""));
			return;
		}
	}
	else if(ev != null)
		calling_object = ev.target.id;
	if((calling_object != null) && (calling_object.indexOf('N') < 0)&&(zoom_value <= 0))
		return;
		
	var outer_map_div_elem = $('outer_map_div');
	var window_width = parseInt(outer_map_div_elem.offsetWidth);
	var window_height = parseInt(outer_map_div_elem.offsetHeight);
	if(window_width > max_window_width)
		window_width = max_window_width;
		
	if(window_height > max_window_height)
		window_height = max_window_height;
		
	var srcElement = null;
	var clientX = 0;
	var clientY = 0;
	var zoom_in = false;
	
	if(zoom_value > 0)
	{
		if(zoom_value == 1)
		{
			var x_off = (get_number_from_px(map_div.style.left) % image_size);
			var y_off = (get_number_from_px(map_div.style.top) % image_size);
			if(y_off > 0)
				y_off = image_size - y_off;
				
			if(x_off > 0)
				x_off = image_size - x_off;
			
			clientY = parseInt(window_height/2) + Math.abs(y_off) ;
			clientX = parseInt(window_width/2) + Math.abs(x_off) ;
			
			zoom_in = true;
		}
	}
	else
	{
		clientX = ev.clientX - map_left - get_number_from_px(document.images[grid_array[0]].style.left) - get_number_from_px(map_div.style.left);
		clientY = ev.clientY - map_top + document.body.scrollTop - get_number_from_px(document.images[grid_array[0]].style.top) - get_number_from_px(map_div.style.top);
		if(ev.button == 0)
			zoom_in = true;
	}
		
	if(zoom_in == true)
	{	
		var next_lat_step = current_lat_step / 2;//.05;
		var step_dig = get_lon_step_from_lat(next_lat_step);
		var next_lon_step = step_dig[1];
		var next_lon_step_precision_digits = step_dig[0];
		var next_longitude_anchor = step_dig[2];
		if(next_lat_step < 0.05)
		{
			zoom_value = -1;
			return;
		}
			
		var next_lat_step_string_split = next_lat_step.toString().split(".");
		var next_lat_step_precision_digits = next_lat_step_string_split[1].length;
		
		//Get Clicked Index Tile//
		var x_grid = clientX;
		var y_grid = clientY;
		
		var x_tile_column = parseInt((x_grid - (x_grid % image_size)) /image_size);//Integer Division Does not work
		var y_tile_row = parseInt((y_grid - (y_grid % image_size)) /image_size);//Integer Division Does not work

		var i=0;
		var selected_index = -1;
		for(row = 0; row < number_rows ; row++)
		{
			for(column = 0; column < number_columns; column++)
			{	
				if((x_tile_column == column)&& (y_tile_row == row))
				{
					//Get Clicked Element Index and Instance//
					selected_index = i;
					srcElement = document.images[grid_array[i]];
				}
				i++;
			}
		}
		//End of Zoom In Animation Code//
		//ZOOM IN//Need SRC Element//
		
		//X and Y offset for Indivial Tile (less than image size)
		var clicked_y_offset = y_grid - y_tile_row * image_size;
		var clicked_x_offset = x_grid - x_tile_column * image_size;
	
		//x,y offset for zoomed in tile//
		var cl_y_off = clicked_y_offset % (image_size /(current_lat_step/ next_lat_step));
		var cl_x_off = clicked_x_offset % (image_size /(current_lon_step/ next_lon_step));
	
		//tile row//expressed as (0,128) (128,0) (0,0) and (128,128)
		clicked_y_offset = clicked_y_offset - (clicked_y_offset % (image_size / (current_lat_step/ next_lat_step)));
		clicked_x_offset = clicked_x_offset - (clicked_x_offset % (image_size / (current_lon_step/ next_lon_step)));
	
		var lat_lon = get_lat_lon_from_url(srcElement.src);
	
		if(lat_lon == null)
		{
			lat_lon = last_valid_latlon;
		}
		else
		{
			last_valid_latlon = lat_lon;
		}
			
		//Offset//
		var next_x_tile = ((clicked_x_offset * current_lon_step) / (image_size * next_lon_step)).toFixed();
		var next_y_tile = (current_lat_step/ next_lat_step) * (1 - (clicked_y_offset/image_size)) - 1;
				
		//0-1 instead of 1->0
		var next_y_tile_opp = (current_lat_step/ next_lat_step) * ((clicked_y_offset/image_size));		
		
		var center_tile_lat = lat_lon[0] +  next_y_tile * next_lat_step;
		var center_tile_lon_tmp = lat_lon[1] - next_x_tile * next_lon_step;	
		
		var diff_lon_str =  ((center_tile_lon_tmp - next_longitude_anchor)/next_lon_step).toFixed(next_lon_step_precision_digits).toString().split(".");
		if(diff_lon_str[1] != 0)
		{
			diff_lon_str =  ((center_tile_lon_tmp - next_longitude_anchor)).toFixed(next_lon_step_precision_digits).toString().split(".");
		}
			
		var diff_lon = parseFloat("." + diff_lon_str[1]);
		var center_tile_lon = parseFloat( (center_tile_lon_tmp - diff_lon).toFixed(next_lon_step_precision_digits));
		var middle_x = parseInt(window_width/2);
		var middle_y = parseInt(window_height/2);
					
		var test_image = document.images[grid_array[0]];
		var map_l_off = get_number_from_px(map_div.style.left) + get_number_from_px(test_image.style.left);
		var map_t_off = get_number_from_px(map_div.style.top) + get_number_from_px(test_image.style.top);
		
		var i=0;
		var found_row = 0;
		var found_col = 0;
		var current_x_off =  0;
		var current_y_off =  0;
		var ct_x_off = 0;
		var ct_y_off = 0;
		
		for(row = 0; row < number_rows ; row++)
		{
			current_y_off =  map_t_off +  row * image_size;
			for(column = 0; column < number_columns; column++)
			{	
				current_x_off = map_l_off +  column * image_size;
				if((middle_x >= current_x_off)&&(middle_x <= (current_x_off + image_size)) && (middle_y >= current_y_off) && (middle_y <= (current_y_off + image_size)))
				{
					srcElement = document.images[grid_array[i]];
					found_row = row;
					found_col = column;
					ct_x_off = (middle_x + Math.abs(map_l_off) ) % (image_size);
					ct_y_off = (middle_y + Math.abs(map_t_off))  % ( image_size);
					break;
				}
				i++;
			}
		}
		
		var base_grid_lat =  (center_tile_lat + found_row * next_lat_step).toFixed(next_lat_step_precision_digits);
		var base_grid_lon = (center_tile_lon + found_col * next_lon_step).toFixed(next_lon_step_precision_digits);
		
		//get all urls starting from base_grid_lat/base_grid_lon
		var current_index = 0;
		var default_image = document.getElementById('default_image');
		
		for(row = 0; row < number_rows ; row++)
		{
			for(column = 0; column < number_columns; column++)
			{
		
				var lat = (base_grid_lat - (row * next_lat_step)).toFixed(next_lat_step_precision_digits);
				var lon = (base_grid_lon - (column * next_lon_step)).toFixed(next_lon_step_precision_digits);
				
				lat = lat.toString().replace(".","_");
				lon = lon.toString().replace(".","_");
				
				var url = "zoom/" + region_id + "/"+ next_lat_step.toString().replace(".","_") + "/" + lat + "/" + lat + "N" + lon + ".jpg";
				
				if((current_index % 2)== 0)
					url = server1 + url;
				else
					url = server2 + url;
				//alert(url);
				//Hide current image under Expanded Images//
				document.images[grid_array[current_index]].style.zIndex = 25;
				//Whenever image loads, bring it back to the front//
				document.images[grid_array[current_index]].onload = function() {  this.style.zIndex = 10;};
				document.images[grid_array[current_index]].src = url;
				document.images[grid_array[current_index]].id = lat + "N" + lon;			
				current_index++;
				
			}
		}
				

		//current_step = next_step;
		current_lat_step = next_lat_step;
		current_lon_step = next_lon_step;

		precision_digits_lat = next_lat_step_precision_digits;
		precision_digits_lon = next_lon_step_precision_digits;


		//Clear Out Traffic Layer//
		clear_traffic_layer();
		
		//Get New Traffic Layer//
		 get_traffic_layer_data(0, number_columns, number_rows);
		
		
		var x_trans = ct_x_off - 2*cl_x_off;
		var y_trans = ct_y_off - 2*cl_y_off;
		//Move To Center//
		//MOVE MAP LAYER//	
		map_div.style.left = x_trans + map_div_left;
		map_div.style.top = y_trans + map_div_top;
		
		//MOVE TRAFFIC LAYER//
		traffic_layer_div.style.left = x_trans + traffic_layer_div_left;
		traffic_layer_div.style.top = y_trans + traffic_layer_div_top;
		//END OF MOVE//
		
		//TEST VARIABLES//
		img_top_most_y = get_number_from_px(document.images[grid_array[0]].style.top);
		img_bottom_most_y = get_number_from_px(document.images[grid_array[grid_array.length-1]].style.top) + image_size;
		top_most_y = get_number_from_px(map_div.style.top) + img_top_most_y;
		bottom_most_y = get_number_from_px(map_div.style.top) + img_bottom_most_y;

		img_left_most_x  = get_number_from_px(document.images[grid_array[0]].style.left);
		img_right_most_x = get_number_from_px(document.images[grid_array[number_columns-1]].style.left) + image_size;

		left_most_x = get_number_from_px(map_div.style.left) + img_left_most_x;
		right_most_x = get_number_from_px(map_div.style.left) + img_right_most_x;
		//End of TEST VARIABLES//
		
		//UPDATE//
		map_div_left = get_number_from_px(map_div.style.left);
		map_div_top = get_number_from_px(map_div.style.top);
		
		traffic_layer_div_left = get_number_from_px(traffic_layer_div.style.left);
		traffic_layer_div_top = get_number_from_px(traffic_layer_div.style.top);

		swap_images();
		
	}
	else //zoom out//
	{
		clientX = parseInt(window_width/2);
		clientY = parseInt(window_height/2);
		
		//MAYBE://ALTERNATE FUNCTION//
		var next_lat_step = current_lat_step * 2;
		var step_dig = get_lon_step_from_lat(next_lat_step);
		var next_lon_step = step_dig[1];
		var next_lon_step_precision_digits = step_dig[0];
		var next_longitude_anchor = step_dig[2];
		
		if(next_lat_step > 0.4)
		{
			zoom_value = -1;
			return;
		}
			
		var next_step_string_split = next_lat_step.toString().split(".");
		var next_lat_step_precision_digits = next_step_string_split[1].length;
		var test_image = document.images[grid_array[0]];
		var map_l_off = get_number_from_px(map_div.style.left) + get_number_from_px(test_image.style.left);
		var map_t_off = get_number_from_px(map_div.style.top) + get_number_from_px(test_image.style.top);
		
		var current_x_off = 0;
		var current_y_off = 0;
		var i=0;
		var found_row = 0;
		var found_col = 0;
		var ct_x_off = 0;
		var ct_y_off = 0;

		for(row = 0; row < number_rows ; row++)
		{
			current_y_off =  map_t_off +  row * image_size;
			for(column = 0; column < number_columns; column++)
			{	
				current_x_off = map_l_off +  column * image_size;
				if((clientX >= current_x_off)&&(clientX < (current_x_off + image_size)) && (clientY >= current_y_off) && (clientY < (current_y_off + image_size)))
				{
					srcElement = document.images[grid_array[i]];
					found_row = row;
					found_col = column;
					ct_x_off = (clientX + Math.abs(map_l_off) ) % (image_size);
					ct_y_off = (clientY + Math.abs(map_t_off))  % ( image_size);
					break;
				}
				i++;
			}
		}
		
		//var next_zoom
		var lat_lon = get_lat_lon_from_url(srcElement.src);
		if((lat_lon == null)||(use_last_latlon == true))
		{
			lat_lon = last_valid_latlon;
			//lat_lon[0] = parseFloat(lat_lon[0]);
			//lat_lon[1] = parseFloat(lat_lon[1]);
		}
		else
		{
			last_valid_latlon = lat_lon;
		}
		
		
		
		var denom = Math.pow(10, precision_digits_lon);

		var center_tile_lat = (Math.floor( (lat_lon[0] / next_lat_step).toFixed(next_lat_step_precision_digits) )) * next_lat_step;
		var diff_lon = ((lat_lon[1] - next_longitude_anchor) * denom ).toFixed(precision_digits_lon) % (next_lon_step * denom ).toFixed(precision_digits_lon);
		
		
		if(diff_lon != 0)
			diff_lon = diff_lon / denom;
		
		
		var center_tile_lon = lat_lon[1] +  diff_lon;
		var next_zoom_column = 0;
		var next_zoom_row = 0;
		
		var largest_precision_digits = precision_digits_lat;
		if(precision_digits_lon > precision_digits_lat)
			largest_precision_digits = precision_digits_lon;
		
		var last_lat = lat_lon[0].toFixed(largest_precision_digits);
		var last_lon = lat_lon[1].toFixed(largest_precision_digits);
		var next_lat = center_tile_lat.toFixed(largest_precision_digits);
		var next_lon = center_tile_lon.toFixed(largest_precision_digits);
		
		if( next_lat == last_lat)
			next_zoom_row = 1;
		if( next_lon != last_lon)
			next_zoom_column = 1;
		
		var base_grid_lat =  (center_tile_lat + found_row * next_lat_step).toFixed(next_lat_step_precision_digits);
		var base_grid_lon = (center_tile_lon + found_col * next_lon_step).toFixed(next_lon_step_precision_digits);
		
		//get all urls starting from base_grid_lat/base_grid_lon
		var current_index = 0;
		for(row = 0; row < number_rows ; row++)
		{
			for(column = 0; column < number_columns; column++)
			{
		
				var lat = (base_grid_lat - (row * next_lat_step)).toFixed(next_lat_step_precision_digits);
				var lon = (base_grid_lon - (column * next_lon_step)).toFixed(next_lon_step_precision_digits);
				
				lat = lat.toString().replace(".","_");
				lon = lon.toString().replace(".","_");
				
				var url = "zoom/" + region_id + "/" + next_lat_step.toString().replace(".","_") + "/" + lat + "/" + lat + "N" + lon + ".jpg";
				if((current_index % 2)== 0)
					url = server1 + url;
				else
					url = server2 + url;
				
				document.images[grid_array[current_index]].src = url;
				document.images[grid_array[current_index]].id = lat + "N" + lon;	
				current_index++;
				
			}
		}
		
		current_lat_step = next_lat_step;
		precision_digits_lat = next_lat_step_precision_digits;
		
		current_lon_step = next_lon_step;
		precision_digits_lon = next_lon_step_precision_digits;
		
		
		//Clear Out Traffic Layer//
		clear_traffic_layer();
		
		//Get New Traffic Layer//
		 get_traffic_layer_data(0, number_columns, number_rows);
		 
		var x_trans = ct_x_off - ( (next_zoom_column*(image_size/2)) + (ct_x_off/2) );
		var y_trans = ct_y_off - ( (next_zoom_row*(image_size/2)) +(ct_y_off/2) );
	
		//Move To Center//
		//MOVE MAP LAYER//	
		var map_temp_left = x_trans + map_div_left;
		var map_temp_top = y_trans + map_div_top;
		map_div.style.left = map_temp_left + "px";
		map_div.style.top = map_temp_top + "px";
		
		//MOVE TRAFFIC LAYER//
		traffic_layer_div.style.left = x_trans + traffic_layer_div_left;
		traffic_layer_div.style.top = y_trans + traffic_layer_div_top;
		//END OF MOVE//
		
		//TEST VARIABLES//
		img_top_most_y = get_number_from_px(document.images[grid_array[0]].style.top);
		img_bottom_most_y = get_number_from_px(document.images[grid_array[grid_array.length-1]].style.top) + image_size;
		top_most_y = get_number_from_px(map_div.style.top) + img_top_most_y;
		bottom_most_y = get_number_from_px(map_div.style.top) + img_bottom_most_y;

		img_left_most_x  = get_number_from_px(document.images[grid_array[0]].style.left);
		img_right_most_x = get_number_from_px(document.images[grid_array[number_columns-1]].style.left) + image_size;

		left_most_x = get_number_from_px(map_div.style.left) + img_left_most_x;
		right_most_x = get_number_from_px(map_div.style.left) + img_right_most_x;
		//End of TEST VARIABLES//
		
		//UPDATE//
		map_div_left = get_number_from_px(map_div.style.left);
		map_div_top = get_number_from_px(map_div.style.top);
		
		traffic_layer_div_left = get_number_from_px(traffic_layer_div.style.left);
		traffic_layer_div_top = get_number_from_px(traffic_layer_div.style.top);
		
		swap_images();
		
	}
	
	zoom_value = -1;
	

	
	select_pan_image();
	
	get_last_updated();
	
	if(show_p_ad)
	{
		var p_ad_div = $("p_ad_div");
		p_ad_div.innerHTML = p_ad_url;
	}
		if(show_ads)
		refresh_ads();
	
	//Reset Last Refreshed//
	start_time = new Date();
}

function select_pan_image()
{
	var pan_img_elem = document.getElementById("panning_bar_img");
	
	if(current_lat_step <= 0.05)// 1
	{
		pan_img_elem.src = "/ajax/images/compass_1.png";
	}
	else if(current_lat_step <= 0.1)//2
	{
		pan_img_elem.src = "/ajax/images/compass_2.png";
	}
	else if(current_lat_step <= 0.2)//3
	{
		pan_img_elem.src = "/ajax/images/compass_3.png";
	}
	else if(current_lat_step <= 0.4)//4
	{
		pan_img_elem.src = "/ajax/images/compass_4.png";
	}
	
}

function getOffsets (evt) 
{
	br=navigator.appName;
	if(br=='Microsoft Internet Explorer')
	{
		var offsets = {offsetX: evt.offsetX,offsetY: evt.offsetY}
		return offsets;
	}
	else
	{
		var target = evt.target;
		if (typeof target.offsetLeft == 'undefined') {
			target = target.parentNode;
		}
		var pageCoords = getPageCoords(target);
		var eventCoords = { 
			x: window.pageXOffset + evt.clientX,
		y: window.pageYOffset + evt.clientY
			};
		var offsets = {
			offsetX: eventCoords.x - pageCoords.x,
		offsetY: eventCoords.y - pageCoords.y
		}
			return offsets;
	}
}

function getPageCoords (element) 
{
	var coords = {x : 0, y : 0};
	while (element) {
	coords.x += element.offsetLeft;
	coords.y += element.offsetTop;
	element = element.offsetParent;
	}
	return coords;
}

function output_body()
{
	var sub_value = document.getElementById("debug_input").value;
	my_window= window.open ("", "mywindow1","status=0,width=350,height=150,resizable=yes,menubar=yes"); 
	my_window.document.write(document.body.innerHTML);
}

function clear_traffic_layer()
{	
	while(traffic_layer_div.childNodes[0] != null)
	{
		traffic_layer_div.removeChild(traffic_layer_div.childNodes[0]);
	}
	traffic_layer_hash = new Object();
	
	cam_popup = new Object();
	text_popup = new Object();
	
	//Clear Image Maps//
	var map_ids_to_delete = "";
	for(i=0, len = document.body.childNodes.length; i < len; i++)
	{
		if(document.body.childNodes[i].id != null)
		{
			if(document.body.childNodes[i].id.indexOf("map_") >=0)
			{
			map_ids_to_delete += document.body.childNodes[i].id + ",";
			}
		}
	}
	
	var map_ids = map_ids_to_delete.split(",");
	for (i=0; i<map_ids.length; i++)
	{
		if(map_ids[i].length > 0)
		{
		document.body.removeChild(document.getElementById(map_ids[i]));
		}
	}
}

function get_traffic_layer_data(top_left_index, width_columns, height_rows)
{

	//Make Ajax Request to get Top Block of Traffic Data//
	var lat_lon =get_lat_lon_from_url(document.images[grid_array[top_left_index]].src);
	var retrieve_tiles = false;
	//Check if we need to retrieve traffic tiles//
	var min_lat = 1000;
	var min_lon = -1000;
	var max_lat = -1000;
	var max_lon = 1000;
	
	for(k=0; k< width_columns; k++)
	{
		for(l=0; l< height_rows; l++)
		{
			var current_lat = (lat_lon[0] - l*current_lat_step).toFixed(precision_digits_lat);
			var current_lon = (lat_lon[1] - k*current_lon_step).toFixed(precision_digits_lon);
			var url_string = current_lat.toString().replace(".","_") + "N" + current_lon.toString().replace(".","_") + ".jpg";		
			if(traffic_layer_hash[url_string] == null)
			{
				retrieve_tiles = true;
				if(current_lat < min_lat)
					min_lat = current_lat;
				if(current_lat > max_lat)
					max_lat = current_lat;
					
				if(current_lon > min_lon)
					min_lon = current_lon;
				if(current_lon < max_lon)
					max_lon = current_lon;
				
			}
		
		}
	}
	var new_height = parseInt(((max_lat - min_lat)/current_lat_step).toFixed()) + 1;
	var new_width = parseInt(((min_lon - max_lon)/ current_lon_step).toFixed()) + 1;
	if(retrieve_tiles)
	{
		var show_radar = false;
		if((current_lat_step == 0.4)&& (show_weather == true))
		{
			show_radar = true;
			show_radar_legend("visible");
		}
		else
			show_radar_legend("hidden");
		
		var request_url = server_root + "ajax/request/traffic.aspx?left_lon=" + min_lon + "&top_lat=" + max_lat + "&step_lat=" + current_lat_step + "&step_lon=" + current_lon_step + "&width=" + new_width +  "&height=" + new_height + "&filter_string=" + select_incidents_string + "&pixel_size=" + image_size +  "&region_id=" + region_id + "&session_id=" + session_id + "&show_cam=" + show_cam + "&cam_code=" + camera_publish_code + "&show_weather=" + show_weather + "&show_radar=" + show_radar + "&flow_pc=" + flow_publish_code;
		new Ajax.Request(request_url,{
		method: 'get',
		onCreate: function ajaxCreate()
		{
			ajax_requests++;
			show_data_div();
		},
		onSuccess: function ajaxResponse(Axresponse)
		{
			handleAjaxResponse(Axresponse);
		},
		onComplete: function ajaxComplete()
		{
			ajax_requests--;
			hide_data_div();
		}
		});
	}
}


var do_scroll_string = "";

function doScroll()
{
	scrolling = true;
	if((x_trans < 0)&&(cur_x_trans != x_trans))
	{
		cur_x_trans = cur_x_trans - 16;
		map_div.style.left =  map_div_left + cur_x_trans;
		traffic_layer_div.style.left = traffic_layer_div_left + cur_x_trans;
		
		do_scroll_string = do_scroll_string + "," +  cur_x_trans;
		
	}
	else if((x_trans > 0)&&(cur_x_trans != x_trans))
	{
		cur_x_trans = cur_x_trans + 16;
		map_div.style.left = cur_x_trans + map_div_left;
		traffic_layer_div.style.left = cur_x_trans + traffic_layer_div_left;
	}
	
	if((y_trans < 0)&&(cur_y_trans != y_trans))
	{
		cur_y_trans = cur_y_trans - 16;
		map_div.style.top =  map_div_top + cur_y_trans;
		traffic_layer_div.style.top =  traffic_layer_div_top + cur_y_trans;
	}
	else if((y_trans > 0)&&(cur_y_trans != y_trans))
	{
		cur_y_trans = cur_y_trans + 16;
		map_div.style.top = cur_y_trans + map_div_top;
		traffic_layer_div.style.top = cur_y_trans + traffic_layer_div_top;
	}

	if( (cur_x_trans  == x_trans)&& (cur_y_trans == y_trans))
	{
		img_top_most_y = get_number_from_px(document.images[grid_array[0]].style.top);
		img_bottom_most_y = get_number_from_px(document.images[grid_array[grid_array.length-1]].style.top) + image_size;
		top_most_y = get_number_from_px(map_div.style.top) + img_top_most_y;
		bottom_most_y = get_number_from_px(map_div.style.top) + img_bottom_most_y;

		img_left_most_x  = get_number_from_px(document.images[grid_array[0]].style.left);
		img_right_most_x = get_number_from_px(document.images[grid_array[number_columns-1]].style.left) + image_size;

		left_most_x = get_number_from_px(map_div.style.left) + img_left_most_x;
		right_most_x = get_number_from_px(map_div.style.left) + img_right_most_x;
		//End of TEST VARIABLES//
		
		//UPDATE//
		map_div_left = get_number_from_px(map_div.style.left);
		map_div_top = get_number_from_px(map_div.style.top);
		
		traffic_layer_div_left = get_number_from_px(traffic_layer_div.style.left);
		traffic_layer_div_top = get_number_from_px(traffic_layer_div.style.top);
		
		swap_images();
		click_time = 0;//Prevent Zoom In/Zoom Out//
		
		if(navigator.appName=="Microsoft Internet Explorer")
		{
		//Prevents Nasty IE crash error//
			for(i=0; i< traffic_layer_div.childNodes.length; i++)
			{
				traffic_layer_div.childNodes[i].useMap = "#" + traffic_layer_div.childNodes[i].id.replace("t_","map_") + ".jpg";
			}
		}
		scrolling = false;
		x_trans = 0;
		y_trans = 0;
		cur_x_trans = 0;
		cur_y_trans = 0;
	}
	else
	{
		setTimeout("doScroll()", 10);
	}
}


function scroll(direction)
{	
	if(direction=="left")
		x_trans = x_trans + image_size;
	else if(direction=="right")
		x_trans =  x_trans +  (-1 * image_size);
	else if(direction=="up")
		y_trans = y_trans +  image_size;
	else if(direction=="down")
		y_trans =  y_trans + (-1* image_size);
	
	//Animate//
	doScroll();
}

function move(ev)
{
	ev           = ev || window.event;
 		
	if( ((event_button == 0)  && dragapproved && navigator.appName=='Netscape') || ((event_button==1) && dragapproved && navigator.appName=='Microsoft Internet Explorer' ) )
	{	

		//MOVE MAP LAYER//			
		map_div.style.left = ev.clientX - x + map_div_left;
		map_div.style.top = ev.clientY - y + map_div_top;
		//MOVE TRAFFIC LAYER//
		traffic_layer_div.style.left = ev.clientX - x + traffic_layer_div_left;
		traffic_layer_div.style.top = ev.clientY - y + traffic_layer_div_top;
		//END OF MOVE//
		
		//TEST VARIABLES//
		 img_top_most_y = get_number_from_px(document.images[grid_array[0]].style.top);
		 img_bottom_most_y = get_number_from_px(document.images[grid_array[grid_array.length-1]].style.top) + image_size;
		 top_most_y = get_number_from_px(map_div.style.top) + img_top_most_y;
		 bottom_most_y = get_number_from_px(map_div.style.top) + img_bottom_most_y;
		
		 img_left_most_x  = get_number_from_px(document.images[grid_array[0]].style.left);
		 img_right_most_x = get_number_from_px(document.images[grid_array[number_columns-1]].style.left) + image_size;

		 left_most_x = get_number_from_px(map_div.style.left) + img_left_most_x;
		 right_most_x = get_number_from_px(map_div.style.left) + img_right_most_x;
		//End of TEST VARIABLES//
		
		return false;
		
		
	}
	
}

function get_lat_lon_from_url(src_url)
{
	var last_index = src_url.lastIndexOf("/");
	var file_name = src_url.substring(last_index+1, src_url.length);
	file_name = file_name.replace(".jpg","","");
	var split_string = file_name.split("N");
	if(split_string.length == 2)
	{	
		var lat_lon = new Array(2);
		lat_lon[0] = parseFloat(split_string[0].replace("_","."));
		lat_lon[1] = parseFloat(split_string[1].replace("_","."));
		return lat_lon;
	}
	else
	{
		return null;
	}
	
}

function get_lat_lon_from_id(src_id)
{
	var split_string = src_id.split("N");
	if(split_string.length == 2)
	{	
		var lat_lon = new Array(2);
		lat_lon[0] = parseFloat(split_string[0].replace("_","."));
		lat_lon[1] = parseFloat(split_string[1].replace("_","."));
		return lat_lon;
	}
	else
	{
		return null;
	}
	
	
}

function get_url_id(type, index)
{
	var current_lat_step_string = current_lat_step.toString().replace(".","_");
	var current_lon_step_string = current_lon_step.toString().replace(".","_");
	var url_id = new Array(2);
	var file_name = document.images[index].id;
	split_string = file_name.split("N");
	
	if(split_string.length==2)
	{
	if(type=="top")
	{
			var latitude = parseFloat(split_string[0].replace("_",".","")) + current_lat_step * number_rows;
			latitude = latitude.toFixed(precision_digits_lat);
			var new_latitude = latitude.toString(10).replace(".","_","");
			var new_id = new_latitude + "N" + split_string[1];
			url_id[0] = "zoom/" + region_id + "/"+ current_lat_step_string + "/" + new_latitude + "/" + new_id + ".jpg";
			
			if((index % 2)== 0)
				url_id[0] = server1 + url_id[0];
			else
				url_id[0] = server2 + url_id[0];
			
			url_id[1] = new_id;
	}
	else if(type=="bottom")
	{
			var latitude = parseFloat(split_string[0].replace("_",".","")) - current_lat_step * number_rows;
			latitude = latitude.toFixed(precision_digits_lat);
			var new_latitude = latitude.toString(10).replace(".","_","");
			var new_id = new_latitude + "N" + split_string[1];
			url_id[0] =  "zoom/" + region_id + "/" + current_lat_step_string + "/" + new_latitude + "/" + new_id + ".jpg";
			
			if((index % 2)== 0)
				url_id[0] = server1 + url_id[0];
			else
				url_id[0] = server2 + url_id[0];
				
			url_id[1] = new_id;

	}
	else if(type=="right")
	{
		var longitude = parseFloat(split_string[1].replace("_",".","")) + current_lon_step * number_columns;
		longitude = longitude.toFixed(precision_digits_lon);
		var new_longitude = longitude.toString(10).replace(".","_","");
		var new_id = split_string[0] + "N" + new_longitude;
		url_id[0] = "zoom/" + region_id + "/" + current_lat_step_string + "/" + split_string[0] + "/" + new_id + ".jpg";
		
		if((index % 2)== 0)
			url_id[0] = server1 + url_id[0];
		else
			url_id[0] = server2 + url_id[0];
				
		url_id[1] = new_id;
	}
	else if(type=="left")
	{
		var longitude = parseFloat(split_string[1].replace("_",".","")) - current_lon_step * number_columns;
		longitude = longitude.toFixed(precision_digits_lon);
		var new_longitude = longitude.toString(10).replace(".","_","");
		var new_id = split_string[0] + "N" + new_longitude;
		url_id[0] = "zoom/" + region_id + "/" + current_lat_step_string + "/" + split_string[0] + "/" + new_id + ".jpg";
		
		if((index % 2)== 0)
			url_id[0] = server1 + url_id[0];
		else
			url_id[0] = server2 + url_id[0];
			
		url_id[1] = new_id;
	}
	}

	return url_id;
	
	
}


function drags(ev)
{	
	

	ev           = ev || window.event;
	var srcElement = ev.target || ev.srcElement;
	
	//Prevent IE 6+ From Freezing//
	if( (srcElement.id.charAt(0)=="c" ) || (srcElement.id.charAt(0) == "i") )
		return;
	
	if(srcElement.className.indexOf("drag") >=0)
	{
	
		hideInfo_hotspot();
		dragapproved=true;
		event_button =  ev.button;
		y_offset = 0;
		
		//Prevent Nasty IE Error///
		if(navigator.appName=="Microsoft Internet Explorer")
		{
			//map_name_arr = new Array();
			for(i=0; i< traffic_layer_div.childNodes.length; i++)
			{
				traffic_layer_div.childNodes[i].useMap = "";
			}
			
		}
		
			if(ev.pageX || ev.pageY)
			{
				x = ev.pageX - window.pageXOffset;
				y = ev.pageY - window.pageYOffset;
			}
			else
			{
				x = ev.clientX ;
				y = ev.clientY;
			}
			
		if(event_button == 2)
		{
		var theLeft = 0;
		var theTop = 0;
		if (document.documentElement && document.documentElement.scrollTop)
		{
			theTop = document.documentElement.scrollTop;
			theLeft = document.documentElement.scrollLeft;	
		}
		else if (document.body){
			theTop = document.body.scrollTop;
			theLeft = document.body.scrollLeft;
		}
			
		positionX = ev.clientX + theLeft +  15;	
		positionY = ev.clientY + theTop - 100;
		
			var help_menu_div = $("help_menu_div");
			help_menu_div.style.visibility = 'visible';
			help_menu_div.innerHTML = "<a onclick='zoom_in(this);'>Zoom in</a><br>";
			help_menu_div.innerHTML += "<a onclick='zoom_out(this);'>Zoom out</a><br><br>";
			help_menu_div.innerHTML+= "<a onclick=\"scroll('up');\">Up</a><br>";
			help_menu_div.innerHTML+= "<a onclick=\"scroll('down');\">Down</a><br>";
			help_menu_div.innerHTML+= "<a onclick=\"scroll('left');\">Left</a><br>";
			help_menu_div.innerHTML+= "<a onclick=\"scroll('right');\">Right</a><br>";
			help_menu_div.style.width = 70;
			help_menu_div.style.height = 123;
			help_menu_div.style.left = positionX;
			help_menu_div.style.top = positionY;
			return;
		}
		else
		{
			var help_menu_div = $("help_menu_div");
			help_menu_div.style.visibility = 'hidden';
		}
				
		document.onmousemove=move;
		
		
		//prevent text selection (except IE)
		return false;
		
		
	}
}

function show_data_div()
{
	
	var infoDiv = $('data_div');
	var outer_map_div_elem = $('outer_map_div');
	
	var theLeft = 0;
	var theTop = 0;
	infoDiv.innerHTML = "<div class='info'>Downloading data...</div>";
	if (document.documentElement && document.documentElement.scrollTop)
	{
		theTop = document.documentElement.scrollTop;
		theLeft = document.documentElement.scrollLeft;	
	}
	else if (document.body){
		theTop = document.body.scrollTop;
		theLeft = document.body.scrollLeft;
	}
	infoDiv.style.visibility = 'visible';	

}

function hide_data_div()
{
	if(ajax_requests == 0)
	{
	var infoDiv = $("data_div");
	infoDiv.style.visibility = 'hidden';
	}
	
	
}	