﻿google.load("maps", "2.x");

$(function() {

	// - setup google geocoder:

	geo = new GClientGeocoder();

	reasons = [];
	reasons[G_GEO_SUCCESS] = "Success";
	reasons[G_GEO_MISSING_ADDRESS] = "Missing Address";
	reasons[G_GEO_UNKNOWN_ADDRESS] = "Unknown Address.";
	reasons[G_GEO_UNAVAILABLE_ADDRESS] = "Unavailable Address";
	reasons[G_GEO_BAD_KEY] = "Bad API Key";
	reasons[G_GEO_TOO_MANY_QUERIES] = "Too Many Queries";
	reasons[G_GEO_SERVER_ERROR] = "Server error";

	/* LOAD FORM */

	var features = $('input[name="q.features"]');
	for (i = 0; i < features.length; i++) {
		if ($(features[i]).is(':checked')) {

			var fieldkey = $(features[i]).val();
			var optkey = 'opt-' + fieldkey;
			if ($('#' + optkey).length == 0)
				toggleSelectionOption(optkey);
		}
	}

	/* SUBMIT FORM */
	$('#search-form').submit(function() {

		var longitude = $("#q-longitude").val();
		var near = $("#q-near").val();
		// - doesn't have coordinates - query google:
		if (longitude == "" && near != "") {
			geoEncode();
			return false;
		}
		// - coordinates returned from google - submit form:
		// - get the selected options:
		var options = [];
		$("#display-option-results").find(".display-option").each(function(idx, ele) {
			var key = ele.id.substr(4, ele.id.length - 4);

		});
		//var ele = $(this); 
		//$(this).data['features'] = options;
		//return false;
		return true;
	});

	/* submit button */
	$('#search-panel-submit').bind('mouseenter', function() {
		$(this).attr({ src: '/Images/SearchPanel/search-panel-submit-light.gif' });
	});
	$('#search-panel-submit').bind('mouseleave', function() {
		$(this).attr({ src: '/Images/SearchPanel/search-panel-submit-dark.gif' });
	});
	$('#search-panel-submit').bind('mousedown', function() {
		$(this).attr({ src: '/Images/SearchPanel/search-panel-submit-dark.gif' });
	});
	$('#search-panel-submit').bind('mouseup', function() {
		$(this).attr({ src: '/Images/SearchPanel/search-panel-submit-light.gif' });
	});

	/* search-links */
	$('.search-link a').bind('click', function() {

		var keywords = $('#q-keywords');
		keywords.val($(this).html());
		keywords.focus();
	});

	/* search-tabs */
	$('.search-tab-button-text').each(function(id, ele) {

		$(ele).bind('mouseenter mouseleave', hoverSearchTab);
		$(ele).bind('click', clickSearchTab);
	});

	$('.search-tab-button-left').bind('mouseenter mouseleave', hoverSearchLeftTab);
	$('.search-tab-button-left').bind('click', clickSearchLeftTab);

	$('.search-tab-button-right').bind('mouseenter mouseleave', hoverSearchRightTab);
	$('.search-tab-button-right').bind('click', clickSearchRightTab);

	/* selection-options */

	$('.selection-option-text').each(function(id, ele) {

		$(ele).bind('mouseenter mouseleave', hoverSelectionOption);
		$(ele).bind('click', function() {
			var name = $(this).closest('.selection-option').attr('name');
			toggleSelectionOption(name);
		});
	});

	$('.selection-option-left').bind('mouseenter mouseleave', hoverSelectionOptionLeft);
	$('.selection-option-left').bind('click', clickSelectionOptionLeft);

	$('.selection-option-right').bind('mouseenter mouseleave', hoverSelectionOptionRight);
	$('.selection-option-right').bind('click', clickSelectionOptionRight);

	$('#expand-search-options').bind('click', clickExpandSearchOptions);
	$('#collapse-search-options').bind('click', clickCollapseSearchOptions);
});


function geoEncode() {

	var near = $("#q-near").val();

	geo.getLocations(near, function(result) {
		if (result.Status.code == G_GEO_SUCCESS) {

			var loc = result.Placemark[0];

			var locAddInfo = loc.AddressDetails;
			var locCountryInfo = locAddInfo.Country.AdministrativeArea;
			var locCityInfo = locCountryInfo.SubAdministrativeArea;

			var point = loc.Point.coordinates;
			var accuracy = locAddInfo.Accuracy;
			var state = locCountryInfo.AdministrativeAreaName;
			var city = (locCityInfo != undefined)
						? locCityInfo.Locality.LocalityName
						: "";

			$("#q-longitude").val(point[0]);
			$("#q-latitude").val(point[1]);
			$("#q-accuracy").val(accuracy);
			$("#q-city").val(city);
			$("#q-state").val(state);

			$("#search-form").trigger("submit");

		} else {

			var reason = "Code " + result.Status.code;
			if (reasons[result.Status.code]) {
				reason = reasons[result.Status.code]
			}
		}
	});
	return false;
}

