jQuery(document).ready(function($){
	function logError(errorMessage) {
		var err = {errorCode: "javaScriptException",
				javaClassname: "javaScriptException",
				message: errorMessage};
		try {
			ihs.util.ErrorHandler.logError(err, 'filter()', null);
		} catch(err) {}
	};
	$("#amenities").dropdownchecklist({ 
			maxDropHeight: 300, 
			width: 200 
	});
	$("#hotelChains").dropdownchecklist({ 
		maxDropHeight: 300, 
		width: 200 
	});
	$("#neighborhoods").dropdownchecklist({ 
		maxDropHeight: 300, 
		width: 200 
	});
	if($("#hotelName").val() == "") {
		$("#hotelName").css({'font-weight' : 'bold'});
		$("#hotelName").val("Hotel Name");
	}
	$("#hotelName").focus(function() {
		if($("#hotelName").val() == "Hotel Name") {
			$("#hotelName").val("");
			$("#hotelName").css({'font-weight' : 'normal'});
		}
	});
	$("#priceRange").slider({
		animate: true,
		min: 0,
		max: 500,
		range: true,
		step: 10,
		values: [0,500],
		slide: function(event, ui) {
			var v0 = $("#priceRange").slider('values', 0);
			var v1 = $("#priceRange").slider('values', 1);
			if(v0 == v1) {
				if(v1 == '500')
					$("#priceRangeDisplay").html("Only $500+");
				else
					$("#priceRangeDisplay").html("Only $" + v0);
			} else if(v1 == '500') {
				if(v0 == '0')
					$("#priceRangeDisplay").html("All Prices");
				else
					$("#priceRangeDisplay").html('$' + v0 + ' - $500+');
			} else
				$("#priceRangeDisplay").html('$' + v0 + ' - $' + v1);				
		},
		change: function(event, ui) {
			var v0 = $("#priceRange").slider('values', 0);
			var v1 = $("#priceRange").slider('values', 1);
			if(v0 != "0" || v1 != "500") {
				$("#minPrice").val(v0);
				if(v1 != "500")
					$("#maxPrice").val(v1);
				else
					$("#maxPrice").val("0");
			} else {
				$("#minPrice").val("0");
				$("#maxPrice").val("0");
			}
		}
	});
	$("#starRatings").slider({
		animate: true,
		min: 1,
		max: 5,
		range: true,
		step: 1,
		values: [1,5],
		slide: function(event, ui) {
			var v0 = $("#starRatings").slider('values', 0);
			var v1 = $("#starRatings").slider('values', 1);
			if(v0 == v1) {
				if(v0 == '1')					        		
					$("#starRatingDisplay").html('Only ' + v0 + ' Star');
				else
					$("#starRatingDisplay").html('Only ' + v0 + ' Stars');
			} else if(v0 == '1' && v1 == '5')
				$("#starRatingDisplay").html('All Star Ratings');
			else
				$("#starRatingDisplay").html(v0 + ' - ' + v1);
		},
		change: function(event, ui) {
			$("#filterForm :input[name=starRating]").remove();
			var v0 = parseInt($("#starRatings").slider('values', 0));
			var v1 = parseInt($("#starRatings").slider('values', 1));
			if(v0 != 1 || v1 != 5)
				for(var i = v0; i <= v1; i++)
					$("#filterForm").append("<input type='hidden' name='starRating' value='"+i+"'/>");
			else
				$("#filterForm").append("<input type='hidden' name='starRating' value=''/>");
		}
	});
	$("#guestRatings").slider({
		animate: true,
		min: 0,
		max: 10,
		range: true,
		step: .5,
		values: [0,10],
		slide: function(event, ui) {
			var v0 = $("#guestRatings").slider('values', 0);
			var v1 = $("#guestRatings").slider('values', 1);
			if(v0 == v1) 		        		
				$("#guestRatingDisplay").html('Only ' + v0);
			else if(v0 == '0' && v1 == '10')
				$("#guestRatingDisplay").html('All Ratings');
			else
				$("#guestRatingDisplay").html(v0 + ' - ' + v1);
		},
		change: function(event, ui) {
			var v0 = $("#guestRatings").slider('values', 0);
			var v1 = $("#guestRatings").slider('values', 1);
			if(v0 != "0" || v1 != "10") {
				$("#minGuestRating").val(v0);
				if(v1 != "10")
					$("#maxGuestRating").val(v1);
				else
					$("#maxGuestRating").val("0");
			} else {
				$("#minGuestRating").val("0");
				$("#maxGuestRating").val("0");
			}
		}
	});
	$("#removeFilters").click(function() {
		$("#hotelName").val("Hotel Name");
		$("#hotelName").css({'font-weight' : 'bold'});
		$(".ui-dropdownchecklist > .ui-dropdownchecklist-text").each(function () {
			this.innerHTML = "";
		});
		$(".ui-dropdownchecklist-item > input:checkbox").each(function () {
			this.checked = false;
		});
		var selectOptions = $("#amenities").find("option");
        for(var i = 0; i < selectOptions.length; i++)
            $(selectOptions[i]).attr("selected", false);
        selectOptions = $("#hotelChains").find("option");
        for(var i = 0; i < selectOptions.length; i++)
            $(selectOptions[i]).attr("selected", false);
        selectOptions = $("#neighborhoods").find("option");
        for(var i = 0; i < selectOptions.length; i++)
            $(selectOptions[i]).attr("selected", false);
		$("#showNearbyCities").attr("checked", false);
		$("#poi option:eq(0)").attr("selected", "selected");
		if($("#distance option:eq(0)").val() != "0.0")
			$("#distance").prepend("<option value='0.0'>All Miles</option>");
		$("#distance option:eq(0)").attr("selected", "selected");
		$("#priceRange").slider('values', 0, 0);
		$("#priceRange").slider('values', 1, 500);
		$("#starRatings").slider('values', 0, 1);
		$("#starRatings").slider('values', 1, 5);
		$("#guestRatings").slider('values', 0, 0);
		$("#guestRatings").slider('values', 1, 10);
		$("#starRatingDisplay").text("All Star Ratings");
		$("#guestRatingDisplay").text("All Ratings");
		$("#priceRangeDisplay").text("All Prices");
		$("#filterForm :input[name=starRating]").remove();
		$("#filterForm").append("<input type='hidden' name='starRating' value=''/>");
		$("#minPrice").val("0");
		$("#maxPrice").val("0");
		$("#minGuestRating").val("0");
		$("#maxGuestRating").val("0");
		
		$("#filterForm").submit();
	});
	$("#showNearbyCities").change(function() {
        if($("#showNearbyCities").attr("checked") && $("#distance")[0].selectedIndex == 0 && $("#distance option:eq(0)").val() == "0.0") {
        	$("#distance").children(":eq" + $("#distance").children().length - 1).attr("selected", "selected");
        	$("#distance option:eq(0)").remove();
        } else if(!$("#showNearbyCities").attr("checked") && $("#distance").val() != "0.0") 
			$("#distance").prepend("<option value='0.0'>All Miles</option>");
	});
	$("#poi").change(function() {
		if($("#poi")[0].selectedIndex == 0 && $("#distance").val() != "0.0") {
			$("#distance").prepend("<option value='0.0'>All Miles</option>");
		} else if($("#poi")[0].selectedIndex > 0 && $("#distance").children(0).val() == "0.0") {
			if($("#distance")[0].selectedIndex == 0)
				$("#distance option:eq(15)").attr("selected", "selected");
			$("#distance option:eq(0)").remove();
		}
	});
	$("#filterSorts > div").each(function() {
		$(this).click(function() {			
			$("#filterForm :input[name=orderBy]").val(this.id.substring(10));
			logError("Sort Option: " + this.id.substring(10));
			$("#filterForm").submit();
		});
	});
	
	$("#filterForm").submit(function() {		
		if($("#hotelName").val() == "Hotel Name")			
			$("#hotelName").val("");
		if($("#hotelName").val() != "")
			logError("Hotel Name: " + $("#hotelName").val());
		if($("#amenities")[0].selectedIndex >= 0)
			logError("Amenities: Selected");
		if($("#hotelChains").length > 0 && $("#hotelChains")[0].selectedIndex >= 0)
			logError("Hotel Chains: Selected");
		if($("#neighborhoods").length > 0 && $("#neighborhoods")[0].selectedIndex >= 0)
			logError("Neighborhoods: Selected");
		if($("#showNearbyCities").attr("checked"))
			logError("Show Nearby Cities: true");
		if($("#distance")[0].selectedIndex > 0)
			logError("Distance: " + $("#distance option:selected").val());
		if($("#poi").length > 0 && $("#poi")[0].selectedIndex > 0)
			logError("POI: " + $("#poi option:selected").val());
		if($("#priceRange").slider('values', 0) > 0 || $("#priceRange").slider('values', 1) < 500)
			logError("Price Range: " + $("#priceRange").slider('values', 0) + "-" + $("#priceRange").slider('values', 1));
		if($("#starRatings").slider('values', 0) > 1 || $("#starRatings").slider('values', 1) < 5)
			logError("Star Rating: " + $("#starRatings").slider('values', 0) + "-" + $("#starRatings").slider('values', 1));
		if($("#guestRatings").slider('values', 0) > 1 || $("#guestRatings").slider('values', 1) < 5)
			logError("Guest Rating: " + $("#guestRatings").slider('values', 0) + "-" + $("#guestRatings").slider('values', 1));
	});
});