//Define event listeners
$(document).ready(function(){	
	initMap();
	$('p.more-info-link a.glossaryTerm').click(function(evt){
		evt.preventDefault();
	});
});
$(window).unload(function() {
	GUnload();
});


var gmap, p;
var exml = null;

var spinnerCode = '<div style="padding:10px 10px 0;float: right;"><img src="/images/ajaxspinners/circleball.gif" border="0"></div>';
var emailSignupSpinnerCode = '<img src="/images/ajaxspinners/circleball.gif" border="0">';

var initMapCenter = new GLatLng(37.02009820136811, -98.173828125);

var coverageSearchButton = '';
var zoomSwitchThreshhold = 6;
var zoomRecenterThreshold = 4;
var initialZoom = 4;
var zoomendReCenter = true;

var skipzl = false;
var print_window;

var searchInfoWin = null;
var searchMarker = null;

var overlay_color = '';

var geocoder = null;

var coverageOverlay = null;
var stateOverlay = null;
var currentOverlay = null;

var origCoveragetype = null;

var stateFillOver = {opacity: '0.3'};
var stateFillNormal = {opacity: '0.5'};

function Hash() {}

/*
 * Retrieve the layerConfig object pertaining to the user's shop location.
 */
function getCoverageLayerConfig() {
	
	var coverageCricketLayerConfig = {
			wireless_national: { layer: 'cricket_wireless_national', opacity : 0.75 },
	    	wireless: { layer: 'cricket_wireless', opacity : 0.75 },
	        wireless_v1: { layer: 'cricket_wireless_pec', opacity : 0.50 },
	        broadband_national: { layer: 'cricket_data_national', opacity : 0.60 }, 
	        broadband: { layer: 'cricket_data', opacity : 0.60 }, 
	        broadband_v1: { layer: 'cricket_data', opacity : 0.60 }
	   	};

	var coverageGreyLayerConfig = {
			wireless_national: { layer: 'grey_wireless_national', opacity : 0.75 },
	    	wireless: { layer: 'grey_wireless', opacity : 0.75 },
	        wireless_v1: { layer: 'cricket_wireless_pec', opacity : 0.50 },
	        broadband_national: { layer: 'grey_data', opacity : 0.60 }, 
	        broadband: { layer: 'grey_data', opacity : 0.60 },
	        broadband_v1: { layer: 'grey_data', opacity : 0.60 }
	   	};
	
	switch (networkProvider) {
		case 1:
			//cricket layer config
			return coverageCricketLayerConfig;
		case 2:
			//grey layer config
			return coverageGreyLayerConfig;
		case 0:
		default:
			//default layer config
			return coverageCricketLayerConfig;
	}
	 
}

function showOverlay(overlay) {
	if (currentOverlay == overlay) return;
	if (currentOverlay != null) {
		gmap.removeOverlay(currentOverlay);
	}
	currentOverlay = overlay;
	gmap.addOverlay(currentOverlay);
}

function isBrowserIE(ver) {
  var ievs = (/MSIE (\d+\.\d+);/.test(navigator.userAgent));
  if (ievs) {
    if (ver) {
		var iev=new Number(RegExp.$1);
	    if (iev==ver) {
	      return true;
	    } else {
	    	return false;
	    }
    }
    return true;
  }
  return false;
}

//--------------------------------------------------------------------------------
function switchLayers() {
	try {
		if (!skipzl) {
			skipzl = true;
			var z = gmap.getZoom();

			if ( z <= zoomRecenterThreshold ) {
				gmap.setZoom( initialZoom );
				gmap.setCenter(initMapCenter);
			}
			
			if (z <= zoomSwitchThreshhold) { 
				if (origCoveragetype == null) origCoveragetype = coveragetype;
				if (coveragetype == 'wireless') { 
					coveragetype = 'wireless_national';
				} else if (coveragetype == 'broadband') {
					coveragetype = 'broadband_national';
				}
			} else {
				if (origCoveragetype != null) {
					coveragetype = origCoveragetype;
				}
			}
			
			if (coveragetype == 'wireless_national') {
				if ($('#partner_legend').length > 0) $('#partner_legend').hide();
				if ($('#nocoverage_legend').length > 0) $('#nocoverage_legend').hide();
				if ($('#tri-band-legend').length > 0) $('#tri-band-legend').hide();
			} else {
				if ($('#partner_legend').length > 0) $('#partner_legend').show();
				if ($('#nocoverage_legend').length > 0) $('#nocoverage_legend').show();
				if ($('#tri-band-legend').length > 0) $('#tri-band-legend').show();
			}
			
			if (coveragetype == 'broadband_national') {
				if ($('#partner_data_legend').length > 0) $('#partner_data_legend').hide();
				if ($('#nocoverage_legend').length > 0) $('#nocoverage_legend').hide();
			} else {
				if ($('#partner_data_legend').length > 0) $('#partner_data_legend').show();
				if ($('#nocoverage_legend').length > 0) $('#nocoverage_legend').show();
			}

			coverageOverlay = createCoverageOverlay(coveragetype);

			if (coverageOverlay != null) {
				showOverlay(coverageOverlay);
			}

			skipzl = false;
		}
	} catch (e) {
		alert(e.message);
		skipzl = false;
	}
}

