﻿/*
These variables must be defined and set (to the correct fields) in the aspx site!

EXAMPLE definition (taken from MOT - Input3)
		var postalCodeID         = $("#Data_Area_PostalCodeID");
		var postalCodeName       = $("#PostalCodeName");
		var postalCodeNameHidden = $("#Data_Area_Name");
		var postalCodeNoCityNameSelectedHidden = $("#Data_NoCityNameSelected");
		var postalDropdownDiv    = $("#postalDropdownDiv");
		var IsPLZEditable        = true;
		// Note: "IsPLZEditable" hardcoded to "true" because it should be editable by default.

EXAMPLE definition (taken from ZZV - Action)
		var postalCodeID         = $("#PersonData_PersonalDataView_Area_PostalCodeID");
		var postalCodeName       = $("#PostalCodeName");
		var postalCodeNameHidden = $("#PersonData_PersonalDataView_Area_Name");
		var postalCodeNoCityNameSelectedHidden = $("#PersonData_PersonalDataView_NoCityNameSelected");
		var postalDropdownDiv    = $("#postalDropdownDiv");
		var IsPLZEditable        = ('<%:Model.Data.PersonalDataView.isPLZEditable%>' === 'True');
*/

var isFirstCallAtStartUp = true;

function GetPostalCode(sender, postbackOption, URL, errorJumpBackURL) {
	function ShowMiniLoading() {
		postalCodeName.html("");
		postalCodeID.val("");
		postalDropdownDiv.hide();
		$("#loadingDiv").show();
	}

	function HideMiniLoading() {
		$("#loadingDiv").hide();
	}

	onlyNumbers(sender);        // removing non numeric characters

	var codeVal = $(sender).val();
	if ((codeVal == "") || (typeof (codeVal) == "undefined")) {
		postalCodeName.html("");
		postalCodeNameHidden.val(postalCodeName.html());
		postalCodeID.val("");
		postalDropdownDiv.fadeOut();
		isFirstCallAtStartUp = false;       // Important to set it
    } else {
        URL = handlePostalCodeURL(URL);

        //if ((errorJumpBackURL == null) || (errorJumpBackURL == "") || (typeof (errorJumpBackURL) == "undefined")) {
        //    URL = "check24/HR/Input1"; // This should be the input1 URL for the executing product" e.g. "HR/Input1" and SHOULD NEVER be empty or undefined - this line is onla a safety net!
        //}

        var PLZErrorHtml = $('#Data_DropDownList_Ort_validationMessage').html()

        if (    (isFirstCallAtStartUp)
                && 
                (   (PLZErrorHtml == null) 
                    || 
                    (PLZErrorHtml == '')
                 )
           ) {
            isFirstCallAtStartUp = false;
            FillLeadZeros(sender);   // Leading zeros only when the site is first time called to change for example "9648" to "09648"
        }
        var lenOk = isPostalCodeLengthOk(sender);
        if (lenOk) {
            ShowMiniLoading();
            $.ajax({
                type: "POST",
                url: URL, // CheckPostalCode of product controller
                data: { code: codeVal },
                success: function (result) {
                    ProcessPostalCodeResult(result, postbackOption);
                    HideMiniLoading();

                    if (typeof postalCodeChangedOnActionSite == 'function')
                        postalCodeChangedOnActionSite(result.length);    // getting street list in case of shown street dropdownbox
                },
                error: function (e, xhr, settings, exception) {
                    HideMiniLoading();
                    window.location = errorJumpBackURL;
                },
                dataType: "json"
            });
        }
	}
}

function handlePostalCodeURL(URL) {
    if ((URL == "") || (typeof (URL) == "undefined")) {
        // This is the standard URL for all products with the PLZ in any page OTHER than Input1. 
        // For PLZ in the Input1 page the URL parameter must be "[Product]/CheckPostalCode" e.g. "HR/CheckPostalCode"
        URL = "CheckPostalCode";
    }
    else {
        URL = computeAbsoluteAjaxURL("CheckPostalCode");    // see GeneralScript.js
    }

    return URL;
}

