//
// $Id:$
//
// HP Velotechnik Website
// Prospektanfrage Place/Dealer lookup functions
// (C) 2009 Pieter Hollants <pieter@hollants.com>
//

// Reset form's fields to initial state (no dealers shown etc.)
function resetdealerform()
{
	var form = $("requestform");

	$(form["customer_place"]).style.backgroundColor = "#ffffff"; 
	$(form["customer_place"]).disabled = false;

	$("lookup").innerHTML = "&nbsp;&nbsp;&nbsp;&nbsp;";

	while ($("DealerTBody").childNodes[0])
		$("DealerTBody").removeChild($("DealerTBody").childNodes[0]);

	$("DealerCaptionRow").hide();
	$("DealerTableRow").hide();
}

// Show place and dealers, if any were found
function showplacedealers(transport)
{
	var form = $("requestform");

	resetdealerform();

	var response = transport.responseText.split("\n");
	if (response[0].length > 0)
	{
		$(form["customer_place"]).value = response[0];

		// Dealers found?
		if (response.length > 1)
		{
			while ($("DealerTBody").childNodes[0])
				$("DealerTBody").removeChild($("DealerTBody").childNodes[0]);

			for (var i=1; i < response.length-1; i++)
			{
				// Kundennr|ID|PLZ|Ort|Name|Status|Distanz
				var data = response[i].split("|");

				var newrow = document.createElement("TR");

				var newradio = document.createElement("input");
				newradio.type = "radio";
				newradio.name = "dealer";
				newradio.value = data[0];
				if (i == 1)
					newradio.defaultChecked = true;

				var radiocell = document.createElement("TD");
				radiocell.appendChild(newradio);
				newrow.appendChild(radiocell);

				var zipcell = document.createElement("TD");
				if (data[5]=="P")
				{
					var boldface = document.createElement("B");
					boldface.appendChild(document.createTextNode(data[2]));
					zipcell.appendChild(boldface);
				}
				else
					zipcell.appendChild(document.createTextNode(data[2]));
				newrow.appendChild(zipcell);

				var placecell = document.createElement("TD");
				if (data[5]=="P")
				{
					var boldface = document.createElement("B");
					boldface.appendChild(document.createTextNode(data[3]));
					placecell.appendChild(boldface);
				}
				else
					placecell.appendChild(document.createTextNode(data[3]));
				newrow.appendChild(placecell);

				var namecell = document.createElement("TD");
				var link = document.createElement("A");
				link.href = "/shopping/fachhaendler_d.html?op=dealerinfo&id=" + data[1];
				link.target = "_new";
				link.onclick = function() {
					var left = (screen.width-800)/2;
					var top = (screen.height-600)/2;
					window.open(this.href,'',
					            'width=800,height=600,' +
					            'left=' + left + ',' +
					            'top=' + top + ',' +
					            'scrollbars=yes,' +
					            'status=yes,' +
					            'location=no,' +
					            'toolbar=no,' +
					            'menubar=no'); 
					return false;
				};
				if (data[5]=="P")
				{
					var boldface = document.createElement("B");
					boldface.appendChild(document.createTextNode(data[4]));
					link.appendChild(boldface);
				}
				else
					link.appendChild(document.createTextNode(data[4]));
				namecell.appendChild(link);
				newrow.appendChild(namecell);

				var distancecell = document.createElement("TD");
				if (data[5]=="P")
				{
					var boldface = document.createElement("B");
					boldface.appendChild(document.createTextNode(data[6] + " km"));
					distancecell.appendChild(boldface);
				}
				else
					distancecell.appendChild(document.createTextNode(data[6] + " km"));
				newrow.appendChild(distancecell);

				$("DealerTBody").appendChild(newrow);
			}

			var newrow = document.createElement("TR");

			var newradio = document.createElement("input");
			newradio.type = "radio";
			newradio.name = "dealer";
			newradio.value = "none";

			var radiocell = document.createElement("TD");
			radiocell.appendChild(newradio);
			newrow.appendChild(radiocell);

			var newlabel = document.createElement("label");
			newlabel.htmlFor = "keiner";
			newlabel.innerHTML = "Keine Datenweitergabe an Fachh&auml;ndler erw&uuml;nscht";

			var labelcell = document.createElement("TD");
			labelcell.colSpan = 4;
			labelcell.appendChild(newlabel);

			newrow.appendChild(labelcell);

			$("DealerTBody").appendChild(newrow);

			$("DealerCaptionRow").show();
			$("DealerTableRow").show();
		}
	}
	else
	{
		resetdealerform();
		$(form["customer_place"]).value = "";
	}

	// Manually trigger "onChange" event since it doesn't get fired
	// automatically and the place field has definitely changed
	if (document.createEvent)
	{
		var event = document.createEvent('Events');
		event.initEvent('change', true, true);
		$(form["customer_place"]).dispatchEvent(event);
	}
	else
	{
		var event = document.createEventObject();
		$(form["customer_place"]).fireEvent("onchange", event);
	}
	event = null;
}

// Handle AJAX-style communication to retrieve place and dealers according to country/ZIP code
function placedealerlookup()
{
	var form = $("requestform");
	if ($F(form["customer_country"]) == "DE" &&
	    $F(form["customer_zip"]).length > 0 &&
	    $F(form["customer_zip"]).match(/^[A-Za-z0-9 \-\/]{3,8}$/))
	{
		$(form["customer_place"]).disabled = true;
		$(form["customer_place"]).style.backgroundColor = "#d0d0d0"; 
		$("lookup").innerHTML = "<IMG SRC=\"/images/ajax_loading.gif\">";
		new Ajax.Request("/service/prospektanforderung_placedealerlookup.php",
		{
			method: "GET",
			parameters: {
				country: $F(form["customer_country"]),
				zip: $F(form["customer_zip"])
			},
			onSuccess: showplacedealers,
			onFailure: resetdealerform
		});
	}
	else
		resetdealerform();
}

// Stuff to be done when document has loaded completely
Event.observe(window, 'load', function()
{
	var form;
	if (form = $("requestform"))
	{
		// Perform initial call to get place/dealer display after form validation errors
		placedealerlookup();

		// Attach calls to form elements
		Event.observe($(form["customer_country"]), "change", placedealerlookup);
		Event.observe($(form["customer_zip"]), "change", placedealerlookup);
	}
});

