function Comments() {
}

Comments.isOK = new Object();
Comments.isOK.code = false;
Comments.verification_code_size = 6;
Comments.check_needed = 1;
if(typeof check_needed !== 'undefined') {
   Comments.check_needed = check_needed;
}
Comments.val_pic_shown = 0;
Comments.last_code = '';

//if comment text doesn't contain links submits form, otherwise shows picture with code
//token - form input id of textarea containing comment text
Comments.validateForm = function Comments_validateForm(token) {
   if(Comments.checkLinkPresence(token) && Comments.check_needed == 1 && Comments.isOK.code == false) {
      if(Comments.val_pic_shown == 0) {
         Comments.setupValidation();
      }
   } else {
      document.fs.submit();
   }
}

//checks if element contains 'http://' in its text
Comments.checkLinkPresence = function Comments_checkLinkPresence(token) {
   var text = Core.getText(token);
   var http_ind = text.indexOf('http://');
   var www_ind = text.indexOf('www.');
   if(http_ind > -1 || www_ind > -1) {
      return true;
   } else {
      return false;
   }
}

//generates random 32 byte string
Comments.gen32byte_str = function Comments_gen32byte_str() {
   var str32 = '';
   var str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
   var chars = str.split("");
   for(var i = 0; i < 32; i = i + 1) {
      str32 = str32 + chars[Math.floor(Math.random()*chars.length)];
   }
   return str32;
}

//shows validation picture and sets hidden check_hash value
Comments.setupValidation = function Comments_setupValidation() {
   Core.showElement('verification_block');
   var str32 = Comments.gen32byte_str();
   var check_pic = Core.getElementU('check_pic');
   check_pic.src = 'http://signup.' + Core.getDomainPrefix() + 'fotki.com' + Core.getPort() + '/image?code=' + str32;
   var check_hash = Core.getElementU('code_hash');
   check_hash.value = str32;
   Comments.isOK.code = false;
   Core.setText('code', '');
	Core.setClassName('code',' ');
	//Core.setText('code_ok', '');
	Core.hideElement('code_ok');
   Core.setText('code_error', '');
   Comments.val_pic_shown = 1;
}

//validates token using ajax
Comments.checkItem = function Comments_checkItem(token) {
   var input_value = Core.getText(token);
   if (token == 'code') {
		Core.setClassName('code',' ');
      //Core.setText(token+'_ok', '');
	   Core.hideElement('code_ok');
      Core.setText(token+'_error', '');
      if (Comments.last_code == input_value && Comments.isOK[token] == true) {
         Core.hideElement(token + '_busy');
         //Core.setText('code_ok', 'OK');
         Core.setClassName('code','ok');
         Core.showElement('code_ok');
         return;
      }
      if (Comments.last_code == input_value && Comments.isOK[token] == false) {
         Core.hideElement(token + '_busy');
         Core.setText('code_error', LangDict.translateToken("TopNav.Signup.Code.WrongCodeEntered"));
         Core.setClassName('code','wrong');
         return;
      }
      Comments.isOK[token] = false;
      Comments.last_code = input_value;
      var ready_to_send_request = false;
      if (token == 'code' && input_value.length < Comments.verification_code_size) {
		Core.setClassName('code','short');
      Core.setText(token+'_error', LangDict.translateToken("TopNav.Signup.Code.WrongCodeEntered"));
      } else {
         ready_to_send_request = true;
      }
      var send_data = new Object();
      send_data.input_value = input_value;
      send_data.code_hash = Core.getText('code_hash'); //if token==code then we must also pass code_hash; See ajax server-side impl.
      if (ready_to_send_request == true) {
         Core.showElement(token + '_busy');
         advAJAX.post({
            'token' : 'code',
            'cmd' : 'validate',
            'input_value' : input_value,
            'code_hash' : Core.getText('code_hash'),
            onSuccess : function(obj) {
               Comments.advajaxResponser(obj);
            },
            onError : function() {
               Core.hideElement(token + '_busy');
               Core.setClassName('code','ok');
               Core.showElement('code_ok');
               Comments.isOK[token] = true;
            }
         });
      }
   }
}

Comments.advajaxResponser = function Comments_advajaxResponser(obj) {
   if (!obj.responseText) {
      return Logger.log('Empty response!');
   }
   var token = obj.responseText.substr(0, obj.responseText.indexOf("|"));
   var data = obj.responseText.substr(obj.responseText.indexOf("|")+1);
   if (data != null && data.indexOf("=") > -1) {
      var pairs = data.split('|');
      var responseParams = new Object();
      for (var y=0; y<pairs.length; y++) {
         var pair = pairs[y].split('=');
         responseParams[pair[0]] = Core.unescape(pair[1]);
      }
   }
   
   var state = responseParams['state'];
   var asked_value = responseParams['input_value'];
   Core.hideElement(token + '_busy');
   Comments.isOK[token] = false;
   if (token == 'code') {
      Comments.isOK.code = false;
      if (Core.getText('code') == asked_value) {
         if (state == 'OK') {
            Core.setClassName('code','ok');
            //Core.setText('code_ok', 'OK');
            Core.showElement('code_ok');
            Comments.isOK.code = true;
         } else if (state == 'SHORT') {
            Core.setClassName('code','short');
            Core.setText('code_error', LangDict.translateToken("TopNav.Signup.Code.EnterEntireValidationCode"));
         } else if (state == 'WRONG') {
            Core.setClassName('code','wrong');
            Core.setText('code_error', LangDict.translateToken("TopNav.Signup.Code.WrongCodeEntered"));
         } else {
            Core.setClassName('code','ok');
            Core.showElement('code_ok');
            Comments.isOK.code = true;
            //Core.setText('code_error', LangDict.translateToken("Album.Comments.VerificationError"));
         }
      }
   }
}

//check lenght, if suits - check value using ajax
Comments.hitItem = function Comments_hitItem(token) {
   if (token == 'code') {
      var input_value = Core.getText(token);
      if (input_value.length == Comments.verification_code_size) {
         Core.setClassName('code',' ');
         Core.setText(token + '_error', '');
         //Core.setText(token + '_ok', '');
         Core.hideElement('code_ok');
         Comments.checkItem(token);
      } else {
         Comments.isOK[token] = false;
         Comments.last_code = '';
         Core.setClassName('code','short');
         //Core.setText(token + '_ok', '');
         Core.hideElement('code_ok');
         Core.setText(token + '_error', LangDict.translateToken("TopNav.Signup.Code.EnterEntireValidationCode"));
      }
   }
}



