var rad_objs = Array();
var form_index = Array();


var ri = 0;
//var rad_bounds = null;
var mi_in_km = 0.621371192237;
var base_icon = null;
var map = null;
var rowadder_to = 0;
var fos_timeout = 0;

var render_to = 0;

var colors = Array("red", "blue", "green", "orange");

var mm = "sm";
var mm_amt_fx = 1.3;
var imgsm = new Image(20,21);
var imglg = new Image(20,21);
imgsm.src = 'images/ico_sm_20x21.gif';
imglg.src = 'images/ico_lg_20x21.gif';




Array.prototype.remove = function(from, to) {
  var rest = this.slice((to || from) + 1 || this.length);
  this.length = from < 0 ? this.length + from : from;
  return this.push.apply(this, rest);
};
function _getHC(c) {
 if (c=="red") return "#ff0000";
 if (c=="blue") return "#005AFF";
 if (c=="green") return "#00BB00";
 if (c=="orange") return "#FF9900";
}



function _tms() {

	if (mm=="sm") {
		mm="lg";
		document.getElementById('map').style.height = Math.round(parseFloat(document.getElementById('map').style.height)*mm_amt_fx) + "px";
		document.getElementById('mslink').innerHTML = "show smaller map";
		if (document.images) document.images['msi'].src = imgsm.src;

	} else {
		mm="sm";
		document.getElementById('map').style.height = Math.round(parseFloat(document.getElementById('map').style.height)/mm_amt_fx) + "px";
		document.getElementById('mslink').innerHTML = "show larger map";
		if (document.images) document.images['msi'].src = imglg.src;
	}

	setTimeout(__fos, 100);
}

function _getNC(s) {
 for (var y=0;y<colors.length;y++) {
	  var fnd = false;
	  for (var x=0;x<rad_objs.length;x++) {
		   if (rad_objs[x].color==colors[y] && rad_objs[x].make!=s) {
				fnd = true;
				break;
		   } else if (rad_objs[x].make==s) {
				return rad_objs[x].color;
		   }
	  }
	  if (!fnd) {
		   return colors[y];
	  }
 }
 return "red";
} 


function __dbOL() {
	setTimeout(cdload,1000);
}
function _center() {
	map.setCenter(new GLatLng(39.774769485295465, -95.44921875),4);
}

function _ttl() {
	var ttl_lds = 0;
	for (var r=0;r<form_index.length;r++) {
		
		ttl_lds += parseFloat(document.getElementById("leads" + form_index[r]).innerHTML);
		
	}
	document.getElementById("total").innerHTML = ttl_lds;
}

function _clr() {
	if (map==null)
		return;

	while (form_index.length>0) rem(form_index[form_index.length-1]);

	setTimeout(_center, 30);
}

function cdload() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));

		map.addControl(new GSmallMapControl());
		map.addControl(new GScaleControl());

		rad_bounds = new GLatLngBounds();

		base_icon = new GIcon();
		base_icon.shadow = "";  /* no marker shadow used in favour of map usability */
		base_icon.iconSize = new GSize(17, 19);
		base_icon.iconAnchor = new GPoint(0, 19);
		base_icon.infoWindowAnchor = new GPoint(15, 1);

		setTimeout(_center, 30);
	}
}

function __remOverlays() {
	for (var x=0;x<rad_objs.length;x++) {
		map.removeOverlay(rad_objs[x].polygon);
	}
}

function createMarker(i, zipcode, lat, lon, leads) {

	var rindex = -1;
	for (var y=0;y<rad_objs.length;y++) {
		if (rad_objs[y].index == i) {
			rindex = y;
			break;
		}
	}

	if (rindex==-1)
		return;

	var color = rad_objs[rindex].color;
	var point = new GLatLng(lat, lon);

	var label = new TLabel();
	label.id = i +"-" + zipcode;
	label.anchorLatLng = point;
	label.anchorPoint = 'center';
	//label.markerOffset = new GSize (x,y);
	label.content = '<div title="' + zipcode + '" class=' + color + '>' + leads + '</div>';
	label.percentOpacity = 60;
	map.addTLabel(label);

	var fld = document.getElementById("show" + i);
	if (!fld.checked) label.setVisibility("hidden");

	rad_objs[rindex].markers.push(label);
}