function createCoverageOverlay(type){
	//change tile layer source based upon coverage type
	var layerConfig = (getCoverageLayerConfig())[type];
	var tilelayer = null;
	if (isBrowserIE()) {
		tilelayer = new GTileLayer(null, null, null, {
			tileUrlTemplate: GEOMAP_URL+'?layers=cricket:'+layerConfig.layer+'&zoom={Z}&x={X}&y={Y}&format=image/gif', isPng:false, opacity: layerConfig.opacity });
	} else {
		tilelayer = new GTileLayer(null, null, null, {
			tileUrlTemplate: GEOMAP_URL+'?layers=cricket:'+layerConfig.layer+'&zoom={Z}&x={X}&y={Y}', isPng:true, opacity: layerConfig.opacity });
	}
	//gmap.clearOverlays();
	var overlay = new GTileLayerOverlay(tilelayer);
	return overlay;
}

//--------------------------------------------------------------------------------
function printMap(){
	var map_clone = $('#map_canvas');
	var params = mapParams();
	var qstring = '&z=' + params.z + '&clat=' + params.clat + '&clng=' + params.clng + '&addr=' + params.addr + '&city=' + params.city + '&state=' + params.state + '&zip=' + params.zip;
	print_window = window.open (printCoverageURL+qstring, "print_window","location=0,status=0,width=620,height=770,scrollbars=1");
}
function showPrintMap(print_canvas){
	if (isBrowserIE()) {
		print_canvas.html($('#map_canvas').html());
	} else {
		var clone_map = document.getElementById('map_canvas').cloneNode(true);
		print_canvas.html(clone_map);
	}
}
//--------------------------------------------------------------------------------
function printWindow(){ print_window.print(); }

//--------------------------------------------------------------------------------
function getQueryVariable(variable) {
	var query = window.location.search.substring(1);
	var vars = query.split("&");
	for (var i=0;i<vars.length;i++) {
		var pair = vars[i].split("=");
		if (pair[0] == variable) {
			return pair[1];
		}
	}
}
function initMap() {
	gmap=new GMap2(document.getElementById("map_canvas"),{draggingCursor: 'move', draggableCursor: 'pointer'});
	
    gmap.disableContinuousZoom();
    gmap.disableDoubleClickZoom();
    
    gmap.disableContinuousZoom();
    gmap.disableDoubleClickZoom();
    gmap.disableDragging();
    
	if (mapZip != '') {
		gmap.enableDragging();
		gmap.enableScrollWheelZoom();
		gmap.enableDoubleClickZoom();
		gmap.enableContinuousZoom();
		gmap.addControl(new GLargeMapControl());

	}

	GEvent.addListener(gmap, "zoomend", switchLayers);

	var qstring = new Object();
	//var qstring = ().toQueryParams();
	qstring.clat = getQueryVariable('clat');
	qstring.clng = getQueryVariable('clng');
	qstring.z = getQueryVariable('z');
	if (qstring.clat && qstring.clng && qstring.z) {
		//map center params was passed through the querstring. so use them.
		gmap.setCenter(new GLatLng(parseFloat(qstring.clat), parseFloat(qstring.clng)), parseInt(qstring.z));
		if (qstring.mlat && qstring.mlng) {
			//a lat/lon for a marker was specified, so show that too.
			gmap.addOverlay(new GMarker(new GLatLng(parseFloat(qstring.mlat), parseFloat(qstring.mlng))));
		}
		showInitialZipPopupMessage(); 
	} else if (mapZip != '') {
		getLocation();
	} else {
		//no map center params were passed in. so use default.
		gmap.setCenter(initMapCenter, initialZoom);
	}

	//GEvent.addListener(gmap, "click", mapClick);
    
	initFormFields(qstring);
}

