// settings
var userInfoBoxId = "userInfoBox";

var userInfoItems = new Array();
var i = 0;

userInfoItems[i] = new Array();
userInfoItems[i]['caption'] = "Отображаемое имя на текущем языке";
userInfoItems[i]['submitConfirmText'] = 'Для изменения отображаемого имени введите текущий пароль:';
userInfoItems[i]['submitButtonCaption'] = "Заменить";
userInfoItems[i]['fields'] = new Array();
userInfoItems[i]['fields'][0] = new Array();
userInfoItems[i]['fields'][0]['name'] = PARAM_NEW_USER_SCREEN_NAME;
userInfoItems[i]['fields'][0]['type'] = 'text';
userInfoItems[i]['fields'][0]['caption'] = 'Отображаемое имя:';
userInfoItems[i]['fields'][0]['comment'] = '(чтобы изменить имя на&nbsp;другом языке, выберите этот&nbsp;язык из&nbsp;списка языков справа вверху или воспользуйтесь формой ниже, введя код нужного языка)';
userInfoItems[i]['fields'][0]['value'] = function() { return USER_INFO_SCREEN_NAME };
userInfoItems[i]['fields'][0]['maxLength'] = MAX_USER_SCREEN_NAME_LENGTH;
userInfoItems[i]['fields'][1] = new Array();
userInfoItems[i]['fields'][1]['name'] = PARAM_LANGUAGE;
userInfoItems[i]['fields'][1]['type'] = 'hidden';
userInfoItems[i]['fields'][1]['value'] = function() { return LANGUAGE };;
userInfoItems[i]['fields'][2] = new Array();
userInfoItems[i]['fields'][2]['name'] = PARAM_FUNCTION;
userInfoItems[i]['fields'][2]['type'] = 'hidden';
userInfoItems[i]['fields'][2]['value'] = function() { return PARAM_FUNCTION_SET_USER_INFO };
userInfoItems[i]['fields'][3] = new Array();
userInfoItems[i]['fields'][3]['name'] = PARAM_USER_ID;
userInfoItems[i]['fields'][3]['type'] = 'hidden';
userInfoItems[i]['fields'][3]['value'] = function() { return USER_ID };

i++;

userInfoItems[i] = new Array();
userInfoItems[i]['caption'] = "Отображаемое имя на заданном языке";
userInfoItems[i]['submitConfirmText'] = 'Для добавления или изменения отображаемого имени введите текущий пароль:';
userInfoItems[i]['submitButtonCaption'] = "Добавить / заменить";
userInfoItems[i]['editModeOnly'] = true;
userInfoItems[i]['fields'] = new Array();
userInfoItems[i]['fields'][0] = new Array();
userInfoItems[i]['fields'][0]['name'] = PARAM_NEW_USER_SCREEN_NAME;
userInfoItems[i]['fields'][0]['type'] = 'text';
userInfoItems[i]['fields'][0]['caption'] = 'Отображаемое имя:';
userInfoItems[i]['fields'][0]['comment'] = '';
userInfoItems[i]['fields'][0]['value'] = function() { return USER_INFO_SCREEN_NAME };
userInfoItems[i]['fields'][0]['maxLength'] = MAX_USER_SCREEN_NAME_LENGTH;
userInfoItems[i]['fields'][1] = new Array();
userInfoItems[i]['fields'][1]['name'] = PARAM_LANGUAGE;
userInfoItems[i]['fields'][1]['type'] = 'text';
userInfoItems[i]['fields'][1]['value'] = function() { return LANGUAGE };
userInfoItems[i]['fields'][1]['caption'] = 'Код языка:';
userInfoItems[i]['fields'][1]['comment'] = '(по стандарту RFC&nbsp;1766, например: ru-RU&nbsp;или&nbsp;en-US)';
userInfoItems[i]['fields'][1]['maxLength'] = MAX_LANGUAGE_LENGTH;
userInfoItems[i]['fields'][2] = new Array();
userInfoItems[i]['fields'][2]['name'] = PARAM_FUNCTION;
userInfoItems[i]['fields'][2]['type'] = 'hidden';
userInfoItems[i]['fields'][2]['value'] = function() { return PARAM_FUNCTION_SET_USER_INFO };
userInfoItems[i]['fields'][3] = new Array();
userInfoItems[i]['fields'][3]['name'] = PARAM_USER_ID;
userInfoItems[i]['fields'][3]['type'] = 'hidden';
userInfoItems[i]['fields'][3]['value'] = function() { return USER_ID };

i++;

