﻿var frmvalidator;

$(document).ready(function() {
  frmvalidator = new Validator("form1");

  //frmvalidator.EnableOnPageErrorDisplaySingleBox();
  frmvalidator.EnableMsgsTogether();

  if (typeof (loadValidators) == "function")
    loadValidators();

  if ((typeof (addressValidationEnabled) != "undefined") && addressValidationEnabled == true) {
    composeAutoCompleteAddress();
  }
});

function KeppAlive() {
  if (typeof (HSII) != "undefined")    
    HSII.KeepAlive.KeepAlive();
}
setInterval(KeppAlive, 1000 * 60 * 5);

function composeAutoCompleteAddress() {
  var inputs = document.getElementsByTagName("input");

  var postalCodeTextBox;
  var cityTextBox;
  var streetTextBox;

  // check if textboxes involved exists
  for (var i = 0; i < inputs.length; ++i) {
    if (inputs[i].type == "text") {
      if (inputs[i].getAttribute("contactField")) {
        var contactField = inputs[i].getAttribute("contactField").split("_")[0];

        if (contactField == "Address1")
          streetTextBox = inputs[i];
        if (contactField == "PostalCode")
          postalCodeTextBox = inputs[i];
        if (contactField == "City")
          cityTextBox = inputs[i];
      }
    }
  }


  if (postalCodeTextBox && cityTextBox) {
    //create and hide cities dropdown
    var citiesDropdown = document.createElement("SELECT");
    citiesDropdown.setAttribute("overwrite", cityTextBox.getAttribute("overwrite"));
    citiesDropdown.setAttribute("required", cityTextBox.getAttribute("required"));
    citiesDropdown.setAttribute("webpageid", cityTextBox.getAttribute("webpageid"));
    citiesDropdown.style.width = cityTextBox.style.width;
    citiesDropdown.id = "cityDropDown";

    citiesDropdown.style.display = "none";

    //cityTextBox.parentNode.insertBefore(citiesDropdown, cityTextBox);
    $(cityTextBox).before(citiesDropdown);
    
    postalCodeTextBox.setAttribute("maxLength", 7);

    // add onchange event on textbox postal code
    $(postalCodeTextBox).bind("change", autoCompleteCities);

    if (typeof (streetTextBox) != "undefined") {
      // add onchange event on dropdown cities (for streets)
      $(citiesDropdown).bind("change", populateStreets);

      streetTextBox.id = "streetTextBox";

      // create and hide streets dropdown
      var streetsDropdown = document.createElement("SELECT");
      streetsDropdown.setAttribute("overwrite", streetTextBox.getAttribute("overwrite"));
      streetsDropdown.setAttribute("required", streetTextBox.getAttribute("required"));
      streetsDropdown.setAttribute("webpageid", streetTextBox.getAttribute("webpageid"));
      streetsDropdown.style.width = streetTextBox.style.width;
      streetsDropdown.style.display = "none";
      streetsDropdown.id = "streetsDropdown";

      $(streetsDropdown).bind("change", updateStreetTextBox);

      //streetTextBox.parentNode.insertBefore(streetsDropdown, streetTextBox);
      $(streetTextBox).before(streetsDropdown);
    }
  }
}

function updateStreetTextBox() {
  document.getElementById("streetTextBox").value = this[this.selectedIndex].text;
}

function autoCompleteCities() {
  if (this.value.length > 0) {
    var parsedValue = parseInt(this.value);

    if (!isNaN(parsedValue))
      HSII.AddressValidationService.GetCitiesByPostalCode(parsedValue, autoCompleteCitesCallback);
  } else {
    var myDropDown = document.getElementById("cityDropDown");
    myDropDown.style.display = "none";
    var myCityTextbox = getNextSibling(myDropDown);
    myCityTextbox.style.display = "inline";
  }
}

function autoCompleteCitesCallback(e, args) {
  var myDropDown = document.getElementById("cityDropDown");

  if (e.length > 0) {
    // show cities dropdown
    myDropDown.style.display = "inline";
    var myTextBox = getNextSibling(myDropDown);
    myTextBox.style.display = "none";

    // populate cities dropdown   
    // see maybe if not mandatory, add  emtpy item

    clearlistbox(myDropDown);
    for (var i = 0; i < e.length; ++i) {
      addOption(myDropDown, e[i].cityName, e[i].cityId);
    }

    myTextBox.value = myDropDown[0].text;

    //populate streets dropdown
    var streetTextbox = document.getElementById("streetTextBox");
    if (streetTextbox) {
      populateStreets();
    }
  } else { // if there are no cities
    //alert("Postal code seems to be invalid!");

    //hide cities dropdown and show textbox
    myDropDown.style.display = "none";
    var myTextBox = getNextSibling(myDropDown);
    myTextBox.style.display = "inline";
    if (myDropDown.selectedIndex >= 0) {
      myTextBox.value = myDropDown[myDropDown.selectedIndex].text;
    }

    // hide streets dropdown and show textbox

    var streetsTextBox = document.getElementById("streetTextBox");
    var streetsDropDown = document.getElementById("streetsDropdown");

    if (streetsTextBox) {
      if (typeof (streetsTextBox) != "undefined") {
        streetsTextBox.style.display = "inline";
        streetsDropDown.style.display = "none";

        if (streetsDropDown.selectedIndex >= 0) {
          streetsTextBox.value = streetsDropDown[streetsDropDown.selectedIndex].text;
        }
      }
    }
  }
}