function showInitialZipPopupMessage() {
	if(isShowInitialZipLocationPopup) {
		//Show the you are viewing coverage for xxxx' if the user comes
		//to this page
		$('#popupCoverageContainer').hide();
		var newcontent = '<div align="left" style="padding: 5px 15px;">' +$('#currentmarketcopy').html()+ '</div>';
		$('#popupCoverageContent').html(newcontent);
		openPopUp('fancypopup');
		isShowInitialZipLocationPopup = false;
	}
}
function mapClick(overlay, latlng) {
	if(gmap.getZoom() < 5) {
		if (mapZip != '') {
			gmap.setCenter(latlng, 6);
		} else {
			//283
			//console.log('click map');
			//$('#change-map-zip').trigger('click');
			isShowInitialZipLocationPopup = true;
			if(isShowInitialZipLocationPopup) 
			{
				$('#popupCoverageContainer').hide();
				//add a class here to show up the call out that Will will work on
				var newcontent = '<div class="call-out-coverage" align="left">Enter your information to view Cricket coverage</div>';
				$('#popupCoverageContent').html(newcontent);
				openPopUp('fancypopup');
				isShowInitialZipLocationPopup = false;
			}
		}
		
	}
	
}
//--------------------------------------------------------------------------------
function wheelblock(e) {
	if (!e){ e = window.event }
	if (e.preventDefault){ e.preventDefault() }
	e.returnValue = false;
}

function getGeoCoder() {
	if (geocoder == null) {
		geocoder = new GClientGeocoder();
	}
	return geocoder;
}

function postSignup(formdata) {

	$('#coverageemailsignup').ajaxForm(
			{
				dataType: 'json',
				beforeSubmit: function(formData, jqForm, options) {
					if (ajaxBlocked($(jqForm).find('button'))) return false;
				},
				success: function(jsonres) {
					ajaxUnblock();
					if (jsonres.isSuccess) {
						if (searchInfoWin != null) {
							gmap.removeOverlay(searchInfoWin);
							searchInfoWin = null;
				    	}
			    		searchInfoWin = new CoverageMapsInfoWin(searchMarker.getLatLng(), jsonres.message);
			    		gmap.addOverlay(searchInfoWin);
					} else {
						$('#popupCoverageContainer').hide();
						var content = '<div align="left" style="padding: 5px 15px;"><h2 style="color: red; font-weight: bold">Signup Error</h2>';
						content = content + jsonres.message + '</div>';
						$('#popupCoverageContent').html(content);
						openPopUp();
					}
				}

			}
		);

}

//--------------------------------------------------------------------------------
function passMapParams(anchor) {
	if (!anchor.orighref) {
		anchor.orighref = anchor.href;
	}
	var params = mapParams();
	anchor.href = anchor.orighref + '?z=' + params.z + '&clat=' + params.clat + '&clng=' + params.clng + '&addr=' + params.addr + '&city=' + params.city + '&state=' + params.state + '&zip=' + params.zip + '&persist=1';
}

function mapParams() {
	var c = gmap.getCenter();
	var params = new Object();
	params.z = gmap.getZoom();
	params.clat = c.lat();
	params.clng = c.lng();
	params.addr = $('#address').val();
	params.city = $('#city').val();
	params.state = $('#cm_state').val();
	params.zip = $('#zip').val();
	return params;
}

function initFormFields(qstring) {
	if (qstring) {
		if (qstring.addr) $('#address').val(qstring.addr);
		if (qstring.city) $('#city').val(qstring.city);
		if (qstring.state) $('#cm_state').val(qstring.state);
		if (qstring.zip) $('#zip').val(qstring.zip);
	}
}

//--------------------------------------------------------------------------------
function showFAQ(num, top) {
	if(top === undefined) {
		var FAQ_ans = $('#faq_ans_'+num);
		if(FAQ_ans.style.display == "none") {
			Effect.SlideDown(FAQ_ans, {
				duration: 0.3
			});
		} else {
			Effect.SlideUp(FAQ_ans, {
				duration: 0.3
			});
		}
	} else {
		$('#popupCoverageContainer').hide();
		var content = '<div align="left" style="padding: 5px 15px;"><h3>' +$('#top_faq_'+num).innerHTML+ '</h3>';
		content = content + $('#top_faq_ans_'+num).innerHTML +'</div>';
		$('#popupCoverageContent').html(content);
		openPopUp();
	}
}

