// LightBox Actions
function showCaptchaImage() {
  captchaImage = document.getElementById('captcha');
  captchaImage.style.display = "block";
  captchaImage.src = '?q=account/getSecurityImage';
}
function hideCaptchaImage() {
  captchaImage = document.getElementById('captcha');
  captchaImage.style.display = "none";
}
var lightBoxOverlay = document.getElementById('lightbox-overlay');
var lightBoxContent = document.getElementById('lightbox-content');
function displayLightBox(content, overlay, currentElementId) {
  content.style.display = 'block';
  overlay.style.display = 'block';
  document.getElementById('errors-wrapper').style.display = 'none';
  document.getElementById(currentElementId).style.display = 'block';
}
function hideLightBox(content, overlay) {
  content.style.display = 'none';
  overlay.style.display = 'none';
  hideElements(content, 'fieldset');
  hideCaptchaImage();
}
document.getElementById('close-lightbox').onclick = function() {
  hideLightBox(lightBoxContent, lightBoxOverlay);
  return false;
}
document.getElementById('contact-link').onclick = function() {
  displayLightBox(lightBoxContent, lightBoxOverlay, 'contact');
  return false;
}
if(document.getElementById('new-account-button')) {
  document.getElementById('new-account-button').onclick = function() {
    showCaptchaImage();
    displayLightBox(lightBoxContent, lightBoxOverlay, 'register');
    return false;
  }
}
if(document.getElementById('sign-up')) {
  document.getElementById('sign-up').onclick = function() {
    showCaptchaImage();
    displayLightBox(lightBoxContent, lightBoxOverlay, 'register');
    return false;
  }
}
if(document.getElementById('buy')) {
  document.getElementById('buy').onclick = function() {
    showCaptchaImage();
    displayLightBox(lightBoxContent, lightBoxOverlay, 'register');
    return false;
  }
}
function hideElements(parentElement, elementType) {
  elements = parentElement.getElementsByTagName(elementType);
  for(var i = 0; i < elements.length; i++) {
    elements[i].style.display = 'none';
  }
}
document.getElementById('close-register-form').onclick = function() {
  hideLightBox(lightBoxContent, lightBoxOverlay);
  return false;
}
document.getElementById('close-contact-form').onclick = function() {
  hideLightBox(lightBoxContent, lightBoxOverlay);
  return false;
}

// Inner form labels // I feel like a hacker after writing this..
var inputFields = document.getElementsByTagName('input');
for(var i = 0; i < inputFields.length; i++) {
  if(inputFields[i].getAttribute('title') != null) {
    if(inputFields[i].name == 'accounts[parola]') {
      try { inputFields[i].type = 'text'; } catch(err) { };
    }
    if(inputFields[i].value == '') {
      inputFields[i].value = inputFields[i].getAttribute('title');
        inputFields[i].onclick = function() {
        if(this.name == 'accounts[parola]') {
          this.type = 'password';
        }
        if(this.value != this.getAttribute('title')) {
          return;
        }
        this.value = '';
      }
      inputFields[i].onblur = function() {
        if(this.value == '') {
          this.value = this.getAttribute('title');
          if(this.name == 'accounts[parola]') {
            try { this.type = 'text'; } catch(err) { };
          }
        }
      }
      //FIXME?
      inputFields[i].onfocus = function() {
        if(this.name == 'accounts[parola]') {
          this.type = 'password';
          this.focus();
          if(this.value == this.getAttribute('title')) {
            this.value = '';
          }
        }
      }
    }
  }
}

// Form validations
var formErrors = new Array();
function validateRegExp(pattern, inputId, message) {
  var input = document.getElementById(inputId);
  if(input.value.search(pattern) == -1) {
    formErrors.push(message);
    input.className += ' error';
  }
}
function verifyPasswords(firstInputId, secondInputId) {
  var password = document.getElementById(firstInputId);
  var verificationPassword = document.getElementById(secondInputId);
  if(password.value.length < 4) {
    formErrors.push('Parola trebuie să aibă minim 4 caractere');
    password.className += ' error';
  }
  else if(password.value != verificationPassword.value) {
    formErrors.push('Cele două parole nu sunt identice');
    password.className = ' error';
    verificationPassword.className += ' error';
  }
}

function verifyCaptchaCode(code, element) {
  if(code != 1) {
    element.className += ' error';
    formErrors.push('Codul antispam este invalid');
  }
}
function verifyCaptchaCodeAjaxRequest() {
  var element = document.getElementById('register-cod-input');
  var request = '?q=account/verifyCode&code=' + element.value;
  xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP")
  xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
      if(xhr.status  == 200 || xhr.status  == 304) {
        verifyCaptchaCode(xhr.responseText, element);
      }
    }
  }
  xhr.open("GET", request, true);		
  xhr.send(null);
}

function resetErrors(parentNode) {
  formErrors = new Array();
  var elements = parentNode.getElementsByTagName('input');
  for(var i = 0; i < elements.length; i++) {
    if(elements[i].type != 'submit') elements[i].className -= ' error';
  }
}

function displayErrors(errorWrapperId) {
  parentNode = document.getElementById(errorWrapperId);
  if(formErrors.length > 0) {
    parentNode.innerHTML = '';
    parentNode.style.display = 'block';
    var errorDescription = document.createElement('H4');
    errorDescription.innerHTML = 'Datele nu au putut fi trimise datorită uneia sau mai multe erori:';
    parentNode.appendChild(errorDescription);
    var errorFieldsContainer = document.createElement('UL');
    parentNode.appendChild(errorFieldsContainer);
    for(var i = 0; i < formErrors.length; i++) {
      var errorField = document.createElement('LI');
      errorField.innerHTML = formErrors[i];
      errorFieldsContainer.appendChild(errorField);
    }
  }
  else {
    parentNode.style.display = 'none';
  }
}

document.getElementById('register-form').onsubmit = function() {
  resetErrors(this);
  validateRegExp(/^[a-z]+$/i,'register-prenume-input', 'Prenumele trebuie să conţină numai caractere');
  validateRegExp(/^[a-z]+$/i,'register-nume-input', 'Numele trebuie să conţină numai caractere');
  validateRegExp(/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/,'register-email-input', 'Emailul este invalid');
  validateRegExp(/^[0-9]+$/,'register-telefon-input', 'Telefonul poate conţine numai cifre');
  verifyPasswords('register-parola-input','register-repeat-password-input');
  verifyCaptchaCodeAjaxRequest();
  displayErrors('errors-wrapper');
  if(formErrors.length > 0) {
    return false;
  }
}

document.getElementById('contact-form').onsubmit = function() {
  resetErrors(this);
  validateRegExp(/^[a-z]+$/i,'contact-nume-input', 'Numele trebuie să conţină numai caractere');
  validateRegExp(/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/,'contact-email-input', 'Emailul este invalid');
  displayErrors('errors-wrapper');
  if(formErrors.length > 0) {
    return false;
  }
}

