// JavaScript Document

var pins     = [];
var markers  = [];
var info	 = [];
var iterator = 0;

var geocoder;
var map;
var infowindow;

function initialize() 
{
	//LIMIT 25,000 MAP INITIALIZATIONS PER DAY
	var myOptions = {
	  center: new google.maps.LatLng(39.73, -86.27),
	  zoom: 3,
	  mapTypeId: google.maps.MapTypeId.ROADMAP
	};
	
	map 	   = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
	infowindow = new google.maps.InfoWindow({content: "holding..."});
	
	$.ajax({
		type: "GET",
		url: "map.xml.php",
		dataType: "xml",
		success: function(xml) {
			$(xml).find('marker').each(function()
			{				
				latlng = new google.maps.LatLng(parseFloat($(this).find('lat').text()), parseFloat($(this).find('lng').text()));
				p = {'latlng' : latlng, 
					 'city'	  : $(this).find('city').text(), 
					 'state'  : $(this).find('state').text(),
					 'name'	  : $(this).find('name').text(), 
					 'content'   : $(this).find('content').text()}	
					 
				pins.push(p);
			});
		}
	});
	
	setTimeout(function(){ drop(); }, 1000);
}

function drop() 
{
	for (var i = 0; i < pins.length; i++) 
		setTimeout(function(){ addMarker(); }, i * 200);
}

function addMarker() 
{
	p = pins[iterator];

	marker = new google.maps.Marker({
	  position: p.latlng,
	  map: map,
	  draggable: false,
	  animation: google.maps.Animation.DROP,
	  title:p.name+' - '+p.city,
	  icon: '_ui/images/pin.png',
	  html:'<div>'+
		   '<div style="float:left;"><img src="_ui/images/marker-icon.jpg"></div>'+
		   '<div style="float:left; margin-left:10px;">'+
		   '<div style="font-size:11px; font-weight:bold; color:#811f16">'+p.name+'</div>'+
		   '<div style="font-size:9px; color:#666; font-style:italic">'+p.city+', '+p.state+'</div></div>'+
		   '<div style="font-size:9px; clear:both">'+p.content+'</div></div>'
	});
	
	markers.push(marker);
	
	infowindow = new google.maps.InfoWindow({
		content: 'Marker '+iterator
	});
	
	google.maps.event.addListener(marker, 'click', function() {
	  infowindow.setContent(this.html);
	  infowindow.open(map, this);
	});
	
	//if(pins.length > 20 && markers.length == pins.length)
		//autoCenter();
	
	iterator++;
}

function autoCenter() 
{
	var bounds = new google.maps.LatLngBounds();

	for(i in markers) 
		bounds.extend(markers[i].position);

	map.fitBounds(bounds);
}

function submit_frm()
{
	var error = '';
	$('#error').html('').hide();
	
	if($('#name').val() == '' || $('#name').val() == 'NAME')
	{
		error = 'Please Provide Your Name.';
		$('#name').focus();
	}
	else if(!validateEmail($('#email').val()))
	{
		error = 'Please Provide a Valid Email Address.';
		$('#email').focus();
	}
	else if(!validateZip($('#zip').val()))
	{
		error = 'Please Provide a Valid Zip Code.';
		$('#zip').focus();
	}
	else if($('#saving').val() == '' || $('#saving').val() == 'I\'M SAVING THE DREAM FOR')
	{
		error = 'Please Let Us Know What You\'re Saving the Dream For';
		$('#saving').focus();
	}

	if(error != '')
	{
		$('#error').html(error).show();
		return false;
	}
	
	
	//LIMIT 2,500 GEOCODES PER DAY
	geocoder = new google.maps.Geocoder();
	
	geocoder.geocode( { 'address': $('#zip').val()}, function(results, status) {
	  if (status == google.maps.GeocoderStatus.OK) 
	  {
			address = results[0].formatted_address;
			city    = address.substring(0, address.indexOf(','));
		  	temp = $.trim(address.substring(address.indexOf(','), address.indexOf($('#zip').val())));
			state = $.trim(temp.substring(temp.indexOf(',') + 1));	
			name    = $('#name').val();
			dname   = name.indexOf(' ') == -1 ? name : name.substring(0, name.indexOf(' ') + 2) + '.';
			
			latlng  = new google.maps.LatLng(parseFloat($(this).find('lat').text()), parseFloat($(this).find('lng').text()));
			p 	    = {'latlng' : results[0].geometry.location, 
					   'city'   : city, 
					   'state'  : state,
					   'name'   : dname, 
					   'content': $('#saving').val()}	
					 
			pins.push(p);
			addMarker();
			
			$.post('map.xml.php', {'name':name, 
							 	   'email':$('#email').val(), 
								   'zip':$('#zip').val(), 
								   'city':city,
								   'state':state, 
								   'lat':results[0].geometry.location.lat(), 
								   'lng':results[0].geometry.location.lng(), 
								   'content':$('#saving').val() });
	  }
	});	
	
	$('#map_form').hide();
	$('#thank-you').show();
	return true;
}

function validateZip(zip) { 
	var re = new RegExp(/(^\d{5}$)|(^\d{5}-\d{4}$)/);
	return re.test(zip);
}
function validateEmail(email) { 
    var re = new RegExp(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);
    return re.test(email);
}

