var map;
var gc;

function load() {

	if (GBrowserIsCompatible()) {

		map 	 = new GMap2(document.getElementById("map"));
		geocoder = new GClientGeocoder();

		var ui = new GMapUIOptions();
		ui.maptypes = {normal:true, physical:true, satellite:true, hybrid:true}
		ui.zoom = {};
		ui.controls = {largemapcontrol3d: false, smallzoomcontrol3d:true, menumaptypecontrol:true};
		ui.keyboard = false;
		map.setUI(ui);

		map.setMapType(G_HYBRID_MAP);
	
		map.enableContinuousZoom();
		map.enableScrollWheelZoom();

		map.setCenter(new GLatLng(40.244772343082076, -97.66796875), 4);

		gc = new gcGrid(map, "iieQseXsVl90tPZ38Eq8ZnjQX0aOfE3GnZXV2tENWFFFVd7TipT6U3Ottn8R");

	        gc.setOption(GC_OP_DEBUG, 0);
		gc.setOption(GC_OP_CLUSTERCOUNT, 1);

		gc.setCallback(GC_CB_POINTMOUSEOVER, function (marker, point_id) {

			var topoffset		= -44;
			var leftoffset		= 11;

			var bounds		= map.getBounds();
			var proj		= map.getCurrentMapType().getProjection();
			var ttPos 		= proj.fromLatLngToPixel(new GLatLng(marker.getLatLng().lat(), marker.getLatLng().lng()), map.getZoom());
			var pt2 		= proj.fromLatLngToPixel(new GLatLng(bounds.getSouthWest().lat(), bounds.getSouthWest().lng()), map.getZoom());
			var pt3 		= proj.fromLatLngToPixel(new GLatLng(bounds.getNorthEast().lat(), bounds.getNorthEast().lng()), map.getZoom());

			var s			= document.createElement('span');

			s.setAttribute('id', 'sp' + point_id);

			s.innerHTML 		= "<center><b>Zip Code: " + point_id + "</b></center>";
			s.style.display 	= "block";
			s.style.padding		= "3px";
			s.style.position 	= "absolute";
			s.style.fontSize	= "10px";
			s.style.fontFamily	= "Verdana";
			s.style.top  		= ((ttPos.y - pt3.y) + topoffset) + "px";
			s.style.left 		= ((ttPos.x - pt2.x) + leftoffset) + "px";
			s.style.width 		= "100px";
			s.style.lineHeight 	= "12px";
			s.style.backgroundColor = "#FFFFFF";
			s.style.height 		= "14px";
			s.style.border 		= '1px #000000 solid';
			s.style.opacity 	= 0.80;
			s.style.filter		= 'alpha(opacity = 80)'; // IE

			var m = document.getElementById('map');
			m.appendChild(s);

		});

		gc.setCallback(GC_CB_POINTMOUSEOUT, function (marker, point_id) {

			var m = document.getElementById('map');
			m.removeChild(document.getElementById('sp' + point_id));

		});

		gc.setOption(GC_OP_SUSPEND_RENDER, 1);
		
		gc.enableRenderGrid();
		design2();

	}

}


function design1 () {

	map.setMapType(G_NORMAL_MAP);
	gc.disableRenderGrid();
	gc.setOption(GC_OP_SUSPEND_RENDER, 0);
	
	gc.setRendering(GC_RND_CUBES);

	gc.setIcon(GC_IC_CLUSTERMOUSEOVER, 0);
	gc.setVar(GC_VR_COUNTDESCR, 0);

	gc.setCallback(GC_CB_ONCREATECLUSTER, function (cl, latNE, lngNE, latSW, lngSW) {

		cl.cclayer.div_.style.marginTop = 0;
		cl.cclayer.div_.style.fontSize = "20px";
		cl.cclayer.div_.style.fontWeight = "bold";

		if (cl.count > 1000) {

			cl.cclayer.div_.style.fontSize = "16px";
			cl.setImage('/images/cube1.png');

		} else if (cl.count > 100) {

			cl.cclayer.div_.style.fontSize = "14px";
			cl.setImage('/images/cube2.png');

		} else {

			cl.cclayer.div_.style.fontSize = "12px";
			cl.setImage('/images/cube3.png');

		}

	});

	gc.enableRenderGrid();

}


