function wsGlobalApplication() {
  this_proxy = this;

  /* private */
  function __construct()
  {
    initOverLabels();

    initNyroModalForMessages();

    initNyroModalForPopups();
  }

  function initNyroModalForPopups()
  {
    jQuery.nyroModalSettings({
      processHandler: function(settings) {
        var params = this.from.className;
        var width, height = null;

        var rew = new RegExp("width-[0-9]*", "i");
        var w = rew.exec(params);
        var reh = new RegExp("height-[0-9]*", "i");
        var h = reh.exec(params);

        if(w[0] && h[0])
        {
          var width = w[0].replace('width-', '');
          var height = h[0].replace('height-', '');

          if (width && height) {
            $.nyroModalSettings({
              width: width,
              height: height,
              minWidth: 200,
              minHeight: 20
            });
          }
        }
      }
    });
    jQuery('a.nyroModal').nyroModal();
  }

  function initNyroModalForMessages()
  {
    if( jQuery('.nz_messages, .nz_errors').get(0) )
    {
      jQuery('.nz_messages, .nz_errors').hide();

      jQuery.nyroModalManual({
        minWidth: 300,
        minHeight: 18,
        content: jQuery('.nz_messages, .nz_errors').html()
      });
    }
  }

  function initOverLabels()
  {
    var labels, id, field;

    labels = document.getElementsByTagName('label');
    for (var i = 0; i < labels.length; i++) {
      if (labels[i].className == 'overlabel') {

        id = labels[i].htmlFor || labels[i].getAttribute('for');
        if (!id || !(field = document.getElementById(id))) {
          continue;
        }

        labels[i].className = 'overlabel-apply';

        if (field.value !== '') {
          hideLabel(field.getAttribute('id'), true);
        }

        field.onfocus = function () {
          hideLabel(this.getAttribute('id'), true);
        };
        field.onblur = function () {
          if (this.value === '') {
            hideLabel(this.getAttribute('id'), false);
          }
        };

        labels[i].onclick = function () {
          var id, field;
          id = this.getAttribute('for');
          if (id && (field = document.getElementById(id))) {
            field.focus();
          }
        };
      }
    }
  }
  function hideLabel(field_id, hide)
  {
    var field_for;
    var labels = document.getElementsByTagName('label');
    for (var i = 0; i < labels.length; i++) {
      field_for = labels[i].htmlFor || labels[i].getAttribute('for');
      if (field_for == field_id) {
        labels[i].style.textIndent = (hide) ? '-1000px' : '0px';
        return true;
      }
    }
  }

  /* */
  __construct();
};

function initApp()
{
  var app = new wsGlobalApplication();
}