function drawCircle(zip, make, ind, center, radius, color, liWidth, liOpa, fillColor, fillOpa)
{
	var liColor = _getHC(color);
	var nodes = 36; //precis
	//calculating km/degree
	var latConv = center.distanceFrom(new GLatLng(center.lat()+0.1, center.lng()))/100;
	var lngConv = center.distanceFrom(new GLatLng(center.lat(), center.lng()+0.1))/100;
	var fx_radius = radius/mi_in_km;
	//Loop 
	var points = [];
	var step = parseInt(360/nodes)||10;
	for(var i=0; i<=360; i+=step)
	{
		var pint = new GLatLng(center.lat() + (fx_radius/latConv * Math.cos(i * Math.PI/180)), center.lng() + 
		(fx_radius/lngConv * Math.sin(i * Math.PI/180)));
		points.push(pint);
		//rad_bounds.extend(pint);
	}
	points.push(points[0]);
	fillColor = fillColor||liColor||"#0055ff";
	liWidth = liWidth||1;
	var poly = new GPolygon(points,liColor,liWidth,liOpa,fillColor,fillOpa);
	map.addOverlay(poly);

	var fld = document.getElementById("show" + ind);
	if (!fld.checked) poly.hide();

	var obj = new Object();
	obj.zipcode = zip;
	obj.polygon = poly;
	obj.index = ind;
	obj.radius = radius;
	obj.make = make;
	obj.color = color;
	obj.markers = Array();
	rad_objs.push(obj);
}
function addR() {
	ri++;
	form_index.push(ri);
	var d = document.createElement("div");
	d.id = "table" + ri;
	d.innerHTML = 	'<div id="table' + ri + '" style="width:760px;"><table style="font-size:12px;font-family:arial;" border=0 cellpadding=0 cellspacing=0 width=760><tr>' + 
				'<td height=30 width=20 align=right><a href="javascript:rem(' + ri + ')"><img src="images/btn_rem_12x14.gif" width=12 height=14 border=0></a></td>' + 
				'<td width=30 align=right><table border=0 cellpadding=0 cellspacing=0 style="border: 1px #555555 solid;"><tr><td id="color' + ri + '" style="font-size:10px;background-color:#ffffff;" height=20 width=20>&nbsp;</td></tr></table></td>' + 
				'<td align=center width=250><input type=hidden id=lat' + ri + ' name=lat' + ri + ' value=""><input type=hidden id=lon' + ri + ' name=lon' + ri + ' value="">' + 
				'<select onchange="uM(this,' + ri + ')" id="make' + ri + '" name="make' + ri + '" style="width:220px">' + 
				'<option value="">- select one -</option>' + 
				'<option value="Acura">Acura</option>' +
				'<option value="Audi">Audi</option>' +
				'<option value="BMW">BMW</option>' +
				'<option value="Buick">Buick</option>' +
				'<option value="Cadillac">Cadillac</option>' +
				'<option value="Chevrolet">Chevrolet</option>' +
				'<option value="Chrysler">Chrysler</option>' +
				'<option value="Dodge">Dodge</option>' +
				'<option value="Ford">Ford</option>' +
				'<option value="GMC">GMC</option>' +
				'<option value="Honda">Honda</option>' +
				'<option value="Hummer">Hummer</option>' +
				'<option value="Hyundai">Hyundai</option>' +
				'<option value="Infiniti">Infiniti</option>' +
				'<option value="Isuzu">Isuzu</option>' +
				'<option value="Jaguar">Jaguar</option>' +
				'<option value="Jeep">Jeep</option>' +
				'<option value="Kia">Kia</option>' +
				'<option value="Land Rover">Land Rover</option>' +
				'<option value="Lexus">Lexus</option>' +
				'<option value="Lincoln">Lincoln</option>' +
				'<option value="Mazda">Mazda</option>' +
				'<option value="Mercedes-Benz">Mercedes-Benz</option>' +
				'<option value="Mercury">Mercury</option>' +
				'<option value="MINI">MINI</option>' +
				'<option value="Mitsubishi">Mitsubishi</option>' +
				'<option value="Nissan">Nissan</option>' +
				'<option value="Pontiac">Pontiac</option>' +
				'<option value="Porsche">Porsche</option>' +
				'<option value="Saab">Saab</option>' +
				'<option value="Saturn">Saturn</option>' +
				'<option value="Scion">Scion</option>' +
				'<option value="Subaru">Subaru</option>' +
				'<option value="Suzuki">Suzuki</option>' +
				'<option value="Toyota">Toyota</option>' +
				'<option value="Volkswagen">Volkswagen</option>' +
				'<option value="Volvo">Volvo</option>' +
				'</select></td>' + 
				'<td align=center width=120><input disabled onkeyup="uZ(this,' + ri + ')" type=text id="zip' + ri + '" name="zip' + ri + '" maxlength=5 style="background-color:#cfcfcf;width:80px"></td>' + 
				'<td align=center width=120><input disabled onkeyup="uR(this,' + ri + ')" type=text id="radius' + ri + '" name="radius' + ri + '" maxlength=5 style="background-color:#cfcfcf;width:80px"></td>' + 
				'<td align=center width=120 id=leads' + ri + '>0</td>' + 
				'<td align=center width=100><input type=checkbox id=show' + ri + ' name=show' + ri + ' value=1 disabled checked onclick="_shw(this, ' + ri + ')"></td>' + 
				'</tr></table></div>';

	document.getElementById("setup").appendChild(d);
	
}
function setF(i, s, d) {

	var fld = document.getElementById("" + s + i);
	
	if (d) {
		fld.style.backgroundColor = "#cfcfcf";
		fld.disabled = true;
	} else {
		fld.style.backgroundColor = "#ffffff";
		fld.disabled = false;
	}

}
function uM(o,i) {
	if (o.selectedIndex>0) {
		setF(i, "zip", false);
		dC(i);
	} else {
		setF(i, "radius", true);
		setF(i, "zip", true);
	}
}
function sRDF(i) {
	setF(i, "radius", false);
	clearTimeout(render_to);
	render_to = setTimeout("dC(" + i + ")", 500);
}
function uZ(o,i) {

	setF(i, "radius", true);

	if (!o.value.match(/^[0-9]{5}$/))
		return;

	var thiszip = o.value;

	// see if we already have info for this zip
	for (var r=0;r<form_index.length;r++) {
		fld = null;
		fld = document.getElementById("zip" + form_index[r]);
		var zip = fld.value;

		if (zip==thiszip && form_index[r]!=i) {

			fld = document.getElementById("lat" + form_index[r]);
			var lat = parseFloat(fld.value);

			fld = document.getElementById("lon" + form_index[r]);
			var lon = parseFloat(fld.value);

			if (lat+""!=""&&lon+""!="") {
				setRI(i, lat, lon);
				setF(i, "radius", false);
				return;
			}
		}
	}

	document.getElementById('zipinfo').src = "ldr/zip.aspx?ri=" + i + "&z=" + escape(thiszip);


}
function uR(o, i) {
	if (!o.value.match(/^[0-9]{1,3}$/))
		return;
	clearTimeout(render_to);
	render_to = setTimeout("dC(" + i + ")", 500);
}