function design2 () {

	map.setMapType(G_HYBRID_MAP);
	gc.disableRenderGrid();
	gc.setOption(GC_OP_SUSPEND_RENDER, 0);
	
	gc.setRendering(GC_RND_CLOUDS);

	gc.setIcon(GC_IC_CLUSTERMOUSEOVER, 0);
	gc.setVar(GC_VR_COUNTDESCR, 0);

	gc.setCallback(GC_CB_ONCREATECLOUD, function (cl, latNE, NE, SW, weight) {

		var div = cl.getClusterCountDIV();

		if (cl.count >= 1000) {
			div.style.fontSize = "14px";
			cl.setImage('/images/bubble_4.png');
		} else if (cl.count >= 100) {
			div.style.fontSize = "13px";
			cl.setImage('/images/bubble_3.png');
		} else if (cl.count >= 10) {
			div.style.fontSize = "12px";
			cl.setImage('/images/bubble_2.png');
		} else if (cl.count >= 0) {
			div.style.fontSize = "11px";
			cl.setImage('/images/bubble_1.png');
		}

	});

	gc.enableRenderGrid();

}


function design3 () {

	map.setMapType(G_NORMAL_MAP);
	gc.disableRenderGrid();
	gc.setOption(GC_OP_SUSPEND_RENDER, 0);
	
	gc.setRendering(GC_RND_CUBES);

	var iconSingleOV       = new GIcon();
	iconSingleOV.image     = "http://api.geocubes.com/api/maps_iconov.png";

	var iconClusterOV      = new GIcon();
	iconClusterOV.image    = "http://api.geocubes.com/api/maps_gridov.png";

	gc.setIcon(GC_IC_POINTMOUSEOVER, iconSingleOV);
	gc.setIcon(GC_IC_CLUSTERMOUSEOVER, iconClusterOV);

	gc.setVar(GC_VR_COUNTDESCR, " points");
	gc.setCallback(GC_CB_ONCREATECLUSTER, function (cl, latNE, lngNE, latSW, lngSW) { });

	gc.enableRenderGrid();


}


var req;

function addip_process(fid, ip) {

	if (req.readyState == 4) {

		if (req.status == 200) {

			if (req.responseText == 'OK') {

				if (document.getElementById('list_ips_' + fid).innerHTML == '<li>-</li>')
					document.getElementById('list_ips_' + fid).innerHTML = "";

				document.getElementById('list_ips_' + fid).innerHTML += '<li>' + ip + ' <a href="/account/?mode=rem_ip&key=' + fid + '&ip=' + ip + '"><img src="/images/del.png"></a></li>';
			
			} else
				alert('The IP Address your entered is wrong or you exceed your IP limit. Format is for example: 80.81.242.56');

		} else {
			alert("There was a problem retrieving the XML data:\n" + req.statusText);
		}

	}

}


function loadURL(url, func, fid, ip) {

	req = false;

	if(window.XMLHttpRequest && !(window.ActiveXObject)) {

		try {
			req = new XMLHttpRequest();
		} catch(e) {
			req = false;
		}

	} else if(window.ActiveXObject) {

		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {

			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				req = false;
			}

		}

	}

	if(req) {

		req.onreadystatechange = function () { func(fid, ip); };
		req.open("GET", url, true);
		req.send("");

	}

}


function account_addip (fid) {

	var ip = document.getElementById('ip_' + fid).value;
	
	if(ip)
		loadURL("/account/add-ip.html?nohf=1&mode=add_ip&key=" + fid + "&ip=" + ip, addip_process, fid, ip);

}


