/**
 * Main Client-Side Logic
 *
 * @copyright SiteCrafting, Inc.
 * @author Nick Williams
 * @version 1.0.0
 */
jQuery(function($) {
	var pos;

	// Initialization
	SC.FormUtils.interceptSubmissions();
	MC.LocalData.init();

	// Forms
	$('.search').live('response', function(e, params) {
		$.mobile.changePage(ROOT_URL + 'search/all/' + params.query);
	});

	$('.providers').live('response', function(e, params) {
		$.mobile.changePage(ROOT_URL + 'search/providers/' + SC.FormUtils.serializeParams(params, true));
	});

	// Geolocation
	if(SC.Geolocation.watch()) {
		$(document).bind('locationChanged', function(e, position) {
			if(position) {
				pos = {
					lat: position.coords.latitude,
					lng: position.coords.longitude
				};

				$('.geodata').show();

				// Emergency Location Directions
				$('.page.ui-page-active .dir').each(function() {
					$(this).attr('href', 'http://maps.google.com/?saddr=' + position.coords.latitude + ',' + position.coords.longitude + '&daddr=' + $(this).data('destination'));
				});

				// Location Distances
				$('.page.ui-page-active .mainNav').addClass('geo');

				$('.page.ui-page-active .miles').each(function() {
					var distance = SC.Geolocation.distance($(this).data('coords'), position.coords, 'M').toFixed(1);

					if(distance > 999) {
						$(this).html('999+ mi');
					}
					else {
						$(this).html(distance + ' mi');
					}

					$(this).closest('li').data('distance', distance);

					if(distance != 0 && distance <= 5) {
						var thisDistance = $(this);

						SC.Geolocation.travelDistance($(this).data('coords'), position.coords, function(response, status) {
							if(status == google.maps.DistanceMatrixStatus.OK) {
								var distance = (response.rows[0].elements[0].distance.value * 0.000621371192).toFixed(1)

								if(distance > 999) {
									thisDistance.html('999+ mi');
								}
								else {
									thisDistance.html(distance + ' mi');
								}

								thisDistance.closest('li').data('distance', distance);

								// $('.page.ui-page-active .nested').each(function() {
								// 	if($(this).find('.toggle .current').hasClass('toggle_nearest')) {
								// 		$(this).find('li:not(.info)').tsort({
								// 			data: 'distance',
								// 			order: 'asc',
								// 			place: 'end'
								// 		});
								// 	}
								// });
							}
						});
					}
				});

				$('.page.ui-page-active .nested').each(function() {
					if($(this).find('.toggle .current').hasClass('toggle_nearest')) {
						$(this).find('li:not(.info)').tsort({
							data: 'distance',
							order: 'asc',
							place: 'end'
						});
					}
				});

				// Location Detail Directions
				if($('.page.ui-page-active .directions').length) {
					SC.Geolocation.directions(position.coords, $('.page.ui-page-active .directions').data('coords'), function(result, status) {
						if(status == google.maps.DirectionsStatus.OK) {
							var steps = result.routes[0].legs[0].steps;

							$('.page.ui-page-active .directions').html('');

							for(var i = 0; i < steps.length; i++) {
								$('.page.ui-page-active .directions').append('<li><div class="num">' + (i + 1) + '.</div><div class="desc">' + steps[i].instructions + '</div><div class="dist">' + steps[i].distance.text + '</div></li>');
							}
						}
					});
				}
			}
		});

		// Device Heading
		$(window).bind('deviceorientation', function(e) {
			if(e.originalEvent.webkitCompassHeading) {
				if(SC.Geolocation.heading) {
					SC.Geolocation.lastHeading = SC.Geolocation.heading;
				}

				SC.Geolocation.heading = e.originalEvent.webkitCompassHeading;
			}
		});

		var lastRotate = {};

		setInterval(function() {
			var i = 0;

			$('.page.ui-page-active .geodata').each(function() {
				if(SC.Geolocation.heading && SC.Geolocation.last) {
					var thisCompass = $(this).find('.compass');
					var offset = -1 * SC.Geolocation.heading;
					var bearing = SC.Geolocation.bearing(SC.Geolocation.last.coords, $(this).find('.miles').data('coords'));
					var rotate = (offset + bearing) - window.orientation;

					if(rotate > 360) {
						rotate -= 360;
					}

					if(Math.abs(rotate - lastRotate[i]) < 180) {
						thisCompass.css('-webkit-transition', 'all 0.2s ease-in-out');
					}
					else {
						thisCompass.css('-webkit-transition', 'none');
					}

					thisCompass.css('-webkit-transform', 'rotateZ(' + rotate  + 'deg)');
					lastRotate[i] = rotate;
					i++;
				}
			});
		}, 100);

		$('.page').live('pageshow', function() {
			SC.Geolocation.tickle();
		});

		SC.Geolocation.tickle();
	}

	// Header: Call Button
	$('.header_btns .btns .call').live('click', function() {
		var thisHeader = $(this).closest('header');

		if(thisHeader.find('.dropdown_call').hasClass('visible') && thisHeader.find('.dropdown_call .search').is(':visible')) {
			thisHeader.find('.header_btns .btns .search').removeClass('active');
			$(this).addClass('active');
			thisHeader.find('.dropdown_call .search').hide();
			thisHeader.find('.dropdown_call .call').show();
		}
		else if(!thisHeader.find('.dropdown_call').hasClass('visible')) {
			$(this).addClass('active');
			thisHeader.find('.dropdown_call .search').hide();
			thisHeader.find('.dropdown_call .call').show();
			thisHeader.find('.dropdown_call').addClass('visible');
		}
		else {
			$(this).removeClass('active');
			thisHeader.find('.dropdown_call').removeClass('visible');
		}
	});

	// Header: Search Button
	$('.header_btns .btns .search').live('click', function() {
		var thisHeader = $(this).closest('header');

		if(thisHeader.find('.dropdown_call').hasClass('visible') && thisHeader.find('.dropdown_call .call').is(':visible')) {
			thisHeader.find('.header_btns .btns .call').removeClass('active');
			$(this).addClass('active');
			thisHeader.find('.dropdown_call .call').hide();
			thisHeader.find('.dropdown_call .search').show();
		}
		else if(!thisHeader.find('.dropdown_call').hasClass('visible')) {
			$(this).addClass('active');
			thisHeader.find('.dropdown_call .call').hide();
			thisHeader.find('.dropdown_call .search').show();
			thisHeader.find('.dropdown_call').addClass('visible');
		}
		else {
			$(this).removeClass('active');
			thisHeader.find('.dropdown_call').removeClass('visible');
		}
	});

	// Nested Lists
	$('.mainNav li a').live('click', function() {
		if($(this).siblings('ul').length) {
			if($(this).siblings('ul').is(':visible')) {
				$(this).removeClass('open');
				$(this).siblings('ul').slideUp();
			}
			else {
				$(this).addClass('open');
				$(this).siblings('ul').slideDown();
			}
		}
	});


	$(document).bind('pagechange', function () {
		window._gaq && _gaq.push(location.hash ? ['_trackPageview', location.hash.substr(1)] : ['_trackPageview']);
		$.post(ROOT_URL+'log.php', {
			url: window.location.href,
			geo: pos
		});
	});

	$.post(ROOT_URL+'log.php', {
		url: window.location.href,
		geo: pos
	});
});
