// Text and Html

var searchBoxText = 'Type in any location (i.e. Country, city, county, post/zip code, lat-long)';
var compassGetFlash = 'Please install the latest version of <a href="http://get.adobe.com/flashplayer/">flash player</a>.';
var notCompatible = 'Map is not compatible, please change browser!';
var tzError = 'Please enter a number for the Timezone';
var anError = 'Please enter an Angle';
var ptError = 'Sorry times could not be calculated';

var map;
var geocoder;
var marker;
var center;
var latitude;
var longitude;



// Mootools Functions

window.addEvent('domready', function(){


	if($('map')){

		// --> Compass

		var obj = new Swiff('http://locateandpray.islamicnature.com/flash/compass.swf', {

			id: 'compass',
			container: 'compass-container',
			width: 180,
			height: 180,
			callBacks: {
					flashReady: function() {
							
							$('compass-container').store('ready', 'true');
							$('compass').setProperty('codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0');
							
					}
			},
			vars: {
					
					rotateNum: 119
					
			}

		});

		if(Browser.Plugins.Flash.version < 9){
								
			$('compass-container').set('html', compassGetFlash);
								
		}


		// --> Share Link
		
		$('sharelink').addEvent('click', function(){
			this.select();
		});
		
		
		// --> Add to site
		
		$('addtosite').addEvent('click', function(){
			this.select();
		});
		

		// --> Close Results Box

		$('close-results').addEvent('click', function(){

			$('resultsbox').setStyle('display', 'none');

		});


		// --> Focus/Blur Search Address Bar

		$('search-input').addEvent('focus', function(){

			if(this.getProperty('value') == searchBoxText){

				this.setProperty('value', '');
				this.setStyle('color', '#000');

			}

		});

		$('search-input').addEvent('blur', function(){

			if(this.getProperty('value') == ''){

				this.setProperty('value', searchBoxText);
				this.setStyle('color', '#666');

			}

		});


		// --> Prayer Times Settings

		$('tzautoselect').addEvent('change', function(){

			var tzautoProp = this.getProperty('value');
			$('map').store('tzauto', tzautoProp);
			
			if(tzautoProp == 'yes'){
				$('tzbox').setProperty('readonly','readonly');
			}else{
				$('tzbox').setProperty('readonly','');
			}

		});

		
		// --> Manual timezone input box

		$('tzbox').addEvent('blur', function(){

			var valid = (/^-?\d+(\.\d+)?$/.test($('tzbox').getProperty('value')));
			var tzautoProp = $('map').retrieve('tzauto');

			if(valid == false && tzautoProp == 'no'){
				core.inConsole(tzError);
				$('tzbox').setProperty('value', 0);
			}else{
				showPrayerTimes($('map').retrieve('lat'), $('map').retrieve('lng'), center, 'true');
			}

		});


		// --> Select madhab

		$('madhabselect').addEvent('change', function(){

			showPrayerTimes($('map').retrieve('lat'), $('map').retrieve('lng'), center, 'true');

		});


		// --> Select method

		$('methodselect').addEvent('change', function(){

			var methodProp = this.getProperty('value');
			
			if(methodProp == 'custom'){
				$('custom-angles').setStyle('display','block');
			}else{
				$('custom-angles').setStyle('display','none');
				showPrayerTimes($('map').retrieve('lat'), $('map').retrieve('lng'), center, 'true');
			}

		});
		
		
		// --> Fajr angle
		
		$('fajrangle').addEvent('blur', function(){

			var valid = (/^-?\d+(\.\d+)?$/.test($('fajrangle').getProperty('value')));

			if(valid == false){
				core.inConsole(anError);
				$('fajrangle').setProperty('value', 18);
			}else{
				showPrayerTimes($('map').retrieve('lat'), $('map').retrieve('lng'), center, 'true');
			}

		});
		
		
		// --> Isha angle
		
		$('ishaangle').addEvent('blur', function(){

			var valid = (/^-?\d+(\.\d+)?$/.test($('ishaangle').getProperty('value')));

			if(valid == false){
				core.inConsole(anError);
				$('ishaangle').setProperty('value', 18);
			}else{
				showPrayerTimes($('map').retrieve('lat'), $('map').retrieve('lng'), center, 'true');
			}

		});
		
		
		// --> Time format
		
		$('timeformat').addEvent('change', function(){

			showPrayerTimes($('map').retrieve('lat'), $('map').retrieve('lng'), center, 'true');

		});
		
		
		// --> My Locations
		
    $('mylocations').addEvent('click', function(){
    
      if($('map')){
    
        new Request.HTML({
          url: 'ajax/mylocations.php',
          method: 'get',
          onRequest: function(){
            core.inConsole('Loading your locations...');
          },
          onSuccess: function(a,b,html,d){
            if(html == 'false'){
              core.inConsole('Please login');
            }else{
              $('resultsbox').setStyle('display', 'block');
              $('results').set('text', '');
              $('results-title').set('text', 'My Locations');
              $('results').set('html', html);
            }
          },
          onFailure: function(){
            core.inConsole('Sorry could not get your locations');
          }
        }).send();
    
      }else{
        core.inConsole('Go to LocateAndPray homepage then click me');
      }
    
    });


		// --> Search for Address

		$('search').addEvent('submit', function(e){

			new Event(e).stop();

			var q = $('search-input').getProperty('value');
			
			if(q == null || !q){
			}else{
			
				geocoder.getLocations(q, function(res){
					
					if (res == null || !res || res.Status.code != 200){
					
						core.inConsole('Address not found, please try again.');
						
					}else{
					
						$('resultsbox').setStyle('display', 'none');

						var place = res.Placemark[0];
						var address = place.address;
						var coords = place.Point.coordinates;
						var results = res.Placemark.length;
							map.clearOverlays();
							map.setCenter(new GLatLng(coords[1],coords[0]), 14);
							latitude = coords[1];
							longitude = coords[0];
							$('map').store('lat', coords[1]);
							$('map').store('lng', coords[0]);
							$('placebox').setProperty('value', address);
							$('map').store('placeaddress', address);

						if(results > 1){
						
							$('resultsbox').setStyle('display', 'block');
							$('results').set('text', '');
							$('results-title').set('text', 'Results');
						
							for (var i=0; i < results; i++) {
							
								var c = res.Placemark[i].Point.coordinates;
								new Element('span').set('html', (i+1)+'. <a href="#" onclick="gotoPlace('+c[1]+','+c[0]+')">'+res.Placemark[i].address+'</a><br />').inject('results');

							}

						}
						
					}
					
				});
				
			}

		});

	}


});