function hoverSearchTab() {

	$(this).toggleClass('search-tab-button-text-hover');

	if ($(this).hasClass('search-tab-button-first'))
		$('.search-tab-button-left').toggleClass('search-tab-button-left-hover');

	if ($(this).hasClass('search-tab-button-last'))
		$('.search-tab-button-right').toggleClass('search-tab-button-right-hover');
}

function hoverSearchLeftTab() {

	$(this).toggleClass('search-tab-button-left-hover');
	$('.search-tab-button-first').toggleClass('search-tab-button-text-hover');
}

function hoverSearchRightTab() {

	$(this).toggleClass('search-tab-button-right-hover');
	$('.search-tab-button-last').toggleClass('search-tab-button-text-hover');
}

function clickSearchTab() {

	var selectionPanel = $('#search-selection-options-panel');
	var selectedClass = 'search-tab-button-text-selected';

	if ($(this).hasClass(selectedClass)) {

		selectionPanel.slideUp(); // - hide the panel
		$('.selection-options-panel').slideUp(); // - hide the selected options
		// - unselect previously selected tab:
		$('.' + selectedClass).removeClass(selectedClass);
		$('.search-tab-button-left').removeClass('search-tab-button-left-selected');
		$('.search-tab-button-right').removeClass('search-tab-button-right-selected');

	} else {

		if ((selectionPanel.css('display') == 'none')) { // - was hidden...
			$("#" + $(this).html() + '-selection-options').show();
			selectionPanel.slideDown();
		} else {
			$('.selection-options-panel').slideUp();
			$("#" + $(this).html() + '-selection-options').slideDown();
		}

		// - unselect previously selected tab:
		$('.' + selectedClass).removeClass(selectedClass);

		// - select this tab:
		$(this).addClass(selectedClass);

		// - handle left-curve:
		if ($(this).hasClass('search-tab-button-first'))
			$('.search-tab-button-left').addClass('search-tab-button-left-selected');
		else
			$('.search-tab-button-left').removeClass('search-tab-button-left-selected');

		// - handle right-curve:
		if ($(this).hasClass('search-tab-button-last'))
			$('.search-tab-button-right').addClass('search-tab-button-right-selected');
		else
			$('.search-tab-button-right').removeClass('search-tab-button-right-selected');

	}
}

function clickSearchLeftTab() {
	$('.search-tab-button-first').trigger('click');
}

function clickSearchRightTab() {
	$('.search-tab-button-last').trigger('click');
}

/* selection options */

function hoverSelectionOption() {
	var ele = $(this);
	ele.toggleClass('selection-option-text-hover');
	ele.prev().toggleClass('selection-option-left-hover');
	ele.next().toggleClass('selection-option-right-hover');
}

function hoverSelectionOptionLeft() {
	$(this).next().trigger('mouseenter');
}

function hoverSelectionOptionRight() {
	$(this).prev().trigger('mouseenter');
}


function toggleSelectionOption(name) {

	var all = $('[name="' + name + '"]');
	var text = $(all[0]).find('.selection-option-text').html();

	all.each(function(idx, ele) {
		var opt = $(ele).find('.selection-option-text');
		opt.toggleClass('selection-option-text-selected');
		opt.prev().toggleClass('selection-option-left-selected');
		opt.next().toggleClass('selection-option-right-selected');

		var fieldkey = name.substr(4, name.length - 4);
		var features = $('input[value="' + fieldkey + '"]');
		for (i = 0; i < features.length; i++) {
			$(features[i]).attr('checked', opt.hasClass('selection-option-text-selected'));
		}
	});

	// - toggle display-option:
	toggleDisplayOption(name, text);
}

function clickSelectionOptionLeft() {
	$(this).next().trigger('click');
}

function clickSelectionOptionRight() {
	$(this).prev().trigger('click');
}

/* display-option */

function toggleDisplayOption(id, text) {

	var panel = $("#display-option-results");
	var opt = $('#' + id);

	if (opt.length > 0) opt.remove();
	else {

		var tpl = $("#display-option-template").html();

		//var content = $(tpl).bindTo({ id: id, text: text });
		var content = tpl.replace("{id}", id).replace("{text}", text);
		
		panel.append(content);
		$('.display-option-right').unbind('click');
		$('.display-option-right').bind('click', clickDisplayOptionRight);
	}

	var noresults = $("#display-option-noresults");
	if ($.trim(panel.html()).length > 0) {
		panel.show();
		noresults.hide();
	} else {
		panel.hide();
		noresults.show();
	}
}
function clickDisplayOptionRight() {

	// - remove selected option:
	var id = $(this).closest('.display-option').attr('id');
	toggleSelectionOption(id);
}

function clickExpandSearchOptions() {

	$("#expand-search-options").css({ display: 'none' });
	$("#collapse-search-options").css({ display: 'block' });
	$(".advanced-search-panels").slideDown(); //.css({ display: 'block' });
}
function clickCollapseSearchOptions() {

	$("#expand-search-options").css({ display: 'block' });
	$("#collapse-search-options").css({ display: 'none' });
	$(".advanced-search-panels").slideUp(); // .css({ display: 'none' });
}