//--------------------------------------------------------------------------------
function searchErrorPopup() {
	$('#popupCoverageContainer').hide();
	var content = '<div align="left" style="padding: 5px 15px;"><h3 style="font-size: 14pt; font-weight: bold; color: #964d09;">We cannot find that address.</h3>';
	content = content + '<p>Please double check the address, or try entering just the city and state, or ZIP code.</p></div>';
	$('#popupCoverageContent').html(content);
	openPopUp();
}

//--------------------------------------------------------------------------------
function openPopUp(maps) {
	// RESET WIDTH AND STYLES
	if(maps == 'fancypopup') {
		$('#popupCoverageContainer').css({'width' : '250px'});
		$('#popupCoverageContent').css({'margin':'0'});
	} else if (maps == 'not-covered') {
		$('#popupCoverageContent').css({'text-align' : 'left', 'padding' : '0 10px', 'margin':'40px 35px'});
		$('#popupCoverageContainer').css({'width' : '400px'});
		$('#closeBtn').css({'display' : 'block','visibility' : 'visible'});
		$('#popupshadow').css({'display' : 'block','visibility' : 'visible'});
	}else {
		$('#popupCoverageContainer').css({'width' : '500px'});
		$('#popupCoverageContent').css({'margin':'40px 35px'});
		$('#closeBtn').css({'display' : 'block','visibility' : 'visible'});
		$('#popupshadow').css({'display' : 'block','visibility' : 'visible'});
	}


	// HIDE SHADOW FOR IE6 MAPS VIEW
	var popupshadowsrc = $('#popupshadow').attr('src');
	var popupshadowtypearr = popupshadowsrc.split("popup_shadow.");
	var popupshadowtype = popupshadowtypearr[1];
	var isIE6 = false;
	if(popupshadowtype == "gif") {
		isIE6 = true;
		var popupheight = $('#popupCoverageContainer').height();
		$('#popupshadow').css({'height' : popupheight+"px"});
	}
	var popupwidth = $('#popupCoverageContainer').width();
	var popupheight = $('#popupCoverageContainer').height();
	var leftoffset = (786 - popupwidth)/2;



	if(leftoffset <= 0) {
		leftoffset = 0;
	}
	if(maps !== undefined || maps !== 'not-covered') {
		$('#closeBtn').css({'display' : 'none','visibility' : 'hidden'});
		if(isIE6 == true) {
			$('#popupCoverageContainer').css({'width': (imgwidth-50)+'px'});
			$('#popupshadow').css({'display' : 'none','visibility' : 'hidden'});
		}
	}
	if(maps == 'fancypopup') {
		$('#closeBtn').css({'display' : 'none'});
		$('#popupshadow').css({'display' : 'none'});
	}

	var closebtnxoffset = Math.round((popupheight * 0.05)+ 5) + "px";
	var closebtnyoffset = Math.round((popupwidth - 786) * 0.15) + "px";
	if(closebtnxoffset < 5) { closebtnxoffset = 0; }
	if(closebtnyoffset < 5) { closebtnyoffset = 0; }
	$('#closeBtn').css({'top' : closebtnxoffset});
	$('#closeBtn').css({'left' : closebtnyoffset});
	$('#popupCoverageContainer').css({'left' : leftoffset + "px"});
	$('#popupCoverageContainer').show("slow");
}
function closePopUp() {
	$('#popupCoverageContainer').hide();
}

