//
// (c) 2008 Infopark AG
// plzFDMapping.js
// Expects that the prototype.js library has been loaded.
//


// global variables

// plzMapping contains the mapping of zip codes (PLZ) to the filialdirektion
// The variable is initialized lazily by the getter method 
// getPlzFilialdirektionMapping.

var plzMapping = null;

// Returns the mapping table used to map zip codes to 
// Filialdirektionen
//
// getPlzFilialdirektionMapping
//

function getPlzFilialdirektionMapping() {
	var plzIndex = 0;

	if (null == plzMapping) {
		plzMapping = new Array();
		fd = new Object();
		fd["plz_1"] = 1;
		fd["plz_2"] = 9;
		fd["filialdirektion"] ="fd_berlin"; // fd_leipzig
		plzMapping [plzIndex++] = fd;

		fd = new Object();
		fd["plz_1"] = 10;
		fd["plz_2"] = 19;
		fd["filialdirektion"] = "fd_berlin";
		plzMapping [plzIndex++] = fd;

		fd = new Object();
		fd["plz_1"] = 20;
		fd["plz_2"] = 31;
		fd["filialdirektion"] = "fd_hamburg";
		plzMapping [plzIndex++] = fd;

		fd = new Object();
		fd["plz_1"] = 32;
		fd["plz_2"] = 33;
		fd["filialdirektion"] = "fd_duesseldorf";
		plzMapping [plzIndex++] = fd;

		fd = new Object();
		fd["plz_1"] = 34;
		fd["plz_2"] = 36;
		fd["filialdirektion"] = "fd_frankfurt";
		plzMapping [plzIndex++] = fd;

		fd = new Object();
		fd["plz_1"] = 37;
		fd["plz_2"] = 38;
		fd["filialdirektion"] = "fd_hamburg"; // fd_hannover
		plzMapping [plzIndex++] = fd;

                fd = new Object();
		fd["plz_1"] = 39;
		fd["plz_2"] = 39;
		fd["filialdirektion"] = "fd_berlin";
		plzMapping [plzIndex++] = fd;

		fd = new Object();
		fd["plz_1"] = 40;
		fd["plz_2"] = 48;
		fd["filialdirektion"] = "fd_duesseldorf";
		plzMapping [plzIndex++] = fd;

		fd = new Object();
		fd["plz_1"] = 49;
		fd["plz_2"] = 49;
		fd["filialdirektion"] = "fd_hamburg"; // fd_hannover
		plzMapping [plzIndex++] = fd;

		fd = new Object();
		fd["plz_1"] = 50;
		fd["plz_2"] = 53;
		fd["filialdirektion"] = "fd_duesseldorf";
		plzMapping [plzIndex++] = fd;

		fd = new Object();
		fd["plz_1"] = 54;
		fd["plz_2"] = 56;
		fd["filialdirektion"] = "fd_frankfurt"; // fd_mannheim
		plzMapping [plzIndex++] = fd;

		fd = new Object();
		fd["plz_1"] = 57;
		fd["plz_2"] = 59;
		fd["filialdirektion"] = "fd_duesseldorf";
		plzMapping [plzIndex++] = fd;

		fd = new Object();
		fd["plz_1"] = 60;
		fd["plz_2"] = 68;
		fd["filialdirektion"] = "fd_frankfurt";
		plzMapping [plzIndex++] = fd;

		fd = new Object();
		fd["plz_1"] = 69;
		fd["plz_2"] = 79;
		fd["filialdirektion"] = "fd_stuttgart";
		plzMapping [plzIndex++] = fd;

		fd = new Object();
		fd["plz_1"] = 80;
		fd["plz_2"] = 87;
		fd["filialdirektion"] = "fd_muenchen";
		plzMapping [plzIndex++] = fd;

		fd = new Object();
		fd["plz_1"] = 88;
		fd["plz_2"] = 89;
		fd["filialdirektion"] = "fd_stuttgart";
		plzMapping [plzIndex++] = fd;

		fd = new Object();
		fd["plz_1"] = 90;
		fd["plz_2"] = 96;
		fd["filialdirektion"] = "fd_muenchen";
		plzMapping [plzIndex++] = fd;

		fd = new Object();
		fd["plz_1"] = 97;
		fd["plz_2"] = 97;
		fd["filialdirektion"] = "fd_frankfurt";
		plzMapping [plzIndex++] = fd;

		fd = new Object();
		fd["plz_1"] = 98;
		fd["plz_2"] = 99;
		fd["filialdirektion"] = "fd_berlin";
		plzMapping [plzIndex++] = fd;

	}
	return plzMapping;
}


// Calculates the filialdirektion based on the zip code entered and
// sets the value of the drop down menu accordingly
// calculateFilialdirektionForPLZ 
//
// Settings for the form:
// The form must have the id "plzFdForm"
// The drop down menu (select) must have the id "plzFdForm_fd"
// The zip code (PLZ) is taken from the form field (id="plzFdForm_plz")
// 
// The mapping is based on the first two digits
// 


function calculateFilialdirektionForPLZ (element, value) {
	// Check the plz
	// Create an array containing the plz range and the related filialdirektion
	// The array is sorted by its plz values
	// plz ranges do not overlap

	if (value.length < 2) {
		// cannot get mapping for these values
		// We need 2 characters at least.
		return;
	}
	
	var plzMapping = getPlzFilialdirektionMapping();

	// Make it a string, take the first 2 characters and make an int again!
	var cmpValue = Number (value.substr (0,2));
	var fdIndex = -1;
	
	for (var index=0; index < plzMapping.length; index++) {
		// Find the smallest that may match
		if (plzMapping[index]["plz_1"] <= cmpValue) {
			if (plzMapping[index]["plz_2"] >= cmpValue) {
				// fd matched
				fdIndex = index;
				break;
			}
		} else {
			// All others cannot match
			break;
		}
	}
	
	if (fdIndex != -1) {
		var plzFdForm = $('plzFdForm');
		var filialDirection = plzFdForm['plzFdForm_fd'];
		$(filialDirection).value = plzMapping[fdIndex]["filialdirektion"] ;
	}
}