userInfoItems[i] = new Array();
userInfoItems[i]['caption'] = "Изменение пароля";
userInfoItems[i]['submitConfirmText'] = 'Для изменения пароля введите текущий пароль:';
userInfoItems[i]['submitButtonCaption'] = "Заменить";
userInfoItems[i]['editModeOnly'] = true;
userInfoItems[i]['validationFunction'] = function( infoItemIndex ) 
{
  var formId = getUserInfoFormIdByIndex( infoItemIndex );
  var firstPasswordField = obtainElementById( formId + userInfoItems[infoItemIndex]['fields'][0]['name'] );
  var confirmationPasswordField = obtainElementById( formId + userInfoItems[infoItemIndex]['fields'][1]['name'] );
  if ( firstPasswordField.value == confirmationPasswordField.value )
    return true; 
  else
  {
    alert( "Пароли не совпадают" )
    return false;
  };
};
userInfoItems[i]['fields'] = new Array();
userInfoItems[i]['fields'][0] = new Array();
userInfoItems[i]['fields'][0]['name'] = PARAM_NEW_USER_PASSWORD;
userInfoItems[i]['fields'][0]['type'] = 'password';
userInfoItems[i]['fields'][0]['caption'] = 'Новый пароль:';
userInfoItems[i]['fields'][0]['value'] = function() { return "" };
userInfoItems[i]['fields'][0]['comment'] = '';
userInfoItems[i]['fields'][0]['maxLength'] = MAX_USER_PASSWORD_LENGTH;
userInfoItems[i]['fields'][1] = new Array();
userInfoItems[i]['fields'][1]['name'] = PARAM_NEW_USER_PASSWORD+"CONFIRMATION";
userInfoItems[i]['fields'][1]['type'] = 'password';
userInfoItems[i]['fields'][1]['value'] = function() { return "" };
userInfoItems[i]['fields'][1]['caption'] = 'Подтверждение пароля:';
userInfoItems[i]['fields'][1]['comment'] = '(пароли должны совпасть чтобы быть более-менее уверенным в&nbsp;том, что Вы&nbsp;ввели то, что&nbsp;хотели)';
userInfoItems[i]['fields'][1]['maxLength'] = MAX_USER_PASSWORD_LENGTH;
userInfoItems[i]['fields'][2] = new Array();
userInfoItems[i]['fields'][2]['name'] = PARAM_FUNCTION;
userInfoItems[i]['fields'][2]['type'] = 'hidden';
userInfoItems[i]['fields'][2]['value'] = function() { return PARAM_FUNCTION_SET_USER_INFO };
userInfoItems[i]['fields'][3] = new Array();
userInfoItems[i]['fields'][3]['name'] = PARAM_USER_ID;
userInfoItems[i]['fields'][3]['type'] = 'hidden';
userInfoItems[i]['fields'][3]['value'] = function() { return USER_ID };

// returns the user info form ID by it's index
function getUserInfoFormIdByIndex( index )
{
  return "userInfoForm" + index;
}

// sends the request to get the user screen name and to update the user info page
// depending on it
function updateUserInfo()
{
  sendUrlResponseTextToFunction
  ( 
    getUserScreenNameRequestUrl + escape( USER_INFO_ID ), 
    function( response )
    {
      if ( response != "" )
      {
        USER_INFO_SCREEN_NAME = response;
        // redrawing
        redrawUserInfo(); 
      };
    }
  );
}