//--------------------------------------------------------------------------------
function CoverageMapsInfoWin(latlng, html) {
	this.latlng_ = latlng;
	this.html_ = html;
	this.prototype = new GOverlay();

	// Creates the DIV representing the infowindow
	this.initialize = function(map) {
		var div = $('<div />');

		this.map_ = map;
		this.div_ = div;

		div.css({
			'position' : 'absolute',
			'width' : '247px'
		});
		div.addClass('cminfowin');
		div.addClass('noprint');

		$(map.getPane(G_MAP_FLOAT_PANE)).append(div);

		this.html(html);
	};

	this.html = function(html){
		this.html_ = html;

		this.div_.html('');

		var topdiv = $('<div />');
		topdiv.css({
			'background-image' : 'url(/images/popup/infowin-top.png)',
			'background-repeat': 'no-repeat',
			'height' : '13px',
			'padding': '0 0 0 0',
			'textAlign': 'right',
			'width': '247px'
		});
		topdiv.addClass('cmtopdiv');

		this.div_.prepend(topdiv);

		var content = $('<div />');
		content.addClass('infowin-content');
		content.css({
			'background-image' : 'url(/images/popup/infowin-middle.png)',
			'background-repeat': 'repeat-y',
			'position' : 'relative',
			'overflow' : 'hidden',
			'width' : '247px',
			'padding': '0 0 0 0'
		});

		var contentleft = $('<div />');
		contentleft.css({
			'width': '210px',
			'float': 'left',
			'margin': '0 0 0 12px'
		});
		contentleft.html(html);
		content.append(contentleft);

		var contentright = $('<div />');
		contentright.css({
			'width': '15px',
			'float': 'left',
			'padding': '0 0 0 0'
		});
		var closer = $('<a />');
		closer.html('<img style="display: block; float: right; width: 15px; height: 15px;" src="/images/popup/infowin-close.gif" width="15" height="15" border="0" />');
		closer.bind('click', {thisContext: this}, function(eventData) {
			eventData.data.thisContext.closewin(eventData);
		});
		contentright.prepend(closer);

		content.append(contentright);

		var cleardiv = $('<a />');
		cleardiv.css({
			'clear': 'left'
		});
		content.append(cleardiv);

		topdiv.after(content);

		var bottomdiv = $('<div />');
		bottomdiv.css({
			'background-image' : 'url(/images/popup/infowin-bottom.png)',
			'background-position' : 'bottom',
			'width' : '247px',
			'height' : '39px'
		});
		bottomdiv.addClass('cmbottomdiv');

		content.after(bottomdiv);

		this.redraw(true);
	};

	// Remove the main DIV from the map pane
	this.remove = function() {
	  this.div_.remove();
	};

	// Copy our data to a new instance
	this.copy = function() {
	  return new CoverageMapsInfoWin(this.latlng_, this.html_);
	};

	// Redraw based on the current projection and zoom level
	this.redraw = function(force) {
		if (!force) return;

		var point = this.map_.fromLatLngToDivPixel(this.latlng_);

		// Now position our DIV based on the DIV coordinates of our bounds

		this.div_.css({
			'left' : (point.x - 46)+'px',
			'top' : (point.y - this.div_.height() + 7) + 'px'
		});
	};

	this.closewin = function(evt) {
		try {
			this.map_.removeOverlay(this);
			if (searchMarker != null) {
				//only hide the search marker if the user
				//is in the state contour view.
				//otherwise leave it so the user
				//use for refrence as they zoom in.
				gmap.removeOverlay(searchMarker);
				searchMarker = null;
			}
			searchInfoWin = null;
			evt.stop();
		} catch (e) {
			//alert(e.message);
		}
	};
}

//--------------------------------------------------------------------------------
function placeSearchMarker(geopoint) {
    if (searchMarker != null) {
		gmap.removeOverlay(searchMarker);
		searchMarker = null;
    }
	var coverageGIcon = new GIcon(G_DEFAULT_ICON, '/images/popup/infowin-dot.png');
	coverageGIcon.iconSize = new GSize(17, 17);
	coverageGIcon.shadow = '';
	coverageGIcon.iconAnchor = new GPoint(7,7);
	coverageGIcon.infoWindowAnchor = new GPoint(7,7);

	searchMarker = new GMarker(geopoint, {icon: coverageGIcon});

	gmap.addOverlay(searchMarker);
}

//--------------------------------------------------------------------------------
function clearSearchInfoWin() {
	if (searchInfoWin != null) {
		gmap.removeOverlay(searchInfoWin);
		searchInfoWin = null;
	}
	if (searchMarker != null) {
		gmap.removeOverlay(searchMarker);
		searchMarker = null;
	}
}

