(function($) {
  var curDomainRequest = null;
  var domainCache = new Array();
  function onDomainCheckReceived(data)
  {
    curDomainRequest = null;
    domainCache[data.name] = data;
    showDomainResult(data);
  }

  function showDomainResult(data)
  {
    var tick = "<img src='/register/images/ok_icon.jpg' alt='Domain is available' title='Domain is available' />";
    var tick_help = " <img src='/register/images/help.png' alt='Help' title='This domain is FREE and you can preregister it' />";
    var no = "<img src='/register/images/no_icon.jpg' alt='Domain is not available' title='Domain is not available - Premium Domain' />";
    var no_help = " <img src='/register/images/help.png' alt='Help' title='This is PREMIUM domain' />";
    var warn = "<img src='/register/images/warn_icon.png' alt='Domain is not available' title='Domain is not available - Trademark' />";
    var warn_help = " <img src='/register/images/help.png' alt='Help' title='This domain cannot be pre-registered. It is a Trademark.' />";
    var ok = true;
    switch(data.result)
    {
      case 0: // free
        $('#regcheckbutton').removeAttr("disabled");
        $('#message').removeClass("red").addClass("green").empty().html(tick);
        $('#message').append(" Domain name: "+data.name+" AVAILABLE" + tick_help);
        break;
      case 1: // premium
        $('#regcheckbutton').attr("disabled", true);
        $('#message').removeClass("green").addClass("red").html(no);
        $('#message').append(" Domain name: "+data.name+" NOT AVAILABLE" + no_help);
        break;
      case 3: // used
        $('#regcheckbutton').attr("disabled", true);
        $('#message').removeClass("green").addClass("red").empty().html(warn);
        $('#message').append(" Domain name: "+data.name+" NOT AVAILABLE" + warn_help);
        break;
      default:
        break;
    }
  }

  var sLastDomain = '';
  function checkDomain()
  {
    if (curDomainRequest)
    {
      try{curDomainRequest.abort();}catch(e){};
    }
    curDomainRequest = null;
    var sDomain = $('#domainbox').val();
    if (sLastDomain == sDomain)
      return;
    try
    {
      if ('undefined' != domainCache[sDomain])
      {
        showDomainResult(domainCache[sDomain]);
        return;
      }
    }catch(e){};
    sLastDomain = sDomain;
    if (!sDomain.length)
    {
      return;
    }
    curDomainRequest = $.post("/register/checkname.php", {name:sDomain}, function(data)
    {
      onDomainCheckReceived(data);
    }, 'json');
  }

  function getCaretPos(element)
  {
  	var pos = -1;
  				
  	if (document.selection)
  	{
  		element.focus ();
  		var oSel = document.selection.createRange ();
  		oSel.moveStart ('character', -element.value.length);
  		pos = oSel.text.length;
  	}
  	else if (element.selectionStart || element.selectionStart == "0")
  	{
  		pos = element.selectionStart;
  	}
  	return pos;
  }

  function checkChar(e,pos)
  {
    if (0 == e.which)
      return 1; // special char
    var c = ('undefined' != typeof e.charCode) ? e.charCode : e.keyCode;
    if ( (c < 32) )
      return 1; // control char
    if ( (c > 64) && (c < 91) )
      c += 32;
    if (0 == pos)
    {
      if ( (c > 96) && (c < 123) )
        return 2; // first pos: only chars allowed
    }
    else
    {
      if ( ((c > 96) && (c < 123)) || ((c > 47) && (c < 58)) || (c == 45) )
        return 2; // chars, numbers and hyphen allowed
    }
    return -1;
  }


    $(document).ready(function() {
        //set focus to the domain box field
        $('#domainbox').focus();

        //test if the js is enabled, if there is no js enable - div with message will appear
        $('#no_js').hide();

        if ($.browser.msie)
        {
          $('#domainbox').keydown(function(e)
          {
            if ( (e.keyCode < 32) || (0 == e.which))
              window.setTimeout(checkDomain, 0);
          });
        }
        $('#domainbox').keypress(function(e)
        {
          var ret = checkChar(e,getCaretPos($(this)[0]));
          if (ret > 0)
          {
            var that = $(this);
            window.setTimeout(function()
            {
              var s = that.val();
              var t = s.replace(/[^a-zA-Z0-9-]/g,'');
              if (t != s)
                that.val(t);
              window.setTimeout(checkDomain, 0);
            }, 0);
            return true;
          }
          return false;
        });


    });
})(jQuery);
