// This way you can show the address
// The page must contain <script type="text/javascript" src="http://www.google.com/jsapi?key=ABQIAAAAbhHqHShZoXzupV03l7g4MBSX45nOEAxkLMkYEXr9VLwKiIXSfhSF68OxxHdkPHQJmJ7k4EZlE1Oe-Q"></script> 
// + page must contain div <div id="googleInteractiveMap" style="width: 550px; height: 450px"></div>


var map, geocoder, geocoderAddresses=[], mapInitialized=false;
function initialize() {
    var el=document.getElementById("googleInteractiveMap");
    if (!el) return; // No map on the page
    
    map = new google.maps.Map2(el);
    geocoder = new GClientGeocoder();
    map.setMapType(G_NORMAL_MAP);

    // map.addControl(new GLargeMapControl());
    // map.addControl(new GMapTypeControl());
    map.addControl(new GSmallMapControl());
 
    mapInitialized=true;
    setTimeout(function() {
    for(var i=0; i < geocoderAddresses.length; i++) {
	showAddress(geocoderAddresses[i][0], geocoderAddresses[i][1], geocoderAddresses[i][2], geocoderAddresses[i][3], geocoderAddresses[i][4], geocoderAddresses[i][5]);
    }
	}, 1000);
}

function showAddress(address, html, center, zoomLevel, verbose, onClick) {
    // If the map is not initialized then store it for later
    if (!mapInitialized) {
	geocoderAddresses.push([address, html, center, zoomLevel, verbose, onClick]);
	return;
    }

    geocoder.getLatLng(
		       address,
		       function(point) {
			   if (!point) {
			       verbose && alert(address + " not found");
			   } else {
			       center && map.setCenter(point, zoomLevel);
			       var marker = new GMarker(point);
			       map.addOverlay(marker);
			       onClick && GEvent.addListener(marker, 'click', onClick);
			       html && marker.openInfoWindowHtml(html);
			   }
		       }
		       );
}


google.load("maps", "2.x");
google.setOnLoadCallback(initialize);

// Attach onclick to addresses

function getAddrInfoFromBox(box, pattern) {
    var str=[];
    for(var i=0; i < box.childNodes.length; i++) {
	var item=box.childNodes[i];
	if (item.nodeType == 1 && item.className.match(pattern)) {
	    str.push(item.textContent || item.innerText);
	}
    }
    return str.join(', ');
}

function initMapItem(box, center) {
    box.showOnMap=function() {
	if (window.mapActiveItem) {
	    window.mapActiveItem.className='item';
	}
	window.mapActiveItem=box; 
	box.className='item active';
	showAddressInBox(box, true);
    }
    sysCommon.addListener('click', function() {box.showOnMap();}, box);
    sysCommon.addListener('mouseover', function(event) {box.className+=' mouseOver';}, box);
    sysCommon.addListener('mouseout', function(event) {box.className=box.className.replace(' mouseOver', '');}, box);
    showAddressInBox(box, center, center && 11);
}

function showAddressInBox(box, center, zoomLevel) {
    var addr=getAddrInfoFromBox(box, /address|city|state/);
    showAddress(addr, box.innerHTML, center, zoomLevel, false, function() {box.showOnMap();});
}

showAddress('2707 McCone Ave,Hayward CA 94545', '<img src="http://www.reeserobertbeauty.com/styles/xtendedbeauty//data/small-logo.png" hspace="5" vspace="6" style="padding-bottom:15px" align="left"/> <strong>XTENDED BEAUTY HQ</strong><br/>2707 McCone Ave<br/>Hayward CA 94545<br/>1.800.995.2284','center',12);

window.mapActiveItem=false;
var list=document.getElementById('addressList');
var isFirst=true;
for(var i=0; i < list.childNodes.length; i++) {
    var box=list.childNodes[i];
    if (box.nodeType != 1 || box.className!='item') continue;
    initMapItem(box, isFirst);
    isFirst=false;
}
//if (isFirst) { // no addresses
//    document.getElementById("googleInteractiveMap").style.display='none';	    
//}


// Merging the full text search + state search fields into one field
var searchFulltext=document.getElementById('fulltextSearch');
var searchState=document.getElementById('stateSearch');
if (searchState.value) { // Copy value from state to fulltext
    searchFulltext.value=searchState.options[searchState.selectedIndex].text;
    searchState.value='';
}

function searchMerge(event) {
    if (searchFulltext.value == '') sysCommon.cancelEvent(event);

    var normalizeString=function(s) {
	return s.toLowerCase().replace(/[^a-z]/g, '');
    }
    var pattern=normalizeString(searchFulltext.value);
    for(var i=0; i < searchState.options.length; i++) {
	if (normalizeString(searchState.options[i].text).match(pattern)) {
	    searchFulltext.value='';
	    searchState.value=searchState.options[i].value;
	    return;
	}
    }
    searchState.value='';
}
sysCommon.addListener('submit', searchMerge, searchFulltext.form);
	