function showSearchInfoWin(placemark, msg) {
				var txtres = '';
	var sparams = correctAddress( placemark );
					txtres = msg.replace('#{address}', sparams);
	
				if (searchInfoWin != null) {
					gmap.removeOverlay(searchInfoWin);
					searchInfoWin = null;
				}

	searchInfoWin = new CoverageMapsInfoWin(placemark.gLatLng, txtres);
				gmap.addOverlay(searchInfoWin);

				if ($('#coverageemailsignup').length > 0) {
					$('#signupzip').val($('#zip').val());

					$('#signupfname').mousedown(
							function(event) {
								event.stopPropagation();
							}
					);
					$('#signupemail').mousedown(
							function(event) {
								event.stopPropagation();
							}
					);
					$('#signupzip').mousedown(
							function(event) {
								event.stopPropagation();
							}
					);
		
					$('#signupfname').focus();

					postSignup();
				}
}

function correctAddress( placemark ) {
	var sparams = '';
	var addrparts = '';
	var statezip = '';
	var state = '';
	var zip = '';
	var city =  '';

	if (placemark.AddressDetails.Country.AdministrativeArea) {
		state = placemark.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
		$('#cm_state').val((''+state).toUpperCase());
	} else {
		$('#cm_state').val('');
	}

	if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea) {
		if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality) {
			city = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
			$('#city').val(city);
		} else {
			$('#city').val('');
		}

		if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality) {
			if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode) { 
				zip = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber;
				$('#zip').val(zip);
			} 
		}
		
		if (zip == '') {
			if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.DependentLocality 
					&& placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.DependentLocality.PostalCode) {
				zip = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.DependentLocality.PostalCode.PostalCodeNumber;
				$('#zip').val(zip);
			} else {
				$('#zip').val('');
			}
		}

		if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality && placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare) {
			address = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare.ThoroughfareName;
			$('#address').val(address);
		} else {
			$('#address').val('');
		}
	} else if (placemark.AddressDetails.Country.AdministrativeArea.Locality) {
		
		if (placemark.AddressDetails.Country.AdministrativeArea.Locality.LocalityName) {
			city = placemark.AddressDetails.Country.AdministrativeArea.Locality.LocalityName;
			$('#city').val(city);
		} else {
			$('#city').val('');
		}

		if (placemark.AddressDetails.Country.AdministrativeArea.Locality.PostalCode) {
			if (placemark.AddressDetails.Country.AdministrativeArea.Locality.PostalCode.PostalCodeNumber) { 
				zip = placemark.AddressDetails.Country.AdministrativeArea.Locality.PostalCode.PostalCodeNumber;
				$('#zip').val(zip);
			}
		}
		
		if (zip == '') {
			if (placemark.AddressDetails.Country.AdministrativeArea.DependentLocality 
					&& placemark.AddressDetails.Country.AdministrativeArea.DependentLocality.PostalCode) {
				zip = placemark.AddressDetails.Country.AdministrativeArea.DependentLocality.PostalCode.PostalCodeNumber;
				$('#zip').val(zip);
			} else {
				//$('#zip').val('');
			}
		}

		if (placemark.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare) {
			address = placemark.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare.ThoroughfareName;
			$('#address').val(address);
		} else {
			$('#address').val('');
		}
	}

	sparams += ($.trim($('#address').val()) != '' ? ($.trim($('#address').val()) + ', ') : ''); //address
	sparams += city + ', '; //city
	sparams += state + ' '; //state
	sparams += zip; //zip

	return sparams;
}
//--------------------------------------------------------------------------------
// FORM HANDLER
//--------------------------------------------------------------------------------
function getLocation(){
	if ($.trim($('#address').val()) == '' && $.trim($('#city').val()) == '' && $.trim($('#cm_state').val()) == '' && $.trim($('#zip').val()) == '') return;

	var address = $.trim($('#address').val()) + "+" + $.trim($('#city').val()) + "+" + $.trim($('#cm_state').val()) + "+" + $.trim($('#zip').val());

	getGeoCoder().getLocations(address, function(geores) {
		coverageSearchButton = $('#coveragesearch').html();
		$('#coveragesearch').html(spinnerCode);

		if (geores.Status.code == 200) {
			if (geores.Placemark.length > 0) {
				var placemark = null;
				var matchedname = false;
				//Get the most accurate placemark
				$(geores.Placemark).each( function()  {
					if (this.AddressDetails.Country && (this.AddressDetails.Country.CountryNameCode.toUpperCase() == 'US' || this.AddressDetails.Country.CountryNameCode.toUpperCase() == 'PR')) {
						if (placemark == null) {
							placemark = this;
						} else if (this.AddressDetails.Accuracy > placemark.AddressDetails.Accuracy) {
							placemark = this;
						}
					}
				});

				if (placemark != null) {
					$('#popupCoverageContainer').hide();
					//location found
					placemark.gLatLng = new GLatLng( placemark.Point.coordinates[1], placemark.Point.coordinates[0]);

					var north = placemark.ExtendedData.LatLonBox.north;
		            var south = placemark.ExtendedData.LatLonBox.south;
		            var east  = placemark.ExtendedData.LatLonBox.east;
		            var west  = placemark.ExtendedData.LatLonBox.west;

					placemark.zoom = gmap.getBoundsZoomLevel(new GLatLngBounds(new GLatLng( south, west ), new GLatLng(north, east)));

					correctAddress( placemark );

					findCoverageAt( placemark );
				} else {
					$('#coveragesearch').html(coverageSearchButton);
					searchErrorPopup();
				}
			} else {
				$('#coveragesearch').html(coverageSearchButton);
				searchErrorPopup();
			}
		} else {
			$('#coveragesearch').html(coverageSearchButton);
			searchErrorPopup();
		}
	});

}

