/**
  * Author: Cugreev Eugene <eugene.vvg@ya.ru>
  * Base Code : 
  * URL: http://www.vvsoftmedia.com/
  */


if ( typeof nm == 'undefined' ) var nm = new function() {};

var lng = {};


nm.langMerge = function(data) {
 for ( var k in data ) {
  lng[k] = data[k];
 }
}


nm.c = new function() {
  this.UI_JUST_SHOW       = 1;
  this.UI_UNAVILIBLE_MAIL = 2;
}


nm.globals = new function() {};

nm.globals.overlayModeFunc = function(c_mode) {
  switch ( c_mode ) {
    case nm.c.UI_JUST_SHOW :
        $('#overlay-main #o-email form.block h1.false').html(lng.overlay_addr_select_new);
      break;
    case nm.c.UI_UNAVILIBLE_MAIL :
        $('#overlay-main #o-email form.block h1.false').html(lng.overlay_addr_taken);
      break;
  }
}


nm.checker = new function() {};

// @var checkInProgress
nm.checker.checkInProgress = false;

// @var last selected email address
nm.checker.lastSelectedMail = '';

// @var Forms sincronization in action
nm.checker.sincFormsInAction = false;

// Load FancyBox
nm.checker.LoadFancyBox = function() {
 var fancyParams = {
  'width'         : '856px',
  'height'        : '75%',
  'autoScale'     : false,
  'transitionIn'  : 'none',
  'transitionOut' : 'none',
  'type'          : 'ajax'  };
 var fancyLink = document.createElement('a'); 
 fancyLink.setAttribute('href', '#null'); 
 fancyLink.setAttribute('id', 'fancyVirtual');
 fancyLink.setAttribute('class', 'fancyVirtual');
 fancyLink.innerHTML = '<!-- FANCY -->';
 document.getElementsByTagName('body')[0].appendChild(fancyLink);
 $('#fancyVirtual').fancybox(fancyParams);
}

// Load tld's list
nm.checker.LoadTldsList = function() {
  var o_tld  = $('#tld');
  var o_tldV = $('#tldV');
  for( k in TLDs ) {
   o_tld.append('<option value="' + k + '">' + k + '</option>');
   o_tldV.append('<option value="' + k + '">' + k + '</option>');
  }
}

/*
* 
*   InnerScrollCode :: http://your1000000.com/
*    by Ivo <Valiant Vision>
* 
*/
var scrollTimer = "";
var defaultContainerScrollStep = 1;
var defaultContainerScrollSpeed = 17;

nm.scrollContainer = function(id, step, speed) {
  if (step == undefined) step = defaultContainerScrollStep;
  if (speed == undefined) speed = defaultContainerScrollSpeed;
  clearTimeout(scrollTimer);
  document.getElementById(id).scrollTop += step;
  scrollTimer = setTimeout("nm.scrollContainer('"+id+"', "+step+")", speed);
}
// END OF InnerScrollCode


// 
nm.checker.clearTldsList = function() {
 $('#overlay-main .overlay #domainsList').get(0).innerHTML = '';
}

// When user click's checkEmail
nm.checker.checkEmailAvailability = function() {

 // Is InProgress?
 if ( nm.checker.checkInProgress ) {
  return alert( lng.check_in_progress);
 }

 // Close dialog
 closeOverlay('o-email');
 nm.checker.clearTldsList();
 
 // Select account, domain, tld
 var account = $('#account').get(0).value;
 var domain  = $('#domain').get(0).value;
 var tld     = $('#tld').get(0);
     tld     = tld.options[ tld.selectedIndex].value;
 
 // Check AccountName ,, Domain name
 if ( account == '' ) {
  alert( lng.error_input_account ); // Please input desired e-mail address account name
  $('#account').focus();
  return;
 }

 if ( domain == '' ) {
  alert( lng.error_input_domain ); // Please input desired e-mail address domain name
  $('#domain').focus();
  return;
 }

 if ( ! domain.match(/^[a-z0-9_\-]+$/i)) {
  alert( lng.error_invalid_domain ); // You have entered invalid e-mail address domain part. Please verify it and try again.
  $('#domain').focus();
  return;
 }

 // Request data from server
 nm.checker.checkInProgress  = true;
 nm.checker.lastSelectedMail = account + '@' + domain + '.' + tld;

 var ajaxParams = {
   'url'   : '/checkEmail.php',  
   'data'  : { 'email' : account + '@' + domain + '.' + tld },
   'type'  : 'GET',
   'cache' : false,
   'success': nm.checker.checkFirstSucess,
   'error'  : nm.checker.checkFirstError
  };
 $.ajax(ajaxParams);
}

// First ajax request success
nm.checker.checkFirstSucess = function(data) {
 nm.checker.checkInProgress = false;

 // is mail avilible?
 if( data == 'avail' ) {
  nm.checker.navigateToRegister( nm.checker.lastSelectedMail );
 }

 else if ( data == 'invalid_addr' ) {
   var acc = $('#account').get(0);
   acc.focus();
   alert(lng.error_input_valid_account);
 }

 // is not avilible?
 else if ( data == 'n/a' ) {
  openOverlay('o-email', nm.c.UI_UNAVILIBLE_MAIL);

  var acc = $('#account').get(0);
  var dom = $('#domain').get(0);
  var tldx = $('#tld').get(0);
  
  showHints('domainsList', acc.value, dom.value, tldx.options[ tldx.selectedIndex].value);
 }
 // somthing wrong! O_o
 else {
  alert( lng.error_check_failed ); // We were unable to detect if this e-mail .....
 }
}

