var PageForm = Class.create({
  initialize: function(formId, messagesContainerId) {
    if (!messagesContainerId) {
      alert("missing messages container ID");
    }
    this.messagesContainerId = messagesContainerId;
    this.formId = formId;
    this.messages = [];
    this.messageTemplate = new Template('<p class="#{className}">#{message}</p>');
  },
  addMessage: function(message) {
    this.messages[this.messages.size()] = message;
  },
  addErrorMessage: function(error) {
    this.addMessage({className: 'error', text: error});
  },
  addInfoMessage: function(info) {
    this.addMessage({className: 'info', text: info});
  },
  addSuccessMessage: function(success) {
    this.addMessage({className: 'success', text: success});
  },
  hasMessages: function() {
    return this.messages.size() > 0;
  },
  hasErrors: function() {
    var hasErrorMessages = false;
    this.messages.each(function(message) {
      if (message.className.strip() == 'error') {
        hasErrorMessages = true;
        return;
      }
    });
    return hasErrorMessages;
  },
  clearMessages: function() {
    this.messages.clear();
    $(this.messagesContainerId).update();
  },
  showErrors: function() {
    if (!$(this.messagesContainerId)) {
      throw "Missing message container ID";
    }
    this.messages.each(this.showErrorMessage.bind(this));
  },
  showMessages: function() {
    this.messages.each(this.showMessage.bind(this));
    this.scrollToMessages();
    this.messages.clear();
  },
  showMessage: function(message) {
    $(this.messagesContainerId).insert(new Element('p', {className: message.className}).update(message.text));
  },
  showErrorMessage: function(message) {
    if (message.className.strip() == 'error') {
      this.showMessage(message);
    }
  },
  showIndicator: function() {
    $(this.messagesContainerId).update().addClassName('indicator');
  },
  hideIndicator: function() {
    $(this.messagesContainerId).removeClassName('indicator');
  },
  scrollToMessages: function() {
    var viewPort = $(this.messagesContainerId).viewportOffset();
    if (viewPort.top < 10) {
      $(this.messagesContainerId).scrollTo();
    }
  },
  askPassword: function(itemId) {
    var passwordField   = new Element('input', {type: 'password', size: 4, name: 'userPassword', id: 'confirmationUserPassword'});
    var agreeButton     = new Element('input', {type: 'button', value: 'JAH', id: 'agreeButton', className: 'button'});
    var disagreeButton  = new Element('input', {type: 'button', value: 'EI', id: 'disagreeButton', className: 'button'});
    
    var node = new Element('div', {className: 'warning', style: 'display: none;'})
      .update(new Element('div').update('Kas oled kindel?'))
      .insert(new Element('div', {style: 'line-height: 250%;'}).update('Salas&otilde;na: ').insert(passwordField))
      .insert(new Element('div', {style: 'text-align: center; line-height: 250%;'}).insert(agreeButton).insert(new Element('span').update('&nbsp;')).insert(disagreeButton));

    Modalbox.show(node, {title: 'L&auml;&auml;tse kustutamine..', width: 300, afterLoad: this.setDeletionObservers.bind(this, itemId), onHide: this.removeLensesDeletionObservers.bind(this)});
  },
  setDeletionObservers: function(itemId) {
    var hideObserver = Modalbox.hide.bindAsEventListener(Modalbox);
    $('agreeButton').observe('click', this.doRemove.bind(this, itemId));
    $('disagreeButton').observe('click', hideObserver);
  },
  removeLensesDeletionObservers: function() {
    var hideObserver = Modalbox.hide.bindAsEventListener(Modalbox);
    $('agreeButton').stopObserving('click', hideObserver);
    $('disagreeButton').stopObserving('click', hideObserver);
  },
  doRemove: function() {

  },
  getDateOfToday: function() {
    var today = new Date();
    var day = today.getDate();
    var month = today.getMonth() + 1;
    return (day < 10 ? '0' + day : day) + "." + (month < 10 ? '0' + month : month) + "." + (today.getFullYear());
  },
  formatAmount: function(sum) {
    if (!sum || sum == '') {
      return new Number(0).toFixed(2);
    }
    sum = parseFloat(sum);
    return new Number(sum).toFixed(2);
  },
  isValidEmail: function(email) {
    var pattern = new RegExp(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/);
    return pattern.test(email);
  }
});