function populateStreets() {
  // get current city id
  var myDropDown = document.getElementById("cityDropDown");
  var cityid = myDropDown[myDropDown.selectedIndex].value;
  HSII.AddressValidationService.GetStreetsByCityID(cityid, autoCompleteStreetsCallback);
}

function autoCompleteStreetsCallback(e, args) {
  var streetsTextBox = document.getElementById("streetTextBox");
  var streetsDropDown = document.getElementById("streetsDropdown");

  if (e.length > 0) {
    streetsTextBox.style.display = "none";
    streetsDropDown.style.display = "inline";

    // populate streets dropdown
    clearlistbox(streetsDropDown);
    for (var i = 0; i < e.length; ++i) {
      addOption(streetsDropDown, e[i].streetName, e[i].streetID);
    }
    document.getElementById("streetTextBox").value = streetsDropDown[0].text;

    // save value to city textbox
    var cityDropdown = document.getElementById("cityDropDown");
    var cityTextbox = getNextSibling(cityDropdown);
    cityTextbox.value = cityDropdown[cityDropdown.selectedIndex].text;
  }
  else {
    streetsTextBox.style.display = "inline";
    streetsDropDown.style.display = "none";
  }
}

function putOnlyInteger(strElm) {
  var elm = $(document.getElementsByName(strElm)[0]);

  elm.bind("keypress", function(e) {
    OnlyInteger(e.originalEvent);
  });
}

function putOnlyDate(strElm) {
  var elm = $(document.getElementsByName(strElm)[0]);

  elm.bind("keypress", function(e) {
    AddSlash(e.originalEvent);
  });

  elm.bind("blur", function(e) {
    DateFormat(e.originalEvent);
  });

  elm.maxLength = 10;
}

function getNextSibling(startBrother) {
  endBrother = startBrother.nextSibling;
  while (endBrother.nodeType != 1) {
    endBrother = endBrother.nextSibling;
  }
  return endBrother;
}

function addOption(oListbox, sName, sValue) {
  oListbox.options[oListbox.options.length] = new Option(sName, sValue);
}

function clearlistbox(lb) {
  for (var i = lb.options.length - 1; i >= 0; i--) {
    lb.options[i] = null;
  }
  lb.selectedIndex = -1;
}

function loadInboxValue(itemName, itemValue) {
  if (document.getElementsByName(itemName).length > 0) {
    for (var k = 0; k < document.getElementsByName(itemName).length; ++k) {
      var el = document.getElementsByName(itemName)[k];
      switch (el.tagName) {
        case "SELECT":
          for (var i = 0; i < el.length; ++i) {
            if (el[i].value == itemValue) { el[i].checked = true; }
            break;
          }
        case "INPUT":
          if (el.type == "checkbox") {
            if ("True" == itemValue) {
              el.checked = true; break;
            }
            else {
              el.checked = false; break;
            }
          }
          else { el.value = itemValue; }
          break;
        default:
          el.value = itemValue;
          break;
      }
    }
  }
  putCaptchaOnPage();
}

function putCaptchaOnPage() {
  var inputs = $("input:submit");
  if (inputs.length > 0) {
    var spanRedBorder = $(".WebControlsBox");
    var imgCaptchas = $(".divCC1");
    if (imgCaptchas.length > 0) var imgCaptcha = imgCaptchas[0];
    if (imgCaptcha) {
      var oldLocation = $(".captchaClass");

      if (oldLocation.length > 0) {
        //spanRedBorder[0].insertBefore(imgCaptcha, oldLocation[0]);
        $(oldLocation[0]).before(imgCaptcha);
      } else {
      //spanRedBorder[0].insertBefore(imgCaptcha, inputs[0]);
      $(inputs[0]).before(imgCaptcha);
      }
      imgCaptcha.setAttribute("class", "divCaptcha");
      imgCaptcha.style.width = "200px";
      $("input", imgCaptcha)[0].style.width = "175px";
    }
  }
}