function IsFloat(strString) {
   var strValidChars = "-0123456789.";
   var strChar;
   var blnResult = true;

   if (strString.length == 0) return false;
   for (i = 0; i < strString.length && blnResult == true; i++) {
	  strChar = strString.charAt(i);
	  if (strValidChars.indexOf(strChar) == -1)
		 {
		 blnResult = false;
		 }
   }
   return blnResult;
}
function dC(i) {
	var fld = document.getElementById("make" + i);
	var make = fld.options[fld.selectedIndex].value;

	fld = document.getElementById("zip" + i);
	var zip = "";
	if (fld.value.match(/^[0-9]{5}$/)) zip = fld.value;

	fld = document.getElementById("radius" + i);
	var radius = "";
	if (fld.value.match(/^[0-9]{1,3}$/)) radius = parseFloat(fld.value);

	fld = document.getElementById("lat" + i);
	var lat = "";
	if (IsFloat(fld.value)) lat = parseFloat(fld.value);

	fld = document.getElementById("lon" + i);
	var lon = "";
	if (IsFloat(fld.value)) lon = parseFloat(fld.value);

	var color="";
	
	for (var y=0;y<rad_objs.length;y++) {
		if (rad_objs[y].index==i) {
			if (rad_objs[y].radius==radius && rad_objs[y].make == make && rad_objs[y].zipcode == zip) {
				return;
			} else {
				if (rad_objs[y].make == make) color = rad_objs[y].color;
				map.removeOverlay(rad_objs[y].polygon);
				for (var z=0;z<rad_objs[y].markers.length;z++) {
					map.removeTLabel(rad_objs[y].markers[z]);
				}
				rad_objs.remove(y);
				break;
			}
		}
	}

	document.getElementById("color" + i).style.backgroundColor = "#ffffff";

	if (make!=""&&zip!=""&&radius+""!=""&&lat+""!=""&&lon+""!="") {
		if (color=="") color = _getNC(make);

		document.getElementById("color" + i).style.backgroundColor = _getHC(color);
		
		drawCircle(zip, make, i, new GLatLng(lat, lon), radius, color);

		__fos();
		
		setTimeout("_gRange(" + i + ",'" + make + "', " + lat + "," + lon + ", " + radius + ")", 100);
	}
}
function __fos() {
	map.checkResize();
	var rad_bounds = new GLatLngBounds();
	var hasb = false;
	for (var y=0;y<rad_objs.length;y++) {
		hasb = true;
		rad_bounds.extend(rad_objs[y].polygon.getBounds().getSouthWest());
		rad_bounds.extend(rad_objs[y].polygon.getBounds().getNorthEast());
	}

	if (hasb)
		map.setCenter(rad_bounds.getCenter(), map.getBoundsZoomLevel(rad_bounds));
	else
		setTimeout(_center, 30);
	
}
function _gRange(i, make, lat, lon, radius) {
	
	_ssm(i,true);
	document.getElementById('icons').src="ldr/range.aspx?ri=" + i + "&make=" + escape(make) + "&lat=" + escape(lat) + "&lon=" + escape(lon) + "&radius=" + escape(radius);
}

