function goBack(divA, divB) {
	Ext.get(divA).setDisplayed(true);
    Ext.get(divB).setDisplayed(false);
}

function showMap() {
    // Display the map, with some controls and set the initial location
	map = new google.maps.Map2(document.getElementById("map"));
    geocoder = new google.maps.ClientGeocoder();

    map.addControl(new google.maps.LargeMapControl());
    map.addControl(new google.maps.MapTypeControl());

    if( google.loader.ClientLocation )
        map.setCenter(new google.maps.LatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude), 9);
    else
    	map.setCenter(new google.maps.LatLng(37.4419, -122.1419), 2);

	//add custom icon
    customIcon = new google.maps.Icon(G_DEFAULT_ICON, "/images/markers/thespot.png");
    customIcon.iconSize = new GSize(30, 31);


}

function showAddress(address) {
    //remove any error message concerning address
	Ext.get('claim_errorMessageAddressDiv').setDisplayed(false);

	//if no address given, compile one from input fields
    if(!address) {
    	var address = streetInput.getValue() + ", " + cityInput.getValue() + ", " + countryInput.getValue();

        if (streetInput.getValue() == '') {
            streetInput.dom.value = streetInputDefaultValue;
        }
    }

	//Geocode address to long/lat
    if (geocoder) {
        geocoder.getLatLng(
        	address,
            function(point) {
                if (!point) {
                    //when address could not be geocoded by Google, display error
                    Ext.get('claim_errorMessageAddressDiv').setDisplayed(true);
                    Ext.get('claim_errorMessageAddress').dom.innerHTML = "Address '" + address + "' not found<br />";
                } else {
                    //remove the old marker from the map
                    if(marker)
                    	   map.removeOverlay(marker);

                    //create new marker, retrieve Lat and Long and centre map to it
                    map.setCenter(point, 16);
                    marker = new google.maps.Marker(point, {icon:customIcon, draggable: true});
                    document.getElementById('latlong').value = marker.getPoint().toUrlValue();

                    //Listener for dragging the marker to the exact location
                    google.maps.Event.addListener(marker, "drag", function(){
                        document.getElementById('latlong').value = marker.getPoint().toUrlValue();
                    });

                    //add the marker to the map
                    map.addOverlay(marker);
               }
          }
      );
    }
}



function addSpot(latlongString)
{
	//if no marker has been set -i.e. no address has been suplied- display an error
	if(!marker) {
		Ext.get('claim_errorMessageAddressDiv').setDisplayed(true);
        Ext.get('claim_errorMessageAddress').dom.innerHTML = "No address found. Please fill in a address above.<br />";

	    return false;
	}

	//Do AJAX call
	Ext.Ajax.request({
       url: '/spot/submit/format/json',
       success: function(result, request) {
	       //Process AJAX response
           var jsonObject = doJSON(result.responseText);

           if(!jsonObject.error) {
               Ext.get('nameDiv').setDisplayed(true);
               Ext.get('claimDiv').setDisplayed(false);

               createdTinyUrl = 'http://' + domain + '/' + jsonObject.tinyUrl;
               tinyUrl = jsonObject.tinyUrl;

               Ext.get('tinyUrlValue').insertHtml('beforeEnd', '<a href="' + createdTinyUrl + '" target="_blank">' + createdTinyUrl + '</a>');
               Ext.get('frm-url').dom.value = jsonObject.tinyUrl;
               Ext.get('frm-tinyUrl').dom.value = jsonObject.tinyUrl;
               Ext.get('frm-secNum').dom.value = jsonObject.securityNumber;

               //set upload in fame div
               Ext.get('uploadTinyUrl').dom.value = jsonObject.tinyUrl;
               Ext.get('uploadSecNum').dom.value = jsonObject.securityNumber;

               urlInputDefaultValue = jsonObject.tinyUrl;

               //Google Analytics
               pageTracker._trackPageview('/spot/submit');

           } else {
        	   Ext.get('claim_errorMessageAddressDiv').setDisplayed(true);
               Ext.get('claim_errorMessageAddress').insertHtml('beforeEnd', jsonObject.error);
           }
       },
       failure: function(result, request) {
           Ext.MessageBox.alert('Failed', 'Successfully posted form, but error occurred: '+result.responseText);
       },
       headers: {
           'X-Requested-With': 'XMLHttpRequest'
       },
       params: {
           'apiKey': 'spot2beApiKey',
           'latlongString': latlongString,
           'street': streetInput.getValue(),
           'city': cityInput.getValue(),
           'country': countryInput.getValue()
      }
    });
}