// Other Functions
    

// --> Change Compass

function changeCompass(newnum){

	if($('compass-container').retrieve('ready') == 'true'){
		Swiff.remote($('compass'), 'rotateCompass', newnum);
	}

}


// --> Prayer Times

function showPrayerTimes(latitude, longitude, center, selected){

	var qiblaLat = 21.42252;
	var qiblaLng = 39.82615;
	var qibla = new GLatLng(qiblaLat, qiblaLng); 
	var distanceM = center.distanceFrom(qibla);
	var distanceKm = Math.round((distanceM/1000)*10)/10;
	var distanceMiles = Math.round((distanceKm/0.621371192)*10)/10;

	if(selected == 'true'){
		var stf = '&stf=true';
	}else if(selected == 'false'){
		var stf = '&stf=false';
	}else{
		var stf = '';
	}

  $('map').store('lat', latitude);
  $('map').store('lng', longitude);
  $('lat-input').setProperty('value', latitude);
  $('lng-input').setProperty('value', longitude);
	$('dist-right').set('html', distanceKm+' km'+'<br />'+distanceMiles+' mi');
	var sharelinkhash = 'lat='+latitude+'&lng='+longitude;
	$('sharelink').setProperty('value', 'http://locateandpray.islamicnature.com/?'+sharelinkhash);

	geocoder.getLocations(center, function(placemark){
	
		if(placemark.Status.code != 200){
			
			new Request.JSON({
				url: 'ajax/pt.php',
				data: $('calculate').toQueryString()+stf,
				method: 'post',
				onRequest: function(){
					$$('.prayer-time').each(function(el){
						el.set('text', 'Loading');
					});
				},
				onSuccess: function(pt){
					if(pt.length > 0){
						$('fajr').set('text', pt[0]);
						$('sunrise').set('text', pt[1]);
						$('dhuhr').set('text', pt[2]);
						$('asr').set('text', pt[3]);
						$('maghrib').set('text', pt[4]);
						$('isha').set('text', pt[5]);
						$('tzbox').setProperty('value', pt[6]);
						changeCompass(pt[7]);
						$('ats-fajr').set('text', pt[0]);
						$('ats-sunrise').set('text', pt[1]);
						$('ats-dhuhr').set('text', pt[2]);
						$('ats-asr').set('text', pt[3]);
						$('ats-maghrib').set('text', pt[4]);
						$('ats-isha').set('text', pt[5]);
						$('ats-bearing').set('html', 'Qibla Direction: '+pt[7]+'&deg;');
						$('addtosite').set('text','<script type="text/javascript" src="http://locateandpray.islamicnature.com/code/?'+pt[8]+'"></script><a style="display: none;" href="http://www.islamicnature.com/">IslamicNature.com</a><noscript>Please enable javascript</noscript>');
					}else if(pt == 'false'){
						core.inConsole(ptError);
					}else{
						core.inConsole(ptError);
					}
				},
				onFailure: function(){
					core.inConsole(ptError);
				}
			}).send();
			
		}else{
			var placeobject = placemark.Placemark[0];
			var place = placeobject.address;
			var cc = placeobject.AddressDetails.Country.CountryNameCode;
			$('place').set('text', place);
			$('ats-place').set('text', place);
			$('placebox').setProperty('value', place);
			$('map').store('placeaddress', place);
			
			new Request.JSON({
				url: 'ajax/pt.php',
				data: $('calculate').toQueryString()+stf,
				method: 'post',
				onRequest: function(){
					$$('.prayer-time').each(function(el){
						el.set('text', 'Loading');
					});
				},
				onSuccess: function(pt){
					if(pt.length > 0){
						$('fajr').set('text', pt[0]);
						$('sunrise').set('text', pt[1]);
						$('dhuhr').set('text', pt[2]);
						$('asr').set('text', pt[3]);
						$('maghrib').set('text', pt[4]);
						$('isha').set('text', pt[5]);
						$('tzbox').setProperty('value', pt[6]);
						changeCompass(pt[7]);
						$('ats-fajr').set('text', pt[0]);
						$('ats-sunrise').set('text', pt[1]);
						$('ats-dhuhr').set('text', pt[2]);
						$('ats-asr').set('text', pt[3]);
						$('ats-maghrib').set('text', pt[4]);
						$('ats-isha').set('text', pt[5]);
						$('ats-bearing').set('html', 'Qibla Direction: '+pt[7]+'&deg;');
						$('addtosite').set('text','<script type="text/javascript" src="http://locateandpray.islamicnature.com/code/?'+pt[8]+'"></script><a style="display: none;" href="http://www.islamicnature.com/">IslamicNature.com</a><noscript>Please enable javascript</noscript>');
					}else if(pt == 'false'){
						core.inConsole(ptError);
					}else{
						core.inConsole(ptError);
					}
				},
				onFailure: function(){
					core.inConsole(ptError);
				}
			}).send();

		}
	
	});

}