function setRI(i, lat, lon) {
	var fld = document.getElementById("lat" + i);
	fld.value = lat;
	fld = document.getElementById("lon" + i);
	fld.value = lon;
}
function _shw(o, i) {
	for (var y=0;y<rad_objs.length;y++) {
		if (rad_objs[y].index==i) {
			if (o.checked) {
				rad_objs[y].polygon.show();
				for (var z=0;z<rad_objs[y].markers.length;z++) rad_objs[y].markers[z].setVisibility("visible");
			} else {
				rad_objs[y].polygon.hide();
				for (var z=0;z<rad_objs[y].markers.length;z++) rad_objs[y].markers[z].setVisibility("hidden");
			}
			break;

		}
	}
}
function rem(i) {
	clearTimeout(fos_timeout);
	for (var y=0;y<rad_objs.length;y++) {
		if (rad_objs[y].index==i) {
			map.removeOverlay(rad_objs[y].polygon);
			for (var z=0;z<rad_objs[y].markers.length;z++) {
				map.removeTLabel(rad_objs[y].markers[z]);
			}
			rad_objs.remove(y);
			break;

		}
	}
	var sdiv = document.getElementById("setup");
	for (var x=0;x<sdiv.childNodes.length;x++) {
		if (sdiv.childNodes[x].id == "table" + i) {
			sdiv.removeChild(sdiv.childNodes[x]);
			for (var y=0;y<form_index.length;y++) {
				if (form_index[y]==i) {
					form_index.remove(y);
					break;
				}
			}
			break;
		}
	}
	_ttl();
	fos_timeout = setTimeout(__fos,100);
}

function _ssm(i,b) {
	var fld = document.getElementById("show" + i);
	fld.disabled = b;
}

function rAC() {
	if (form_index.length<3) {
		var to = form_index.length;
		for (var j=1;j<=3-to;j++) addR();
	} else if (form_index.length>=1) {
		var fld = document.getElementById("radius" + form_index[form_index.length-1]);
		var radius = "";
		if (fld.value.match(/^[0-9]{1,3}$/)) radius = fld.value;
		if (radius!="") addR();
	}
}

setInterval(rAC, 2000);

for (var x=1;x<=3;x++) addR();