function FillLeadZeros(sender) {
	var postalCodeTextBox = $(sender); 
	var content = postalCodeTextBox.val();
	while (content.length < 5) {
		content = "0" + content;
	}
	postalCodeTextBox.val(content);
}

function isPostalCodeLengthOk(sender) {
    var postalCodeTextBox = $(sender);
    var PLZValue = postalCodeTextBox.val();
//    if (PLZValue.length == 4) {
//        postalCodeTextBox.val('0' + PLZValue);
//        return true;
//    } else
     if (PLZValue.length < 5) {
        postalCodeName.html("Bitte geben Sie eine fünfstellige PLZ an.");
        postalCodeID.val("");
        postalCodeNameHidden.val("");
        postalDropdownDiv.fadeOut();
        return false;
    }
    else
        return true;
}

function ProcessPostalCodeResult(result, postbackOption) {
	switch (result.length) {
		case 0:
			{
				postalCodeName.html("Zu dieser PLZ wurde kein Ort gefunden.");
				postalCodeID.val("");
				postalCodeNameHidden.val("");
				postalDropdownDiv.fadeOut();
				break;
			}
		case 1:
			{
				postalCodeName.html(result[0].deNAME);
				postalCodeID.val(result[0].ID);
				postalCodeNameHidden.val(result[0].deNAME);
				postalDropdownDiv.fadeOut();
				break;
			}
		default:
			{
				postalCodeName.html("");
				postalCodeID.val("");
				postalCodeNameHidden.val("");

				var errorClass = "";
				if (postalCodeNoCityNameSelectedHidden.val().toUpperCase() == "TRUE")
					errorClass = "class=\"input-validation-error\" ";   // Note the last space

				var options = "<select " + errorClass + "style=\"margin-left: 0px; margin-top: 0.4em;\" id=\"DropDownList_Ort\">"       // old "margin-left" value was "14px"
							  + "<option value=\"-1\">Bitte wählen ...</option>";
				for (var i = 0; i < result.length; i++) {
					options += "<option value=\"" + result[i].ID + "\""
					+ (postbackOption != null && postbackOption == result[i].ID ? " selected=\"selected\"" : "")
					+ ">" + result[i].deNAME + "</option>";
				}
				options += "</select>";

				postalDropdownDiv.html(options)

				if (IsPLZEditable) {
					$("#DropDownList_Ort").unbind().bind("change", function () {
						var selOption = $(this).find("option:selected");
						var value = selOption.attr("value");
						if (value != "-1") {
							postalCodeName.html(selOption.html());
							postalCodeID.val(value);
							postalCodeNameHidden.val(selOption.html());
							
							// Clear error text
							$("#PersonData_PersonalDataView_DropDownList_Ort_validationMessage").html("");  // Action
							$("#Data_InsuredPerson_DropDownList_Ort_validationMessage").html("");           // RLV-Closing1, ZZV-Offer2
							$("#Data_DropDownList_Ort_validationMessage").html("");                         // MOT-Input3
							if (typeof fieldList != "undefined")
								clearSummary(fieldList);

							$("#DropDownList_Ort").removeClass("input-validation-error");
							try {
								clearActionSummary();   // this method is only in the Action.aspx view.
							}
							catch (err) {
								// temp: to avoid a dummy clearActionSummary() 
							}

							if (typeof postalCodeChangedOnActionSite == 'function')
							    postalCodeChangedOnActionSite(1);    // Getting street list in case of shown street dropdownbox
						} else {
							postalCodeName.html("");
							postalCodeID.val("");
							postalCodeNameHidden.val("");
						}
					});
				} else {
					$("#Panel_AreaCode input, #Panel_AreaCode select").attr("disabled", "disabled").attr("readonly", "readonly");
				}

				postalDropdownDiv.fadeIn();

				if (postbackOption) {
					postalCodeID.val(postbackOption);
					var selOption = $("#DropDownList_Ort").find("option:selected");
					postalCodeName.html(selOption.html());
					postalCodeNameHidden.val(selOption.html());
	            }
				break;
			}
	}
}