// Google/Main Functions

if(typeof GBrowserIsCompatible == 'function'){

	if(!GBrowserIsCompatible()){
		core.inConsole(notCompatible);
	}

	// --> gotoPlace

	function gotoPlace(lat, lng){

		map.clearOverlays();
		map.setCenter(new GLatLng(lat,lng, 14));
		latitude = lat;
		longitude = lng;
		$('map').store('lat', lat);
		$('map').store('lng', lng);

	}


	// --> Startup

	function load(){

		$('map').store('tzauto', 'no');

		map = new google.maps.Map2($('map-container'));
		var mapTypeControl = new GMapTypeControl;
		var topRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10,10));
		map.addControl(new GLargeMapControl());
		map.addControl(new GScaleControl());
		map.addControl(mapTypeControl, topRight);
		map.enableScrollWheelZoom();     
		
		$('map').store('lat', startupLat);
		$('map').store('lng', startupLng);
		
		center = new GLatLng(startupLat, startupLng);
		map.setCenter(center, startupZoom);
		geocoder = new GClientGeocoder();

		var redIcon = new GIcon(G_DEFAULT_ICON);
		redIcon.image = "http://locateandpray.islamicnature.com/images/icon.png";

		marker = new GMarker(center, {draggable: true, icon: redIcon});
		map.addOverlay(marker);

		showPrayerTimes(startupLat, startupLng, center, 'false');
		$('search-input').setProperty('value', searchBoxText);


		// --> Map Drag

		GEvent.addListener(map, "drag", function() {
				
			map.clearOverlays();
			center = map.getCenter();
			var redIcon = new GIcon(G_DEFAULT_ICON);
			redIcon.image = "http://locateandpray.islamicnature.com/images/icon.png";

			marker = new GMarker(center, {draggable: true, icon: redIcon});
			map.addOverlay(marker);

		});


		// --> Marker Drag End

		GEvent.addListener(marker, "dragend", function() {
				
			var point = marker.getPoint();
			map.panTo(point);

		});


		// --> Map Move End

		GEvent.addListener(map, "moveend", function() {
			
			map.clearOverlays();
			center = map.getCenter();
			var redIcon = new GIcon(G_DEFAULT_ICON);
			redIcon.image = "http://locateandpray.islamicnature.com/images/icon.png";

			marker = new GMarker(center, {draggable: true, icon: redIcon});
			map.addOverlay(marker);

			var point = marker.getPoint();
			latitude = point.lat().toFixed(5);
			longitude = point.lng().toFixed(5);

			$('map').store('lat', latitude);
			$('map').store('lng', longitude);

			showPrayerTimes(latitude, longitude, center, 'false');


			// --> Marker Drag End

			GEvent.addListener(marker, "dragend", function() {
				
				var point = marker.getPoint();
				map.panTo(point);
								
			});

		});

	}

}



// Load Google Maps

if(typeof GBrowserIsCompatible == 'function'){

	window.addEvent('load', function(){

		load();

	});

	window.addEvent('unload', function(){

		GUnload();

	});

}