// First ajax request error
nm.checker.checkFirstError = function() {
 nm.checker.checkInProgress = false;
 alert( lng.error_check_failed ); // We are sorry, but we were unable to process your request .....
}

// Register email address
nm.checker.navigateToRegister = function(email) {
 self.location.href = '/register/' + encodeURIComponent( email );
}

nm.checker.sincForms = function(by) {
 if ( nm.checker.sincFormsInAction ) return;
 nm.checker.sincFormsInAction = true;

 if ( typeof by == 'undefined' ) return;
 switch ( by.id ) {
  case 'account' : $('#accountV').get(0).value = by.value; break;
  case 'domain'  : $('#domainV').get(0).value = by.value; break;
  case 'accountV' : $('#account').get(0).value = by.value; break;
  case 'domainV'  : $('#domain').get(0).value = by.value; break;
  case 'tld'      : $('#tldV').get(0).selectedIndex = by.selectedIndex; break;
  case 'tldV'     : $('#tld').get(0).selectedIndex = by.selectedIndex; break;
 }
 nm.checker.sincFormsInAction = false;
}



// load hints for specified account and domain
function showHints( objId, account, domain, tld) {
  if( typeof( TLDs) =='undefined') {
    alert( lng.error_tlds_not_defined /*'No TLDs are defined, unable to show hints'*/ );
    return;
  }
  // insert html
  obj =document.getElementById( objId);
  
  // initialize hint loader
  if( hintLoaderObject.isActive())
    hintLoaderObject.stop();
  
  obj.innerHTML =
    '<div id="hint-list"></div>' +
    '<div id="hint-loading-indicator"><img src="i/preloader.gif" alt="" title="" width="14px" height="14px" class="v-middle" /> ' +lng.loading_please_wait /* Loading, please wait... */ +'</div>';
    
  hintLoaderObject.loadHints( account, domain, tld);
  
}

// hint loader
function HintLoader() {
  this.account  = null;
  this.domain   = null;
  this.tld      = null;
  this.timer    = null;
  this.number   = 1;
  this.emails   = new Array();
}
// start loading hints
HintLoader.prototype.loadHints =function( account, domain, tld) {
  this.account  = account;
  this.domain   = domain;
  this.tld      = null;
  this.number   = 1;
  // prepare list of e-mail addresses to be checked
  this.emails = new Array();
  // "reverse" hint
  this.emails.push({
    'email' : domain +'@' +account +'.' +tld,
    'tld' : tld
  });
  // "split" hint
  this.emails.push({
    'email' : 'email@' +account +domain +'.' +tld,
    'tld' : tld
  });
  // "split" hint
  this.emails.push({
    'email' : 'email@' +account +'-' +domain +'.' +tld,
    'tld' : tld
  });
  for( k in TLDs)
    this.emails.push({
      'email' : account + '@' +domain +'.' +k,
      'tld' : k
    });
  var obj = this;
  this.timer = setTimeout( function(){obj.process();}, 1);
}
// see if hint loader is active
HintLoader.prototype.isActive = function() {
  return this.timer !== null;
}
// stop loading hints
HintLoader.prototype.stop = function() {
  if ( this.timer !== null ) {
    clearTimeout( this.timer );
    this.timer = null;
  }
}

// process
HintLoader.prototype.process = function() {
  if ( ! this.isActive())
    return;

  // get next element from array
  if ( this.emails.length == 0 ) {
    // no elements available
    this.timer = null;
    $('#hint-loading-indicator').html('');
    return;
  }

  var email = this.emails.shift();

  // reference current object
  var obj = this;

  // check domain availability
  $.ajax({
    'url': '/checkEmail.php',
    'data': {
      'email': email.email
    },
    'type': 'GET',
    'cache': false,
    
    'success': function( data){
      
      // redirect to registration
      if( data =='avail') {
        // e-mail available for registration
        var htmlObj =document.getElementById( 'hint-list');
        htmlObj.innerHTML +=
          '<table class="fixed width90perc">' +
            '<col width="37px" />' +
            '<col />' +
            '<col width="90px" />' +
          '<tr>' +
            '<td>' +(obj.number++) +'.</td>' +
            '<td><a href="#' + email.email + '" onclick="nm.checker.navigateToRegister(\'' +email.email +'\');">' +email.email +'</a></td>' +
            '<td align="right"><span class="price">' +TLDs[ email.tld].price +'$</span></td>' +
          '</tr>'
          '</table>';
      
//        $("#domainsList").animate({
//                scrollTop: $("#domainsList").attr("scrollHeight") - $('#domainsList .domainsList').height() }, 5000
//        );

      }

      // continue seeking for hints
      obj.timer =setTimeout( function(){obj.process();}, 1);
      
    },
    'error': function(){
      // continue seeking for hints
      obj.timer =setTimeout( function(){obj.process();}, 1);
      
    }
  });
}

// hint loader object instance
var hintLoaderObject =new HintLoader();

// document.Ready handler
$(document).ready(function() {
 try {
  //nm.checker.LoadFancyBox();
  nm.checker.LoadTldsList();
  nm.checker.SyncFormsLoader();
 }
 catch ( E ) {}
});