//-------------------------------------------------------------------------------

function validateZipCoverage() {
	var zipcode = $.trim($('#zip').val());
	if (!zipcode) return;
	var payload = {'zip': zipcode};
	var valzipcallback = function(data) {
		if (!data.isZipCovered) {
			closePopUp();
			var message = '<h2 style="font-size: 1em;">You are viewing coverage for:</h2>'
				+ '<p style="font-weight: bold; font-size: 1.3em; line-height: 1.7em;">'
				+ zipcode + '</p>'
				+ '<p style="font-size: 0.8em;">Refer to the legend for coverage details.  Cricket does not sell in this area.</p>';
			$('#fancybodycopy').html(message);
			var newcontent = '<div align="left" style="padding: 5px 15px;">' +$('#notcoveredmarketcopy').html()+ '</div>';
			$('#popupCoverageContent').html(newcontent);
			openPopUp('fancypopup');
		}
	};
	$.post(serviceValidateZip,payload,valzipcallback, 'json');
}

//--------------------------------------------------------------------------------
function findCoverageAt(placemark) {
	var params = new Hash();
    params.coveragetype = coveragetype;
    if(isorphanpage) {
    	params.isorphanpage = 'true';
    } else {
    	params.isorphanpage = 'false';
    }

    var searchservice = '';
    var zoom = placemark.zoom;;
    var center = placemark.gLatLng;
    if ($.trim($('#address').val()) == '' && $.trim($('#city').val()) == '' && $.trim($('#zip').val()) == '') {
        //only the state was specified. so search by state.
    	searchservice = serviceFindByState;
		params.state = $('#cm_state').val();
    } else {
        //search by point
    	searchservice = serviceFindByPoint;
        params.lat = center.lat();
        params.lng = center.lng();
    }

    $.ajax(
    	{
    		type: 'POST',
    		url: searchservice,
    		dataType: 'json',
    		data: params,
	    	success: function (coverageresult) {
            		try {
						if (coverageresult.type == 'POINT_SEARCH') {
							clearSearchInfoWin();

							gmap.setCenter(center, zoom);
							
							if(($.trim($('#address').val()) != "")&&($.trim($('#city').val()) != "")) {
								placeSearchMarker(center);
								if (isSupportedMapZip && (coverageresult.success || coverageresult.message)) {
									showSearchInfoWin(placemark, coverageresult.message);
								}
							}
							
							showInitialZipPopupMessage();

						} else {
							//Search by state. Don't show any info windows, just show coverage
							//at the state.
							clearSearchInfoWin();
							zoomendReCenter = false;
							gmap.setCenter(center, zoom);
						}
            		} catch (e) {
            			//alert(e);
            		}
            		$('#coveragesearch').html(coverageSearchButton);
	    		}
    	} );
}

$(function() {
	$('.change-map-zip').click( function(event) {
		event.preventDefault();
		$('#address').val('');
		$('#city').val('');
		$('#cm_state').val('');
		$('#zip').val('');

		var href = this.href.split("?", 1);

		$.post(changeMapZipService, function(data) {
			popupZipForm(data, '');
			$('#form-zipentry-redirect').val(href);
		});
	});
});