function redrawUserInfo()
{
  // obtainint the container to place the user info into
  container = obtainElementById( userInfoBoxId );
  if ( !container )
    return;
    
  // generating the content
  var content = "<h1>Логин: " + USER_INFO_ID + "</h1>\n";
  content += "<table width='100%' cellspacing='0'>\n";
  
  // space and width setup
  content += "  <tr>\n";
  content += "    <td style='height:0px; width:40%'>\n";
  content += "    </td>\n";
  content += "    <td height='height:0px;'>\n";
  content += "    </td>\n";
  content += "  </tr>\n";
  
  // forms
  for ( var i = 0; i < userInfoItems.length; i++ )
  {
    // skipping the edit only items
    if ( userInfoItems[i]['editModeOnly'] && USER_ID != USER_INFO_ID )
      continue;

    var formId = getUserInfoFormIdByIndex( i );
    
    content += "  <tr>\n";
    content += "    <td colspan='2'>\n";
    content += "<h1>"+userInfoItems[i]['caption']+"</h1>";
    content += "    </td>\n";
    content += "    <td>\n";
    content += "  </tr>\n";
    for ( var field = 0; field < userInfoItems[i]['fields'].length; field++ )
    {
      // skipping hidden fields
      if ( userInfoItems[i]['fields'][field]['type'] == "hidden" )
        continue;
    
      var fieldId = formId + userInfoItems[i]['fields'][field]['name'];
    
      // main part
      content += "  <tr>\n";
      content += "    <td width='40%'>\n";
      content += userInfoItems[i]['fields'][field]['caption']+"\n";
      content += "    </td>\n";
      content += "    <td>\n";
      if ( USER_ID != USER_INFO_ID )
      {
        content += userInfoItems[i]['fields'][field]['value']();
      }
      else
      {
        switch ( userInfoItems[i]['fields'][field]['type'] )
        {
          case "text":
            content += "<div class='textinput'><input type='text' id='"+fieldId+"' value='"+ userInfoItems[i]['fields'][field]['value']() +"' "+ ( userInfoItems[i]['fields'][field]['maxLength'] ? "maxlength='"+ userInfoItems[i]['fields'][field]['maxLength'] +"' " : "" ) +" /></div>";
            break;
            
          case "password":
            content += "<div class='textinput'><input type='password' id='"+fieldId+"' value='"+ userInfoItems[i]['fields'][field]['value']() +"' "+ ( userInfoItems[i]['fields'][field]['maxLength'] ? "maxlength='"+ userInfoItems[i]['fields'][field]['maxLength'] +"' " : "" ) +" /></div>";
            break;
            
          case "textarea":
            content += "<div class='multilinetextinput'><textarea id='"+fieldId+"' value='"+ userInfoItems[i]['fields'][field]['value']() +"' "+ ( userInfoItems[i]['fields'][field]['maxLength'] ? "maxlength='"+ userInfoItems[i]['fields'][field]['maxLength'] +"' " : "" ) +"></textarea></div>";
            break;
            
          case "radio":
            for ( var item in userInfoItems[i]['fields'][field]['items'] )
              content += "<div class='radioinput'><label for='"+fieldId+item+"'><input  checked='true' name='"+fieldId+"' id='"+fieldId+item+"' type='radio' value='"+userInfoItems[i]['fields'][field]['items'][item]['value']()+"' />&nbsp;"+userInfoItems[i]['fields'][field]['items'][item]['caption']+"</label></div>";
            break;
            
        };
      };
      // comments
      if ( USER_ID == USER_INFO_ID )
      {
        content += "    </td>\n";
        content += "  </tr>\n";
        content += "  <tr>\n";
        content += "    <td colspan='2'>\n";
        content += "<small>"+userInfoItems[i]['fields'][field]['comment']+"</small>";
        content += "    </td>\n";
        content += "  </tr>\n";
      };
    };
    
    // submit button
    if ( USER_ID == USER_INFO_ID )
    {
      content += "  <tr>\n";
      content += "    <td>\n";
      content += "&nbsp;";
      content += "    </td>\n";
      content += "    <td>\n";
      content += "<div class='buttoninput'><input type='button' value='" + userInfoItems[i]['submitButtonCaption'] + "' onclick='javascript: submitUserInfoItemCommand( " + i + " );' /></div>";
      content += "    </td>\n";
      content += "  </tr>\n";
    };
  };
    
  content += "</table>\n";
  
  // updating the content
  if ( container.innerHTML != content )
    container.innerHTML = content;
}

// asks the user to confirm the submitting an submitting the
// form for the info field with the index, specified
function submitUserInfoItemCommand( infoItemIndex )
{
  // checking for errors
  if ( userInfoItems.length <= infoItemIndex )
    return;
    
  // custom validation
  if ( userInfoItems[infoItemIndex]['validationFunction'] )
    if ( !userInfoItems[infoItemIndex]['validationFunction']( infoItemIndex ) )
      return;
      
  var password = prompt( userInfoItems[infoItemIndex]['submitConfirmText'] );
  if ( password ) 
  {      
    // building the list of params
    var params = new Array();
    // the password
    params[PARAM_PASSWORD] = password;
    
    var requestUrl = setUserInfoRequestUrl;
  
    // filling params  
    var formId = getUserInfoFormIdByIndex( infoItemIndex );
    for ( var i = 0; i < userInfoItems[infoItemIndex]['fields'].length; i++ )
    {
      if ( userInfoItems[infoItemIndex]['fields'][i]['type'] != "hidden" )
      {
        var mainField = obtainElementById( formId + userInfoItems[infoItemIndex]['fields'][i]['name'] );
        
        if ( mainField )
        {
          // storing a value
          params[userInfoItems[infoItemIndex]['fields'][i]['name']] = mainField.value;
        };
      }
      else if ( userInfoItems[infoItemIndex]['fields'][i]['value'] )
      {
        params[userInfoItems[infoItemIndex]['fields'][i]['name']] = 
          userInfoItems[infoItemIndex]['fields'][i]['value']();
      }
    };

    // submitting
    sendUrlResponseTextToFunction
    ( 
      requestUrl, 
      function( response )
      {
        if ( response == RESPONSE_REQUEST_PROCEEDED_SUCCESSFULLY )
        {
          // refreshing the page content
          //updateUserInfo();
          updatePageForLogin( USER_ID, true )
        }
        else
          alert( response );
      },
      params
    );
    
  };
}
