/******************************************************************************************************************
 * Start: Google GeoCoding functions
******************************************************************************************************************/
// loads the Google Maps API
google.load("maps", "2");

function filterPlacemarks(obj_placemark){
	// Only use addresses that have a certain level of accuracy. 
	/*
		Constants	Description
		0	Unknown location. (Since 2.59)
		1	Country level accuracy. (Since 2.59)
		2	Region (state, province, prefecture, etc.) level accuracy. (Since 2.59)
		3	Sub-region (county, municipality, etc.) level accuracy. (Since 2.59)
		4	Town (city, village) level accuracy. (Since 2.59)
		5	Post code (zip code) level accuracy. (Since 2.59)
		6	Street level accuracy. (Since 2.59)
		7	Intersection level accuracy. (Since 2.59)
		8	Address level accuracy. (Since 2.59)
		9	Premise (building name, property name, shopping center, etc.) level accuracy. (Since 2.105)
	*/
	var arrPlacemark = new Array();

	for(var pm in obj_placemark){
		bExists = (obj_placemark[pm].AddressDetails.Accuracy != 0 &&
							obj_placemark[pm].AddressDetails.Accuracy != 1 );

		if(bExists && obj_placemark[pm].AddressDetails.Country.CountryNameCode == "US"){
			arrPlacemark.push(obj_placemark[pm]);
		}
	}
	return arrPlacemark;
}
//=================================================================================================================
function getLocalityData(obj_placemark){
	var obj_locality_data = new Object();
	var COORD_LNG = 0;
	var COORD_LAT = 1;
	var coordinates = parseForTagName('coordinates', obj_placemark, true);

	obj_locality_data.latitude  = 0;
	obj_locality_data.longitude = 0;
	obj_locality_data.lat       = 0;
	obj_locality_data.lng       = 0;
	obj_locality_data.street    = parseForTagName('ThoroughfareName', obj_placemark, true);
	obj_locality_data.city      = parseForTagName('LocalityName', obj_placemark, true);
	obj_locality_data.state     = parseForTagName('AdministrativeAreaName', obj_placemark, true);
	obj_locality_data.zip       = parseForTagName('PostalCodeNumber', obj_placemark, true);
	obj_locality_data.accuracy  = parseForTagName('Accuracy', obj_placemark, true);

	// Checks for alternate City name
	if(isNull(obj_locality_data.city)) obj_locality_data.city = parseForTagName('DependentLocalityName', obj_placemark, true);
	if(isNull(obj_locality_data.city)) obj_locality_data.city = parseForTagName('SubAdministrativeAreaName', obj_placemark, true);
	if(isNull(obj_locality_data.city)) obj_locality_data.city = parseForTagName('PremiseName', obj_placemark, true);
	if(isNull(obj_locality_data.city) && obj_locality_data.accuracy == "4")	obj_locality_data.city = parseForTagName('AddressLine', obj_placemark, true)[0];
	
	// Removes special characters from State abbreviation
	if(!isNull(obj_locality_data.state)) obj_locality_data.state = stripSpecialChars(obj_locality_data.state);

    // Convert certain 2-word state names to abbreviations.
    obj_locality_data.state = convert2WordStateName(obj_locality_data.state);

    // Covert "special" city names.
    obj_locality_data.city = convertCityName(obj_locality_data.city);

	if(!isNull(coordinates)){
		obj_locality_data.latitude  = coordinates[COORD_LAT];
		obj_locality_data.longitude = coordinates[COORD_LNG];
		obj_locality_data.lat       = coordinates[COORD_LAT];
		obj_locality_data.lng       = coordinates[COORD_LNG];
	}
	return obj_locality_data;
}
//=================================================================================================================
function convert2WordStateName(val) {
    /*
    1. New Jersey – ?
    2. New York - OK
    3. New Hampshire - ?
    4. North Dakota - ?
    5. North Carolina - OK
    6. South Dakota - ?
    7. South Carolina - ?
    8. New Mexico - OK
    9. Rhode Island - ?
    10. West Virginia - ?

	2008-10-27 - JC - BUG6267
	The geocoder seems to have changed once again in how it is returning two name state names.
	Previously it returned both full names for most 2-name state; now it returns single-letter abbrev.
	followed by 2nd full name - for some states. We'll handle this alternate format for all of them.
	Oh, and it returns Rhode Island as 'Rhode Isl'.
    */
    if ( !isNull(val) ) {
        var oStates = {
            'New Jersey'        : 'NJ',
            'N Jersey'	        : 'NJ',
            'New Hampshire'     : 'NH',
            'N Hampshire'	    : 'NH',
            'North Dakota'      : 'ND',
            'N Dakota'	        : 'ND',
            'North Carolina'    : 'NC',
            'N Carolina'		: 'NC',
            'South Dakota'      : 'SD',
            'S Dakota'			: 'SD',
            'South Carolina'    : 'SC',
            'S Carolina'		: 'SC',
            'Rhode Island'      : 'RI',
            'R Island'			: 'RI',
            'Rhode Isl'			: 'RI',
            'West Virginia'     : 'WV',
            'W Virginia'		: 'WV'
        }
        
        for ( var state in oStates ) {
            //alert(state);
            if ( state.toLowerCase() == val.toLowerCase() ) {
                return oStates[state];
            }
        }
    }
    
    return val;
}
//=================================================================================================================
function convertCityName(val) {
    /*
    1. Wilkes-Barre - We want to pass this to the back-end as Wilkes Bar.

	2009-04-17
	
    */
    if ( !isNull(val) ) {
        var oCities = {
            'Wilkes-Barre'        : 'Wilkes Barre'
        }
        
        for ( var city in oCities ) {
            //alert(state);
            if ( city.toLowerCase() == val.toLowerCase() ) {
                return oCities[city];
            }
        }
    }
    
    return val;
}
/******************************************************************************************************************
 * End: Google GeoCoding functions
******************************************************************************************************************/