function nameSpot()
{
	Ext.Ajax.request({
       url: '/spot/name/format/json',
       success: function(result, request) {
           var jsonObject = doJSON(result.responseText);

           if(!jsonObject.error) {
        	   Ext.get('fameDiv').setDisplayed(true);
               Ext.get('nameDiv').setDisplayed(false);

               createdTinyUrl = 'http://<?php echo $this->domain ?>/' + jsonObject.tinyUrl;

               Ext.get('newTinyUrlValue').insertHtml('beforeEnd', '<a href="' + createdTinyUrl + '" target="_blank">' + createdTinyUrl + '</a>');
               Ext.get('payTinyUrlValue').insertHtml('beforeEnd', '<a href="' + createdTinyUrl + '" target="_blank">' + createdTinyUrl + '</a>');
               Ext.get('frm-tinyUrl').dom.value = jsonObject.tinyUrl;
               tinyUrl = jsonObject.tinyUrl;

               if(jsonObject.email) {
                   Ext.get('emailValue').insertHtml('beforeEnd', '<p>Your spot has been saved to your account. We\'ve sent a confirmation to <em>' + jsonObject.email + '</em>.</p>');

                   //already fillout voucher's email
                   Ext.get('voucher-email').dom.value = jsonObject.email;
               }

                //Google Analytics
                pageTracker._trackPageview('/spot/name');

           } else {
        	   Ext.get('name_errorMessageAddressDiv').setDisplayed(true);
               Ext.get('name_errorMessageAddress').insertHtml('beforeEnd', jsonObject.error);
           }
       },
       failure: function(result, request) {
           Ext.MessageBox.alert('Failed', 'Successfully posted form, but error occurred: '+result.responseText);
       },
       headers: {
           'X-Requested-With': 'XMLHttpRequest'
       },
       params: {
    	   'apiKey': 'spot2beApiKey',
           'tinyUrl': Ext.get('frm-tinyUrl').getValue(),
           'securityNumber': Ext.get('frm-secNum').getValue(),
           'title': Ext.get('frm-title').getValue(),
           'newTinyUrl': Ext.get('frm-url').getValue(),
           'email': Ext.get('frm-email').getValue(),
           'description': Ext.get('frm-description').getValue()
      }
    });
}

function fameSpot() {
	Ext.Ajax.request({
	       url: '/spot/fame/format/json',
	       success: function(result, request) {
	           var jsonObject = doJSON(result.responseText);

	           if(!jsonObject.error) {
	        	   //set item-id for payPal payment
	        	   Ext.get('spot2be_item_id').dom.value = jsonObject.item_id;
	        	   Ext.get('invoice').dom.value = jsonObject.item_id;

	               Ext.get('payDiv').setDisplayed(true);
	               Ext.get('fameDiv').setDisplayed(false);

	               if(jsonObject.paid == 'true') {
	            	    Ext.get('payAlreadyPaidDiv').setDisplayed(true);
	               } else {
	            	   Ext.get('needToPay').setDisplayed(true);
	               }

	           } else {
	        	   Ext.get('fame_errorMessageAddressDiv').setDisplayed(true);
	               Ext.get('fame_errorMessageAddress').insertHtml('beforeEnd', jsonObject.error);
	           }

	           //Google Analytics
               pageTracker._trackPageview('/spot/fame');
	       },
	       failure: function(result, request) {
	           Ext.MessageBox.alert('Failed', 'Successfully posted form, but error occurred: '+result.responseText);
	       },
	       headers: {
	           'X-Requested-With': 'XMLHttpRequest'
	       },
	       params: {
	    	   'apiKey': 'spot2beApiKey',
	           'tinyUrl': Ext.get('frm-tinyUrl').getValue(),
	           'securityNumber': Ext.get('frm-secNum').getValue(),
	           'postal_code': Ext.get('frm-contact-postalcode').getValue(),
	           'phone': Ext.get('frm-contact-phone').getValue(),
	           'url': Ext.get('frm-contact-url').getValue(),
	           'category': Ext.get('frm-contact-category').getValue()
	      }
	    });
}

function requestVoucher() {
	Ext.Ajax.request({
        url: '/voucher/request/format/json',
        success: function(result, request) {
            var jsonObject = doJSON(result.responseText);

            if(jsonObject.result == 'ok') {
                Ext.get('requestVoucher').setDisplayed(false);
                Ext.get('displayVoucher').setDisplayed(true);

                email = Ext.get('voucher-email').getValue();

                Ext.get('displayVoucher').dom.innerHTML = '<p class="margin"><em>You\'re voucher code has been send to <em>' + email + '</em> for one free premium Spot</em></p>';
            }

            //Google Analytics
            pageTracker._trackPageview('/voucher/request');
        },
        failure: function(result, request) {
            Ext.MessageBox.alert('Failed', 'Successfully posted form, but error occurred: '+result.responseText);
        },
        headers: {
            'X-Requested-With': 'XMLHttpRequest'
        },
        params: {
            'apiKey': 'spot2beApiKey',
            'name': Ext.get('voucher-name').getValue(),
            'email': Ext.get('voucher-email').getValue()
       }
     });
}

function redeemVoucher() {
	Ext.Ajax.request({
        url: '/spot/redeem/format/json',
        success: function(result, request) {
            var jsonObject = doJSON(result.responseText);

            if(jsonObject.result == 'ok') {
                //Ext.get('payButton').setDisplayed(false);
                Ext.get('voucherDiv').setDisplayed(false);
                Ext.get('voucherRedeemedDiv').setDisplayed(true);

                Ext.get('voucher_id').dom.value = jsonObject.voucher_id;
                Ext.get('voucherCredits').dom.innerHTML = jsonObject.credits;
            }
            else if(jsonObject.result == 'empty') {
            	Ext.get('voucher-error').dom.innerHTML = "Your voucher is not valid anymore. You have used all of your credits";
            }
            else {
            	Ext.get('voucher-error').dom.innerHTML = "Your voucher is not valid.";
            }

            //Google Analytics
            pageTracker._trackPageview('/spot/redeem');
        },
        failure: function(result, request) {
            Ext.MessageBox.alert('Failed', 'Successfully posted form, but error occurred: '+result.responseText);
        },
        headers: {
            'X-Requested-With': 'XMLHttpRequest'
        },
        params: {
        	'apiKey': 'spot2beApiKey',
            'tinyUrl': Ext.get('frm-tinyUrl').getValue(),
            'securityNumber': Ext.get('frm-secNum').getValue(),
            'voucher': Ext.get('frm-voucher').getValue()
       }
     });
}