/*****************************************************************************\
  FILE..........: kribla.js
  AUTHOR........: Dmitry Vinogradov
  COPYRIGHT.....: Copyright(c) 2007, Kribla. All rights reserved.
  DESCRIPTION...:
  HISTORY.......: DATE       COMMENT
                  ---------- ------------------------------------------------
                      y  m  d
                  2007-05-07 Created by VDima.
                  2007-07-09 Renamed cribla.js => kribla.js
\*****************************************************************************/
//xxxxxxxxxxxxxxxxxxxxx
//--------------------------------------------------------------------constants
var constInnerBodyID        = "js_inner_body";
var constNameID             = "js_name";
var constSaveNameBtnID      = "js_save_name";
var constProgressStateID    = "js_progress_state";
var constUserInfoID         = "js_user_info";
var constUserLoginID        = "js_user_login";
//var constQuestionID         = "js_question";
//var constQuestionStatusID   = "js_question_status";
var constHomePageID         = "js_home_page";
var constHPHQListID         = "js_hph_q_list";
var constLoginID            = "js_login";
var constPasswordID         = "js_password";
var constLoginStateID       = "js_login_state";
var constDoLoginBtnID       = "js_do_login_btn";
var constCancelLoginBtnID   = "js_cancel_login_btn";
var constTopBot100ID        = "js_TopBot100";
var constWaitLoginTimerID   = "js_wait_login_timer";
var constRegSCodeID         = "js_reg_scode";
var constRegSCodeNoteID     = "js_reg_scode_note";
var constRegLoginID         = "js_reg_login";
var constRegEMailID         = "js_reg_email";
var constRegPwdID           = "js_reg_type_password";
var constRegRePwdID         = "js_reg_retype_password";
var constRegStatusID        = "js_reg_status";
var constLeftColID          = "js_left_column";
var constQSectID            = "js_question_sector";
var constQListID            = "js_qlist";
var constIdQID              = "js_idquestion";
var constQAStatusidID       = "js_QAStatus_id_";
var constQAAOStatusidID     = "js_QAAddOpinionStatus_id_";
var constQAAddOpinionRow1ID = "js_QAAddOpinionRow1";
var constQAAddOpinionRow2ID = "js_QAAddOpinionRow2";
var constQAAddOpinionRow3ID = "js_QAAddOpinionRow3";
var constQANewOpinionID     = "js_QANewOpinion";
var constQAAddOpinionBtnID  = "js_QAAddOpinionBtn";
var constQAVoteBtnID        = "js_QAVoteBtn";
var constQADisagreeNoteID   = "js_QADisagreeNote";
var constQAAOCharsAvableID  = "js_QAAddOpinionChars";
var constQuestion_id_       = "js_question_id_";
var constExtQuestion_id_    = "js_ext_question_id_";
var constQCategoriesID      = "js_question_categories";
var constMsgBoardID         = "js_msg_board";
var constAddMsgID           = "js_add_msg";
var constInputMsgID         = "js_input_msg";
var constAddMsgStatusID     = "js_add_msg_status";
var constBrdMsgID           = "js_brd_msg_id_";
var constT100UserID         = "js_top100_user_id_";
var constB100UserID         = "js_bot100_user_id_";
var constTooltipID          = "js_Tooltip";
var constTTTextID           = "js_TooltipText";
var constPProfilePageID     = "js_public_profile_page";
var constPProfileID         = "js_public_profile";
var constUUMsgBrdSectID     = "js_u2u_msg_brd_sector";
var constUUMsgBrdID         = "js_user2user_message_board";
var constUUBrdMsgID         = "js_user2user_board_message";
var constUUMsgBrdInputID    = "js_user2user_message_board_input";
var constInputUUMsgID       = "js_user2user_input_message";
var constAddUUMsgStatusID   = "js_user2user_input_message_status";
var constLanguageDivID      = "js_language_div";
var constLanguageStatusID   = "js_language_status";
var constRemovePicDivID     = "js_remove_pic_div";
var constLCPicStatusID      = "js_load_change_pic_status";
var constNewPicDivID        = "js_new_pic_div";
var constUUMsgList          = "js_user2user_private_list";
var constAddQPageID         = "js_add_question_page";
var constAddQuestionID      = "js_add_question";
var constAQCategoryID       = "js_aq_category";
var constAQQuestionID       = "js_aq_question";
var constAQDescriptionID    = "js_aq_description";
var constAQOpinion_id_      = "js_aq_opinion_";
var constAQOCharsAvable_id_ = "js_aq_opinion_chs_available_";
var constAQTableID          = "js_aq_table";
var constAQTableCol1ID      = "js_aq_table_col1";
var constAQTableCol2ID      = "js_aq_table_col2";
var constAQTableCol3ID      = "js_aq_table_col3";
var constAQAO_id_           = "js_aq_add_opinion_";
var constQuestionTypeID     = "js_aq_type";
var constAQNonFixedAnswrsID = "js_aq_non_fixed_answers";
var constAQNonFAnsStatusID  = "js_aq_nofixans_status";
var constAQKeyWordsID       = "js_aq_key_words";
var constAQLinkID           = "js_aq_link";
var constAQLinkTitleID      = "js_aq_link_title";
var constAQObjectID         = "js_aq_object";
var constAQStatusID         = "js_aq_status";
var constAQPubStatusID      = "js_aq_make_pub_status";
var constAQOldQuestionsID   = "js_aq_old_questions";
var constAQRePublishBtnID   = "js_aq_re_publish_btn";
var constCreateSurveyID     = "js_cs_create_survey";
var constCrtSurveyPageID    = "js_cs_page";
var constCrtSurveyAsksID    = "js_cs_asks";
var constCrtSurveyTblID     = "js_cs_table";
var constCrtSurveyTitleID   = "js_cs_survey_title";
var constCrtSCatRowID       = "js_cs_survey_cat_row";
var constCrtSCategoryID     = "js_cs_survey_category";
var constCrtSLanguageID     = "js_cs_survey_language";
var constCrtSurveyStatusID  = "js_cs_survey_status";
var constCrtSTypeID         = "js_cs_survey_type";
var constCrtSSliceName_id_  = "js_cs_slice_name";
var constCrtSSliceText_id_  = "js_cs_slice_text";
var constCrtSSliceAImg_id_  = "js_cs_slice_a_image";
var constCrtSSliceImgTD_id_ = "js_cs_slice_image_td_";
var constCrtSSPubChk_id_    = "js_cs_slice_pub_chk_";
var constCrtSSPubChkTxt_id_ = "js_cs_slice_pub_chk_txt_";
var constCrtSAsksFilterID   = "js_cs_asks_filter";
var constCrtSrvFindID       = "js_cs_find";
var constCrtSrvFindDivID    = "js_cs_find_div";
var constCrtSPStyleID       = "js_cs_publish_style";
var constCrtSSExamplesID    = "js_cs_slices_example";
var constCrtSWarningsID     = "js_cs_warnings";
var constCrtSPublishStatID  = "js_cs_publish_status";
var constCSPublishID        = "js_cs_publish";
var constCSPublishTDID      = "js_cs_publish_td";
var constSImgDlgID          = "js_select_img_dlg";
var constSImgDlgHeaderID    = "js_select_img_dlg_header";
var constSImgDlgHDataID     = "js_img_dlg_hdata";
var constSImgDlgStatusID    = "js_img_dlg_status";
var constSImgDlgFrmID       = "js_img_dlg_frm";
var constCrtSrvQDiv_id_     = "js_cs_q_div_id_";
var constCrtSrvQSign_id_    = "js_cs_q_sign_id_";
var constCrtSrvQImgYes_id_  = "js_cs_q_img_yes_id_";
var constCrtSrvQText_id_    = "js_cs_q_text_id_";
var constCrtSq_             = "js_CrtSrvQ_";
var constCrtSa_             = "_a_";
var constCrtSs_             = "_s_";
var constQAPref             = "js_Q_id_";
var constQASuf              = "_A_id_";
var constSurveysID          = "js_surveys";
var constResSurvey_id_      = "js_res_survey_";
var constTxtSurvey_id_      = "js_txt_survey_";
var constImgSurvey_id_      = "js_img_survey_";
var constSlice_id_          = "_slice_";
var constOwnSurveyListID    = "js_own_survey_list";
var constCurCategoryID      = "js_cur_category";
var constPPSurveysHeadID    = "js_pp_surveys_header";
var constPPSurveysID        = "js_pp_surveys";

var constQListSize         = 25;
var constMsgsPerPage       = 25;
var constCSAsksPerPage     = 25;
var constMaxPagesCount     = 15;
var constRangePageCount    = 10;
var constPicHeight         = 52;
var constPicWidth          = 52;
var constSliceImgW         = 138;
var constSliceImgH         = 108;
var constUPicSmallImgW     = 20;
var constUPicSmallImgH     = 20;
var constUPicTop100ImgW    = 35;
var constUPicTop100ImgH    = 33;
var constUPicTB100TTipImgW = 54;
var constUPicTB100TTipImgH = 54;

var constTbILoginName     = 100;
var constTbIPassword      = 101;

var constAQQuestionMinLen   = 3;
var constKWordSeporators    = ",.;\n";
var constMaxOpinionLength   = 200;
var constQDMaxLen           = 212;

var constTTXOffset = 16;
var constTTYOffset = 16;

var constURLSubmitSliceImg = "http://www.kribla.com/img_slice.php";
var constAnsDiagramURL     = "http://www.kribla.com/answers.php?id=";
var constUDistance         = "http://www.kribla.com/images/diagrams/distance.php";
//var constUDistance         = "http://www.kribla.com/buttons/button.php";

var constSecInDay     = 24*60*60;
var constSortPopular  = "popular";
//var constSortanswered = "answered";
var constSortNew      = "new";

var eAllStories = 0;
var eMyStories  = 1;
var eMyVotes    = 2;
var eMyOpinions = 3;

var eUI_ignore        = 0;
var eUI_load          = 1;
var eUI_update        = 2;
var eUI_login         = 3;
var eUI_change_name   = 4;
var eUI_registration  = 5;

var eT100_load        = 1;
var eT100_update      = 2;

var eB100_load        = 1;
var eB100_update      = 2;

var eLCol_update      = 1;
var eLCol_Asks_load   = 2;
var eLCol_Asks_update = 3;
var eLCol_Q_load      = 4;
var eLCol_Q_update    = 5;

var eCats_load        = 1;
var eCats_update      = 2;

var eSurs_load        = 1;
var eSurs_update      = 2;

var ePP_load          = 1;
var ePP_update        = 2;

var eUUMBrd_load      = 1;
var eUUMBrd_update    = 2;

var eCS_load          = 1;
var eCS_update        = 2;

var eCSAsks_load      = 1;
var eCSAsks_update    = 2;

var eCSFilter_All    = 0;
var eCSFilter_My     = 1;
var eCSFilter_Survey = 2;
var eCSFilter_Find   = 3;

//-------------------------------------------------------------------------Errs

var err001 = "E001.";
var err002 = "E002.";
var err003 = "E003.";
var err004 = "E004.";
var err005 = "E005.";
var err006 = "E006.";
var err007 = "E007.";
var err008 = "E008.";
var err009 = "E009.";
var err010 = "E010.";
var err011 = "E011.";
//var err012 = "E012.";
//var err013 = "E013.";
//var err014 = "E014.";
//var err015 = "E015.";
//var err016 = "E016.";
var err017 = "E017.";
var err018 = "E018.";
var err019 = "E019.";
var err020 = "E020.";
var err021 = "E021.";
var err022 = "E022.";
var err023 = "E023.";
var err024 = "E024.";
//var err025 = "E025.";
var err026 = "E026.";
var err027 = "E027.";
var err028 = "E028.";
var err029 = "E029.";
var err030 = "E030.";
var err031 = "E031.";
var err032 = "E032.";
var err033 = "E033.";
var err034 = "E034.";
var err035 = "E035.";
var err036 = "E036.";
var err037 = "E037.";
var err038 = "E038.";
var err039 = "E039.";
var err040 = "E040.";
var err041 = "E041.";
var err042 = "E042.";
var err043 = "E043.";
var err044 = "E044.";
var err045 = "E045.";
var err046 = "E046.";
var err047 = "E047.";
var err048 = "E048.";
var err049 = "E049.";
var err050 = "E050.";
var err051 = "E051.";
var err052 = "E052.";
var err053 = "E053.";
var err054 = "E054.";
var err055 = "E055.";
var err056 = "E056.";
var err057 = "E057.";
var err058 = "E058.";
var err059 = "E059.";
var err060 = "E060.";
var err061 = "E061.";
var err062 = "E062.";
var err063 = "E063.";
//var err064 = "E064.";
var err065 = "E065.";
var err066 = "E066.";
var err067 = "E067.";

//------------------------------------------------------------------Global-vars
//"Home"
//"CreateSurvey"
var g_language      = "en";
var g_strCurPage    = "Home";

var g_enQLTab       = eAllStories;
var g_strBOTorTOP   = "top";

var g_strUserName   = "";

var g_arrCategories  = new Array();
var g_arrCatIndexes  = new Object();//associated array
var g_nCurCategory   = -1;
var g_arrCurCategory = new Array();//see OnCurCategoryChanged()
var g_strCurSort     = constSortNew;
var g_cur_q_id       = -1;


var g_oInputMsg    = new Object;
g_oInputMsg.q_id   = -1;
g_oInputMsg.msg_id = -1;
g_oInputMsg.strMsg = "";

var g_oInputUUMsg       = new Object;
g_oInputUUMsg.str_btn   = "";
g_oInputUUMsg.strUserTo = "";
g_oInputUUMsg.msg_id    = -1;
g_oInputUUMsg.strMsg    = "";

var g_arrTop100    = new Array();
var g_arrBot100    = new Array();

var eAQ_Fact = 0;
var eAQ_Ask  = 1;

var g_objAQ =
{
  m_nCurCategory   : 0,
  m_enType         : eAQ_Fact,
  m_strQuestion    : "",
  m_strDescription : "",
  m_arrOpinions    : new Array(""),
  m_nOpinionsCount : 1,
  m_bNonFixedAnsws : true,
  m_strKeyWords    : "",
  m_strLink        : "",
  m_strLinkTitle   : "",
  m_strObject      : ""
}


var g_objSImgDlg =
{
  m_bVisible    :    0,
  m_bMPressed   :    0,
  m_nXPressed   :   -1,
  m_nYPressed   :   -1,
  m_oElem       : null,
  m_nDlgID      :    0,
  m_fOnUploaded : null
}

//-----------------------------------------------------------------------OnLoad

function GetParamVal(arrParams, strName)
{
  for(i = 0; i < arrParams.length; i++)
  {
    if ( arrParams[i].name == strName )
      return arrParams[i].val;
  }

  return null;
}


function OnLoad(strPage, strLang)
{
  xajax.custom_data_handler = XajaxCustomDataHandler;

  if ( "en" != strLang && "fr" != strLang && "ru" != strLang )
    g_language = "en";
  else
    g_language = strLang;

  var i, j, o;
  var strURL    = document.URL;
  var arrT      = strURL.split("?");
  var arrParams = new Array();

  if ( 1 < arrT.length )
  {
    var strVal;
    var strParams = arrT[1];
    var arrPrms   = strParams.split("&");

    for(i = 0; i < arrPrms.length; i++)
    {
      arrT   = arrPrms[i].split("=");
      o      = new Object();
      o.name = arrT[0];
      strVal = "";

      for(j = 1; j < arrT.length; j++)
        strVal += arrT[j];

      o.val                       = strVal;
      arrParams[arrParams.length] = o;
    }
  }

  for(i = 0; i < arrParams.length; i++)
  {
    if ( arrParams[i].name == "path" )
    {
      strPage = arrParams[i].val;
      break;
    }
  }

  switch(strPage)
  {
    case "change_name":
      ChangeNamePage();
    break;

    case "uprof":
      LoadUserProfile();
    break;

    case "cpic":
      LoadChangePic();
    break;

    case "convert_item":
      AddRssQuestion(GetParamVal(arrParams, "item_id"));
    break;

    default:
      HomePage(eUI_load);
  }

  AddEvent(document, "click" , OnDocumentClick);
  //AddEvent(window  , "resize", OnWndResize);
}

//------------------------------------------------------------------------xajax

var g_arrXajaxRets = new Array();

g_arrXajaxRets[0] = 0;//client answer handler id, see constXjx... numbers
g_arrXajaxRets[1] = 0;//server result: 0 - fatal error, 1 - success,
                      //  >2 - other - function specific
//g_arrXajaxRets[>1] - server data

var constXjxInvalidAnswer    = 0;
var constXjxIgnoreAnswer     = 1;
var constXjxLoadChangeName   = 2;
var constXjxSaveChangeName   = 3;
var constXjxLoadUserInfo     = 4;
var constDXjxLoadPPSurveys   = 5;
//var constXjxSaveAnswer       = 6;
var constXjxLogin            = 7;
var constXjxLogout           = 8;
var constDXjxLoadTop100      = 9;
var constXjxLoadRegistration = 10;
var constXjxRegister         = 11;
var constDXjxLoadBot100      = 12;
var constXjxLoadUserProfile  = 13;
var constDXjxLoadQList       = 14;
var constDXjxCatSaveAnswer   = 15;
//var constDXjxLoadCategories  = 16;
var constDXjxLoadMsgBoard    = 17;
var constDXjxLoadIdQ         = 18;
var constDXjxSaveIdQAnswer   = 19;
var constXjxSavePreviewMsg   = 20;
var constXjxSaveMsg          = 21;
var constXjxLoadInputMsg     = 22;
var constXjxPublicMsg        = 23;
var constDXjxLoadPubProfile  = 24;
var constDXjxLoadUUMsgBoard  = 25;
var constXjxLoadUUMsgInput   = 26;
var constXjxSaveUUPreviewMsg = 27;
var constXjxSaveUUMsg        = 28;
var constXjxPublicUUMsg      = 29;
var constXjxSetLang          = 30;
var constXjxLoadUserPicProf  = 31;
var constXjxDelPic           = 32;
var constDXjxLoadUUMsgList   = 33;
var constDXjxLoadCatsTree    = 34;
var constXjxAddQuestion      = 35;
var constXjxSaveSurvey       = 36;
var constDXjxLoadSavedSurvey = 37;
var constDXjxCrtSrvAsks      = 38;
var constDXjxCrtSrvAllAsks   = 39;
var constDXjxCrtSrvMyAsks    = 40;
var constDXjxCrtSrvFindAsks  = 41;
var constDXjxLoadSurveys     = 42;
var constDXjxLoadRssQuestion = 43;
var constDXjxAddOpinion      = 44;
var constDXjxLoadOwnSurvList = 45;

//-----------------------------------------------------------------------------


function xajax_Arg(i, v)
{
  g_arrXajaxRets[parseInt(i)] = v;
}


function xajax_Answer()
{
  if ( g_arrXajaxRets.length < 2 )
    ferror(err004);
  else
  {
    var nHandlerID = parseInt(g_arrXajaxRets[0]);
    var nRC        = parseInt(g_arrXajaxRets[1]);

    if ( 0 == nRC )
      ferror(err007 + " Server fatal error.");

    switch(nHandlerID)
    {
      case constXjxIgnoreAnswer:
      break;

      case constXjxLoadChangeName:
        HandleXjxLoadChangeName();
      break;

      case constXjxSaveChangeName:
        HandleXjxSaveChangeName();
      break;

      case constXjxLoadUserInfo:
        HandleXjxLoadUserInfo();
      break;

//      case constXjxLoadQuestion:
//        HandleXjxLoadQuestion();
//      break;
//
//      case constXjxSaveAnswer:
//        HandleXjxSaveAnswer();
//      break;

      case constXjxLogin:
        HandleXjxLogin();
      break;

      case constXjxLogout:
        HandleXjxLogout();
      break;

      case constXjxLoadRegistration:
        HandleXjxLoadRegistration();
      break;

      case constXjxRegister:
        HandleXjxRegister();
      break;

      case constXjxLoadUserProfile:
        HandleXjxLoadUserProfile();
      break;

      case constXjxSavePreviewMsg:
        HandleXjxSavePreviewMsg();
      break;

      case constXjxSaveMsg:
        HandleXjxSaveMsg();
      break;

      case constXjxLoadInputMsg:
        HandleXjxLoadInputMsg();
      break;

      case constXjxPublicMsg:
        HandleXjxPublicMsg();
      break;

      case constXjxLoadUUMsgInput:
        HandleXjxLoadUUMsgInput();
      break;

      case constXjxSaveUUPreviewMsg:
        HandleXjxSaveUUPreviewMsg();
      break;

      case constXjxSaveUUMsg:
        HandleXjxSaveUUMsg();
      break;

      case constXjxPublicUUMsg:
        HandleXjxPublicUUMsg();
      break;

      case constXjxSetLang:
        HandleXjxSetLang();
      break;

      case constXjxLoadUserPicProf:
        HandleXjxLoadUserPicProf();
      break;

      case constXjxDelPic:
        HandleXjxDelPic();
      break;

      case constXjxAddQuestion:
        HandleXjxAddQuestion();
      break;

      case constXjxSaveSurvey:
        HandleXjxSaveSurvey();
      break;

      case constXjxSaveSurvey:
        HandleXjxSaveSurvey();
      break;

      default:
        ferror(err003 + " Handler id = " + g_arrXajaxRets[0] + ". RC = " + g_arrXajaxRets[1]);
    }
  }

  ClearXajaxRets();
}


function ClearXajaxRets()
{
  g_arrXajaxRets = new Array();
}


function ValidateXajaxRets(nCount)
{
  var i;
  for(i = g_arrXajaxRets.length; i < nCount; i++)
    g_arrXajaxRets[i] = "";
}


function XajaxCustomDataHandler(oXMLElem)
{
  if ( oXMLElem && "custom_data" == oXMLElem.nodeName )
  {
    var i;
    var nHandlerID = constXjxInvalidAnswer;
    var nRC        = 0;

    for(i = 0; i < oXMLElem.attributes.length; i++)
    {
      if ( "chid" == oXMLElem.attributes[i].name )
        nHandlerID = parseInt(oXMLElem.attributes[i].value);

      if ( "rc" == oXMLElem.attributes[i].name )
        nRC = parseInt(oXMLElem.attributes[i].value);
    }

    if ( 0 == nRC )
      ferror(err008 + " Server fatal error.");

    switch(nHandlerID)
    {
      case constXjxIgnoreAnswer:
      break;

      case constDXjxLoadTop100:
        HandleDXjxLoadTop100(oXMLElem, nRC);
      break;

      case constDXjxLoadBot100:
        HandleDXjxLoadBot100(oXMLElem, nRC);
      break;

      case constDXjxLoadQList:
        HandleDXjxLoadQList(oXMLElem, nRC);
      break;

      case constDXjxCatSaveAnswer:
        HandleDXjxCatSaveAnswer(oXMLElem, nRC);
      break;

      case constDXjxSaveIdQAnswer:
        HandleDXjxSaveIdQAnswer(oXMLElem, nRC);
      break;

      case constDXjxLoadMsgBoard:
        HandleDXjxLoadMsgBoard(oXMLElem, nRC);
      break;

      case constDXjxLoadIdQ:
        HandleDXjxLoadIdQ(oXMLElem, nRC);
      break;

      case constDXjxLoadPubProfile:
        HandleDXjxLoadPubProfile(oXMLElem, nRC);
      break;

      case constDXjxLoadUUMsgBoard:
        HandleDXjxLoadUUMsgBoard(oXMLElem, nRC);
      break;

      case constDXjxLoadUUMsgList:
        HandleDXjxLoadUUMsgList(oXMLElem, nRC);
      break;

      case constDXjxLoadCatsTree:
        HandleDXjxLoadCatsTree(oXMLElem, nRC);
      break;

      case constDXjxLoadSavedSurvey:
        HandleDXjxLoadSavedSurvey(oXMLElem, nRC);
      break;

      case constDXjxCrtSrvAsks:
        HandleDXjxLoadCSAsks(oXMLElem, nRC);
      break;

      case constDXjxCrtSrvAllAsks:
        HandleDXjxLoadCSAllAsks(oXMLElem, nRC);
      break;

      case constDXjxCrtSrvMyAsks:
        HandleDXjxLoadCSMyAsks(oXMLElem, nRC);
      break;

      case constDXjxCrtSrvFindAsks:
        HandleDXjxCSFindAsks(oXMLElem, nRC);
      break;

      case constDXjxLoadSurveys:
        HandleDXjxLoadSurveys(oXMLElem, nRC);
      break;

      case constDXjxLoadPPSurveys:
        HandleDXjxLoadPPSurveys(oXMLElem, nRC);
      break;

      case constDXjxLoadRssQuestion:
        HandleDXjxLoadRssQuestion(oXMLElem, nRC);
      break;

      case constDXjxAddOpinion:
        HandleDXjxAddOpinion(oXMLElem, nRC);
      break;

      case constDXjxLoadOwnSurvList:
        HandleDXjxLoadOwnSurveyList(oXMLElem, nRC);
      break;

      default:
        ferror(err019 + " Handler id = " + nHandlerID + ". RC = " + nRC);
    }
  }
}

//------------------------------------------------------------------xajax calls

function xajax_load_change_name()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_load_change_name.php";
  return xajax.call("load_change_name", arguments, 1);
}


function xajax_save_change_name()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_save_change_name.php";
  return xajax.call("save_change_name", arguments, 1);
}


function xajax_load_user_info()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_load_user_info.php";
  return xajax.call("load_user_info", arguments, 1);
}


function xajax_login()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_login.php";
  return xajax.call("login", arguments, 1);
}


function xajax_logout()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_logout.php";
  return xajax.call("logout", arguments, 1);
}


function xajax_load_top100()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_load_top100.php";
  return xajax.call("load_top100", arguments, 1);
}


function xajax_load_bot100()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_load_top100.php";
  return xajax.call("load_bot100", arguments, 1);
}


function xajax_load_registration()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_load_regs.php";
  return xajax.call("load_regs", arguments, 1);
}


function xajax_register()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_register.php";
  return xajax.call("register", arguments, 1);
}


function xajax_load_user_profile()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_load_profile.php";
  return xajax.call("load_profile", arguments, 1);
}


function xajax_load_qlist()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_load_qlist.php";
  return xajax.call("load_qlist", arguments, 1);
}


function xajax_cat_save_answer()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_save_ans.php";
  return xajax.call("save_ans", arguments, 1);
}


function xajax_save_idq_answer()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_save_ans.php";
  return xajax.call("save_ans", arguments, 1);
}


function xajax_load_cats_tree()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_load_categories.php";
  return xajax.call("load_cats_tree", arguments, 1);
}


function xajax_load_id_question()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_load_id_q.php";
  return xajax.call("load_id_q", arguments, 1);
}


function xajax_load_msg_board()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_load_msg_board.php";
  return xajax.call("load_msg_board", arguments, 1);
}


function xajax_save_preview_msg()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_save_msg.php";
  return xajax.call("save_peview_msg", arguments, 1);
}


function xajax_save_msg()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_save_msg.php";
  return xajax.call("save_msg", arguments, 1);
}


function xajax_load_input_msg()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_save_msg.php";
  return xajax.call("load_preview_msg", arguments, 1);
}


function xajax_public_msg()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_save_msg.php";
  return xajax.call("public_msg", arguments, 1);
}


function xajax_load_pub_profile()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_load_pub_profile.php";
  return xajax.call("load_pub_profile", arguments, 1);
}


function xajax_load_uu_msg_brd()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_uu_msg_brd.php";
  return xajax.call("load_u2u_msg_board", arguments, 1);
}


function xajax_load_uu_msg_input()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_uu_msg_brd.php";
  return xajax.call("load_u2u_preview_msg", arguments, 1);
}


function xajax_save_uu_preview_msg()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_uu_msg_brd.php";
  return xajax.call("save_u2u_preview_msg", arguments, 1);
}


function xajax_save_uu_msg()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_uu_msg_brd.php";
  return xajax.call("save_u2u_msg", arguments, 1);
}


function xajax_public_uu_msg()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_uu_msg_brd.php";
  return xajax.call("public_u2u_msg", arguments, 1);
}


function xajax_set_lang()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_set_lang.php";
  return xajax.call("set_lang", arguments, 1);
}


function xajax_del_pic()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_del_pic.php";
  return xajax.call("del_pic", arguments, 1);
}


function xajax_load_uu_msg_list()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_uu_msg_brd.php";
  return xajax.call("load_uu_msg_list", arguments, 1);
}


function xajax_add_question()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_add_question.php";
  return xajax.call("add_question", arguments, 1);
}


function xajax_save_survey()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_edit_survey.php";
  return xajax.call("save_survey", arguments, 1);
}


function xajax_load_saved_survey()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_edit_survey.php";
  return xajax.call("load_saved_survey", arguments, 1);
}


function xajax_load_cs_asks()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_edit_survey.php";
  return xajax.call("load_cs_asks", arguments, 1);
}


function xajax_load_cs_all_asks()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_edit_survey.php";
  return xajax.call("load_cs_all_asks", arguments, 1);
}


function xajax_load_cs_my_asks()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_edit_survey.php";
  return xajax.call("load_cs_my_asks", arguments, 1);
}


function xajax_cs_find_asks()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_edit_survey.php";
  return xajax.call("cs_find_asks", arguments, 1);
}


function xajax_load_surveys()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_load_surveys.php";
  return xajax.call("load_surveys", arguments, 1);
}


function xajax_load_pp_surveys()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_load_surveys.php";
  return xajax.call("load_pp_surveys", arguments, 1);
}


function xajax_load_rss_question()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_load_rss_ask.php";
  return xajax.call("load_rss_question", arguments, 1);
}


function xajax_add_opinion()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_add_answer.php";
  return xajax.call("add_answer", arguments, 1);
}


function xajax_load_own_survey_list()
{
  xajaxRequestUri = "http://www.kribla.com/xjx_edit_survey.php";
  return xajax.call("load_own_survey_list", arguments, 1);
}


//--------------------------------------------------------------------xajax end
//--------------------------------------------------------------------Home-Page


function GetHPHQLHeader()
{
  var str  = 'background-image: url(/images/hph_bkg.png);';
  var strT = "";

  strT +=       '<TABLE CLASS="tableHPH" WIDTH="100%" CELLSPACING="0" CELLPADDING="0">';
  strT +=         '<TR>';
  strT +=           '<TD VALIGN="middle" CLASS="tdHPHAllStories" STYLE="' + (eAllStories == g_enQLTab ? str : ' ') + '">';
  strT +=             '<A HREF="javascript:SetQLTab(' + eAllStories + ');" CLASS="aHPH">';
  strT +=               g_static_text[const_hph_all_stories];
  strT +=             '</A>';
  strT +=           '</TD>';
  strT +=           '<TD VALIGN="middle" CLASS="tdHPHMyStories" STYLE="' + (eMyStories == g_enQLTab ? str : ' ') + '">';
  strT +=             '<A HREF="javascript:SetQLTab(' + eMyStories + ');" CLASS="aHPH">';
  strT +=               g_static_text[const_hph_my_stories];
  strT +=             '</A>';
  strT +=           '</TD>';
  strT +=           '<TD VALIGN="middle" CLASS="tdHPHMyVotes" STYLE="' + (eMyVotes == g_enQLTab ? str : ' ') + '">';
  strT +=             '<A HREF="javascript:SetQLTab(' + eMyVotes + ');" CLASS="aHPH">';
  strT +=               g_static_text[const_hph_my_votes];
  strT +=             '</A>';
  strT +=           '</TD>';
  strT +=           '<TD VALIGN="middle" CLASS="tdHPHMyOpinions" STYLE="' + (eMyOpinions == g_enQLTab ? str : ' ') + '">';
  strT +=             '<A HREF="javascript:SetQLTab(' + eMyOpinions + ');" CLASS="aHPH">';
  strT +=               g_static_text[const_hph_my_opinions];
  strT +=             '</A>';
  strT +=           '</TD>';
  strT +=         '</TR>';

  str   =         '<IMG SRC="/images/hph_bottom_trg.png" BORDER="0" ALT="V" >';

  strT +=         '<TR>';
  strT +=           '<TD VALIGN="top" ALIGN="left" CLASS="tdHPHBottom">' + (eAllStories == g_enQLTab ? str : '');
  strT +=           '</TD>';
  strT +=           '<TD VALIGN="top" ALIGN="left" CLASS="tdHPHBottom">' + (eMyStories  == g_enQLTab ? str : '');
  strT +=           '</TD>';
  strT +=           '<TD VALIGN="top" ALIGN="left" CLASS="tdHPHBottom">' + (eMyVotes    == g_enQLTab ? str : '');
  strT +=           '</TD>';
  strT +=           '<TD VALIGN="top" ALIGN="left" CLASS="tdHPHBottom">' + (eMyOpinions == g_enQLTab ? str : '');
  strT +=           '</TD>';
  strT +=         '</TR>';
  strT +=       '</TABLE>';

  return strT;
}


function ReloadHomePage()
{
  HomePage(eUI_update, eT100_update, eB100_update, eLCol_update, eCats_update, eSurs_update);
}


function HomePage(enUI)//, enT100, enB100, enLCol, enCats, enSurs)
{
  g_strCurPage = "Home";

  var enT100 = eT100_load;
  var enB100 = eB100_load;
  var enLCol = eLCol_update;
  var enCats = eCats_load;
  var enSurs = eSurs_load;

  if ( 1 < arguments.length )
  {
    enT100 = arguments[1];

    if ( 2 < arguments.length )
    {
      enB100 = arguments[2];

      if ( 3 < arguments.length )
      {
        enLCol = arguments[3];

        if ( 4 < arguments.length )
        {
          enCats = arguments[4];

          if ( 5 < arguments.length )
            enSurs = arguments[5];
        }
      }
    }
  }

  var oInnerBody = GetByID(constInnerBodyID);

  if ( oInnerBody )
  {
    var bExist = getEBId(constHomePageID) ? 1 : 0;
    var str;
    var strT   = "";

    if ( 0 == bExist )
    {
      if ( eLCol_update == enLCol )
        enLCol = eLCol_Asks_update;

      strT += '<DIV CLASS="divSuperDuper">';
      strT +=   g_static_text[const_super_duper_header];
      strT += '</DIV>';

      strT += '<DIV id="' + constQCategoriesID + '" >';
      strT +=   g_static_text[const_loading_ddd];
      strT += '</DIV>';
      strT += '<DIV CLASS="divCatSpace">';
      strT +=   ' ';
      strT += '</DIV>';
      strT += '<DIV CLASS="divCurCategory">';
      strT +=   '<SPAN CLASS="spanCurCategoryTxt">';
      strT +=     g_static_text[const_cur_category_txt];
      strT +=   '</SPAN>';
      strT +=   '<SPAN id="' + constCurCategoryID + '" CLASS="spanCurCategory">';
      strT +=     g_static_text[const_cur_category_txt];
      strT +=   '</SPAN>';
      strT += '</DIV>';

      strT += '<TABLE id="' + constHomePageID + '" WIDTH="100%" CLASS="tableInnerPart" CELLSPACING="0" CELLPADDING="0">';

      strT +=   '<TR>';
      strT +=     '<TD VALIGN="bottom" ALIGN="center" CLASS="tdSurveysHead">';
      strT +=       '<TABLE CLASS="tableHPHSurveys" WIDTH="171" CELLSPACING="0" CELLPADDING="0">';
      strT +=         '<TR>';
      strT +=           '<TD VALIGN="middle" CLASS="tdHPHSurveys">';
      strT +=             g_static_text[const_surveys_head];
      strT +=           '</TD>';
      strT +=         '</TR>';
      strT +=       '</TABLE>';
      strT +=     '</TD>';
      strT +=     '<TD id="' + constHPHQListID + '" VALIGN="bottom" ALIGN="center" CLASS="tdAsksHead">';
      strT +=       GetHPHQLHeader();
      strT +=     '</TD>';
      strT +=     '<TD VALIGN="bottom" ALIGN="center" CLASS="tdProxyHead">';
      strT +=       '<TABLE CLASS="tableHPHProximetr" WIDTH="100%" CELLSPACING="0" CELLPADDING="0">';
      strT +=         '<TR>';
      strT +=           '<TD VALIGN="middle" CLASS="tdHPHProximetr">';
      strT +=             g_static_text[const_proxy_head];
      strT +=           '</TD>';
      strT +=         '</TR>';
      strT +=       '</TABLE>';
      strT +=     '</TD>';
      strT +=   '</TR>';

      strT +=   '<TR>';
      strT +=     '<TD VALIGN="top" ALIGN="center">';
      strT +=       '<DIV id="' + constSurveysID + '">';
      strT +=         g_static_text[const_loading_ddd];
      strT +=       '</DIV>';
      strT +=     '</TD>';

      strT +=     '<TD CLASS="tdAsks" VALIGN="top" ALIGN="left">';
      strT +=       '<DIV id="' + constLeftColID + '" >';

      if ( eLCol_Asks_update == enLCol || eLCol_Asks_load == enLCol )
      {
        if ( eLCol_Asks_load == enLCol )
          enLCol = eLCol_Asks_update;

        strT +=       '<DIV id="' + constQListID + '" >';
        strT +=         g_static_text[const_loading_ddd];
        strT +=       '</DIV>';
      }
      else
      {
        //eLCol_Q_load || eLCol_Q_update
        if ( eLCol_Q_load == enLCol )
          enLCol = eLCol_Q_update;

        strT +=       '<DIV id="' + constQSectID + '" >';
        strT +=         g_static_text[const_loading_ddd];
        strT +=       '</DIV>';
      }

      strT +=       '</DIV>';
      strT +=     '</TD>';
      strT +=     '<TD VALIGN="top" CLASS="tdHPRigth">';
      strT +=       '<TABLE WIDTH="100%" CELLSPACING="0" CELLPADDING="0">';
      strT +=         '<TR>';
      strT +=           '<TD VALIGN="top" ALIGN="center" WIDTH="50%">';
      strT +=             '<DIV id="' + constTopBot100ID + '" >';
      strT +=               g_static_text[const_loading_ddd];
      strT +=             '</DIV>';
      strT +=           '</TD>';
      strT +=         '</TR>';
      strT +=       '</TABLE>';
      strT +=     '</TD>';
      strT +=   '</TR>';
      strT += '</TABLE>';

      oInnerBody.innerHTML = strT;

      if ( eUI_load == enUI )
        enUI = eUI_update;

      if ( eT100_load == enT100 )
        enT100 = eT100_update;

      if ( eB100_load == enB100 )
        enB100 = eB100_update;

      if ( eCats_load == enCats )
        enCats = eCats_update;

      if ( eSurs_load == enSurs )
        enSurs = eSurs_update;
    }
    else
    {
      if ( eLCol_update == enLCol )
      {
        if ( IsElemExist(constQListID) )
          enLCol = eLCol_Asks_update;
        else
          enLCol = eLCol_Q_update;
      }
      else
      {
        if ( eLCol_Asks_update == enLCol || eLCol_Asks_load == enLCol )
        {
          if ( !IsElemExist(constQListID) )
          {
            strT  = '<DIV id="' + constQListID + '" >';
            strT +=   g_static_text[const_loading_ddd];
            strT += '</DIV>';

            SetInnerHtml(constLeftColID, strT);
            enLCol = eLCol_Asks_update;
          }
        }
        else
        {
          //eLCol_Q_load || eLCol_Q_update

          if ( !IsElemExist(constQSectID) )
          {
            strT  = '<DIV id="' + constQSectID + '" >';
            strT +=   g_static_text[const_loading_ddd];
            strT += '</DIV>';

            SetInnerHtml(constLeftColID, strT);
            enLCol = eLCol_Q_update;
          }
        }
      }
      SetIfInHtml(constHPHQListID, GetHPHQLHeader());
    }

    ShowUserInfo(enUI);

    if ( eT100_update == enT100 || eB100_update == enB100 )
      reload_bottop100();

    if ( eLCol_Asks_update == enLCol )
      LoadCategoriesTree(load_qlist);
    else
    {
      if ( eLCol_Q_update == enLCol )
        load_qsector();
    }

    if ( eCats_update == enCats )
      load_categories();

    if ( eSurs_update == enSurs )
      load_surveys();
  }
  else
    ferror(err002 + " Can not find :" + constInnerBodyID);
}


function SetQLTab(enQLTab)
{
  g_enQLTab = enQLTab;
  HomePage(eUI_load, eT100_load, eB100_load, eLCol_Asks_update);
}


//---------------------------------------------------------------Public-Profile


function ShowPublicProfile(strBtnCode)
{
  PublicProfile(strBtnCode, ePP_update, eUUMBrd_update);
}


function PublicProfile(strBtnCode)//, enProf, enUUMsgBrd, enT100, enB100, enUI
{
  var enProf     = ePP_load;
  var enUUMsgBrd = eUUMBrd_load;
  var enT100     = eT100_load;
  var enB100     = eB100_load;
  var enUI       = eUI_load;
  var bExist     = getEBId(constPProfilePageID) ? 1 : 0;
  var strT       = "";

  if ( 1 < arguments.length )
  {
    enProf = arguments[1];

    if ( 2 < arguments.length )
    {
      enUUMsgBrd = arguments[2];

      if ( 3 < arguments.length )
      {
        enT100 = arguments[3];

        if ( 4 < arguments.length )
        {
          enB100 = arguments[4];

          if ( 5 < arguments.length )
            enUI = arguments[5];
        }
      }
    }
  }

  if ( 0 == bExist )
  {
    strT += '<DIV CLASS="divPubProfHeader">';
    strT +=   g_static_text[const_pub_prof_header];
    strT += '</DIV>';

    strT += '<DIV CLASS="divPubProfHSpace">';
    strT +=   ' ';
    strT += '</DIV>';

    strT += '<TABLE id="' + constPProfilePageID + '" WIDTH="100%" CLASS="tableInnerPart" CELLSPACING="0" CELLPADDING="0">';
    strT +=   '<TR>';
    strT +=     '<TD ALIGN="center" VALIGN="top">';
    strT +=       '<DIV CLASS="divPubProfSurveysHead">';
    strT +=         '<TABLE CLASS="tablePubProfSurveys" WIDTH="171" CELLSPACING="0" CELLPADDING="0">';
    strT +=           '<TR>';
    strT +=             '<TD id="' + constPPSurveysHeadID + '" VALIGN="middle" CLASS="tdPubProfSurveys">';
    strT +=               g_static_text[const_loading_ddd];
    strT +=             '</TD>';
    strT +=           '</TR>';
    strT +=         '</TABLE>';
    strT +=       '</DIV>';
    strT +=       '<DIV id="' + constPPSurveysID + '">';
    strT +=         g_static_text[const_loading_ddd];
    strT +=       '</DIV>';
    strT +=     '</TD>';
    strT +=     '<TD CLASS="tdPubProfCenter" VALIGN="top" >';
    strT +=       '<DIV id="' + constPProfileID + '" >';
    strT +=         g_static_text[const_loading_ddd];
    strT +=       '</DIV>';
    strT +=       '<DIV id="' + constUUMsgBrdSectID + '" >';
    strT +=         g_static_text[const_loading_ddd];
    strT +=       '</DIV>';
    strT +=     '</TD>';
    strT +=     '<TD CLASS="tdPubProfRight" VALIGN="top" >';
    strT +=       '<TABLE CELLSPACING="0" CELLPADDING="0">';
    strT +=         '<TR>';
    strT +=           '<TD VALIGN="top" ALIGN="center" WIDTH="50%">';
    strT +=             '<DIV id="' + constTopBot100ID + '" >';
    strT +=               g_static_text[const_loading_ddd];
    strT +=             '</DIV>';
    strT +=           '</TD>';
    strT +=         '</TR>';
    strT +=       '</TABLE>';
    strT +=     '</TD>';
    strT +=   '</TR>';
    strT += '</TABLE>';

    if ( ePP_load == enProf )
      enProf = ePP_update;

    if ( eUUMBrd_load == enUUMsgBrd )
      enUUMsgBrd = eUUMBrd_update;

    if ( eT100_load == enT100 )
      enT100 = eT100_update;

    if ( eB100_load == enB100 )
      enB100 = eB100_update;

    if ( eUI_load == enUI )
      enUI = eUI_update;

    SetInnerHtml(constInnerBodyID, strT);
  }

  load_pub_prof_surveys(strBtnCode);

  if ( ePP_update == enProf )
    LoadPubProfile(strBtnCode);

  if ( eUUMBrd_update == enUUMsgBrd )
    ShowUUMsgBoard(strBtnCode);

  ShowUserInfo(enUI);

  if ( eT100_update == enT100 || eB100_update == enB100 )
    reload_bottop100();
}


//--------------------------------------------------------------------User-info


function ShowUserInfo(enUI)
{
  SetInnerHtml(constUserSectionID, g_static_text[const_loading_ddd]);

  if ( eUI_load == enUI )
  {
    var bExist = getEBId(constUserInfoID) ? 1 : 0;
    if ( 0 == bExist )
      enUI = eUI_update;
  }

  if ( eUI_update == enUI )
    LoadUserInfo();
  else
  {
    if ( eUI_login == enUI )
      ShowLogin();
    else
    {
      if ( eUI_change_name == enUI )
        ChangeNamePage();
      else
      {
        if ( eUI_registration == enUI )
          LoadRegistration();
      }
    }
  }
}


function LoadUserInfo()
{
  xajax_load_user_info(constXjxLoadUserInfo);
}


function HandleXjxLoadUserInfo()
{
  var nRC = parseInt(g_arrXajaxRets[1]);

  switch(nRC)
  {
    case 1:
      UpdateUserInfo();
    break;

    case 2://anonymous user
      SetInnerHtml(constUserSectionID, g_static_text[const_must_allow_cookies]);
    break;

    //case :
    default:
      SetInnerHtml(
                   constUserSectionID,
                   g_static_text[const_internal_error] + err010
                  );
  }
}


function UpdateUserInfo()
{
  ValidateXajaxRets(5);

  var strT      = "";
  var strName   = g_arrXajaxRets[2];// - user name, empty for new user
  var bLoggedIn = g_arrXajaxRets[3];// - 1/0, logged in/out
  var bPassword = g_arrXajaxRets[4];// - 1/0, password

  if ( "" == strName )
  {
    strName   = g_static_text[const_new_user_name];
    bLoggedIn = 0; //safe
  }

  g_strUserName = strName;

  strT += '<TABLE id="' + constUserInfoID + '" CELLSPACING="0">';
  strT +=   '<TR>';
  strT +=     '<TD VALIGN="top" ALIGN="right">';
  strT +=        g_static_text[const_hello_];
  strT +=     '</TD>';

  strT +=     '<TD ALIGN="left" STYLE="padding-right:12px;">';
  strT +=        strName;
  if ( 1 == bLoggedIn )
  {
    strT +=      '<BR />';
    strT +=      '<A HREF="javascript:LoadUserProfile();" >';
    strT +=         g_static_text[const_href_profile_info];
    strT +=      '</A>';
  }
  else
  {
    if ( 0 == bPassword )
    {
      strT +=    '<BR />';
      strT +=    '<A HREF="javascript:ChangeNamePage();" >';
      strT +=       g_static_text[const_href_change_name];
      strT +=    '</A>';
    }
  }
  strT +=     '</TD>';

  strT +=     '<TD VALIGN="top" STYLE="padding-right:12px;">';
  if ( 0 == bLoggedIn )
  {
    strT +=       '<A HREF="javascript:Login();" >';
    strT +=         g_static_text[const_href_login];
    strT +=       '</A>';
  }
  else
  {
    strT +=       '<A HREF="javascript:Logout();" >';
    strT +=         g_static_text[const_href_logout];
    strT +=       '</A>';
  }
  strT +=     '</TD>';

  strT +=     '<TD VALIGN="top" STYLE="padding-right:12px;">';
  if ( 0 == bLoggedIn )
  {
    strT +=       '<A HREF="javascript:Registration();" >';
    strT +=         g_static_text[const_href_registration];
    strT +=       '</A>';
  }
  else
  {
    strT +=       '<A HREF="javascript:AddQuestion();" >';
    strT +=         g_static_text[const_href_admin_console];
    strT +=       '</A>';
    strT +=       '<BR>';
    strT +=       '<A HREF="javascript:CreateSurvey();" >';
    strT +=         g_static_text[const_href_create_survey];
    strT +=       '</A>';
  }
  strT +=     '</TD>';

//  strT +=     '<TD VALIGN="top">';
//  strT +=       const_language_name;
//  strT +=       '<A id="' + constChangeLangBtnID + '" HREF="javascript:ShowLanguageDiv();" >';
//  strT +=         g_static_text[const_href_change_lang];
//  strT +=       '</A>';
//  strT +=     '</TD>';

  strT +=   '</TR>';
  strT += '</TABLE>';

  SetInnerHtml(constUserSectionID, strT);
}


//--------------------------------------------------------------Change-language


function ShowLanguageDiv()
{
  var oParent  = GetByID(constChangeLangBtnID);
  var oLangDiv = GetByID(constLanguageDivID);

  if ( oLangDiv && oParent )
  {
    SetInnerHtml(constLanguageStatusID, "");

    var coors = FindPos(oParent);
    var x     = coors[0];
    var y     = coors[1] + oParent.offsetHeight;

    oLangDiv.style.left = x + "px";
    oLangDiv.style.top  = y + "px";

    if ( "none" == oLangDiv.style.display )
    {
      oLangDiv.style.display  = '';

      x = x - (oLangDiv.offsetWidth - oParent.offsetWidth);
      oLangDiv.style.left = x + "px";
    }
    else
      oLangDiv.style.display = "none";
  }
}


function HideLanguageDiv()
{
  var o = GetByID(constLanguageDivID);

  if ( o && o.style )
    o.style.display = "none";
}


function SetLanguage(strLangName)
{
  SetInnerHtml(constLanguageStatusID, g_static_text[const_processing_ddd]);
  xajax_set_lang(constXjxSetLang, strLangName);
}


function HandleXjxSetLang()
{
  var nRC     = parseInt(g_arrXajaxRets[1]);
  var strLang = "";

  switch(nRC)
  {
    case 1://success
      window.location = "http://www.kribla.com/index.php";
    break;

    case 2://anonymous user
      ValidateXajaxRets(4);
      strLang = g_arrXajaxRets[2];
      if ( 2 != strLang.length )
        strLang = "en";

      window.location = "http://www.kribla.com/index.php?lang=" + strLang;
    break;

    case 3://unknown language
      SetInnerHtml(constLanguageStatusID, g_static_text[const_err_unknown_language]);
    break;

    default:
      SetInnerHtml(constLanguageStatusID, g_static_text[const_internal_error] + g_static_text[const_unk_result] + "'" + nRC + "'");
  }
}


//-------------------------------------------------------------------Categories


function load_categories()
{
  LoadCategoriesTree(UpdateCatList);
}


function UpdateCatList()
{
  var i;
  var oCat;
  var strT    = "";
  var arrCats = new Array();

  if ( g_arrCategories.root )
  {
    arrCats[0] = new Array();
    for(i = 0; i < g_arrCategories.root.length; i++)
    {
      oCat      = new Object;
      oCat.id   = g_arrCategories.root[i].id;
      oCat.name = g_arrCategories.root[i].name;

      arrCats[0][i] = oCat;
    }
  }

  var nCur = -1;

  if ( 0 < g_arrCategories.length
       &&
       0 < g_nCurCategory
       &&
       0 <= g_arrCatIndexes[g_nCurCategory]
     )
  {
    var oCur = g_arrCategories[g_arrCatIndexes[g_nCurCategory]];

    while(oCur)
    {
      arrCats[oCur.level] = new Array();//level starts with 1

      if ( oCur.childs )
      {
        for(i = 0; i < oCur.childs.length; i++)
        {
          oCat      = new Object;
          oCat.id   = oCur.childs[i].id;
          oCat.cur  = nCur == oCat.id;
          oCat.name = oCur.childs[i].name;

          arrCats[oCur.level][i] = oCat;
        }
      }

      nCur = oCur.id;
      if ( 0 < oCur.parent_id && 0 <= g_arrCatIndexes[oCur.parent_id] )
        oCur = g_arrCategories[g_arrCatIndexes[oCur.parent_id]];
      else
        oCur = null;
    }
  }

  g_arrCurCategory = new Array();

  if ( arrCats.length <= 0 )
    strT = g_static_text[const_internal_error] + err026;
  else
  {
    oCat      = new Object;
    oCat.id   = -1;
    oCat.name = g_static_text[const_top_category_name];

    arrCats[0].unshift(oCat);

    for(i = 0; i < arrCats[0].length; i++)
      arrCats[0][i].cur = nCur == arrCats[0][i].id;

    for(l = 0; l < arrCats.length; l++)
    {
      if ( 0 < arrCats[l].length )
      {
        strT += '<DIV ' + (0 == l ? ' CLASS="divCategoryLevel1">' : ' CLASS="divCategoryLevelN">');

        for(i = 0; i < arrCats[l].length; i++)
        {
          if ( arrCats[l][i].cur )
          {
            strT += '<STRONG>';
            g_arrCurCategory[g_arrCurCategory.length] = arrCats[l][i];
          }

          strT += '<A HREF="javascript:SetCurCategory(' + arrCats[l][i].id + ');" CLASS="aCategoryLevel" >';
          strT +=   arrCats[l][i].name;
          strT += '</A>  ';

          if ( arrCats[l][i].cur )
            strT += '</STRONG>';
        }
        strT += '</DIV>';
      }
    }
  }

  SetInnerHtml(constQCategoriesID, strT);
  OnCurCategoryChanged();
}


function SetCurCategory(nCat)
{
  g_nCurCategory = ParseInt(nCat, -1);

  if ( "CreateSurvey" == g_strCurPage )
    CreateSurvey(g_objCS.m_nSurveyID, eCSAsks_update, eCats_update);
  else
    HomePage(eUI_load, eT100_update, eB100_update, eLCol_Asks_update, eCats_update, eSurs_update);
}


function GetCurCategoryLine()
{
  var i, strT = " ";

  if ( 0 < g_arrCurCategory.length )
  {
    strT  = '<A HREF="javascript:SetCurCategory(' + g_arrCurCategory[0].id + ');" CLASS="aCategoryLine" >';
    strT +=   g_arrCurCategory[0].name;
    strT += '</A>';

    for(i = 1; i < g_arrCurCategory.length; i++)
    {
      strT += ' &gt; ';
      strT += '<A HREF="javascript:SetCurCategory(' + g_arrCurCategory[i].id + ');" CLASS="aCategoryLine" >';
      strT +=   g_arrCurCategory[i].name;
      strT += '</A>';
    }
  }

  return strT;
}


function OnCurCategoryChanged()
{
  var strT = GetCurCategoryLine();

  SetIfInHtml(constCurCategoryID, strT);
}


//------------------------------------------------------------------Pub-Profile


function LoadPubProfile(strBtnCode)
{
  xajax_load_pub_profile(constDXjxLoadPubProfile, strBtnCode);
}


function HandleDXjxLoadPubProfile(oXMLElem, nRC)
{
  switch(nRC)
  {
    case 1://success
      UpdatePubProfile(oXMLElem);
    break;

    case 2://user not found
      SetInnerHtml(constPProfileID, g_static_text[const_pub_profile_not_found]);
    break;

    default:
      rcerr(err032, nRC);
  }
}


function UpdatePubProfile(oXMLElem)
{
  var strT      = "";
  var oXMLPProf = GetNamedChild(oXMLElem, "public_profile");

  if ( oXMLPProf )
  {
    var strName    = QS(oXMLPProf.getAttribute("name"));
    var strBtnCode = QS(oXMLPProf.getAttribute("btn_code"));
    var strPicUrl  = QS(oXMLPProf.getAttribute("pic"));

    strT += '<TABLE CELLSPACING="0" CELLPADDING="0">';
    strT +=   '<TR>';
    strT +=     '<TD COLSPAN="2">';
    strT +=       '<TABLE CELLPADDING="0" CELLSPACING="0">';
    strT +=         '<TR>';
    strT +=           '<TD ALIGN="center" VALIGN="middle" HEIGHT="' + constPicHeight + '" WIDTH="' + constPicWidth + '">';
    strT +=             '<IMG SRC="' + strPicUrl + '">';
    strT +=           '</TD>';
    strT +=         '</TR>';
    strT +=       '</TABLE>';
    strT +=     '</TD>';
    strT +=   '</TR>';
    strT +=   '<TR>';
    strT +=     '<TD>';
    strT +=       g_static_text[const_name];
    strT +=     '</TD>';
    strT +=     '<TD>';
    strT +=       strName;
    strT +=     '</TD>';
    strT +=   '</TR>';
    strT +=   '<TR>';
    strT +=     '<TD COLSPAN="2">';
    strT +=       '<IMG SRC="' + constUDistance + '?code=' + strBtnCode + '&style=classic">';
    strT +=     '</TD>';
    strT +=   '</TR>';
    strT += '</TABLE>';
  }
  else
    strT = g_static_text[const_internal_error] + err033 + " " + g_static_text[const_pub_profile_not_found];

  SetInnerHtml(constPProfileID, strT);
}


//-------------------------------------------------------------Add-Rss-Question


function AddRssQuestion(item_id)
{
  xajax_load_rss_question(constDXjxLoadRssQuestion, item_id);
}


function HandleDXjxLoadRssQuestion(oXMLElem, nRC)
{
  switch(nRC)
  {
    case 1://success
      FillAQ(oXMLElem);
      AddQuestion();
    break;

    case 2://logged out
      GoToLogin(g_static_text[const_please_login]);
    break;

    default:
      rcerr(err062, nRC);
  }
}


function FillAQ(oXMLElem)
{
  var oXMLItem = GetNamedChild(oXMLElem, "item");

  if ( oXMLItem && oXMLItem.childNodes && 0 < oXMLItem.childNodes.length )
  {
    var i, j;
    var oXMLNode;
    var strName;

    g_objAQ.m_arrOpinions = new Array();
    g_objAQ.m_strObject   = "";

    for(i = 0; i < oXMLItem.childNodes.length; i++)
    {
      oXMLNode = oXMLItem.childNodes[i];
      strName  = new String(oXMLNode.nodeName);

      if ( "title" == strName )
      {
        g_objAQ.m_strQuestion = UnQS(oXMLNode.textContent)
      }
      else
      {
        if ( "description" == strName )
        {
          g_objAQ.m_strDescription = UnQS(oXMLNode.textContent)
        }
        else
        {
          if ( "category" == strName )
          {
            g_objAQ.m_nCurCategory = ParseInt(oXMLNode.textContent);
          }
          else
          {
            if ( "keywords" == strName )
            {
              g_objAQ.m_strKeyWords = UnQS(oXMLNode.textContent);
            }
            else
            {
              if ( "context" == strName )
              {
                if ( oXMLNode.childNodes && 0 < oXMLNode.childNodes.length )
                {
                  for(j = 0; j < oXMLNode.childNodes.length; j++)
                  {
                    if ( "objects" == oXMLNode.childNodes[j].nodeName )
                    {
                      //g_objAQ.m_strObject =
                    }
                    else
                    {
                      if ( "links" == oXMLNode.childNodes[j].nodeName )
                      {
                        var l, oLinks = oXMLNode.childNodes[j];
                        if ( oLinks.childNodes )
                        {
                          for(l = 0; l < oLinks.childNodes.length; l++)
                          {
                            if ( "link" == oLinks.childNodes[l].nodeName )
                            {
                              g_objAQ.m_strLink      = oLinks.childNodes[l].getAttribute("src"  );
                              g_objAQ.m_strLinkTitle = UnQS(oLinks.childNodes[l].getAttribute("title"));
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    if ( g_objAQ.m_arrOpinions.length <= 0 )
      g_objAQ.m_arrOpinions[0] = "";
    g_objAQ.m_nOpinionsCount = g_objAQ.m_arrOpinions.length;
  }
}


//-----------------------------------------------------------------Add-Question


function AddQuestion()
{
  var enUI = eUI_load;

  if ( 0 < arguments.length )
    enUI = arguments[0];

  var oInnerBody = GetByID(constInnerBodyID);

  if ( oInnerBody )
  {
    var bExist = getEBId(constAddQPageID) ? 1 : 0;
    var strT   = "";

    if ( 0 == bExist )
    {
      strT += '<TABLE id="' + constAddQPageID + '" WIDTH="100%" CLASS="tableInnerPart" CELLSPACING="0" CELLPADDING="0">';
      strT +=   '<TR>';
      strT +=     '<TD STYLE="padding-bottom:22px;">&nbsp;';
      strT +=     '</TD>';
      strT +=   '</TR>';

      strT +=   '<TR>';
      strT +=     '<TD id="' + constQuestionTypeID + '" CLASS="tdAQTypeSect">';
      strT +=       g_static_text[const_loading_ddd];
      strT +=     '</TD>';
      strT +=   '</TR>';

      strT +=   '<TR>';
      strT +=     '<TD>';
      strT +=       '<DIV id="' + constAddQuestionID + '" >';
      strT +=         g_static_text[const_loading_ddd];
      strT +=       '</DIV>';
      strT +=     '</TD>';
      strT +=   '</TR>';
      strT += '</TABLE>';

      oInnerBody.innerHTML = strT;
    }

    ShowUserInfo(enUI);
    LoadCategoriesTree(ShowAddQuestion);
  }
  else
    ferror(err042 + g_static_text[const_can_not_find_elem] + constInnerBodyID);
}


function ReShowAddQuestion()
{
  var oTopTable = getEBId(constAddQPageID);

  if ( oTopTable )
    ShowAddQuestion();
}


function ShowAddQuestion()
{
  var i;

  if ( g_objAQ.m_nOpinionsCount <= 0 )
    g_objAQ.m_nOpinionsCount++;

  for(i = g_objAQ.m_arrOpinions.length; i < g_objAQ.m_nOpinionsCount; i++)
    g_objAQ.m_arrOpinions[i] = "";

  var bFact = eAQ_Fact == g_objAQ.m_enType;
  var b     = bFact;
  var strT  = "";

  //constQuestionTypeID
  strT += '<TABLE CELLSPACING="0" CELLPADDING="0">';
  strT +=   '<TR>';
  strT +=     '<TD CLASS="' + (b ? 'tdAQActiveType' : 'tdAQType') + '">';
  strT +=       (b ? '&gt;' : '&nbsp;');
  strT +=       '<A HREF="javascript:AQSetType(' + eAQ_Fact + ');" CLASS="' + (b ? 'aAQActiveType' : 'aAQType') + '">';
  strT +=         g_static_text[const_aq_fact];
  strT +=       '</A>';
  strT +=     '</TD>';
  b = !b;
  strT +=     '<TD CLASS="' + (b ? 'tdAQActiveType' : 'tdAQType') + '">';
  strT +=       (b ? '&gt;' : '&nbsp;');
  strT +=       '<A HREF="javascript:AQSetType(' + eAQ_Ask  + ');" CLASS="' + (b ? 'aAQActiveType' : 'aAQType') + '">';
  strT +=         g_static_text[const_aq_inquirer];
  strT +=       '</A>';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT += '</TABLE>';

  SetInnerHtml(constQuestionTypeID, strT);

  //constAddQuestionID
  strT  = "";
  strT += '<TABLE id="' + constAQTableID + '" CELLSPACING="0" CELLPADDING="0">';
  strT +=   '<TR>';
  strT +=     '<TD id="' + constAQTableCol1ID + '" >&nbsp;</TD>';
  strT +=     '<TD id="' + constAQTableCol2ID + '" VALIGN="top">';
  strT +=       g_static_text[const_aq_category];
  strT +=     '</TD>';
  strT +=     '<TD id="' + constAQTableCol3ID + '">';

  if ( bFact )
  {
    strT +=     '<SELECT id="' + constAQCategoryID + '">';
    strT +=       '<OPTION VALUE="0"'
                    + (0 == g_objAQ.m_nCurCategory ? ' SELECTED ' : ' ') +
                  '>'
                    + g_static_text[const_aq_please_set_category] +
                  '</OPTION>';

    for(i = 0; i < g_arrCategories.length; i++)
    {
      if ( constInquirerCat_id != g_arrCategories[i].id )
      {
        strT +=   '<OPTION VALUE="' + g_arrCategories[i].id + '"';

        if ( g_objAQ.m_nCurCategory == g_arrCategories[i].id )
          strT +=   ' SELECTED ';

        strT +=   '>' + g_arrCategories[i].FullName + '</OPTION>';
      }
    }

    strT +=     '</SELECT>';
  }
  else
  {
    if ( g_arrCatIndexes[constInquirerCat_id] && g_arrCategories[g_arrCatIndexes[constInquirerCat_id]] )
      strT += g_arrCategories[g_arrCatIndexes[constInquirerCat_id]].FullName;
  }

  strT +=     '</TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD>&nbsp;</TD>';
  strT +=     '<TD VALIGN="top">';
  strT +=       g_static_text[const_aq_question];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       '<INPUT id="' + constAQQuestionID + '" VALUE="' + HTMLasText(g_objAQ.m_strQuestion) + '" TYPE="text" MAXLENGTH=254>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD>&nbsp;</TD>';
  strT +=     '<TD VALIGN="top">';
  strT +=       g_static_text[const_aq_description];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       '<TEXTAREA id="' + constAQDescriptionID + '" STYLE="height:7em;">';
  strT +=         HTMLasText(g_objAQ.m_strDescription);
  strT +=       '</TEXTAREA>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  if ( !bFact )
  {
    for(i = 0; i < g_objAQ.m_nOpinionsCount - 1; i++)
    {
      strT += '<TR>';
      strT +=   '<TD>&nbsp;</TD>';
      strT +=   '<TD>';
      strT +=     g_static_text[const_aq_opinion];
      strT +=   '</TD>';
      strT +=   '<TD>';
      strT +=     GetAQOpinionInput(i, g_objAQ.m_arrOpinions[i]);
      strT +=   '</TD>';
      strT += '</TR>';
    }

    strT += '<TR>';
    strT +=   '<TD>';
    if ( 1 < g_objAQ.m_nOpinionsCount )
    {
      strT +=   '<A HREF="javascript:AQRemoveOpinion();" >';
      strT +=     '<IMG SRC="/images/minus.png" BORDER="0" ALT="-" >';
      strT +=   '</A>';
      strT +=   '<BR>';
    }
    strT +=     '<A HREF="javascript:AQAddOpinion(' + i + ');" >';
    strT +=       '<IMG SRC="/images/plus.png" BORDER="0" ALT="+" >';
    strT +=     '</A>';
    strT +=   '</TD>';
    strT +=   '<TD>';
    strT +=     g_static_text[const_aq_opinion];
    strT +=   '</TD>';
    strT +=   '<TD>';
    strT +=     GetAQOpinionInput(i, g_objAQ.m_arrOpinions[i]);
    strT +=   '</TD>';
    strT += '</TR>';

    //respondent can add his own answer
    strT += '<TR>';
    strT +=   '<TD>&nbsp;</TD>';
    strT +=   '<TD>&nbsp;</TD>';
    strT +=   '<TD VALIGN="middle">';
    strT +=     '<INPUT TYPE="checkbox" id="' + constAQNonFixedAnswrsID + '"';
    strT +=       ' onclick="javascript:OnNonFixAnswers()"';

    if ( g_objAQ.m_bNonFixedAnsws )
      strT +=       ' CHECKED ';

    strT +=     '>';
    strT +=     g_static_text[const_aq_nonfixed_answers];
    strT +=     '<DIV id="' + constAQNonFAnsStatusID + '">';
    strT +=     '</DIV>';
    strT +=   '</TD>';
    strT += '</TR>';
  }
  else
  {
    strT += '<TR>';
    strT +=   '<TD>&nbsp;</TD>';
    strT +=   '<TD>';
    strT +=     g_static_text[const_aq_opinion];
    strT +=   '</TD>';
    strT +=   '<TD>';
    strT +=     GetAQOpinionInput(0, g_objAQ.m_arrOpinions[0]);
    strT +=   '</TD>';
    strT += '</TR>';
  }

  //key words:
  strT +=   '<TR>';
  strT +=     '<TD COLSPAN="3" STYLE="padding-top:5px;"></TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD>&nbsp;</TD>';
  strT +=     '<TD>';
  strT +=       g_static_text[const_aq_key_words];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       '<TEXTAREA id="' + constAQKeyWordsID + '" STYLE="height:2.5em;">';
  strT +=         HTMLasText(g_objAQ.m_strKeyWords);
  strT +=       '</TEXTAREA>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  //link
  strT +=   '<TR>';
  strT +=     '<TD COLSPAN="3" STYLE="padding-top:5px;"></TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD>&nbsp;</TD>';
  strT +=     '<TD>';
  strT +=       g_static_text[const_aq_link];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       '<INPUT id="' + constAQLinkID + '" VALUE="' + HTMLasText(g_objAQ.m_strLink) + '" TYPE="text">';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD>&nbsp;</TD>';
  strT +=     '<TD>';
  strT +=       g_static_text[const_aq_link_title];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       '<INPUT id="' + constAQLinkTitleID + '" VALUE="' + HTMLasText(g_objAQ.m_strLinkTitle) + '" TYPE="text">';
  strT +=     '</TD>';
  strT +=   '</TR>';

  //object
  strT +=   '<TR>';
  strT +=     '<TD COLSPAN="3" STYLE="padding-top:5px;"></TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD>&nbsp;</TD>';
  strT +=     '<TD>';
  strT +=       g_static_text[const_aq_object];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       '<TEXTAREA id="' + constAQObjectID + '" STYLE="  height:4em;">';
  strT +=         HTMLasText(g_objAQ.m_strObject);
  strT +=       '</TEXTAREA>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  //preview btn
  strT +=   '<TR>';
  strT +=     '<TD>&nbsp;</TD>';
  strT +=     '<TD id="' + constAQStatusID + '" COLSPAN="2" CLASS="tdAQStatus">';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD COLSPAN="3" ALIGN="right" STYLE="padding:6px;">';
  strT +=       '<DIV class="no_decor666666">';
  strT +=         '<A HREF="javascript:OnPreviewAQ();" class="href_btn">';
  strT +=           g_static_text[const_href_aq_preview_btn];
  strT +=         '</A>';
  strT +=       '</DIV>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT += '</TABLE>';

  SetInnerHtml(constAddQuestionID, strT);
  AQArrangeInputCol();
}


function AQArrangeInputCol()
{
  var oTopTable = getEBId(constAddQPageID);
  var oTable    = getEBId(constAQTableID);
  var oCol1     = getEBId(constAQTableCol1ID);
  var oCol2     = getEBId(constAQTableCol2ID);
  var oCol3     = getEBId(constAQTableCol3ID);

  if ( oTopTable && oTable && oCol1 && oCol2 && oCol3 )
  {
    var nWidth = oTopTable.offsetWidth;
    var w1     = oCol1.offsetWidth;
    var w2     = oCol2.offsetWidth;
    var w1p    = Math.floor(w1 * 100 / nWidth + 1);
    var w2p    = Math.floor(w2 * 100 / nWidth + 1);

    if ( 30 < w1p )
    {
      w1p = 30;
      w1  = "30%";
    }
    else
      w1  = w1 + "px";

    if ( 30 < w2p )
    {
      w2p = 30;
      w2  = "30%";
    }
    else
      w2  = w2 + "px";

    var w3p  = 100 - (w1p + w2p);
    var w3in = 5 < w1p ? 95 : 100 - w1p;

    oTable.style.width = "100%";
    oCol1 .style.width = w1;
    oCol2 .style.width = w2;
    oCol3 .style.width = w3p + "%";

    var i;
    var arrElems = new Array();

    for(i = 0; i < g_objAQ.m_nOpinionsCount; i++)
    {
      arrElems[i] = getEBId(constAQOpinion_id_ + i);
    }

    arrElems[arrElems.length] = getEBId(constAQCategoryID   );
    arrElems[arrElems.length] = getEBId(constAQQuestionID   );
    arrElems[arrElems.length] = getEBId(constAQDescriptionID);
    arrElems[arrElems.length] = getEBId(constAQKeyWordsID   );
    arrElems[arrElems.length] = getEBId(constAQLinkID       );
    arrElems[arrElems.length] = getEBId(constAQLinkTitleID  );
    arrElems[arrElems.length] = getEBId(constAQObjectID     );

    w3in = w3in + "%";
    for(i = 0; i < arrElems.length; i++)
    {
      if ( arrElems[i] )
        arrElems[i].style.width = w3in;
    }
  }
}


function AQSetType(enAQType)
{
  if ( getEBId(constAQQuestionID) )
    QApage2vars();

  g_objAQ.m_enType       = enAQType;
  g_objAQ.m_nCurCategory = eAQ_Fact == g_objAQ.m_enType ? 0 : constInquirerCat_id;
  ShowAddQuestion();
}


function AQRemoveOpinion()
{
  QApage2vars();

  if ( 1 < g_objAQ.m_nOpinionsCount )
    g_objAQ.m_nOpinionsCount--;

  if ( g_objAQ.m_nOpinionsCount < 2 )
    g_objAQ.m_bNonFixedAnsws = true;

  ShowAddQuestion();
}


function AQAddOpinion(n)
{
  QApage2vars();

  g_objAQ.m_nOpinionsCount++;

  if ( g_objAQ.m_arrOpinions.length < g_objAQ.m_nOpinionsCount )
    g_objAQ.m_arrOpinions[g_objAQ.m_arrOpinions.length] = "";

//  var i;
//  for(i = g_objAQ.m_arrOpinions.length - 1; n < i; i--)
//    g_objAQ.m_arrOpinions[i] = g_objAQ.m_arrOpinions[i - 1];
//
//  g_objAQ.m_arrOpinions[n + 1] = "";

  if ( constAQMaxUOpinionsCount <= g_objAQ.m_nOpinionsCount )
    g_objAQ.m_bNonFixedAnsws = false;

  ShowAddQuestion();
}


function OnNonFixAnswers()
{
  QApage2vars();

  var i, n = 0;

  for(i = 0; i < g_objAQ.m_nOpinionsCount; i++)
  {
    if ( "" != TrimSpaces(g_objAQ.m_arrOpinions[i]) )
      n++;
  }

  var strState = "";
  if ( n < 2 )
  {
    g_objAQ.m_bNonFixedAnsws = true;
    SetChecked(constAQNonFixedAnswrsID, true);
    strState = g_static_text[const_aq_fix_2_ans_requred];
  }

  if ( constAQMaxUOpinionsCount <= n || constAQMaxUOpinionsCount <= g_objAQ.m_nOpinionsCount )
  {
    g_objAQ.m_bNonFixedAnsws = false;
    SetChecked(constAQNonFixedAnswrsID, false);
    strState = ReplaceTxt(g_static_text[const_aq_max_nonfix_ans_allow], "{N}", constAQMaxUOpinionsCount);
  }

  SetIfInHtml(constAQNonFAnsStatusID, strState);
}


function GetAQOpinionInput(n, str)
{
  var strT = "";

  strT += '<TEXTAREA id="' + constAQOpinion_id_ + n + '" STYLE="height:3em;" '
            + 'onkeypress="OnAQNOKeyPress(' + n + ');" '
            + 'onkeyup="OnAQNOKeyUp(' + n + ');" '
            + 'onfocus="OnAQNOFocus(' + n + ');"'
            + 'onfocus="OnAQNOFocus(' + n + ');"'
            + 'onblur="OnAQNOFocusOut(' + n + ');"'
            +
          '>';

  strT +=   HTMLasText(str);
  strT += '</TEXTAREA>';
  strT += '<DIV id="' + constAQOCharsAvable_id_ + n + '" STYLE="text-align:right; padding: 0px 20px 5px 0px;">';
  strT += '</DIV>';

  return strT;
}


function OnAQNOKeyUp   (n){ SetAQOAvailableChars(n); }
function OnAQNOKeyPress(n){ SetAQOAvailableChars(n); }
function OnAQNOFocus   (n){ SetAQOAvailableChars(n); }

function OnAQNOFocusOut(n)
{
  SetIfInHtml(constAQOCharsAvable_id_ + n, "");
}


function SetAQOAvailableChars(n)
{
  var str  = GetValue(constAQOpinion_id_ + n, "");
  var nLen = QS(str).length;

  if ( constMaxOpinionLength < nLen )
  {
    str  = GetQuotLimitSrt(str, constMaxOpinionLength);
    nLen = constMaxOpinionLength;
    SetValue(constAQOpinion_id_ + n, str);
  }

  var chars = constMaxOpinionLength - nLen;
  if ( chars <= 0 )
    chars = '<SPAN STYLE="color:#FF0000;">0</SPAN>';

  SetIfInHtml(
              constAQOCharsAvable_id_ + n,
              ReplaceTxt(g_static_text[const_chars_available], "{chars}", chars)
             );
}


function GetQuotLimitSrt(str, nMaxLen)
{
  if ( str && 0 < nMaxLen )
  {
    var nLen = QS(str).length;

    if ( nMaxLen < nLen )
    {
      nLen = nMaxLen + 1;
      do
      {
        nLen--;
        str = str.substr(0, nLen);
      }
      while(nMaxLen < QS(str).length && 0 < nLen);
    }
  }

  return str;
}


function QApage2vars()
{
  var i;
  var bFact     = eAQ_Fact == g_objAQ.m_enType;
  var nOpinions = bFact ? 1 : g_objAQ.m_nOpinionsCount;

  g_objAQ.m_nCurCategory   = bFact ? GetCmbValue(constAQCategoryID) : constInquirerCat_id;
  g_objAQ.m_strQuestion    = TrimSpaces(GetValue(constAQQuestionID   , ""));
  g_objAQ.m_strDescription = TrimSpaces(GetValue(constAQDescriptionID, ""));

  for(i = 0; i < nOpinions; i++)
    g_objAQ.m_arrOpinions[i] = TrimSpaces(GetValue(constAQOpinion_id_ + i, ""));

  g_objAQ.m_bNonFixedAnsws = bFact ? true : GetChecked(constAQNonFixedAnswrsID);
  g_objAQ.m_strKeyWords    = TrimSpaces(GetValue(constAQKeyWordsID , ""));
  g_objAQ.m_strLink        = TrimSpaces(GetValue(constAQLinkID     , ""));
  g_objAQ.m_strLinkTitle   = TrimSpaces(GetValue(constAQLinkTitleID, ""));
  g_objAQ.m_strObject      = TrimSpaces(GetValue(constAQObjectID   , ""));
}


function OnPreviewAQ()
{
  QApage2vars();

  if ( g_objAQ.m_strQuestion.length < constAQQuestionMinLen )
  {
    SetInnerHtml(constAQStatusID, g_static_text[const_aq_question_too_short]);
    return;
  }

  if ( eAQ_Fact == g_objAQ.m_enType )
  {
    if ( Split(g_objAQ.m_strDescription, " ,.;\n").length < constAQMinFactWordsCount )
    {
      str = ReplaceTxt(g_static_text[const_aq_need_description], "{min_required}", constAQMinFactWordsCount);

      SetInnerHtml(constAQStatusID, str);
      return;
    }
  }

  if ( g_objAQ.m_nCurCategory <= 0 )
  {
    SetInnerHtml(constAQStatusID, g_static_text[const_aq_wrong_category]);
    return;
  }

  var i;
  var str;
  var nOpsCount = 0;

  if ( eAQ_Fact != g_objAQ.m_enType )
  {
    for(i = 0; i < g_objAQ.m_nOpinionsCount; i++)
    {
      if ( 0 < g_objAQ.m_arrOpinions[i].length )
        nOpsCount++;
    }

    if ( nOpsCount < constAQMinOpinionsCount )
    {
      str = ReplaceTxt(g_static_text[const_aq_need_more_opinions], "{min_required}", constAQMinOpinionsCount);

      SetInnerHtml(constAQStatusID, str);
      return;
    }
  }

  if ( 0 < g_objAQ.m_strLink.length && g_objAQ.m_strLinkTitle.length <= 0 )
  {
    SetInnerHtml(constAQStatusID, g_static_text[const_aq_require_link_title]);
    return;
  }

  if ( 0 < g_objAQ.m_strLinkTitle.length && g_objAQ.m_strLink.length <= 0 )
  {
    SetInnerHtml(constAQStatusID, g_static_text[const_aq_link_for_title]);
    return;
  }

  if ( HasSubStrNoCase(g_objAQ.m_strLink, "javascript:", "vbscript:", "'", '"', ">", "<", " ") )
  {
    SetInnerHtml(constAQStatusID, g_static_text[const_aq_link_bad_format]);
    return;
  }

  if ( Split(g_objAQ.m_strKeyWords, constKWordSeporators).length < constAQMinKWordsCount )
  {
    str = ReplaceTxt(g_static_text[const_aq_kwords_required], "{min_required}", constAQMinKWordsCount);

    SetInnerHtml(constAQStatusID, str);
    return;
  }

  AQShowPreview();
}


function AQShowPreview()
{
  var i;
  var nCat = -1;
  for(i = 0; i < g_arrCategories.length; i++)
  {
    if ( g_arrCategories[i].id == g_objAQ.m_nCurCategory )
      nCat = i;
  }

  var oA;
  var oQ        = new Object();
  var nOpinions = eAQ_Fact == g_objAQ.m_enType ? 1 : g_objAQ.m_nOpinionsCount;
  var str       = ReplaceTxt(g_arrCategories[nCat].FullName, "/", " > ");
  var strT      = "";

  oQ.bPreview     = true;
  oQ.bComments    = false;
  oQ.q_id         = 0;
  oQ.q_txt        = QS(g_objAQ.m_strQuestion);
  oQ.description  = QS(g_objAQ.m_strDescription);
  oQ.author       = "you";//todo
  oQ.author_pic   = "";   //todo
  oQ.author_bcode = "you";//todo
  oQ.q_pop        = "000";
  oQ.ua_id        = -1;
  oQ.pub_stamp    = Math.floor((new Date()).valueOf()/1000);
  oQ.answers      = new Array();

  for(i = 0; i < nOpinions; i++)
  {
    if ( 0 < g_objAQ.m_arrOpinions[i].length )
    {
      oA              = new Object;
      oA.a_txt        = QS(g_objAQ.m_arrOpinions[i])
      oA.a_pop        = 0;
      oA.author       = "you";//todo
      oA.author_bcode = "you";//todo
      oA.pub_stamp    = oQ.pub_stamp;

      oQ.answers[oQ.answers.length] = oA;
    }
  }

  if ( 2 <= oQ.answers.length && oQ.answers.length < constAQMaxUOpinionsCount )
    oQ.q_MaxNAns = g_objAQ.m_bNonFixedAnsws ? constAQMaxUOpinionsCount : oQ.answers.length;
  else
  {
    if ( oQ.answers.length < 2 )
      oQ.q_MaxNAns = g_objAQ.m_bNonFixedAnsws ? constAQMaxUOpinionsCount : 2;
    else
      oQ.q_MaxNAns = oQ.answers.length;
  }

  strT += '<TABLE CELLSPACING="0" CELLPADDING="3">';

  strT +=   '<TR>';
  strT +=     '<TD>';
  strT +=       str;
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD>';
  strT +=       GetQDiv(oQ);
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD>';
  strT +=       '<A HREF="' + g_objAQ.m_strLink + '" target="_blank">' + HTMLasText(g_objAQ.m_strLinkTitle) + '</A>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD id="' + constAQPubStatusID + '" >';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD ALIGN="right">';
  strT +=       '<TABLE CELLPADDING="6" BORDER="0">';
  strT +=         '<TR>';
  strT +=           '<TD id="' + constAQRePublishBtnID + '" ALIGN="right" class="no_decor666666">';
  strT +=             '<A HREF="javascript:OnAQMakePublic(0);" class="href_btn">';
  strT +=               g_static_text[const_href_aq_make_public_btn];
  strT +=             '</A>';
  strT +=           '</TD>';
  strT +=           '<TD ALIGN="center" class="no_decor666666">';
  strT +=             '<A HREF="javascript:ShowAddQuestion();" class="href_btn">';
  strT +=               g_static_text[const_cancel_btn];
  strT +=             '</A>';
  strT +=           '</TD>';
  strT +=         '</TR>';
  strT +=       '</TABLE>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD id="' + constAQOldQuestionsID + '" >';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT += '</TABLE>';

  SetInnerHtml(constAddQuestionID, strT);
}


function AQPreviewOk()
{
  var str = ReplaceTxt(g_static_text[const_aq_preview_ok], "{publicate_btn}", g_static_text[const_href_aq_make_public_btn]);
  alert(str);
}


function OnAQMakePublic(bRepublish)
{
  var i;
  var arrOpinions = new Array();
  var nOpinions   = eAQ_Fact == g_objAQ.m_enType ? 1 : g_objAQ.m_nOpinionsCount;

  for(i = 0; i < nOpinions; i++)
  {
    if ( 0 < g_objAQ.m_arrOpinions[i].length )
      arrOpinions[arrOpinions.length] = g_objAQ.m_arrOpinions[i];
  }

  var fixed_answers = g_objAQ.m_bNonFixedAnsws ? 0 : 1;

  if ( eAQ_Fact == g_objAQ.m_enType )
    fixed_answers = 0;

  xajax_add_question(
                     constXjxAddQuestion,
                     g_objAQ.m_nCurCategory,
                     g_objAQ.m_strQuestion,
                     g_objAQ.m_strDescription,
                     arrOpinions,
                     fixed_answers,
                     g_objAQ.m_strKeyWords,
                     g_objAQ.m_strLink,
                     g_objAQ.m_strLinkTitle,
                     g_objAQ.m_strObject,
                     bRepublish
                    );

  SetInnerHtml(constAQPubStatusID, g_static_text[const_processing_ddd]);
}


function HandleXjxAddQuestion()
{
  var nRC  = parseInt(g_arrXajaxRets[1]);
  var strT = "";

  switch(nRC)
  {
    case 1://success
      AddQuestionSuccess();
    break;

    case 2://logged out
      SetInnerHtml(constAQPubStatusID, g_static_text[const_please_login]);
      ShowLogin();
    break;

    case 3://invalid category id
      strT = g_static_text[const_internal_error] + err045 + " " + g_static_text[const_invalid_category_id];
      SetInnerHtml(constAQPubStatusID, strT);
    break;

    case 4://question text too short
      SetInnerHtml(constAQPubStatusID, g_static_text[const_aq_question_too_short]);
    break;

    case 5://minimum 3 answers are required
      strT = ReplaceTxt(g_static_text[const_aq_need_more_opinions], "{min_required}", constAQMinOpinionsCount);
      SetInnerHtml(constAQPubStatusID, strT);
    break;

    case 6://minimum 3 key words are required
      strT = ReplaceTxt(g_static_text[const_aq_kwords_required], "{min_required}", constAQMinKWordsCount);
      SetInnerHtml(constAQPubStatusID, strT);
    break;

    case 7://link title required
      SetInnerHtml(constAQPubStatusID, g_static_text[const_aq_require_link_title]);
    break;

    case 8://link required
      SetInnerHtml(constAQPubStatusID, g_static_text[const_aq_link_for_title]);
    break;

    case 9://already exist
      AQShowRePublishPreview();
    break;

    case 10://minimum 2 answers are required for fixed answers list
      SetInnerHtml(constAQPubStatusID, g_static_text[const_aq_fixed_ans_req_2ans]);
    break;

    case 11://answers count exceed max for nonfixed answers list
      SetInnerHtml(constAQPubStatusID, g_static_text[const_aq_nonfix_qnt_too_big]);
    break;

    case 12://only one opinion for fact is allowed
      SetInnerHtml(constAQPubStatusID, g_static_text[const_aq_only_1_opinion]);
    break;

    case 13://fact can not have fixed opinion list
      SetInnerHtml(constAQPubStatusID, g_static_text[const_aq_fix_ans_not_allowed]);
    break;

    case 14://minimum X words are required
      strT = ReplaceTxt(g_static_text[const_aq_need_description], "{min_required}", constAQMinFactWordsCount);
      SetInnerHtml(constAQPubStatusID, strT);
    break;

    case 15://link bad format
      SetInnerHtml(constAQPubStatusID, g_static_text[const_aq_link_bad_format]);
    break;

    case 16://question text too long
      SetInnerHtml(constAQPubStatusID, g_static_text[const_aq_question_too_long]);
    break;

    case 17://answer text too long
      SetInnerHtml(constAQPubStatusID, g_static_text[const_aq_answer_too_long] + '<BR />' + g_arrXajaxRets[2]);
    break;

    default:
      strT = err044 + g_static_text[const_unk_result] + "'" + nRC + "'";
      SetInnerHtml(constAQPubStatusID, strT);
      ferror(strT);
  }
}


function AddQuestionSuccess()
{
  var q_id = parseInt(g_arrXajaxRets[2]);

  if ( q_id < 0 )
    SetInnerHtml(constAQPubStatusID, g_static_text[const_internal_error] + err047 + " " + g_static_text[const_question_not_published]);
  else
  {
    g_objAQ.m_nCurCategory   = 0;
    g_objAQ.m_strQuestion    = "";
    g_objAQ.m_strDescription = "";
    g_objAQ.m_arrOpinions    = new Array("", "", "");
    g_objAQ.m_nOpinionsCount = 3;
    g_objAQ.m_bNonFixedAnsws = true;
    g_objAQ.m_strKeyWords    = "";
    g_objAQ.m_strLink        = "";
    g_objAQ.m_strLinkTitle   = "";
    g_objAQ.m_strObject      = "";

    LoadQSect(q_id);
  }
}


function AQShowRePublishPreview()
{
  var i;
  var nRC     = parseInt(g_arrXajaxRets[1]);
  var nN      = parseInt(g_arrXajaxRets[2]);
  var arrAsks = new Array();
  var o;

  for(i = 3; i < nN + 3; i++)
  {
    o = ParseQuestion(g_arrXajaxRets[i]);

    if ( o && 1 == o.bValid )
      arrAsks[arrAsks.length] = o;
  }

  if ( 9 != nRC || arrAsks.length <= 0 )
  {
    SetInnerHtml(
                 constAQPubStatusID,
                 g_static_text[const_internal_error] + err046 + " " + g_static_text[const_wrong_data_format]
                );
    return;
  }

  SetInnerHtml(constAQPubStatusID, g_static_text[const_warning_question_exists]);

  //republish button
  var strT = "";

  strT += '<A HREF="javascript:OnAQRepublish();" class="href_btn">';
  strT +=   g_static_text[const_href_aq_republish_btn];
  strT += '</A>';

  SetInnerHtml(constAQRePublishBtnID, strT);

  //old questions:
  strT = '<TABLE CELLSPACING="0" CELLPADDING="3">';

  for(i = 0; i < arrAsks.length; i++)
  {
    strT += '<TR>';
    strT +=   '<TD STYLE="padding-top:5px; border-top-style:dashed; border-top-width:1px;">';
    strT +=     arrAsks[i].q_txt;
    strT +=   '</TD>';
    strT += '</TR>';

    for(a = 0; a < arrAsks[i].answer.length; a++)
    {
      if ( 0 < arrAsks[i].answer[a].txt.length )
      {
        strT += '<TR>';
        strT +=   '<TD>';
        strT +=     '<INPUT type=radio >';
        strT +=     arrAsks[i].answer[a].txt;
        strT +=   '</TD>';
        strT += '</TR>';
      }
    }
    strT += '<TR>';
    strT +=   '<TD>';
    strT +=     '<A HREF="javascript:LoadQSect(' + arrAsks[i].q_id + ');" >';
    strT +=       g_static_text[const_href_show_question];
    strT +=     '</A>';
    strT +=   '</TD>';
    strT += '</TR>';
  }

  strT += '</TABLE>';

  SetInnerHtml(constAQOldQuestionsID, strT);
}


function OnAQRepublish()
{
  OnAQMakePublic(1);
}


//--------------------------------------------------------------g_arrCategories

function LoadCategoriesTree(fDoOnLoad)
{
  if ( 0 < g_arrCategories.length && !LoadCategoriesTree.bLoading )
    fDoOnLoad();
  else
  {
    if ( !HandleDXjxLoadCatsTree.arrFDoOnLoad )
      HandleDXjxLoadCatsTree.arrFDoOnLoad = new Array();

    HandleDXjxLoadCatsTree.arrFDoOnLoad[HandleDXjxLoadCatsTree.arrFDoOnLoad.length] = fDoOnLoad;

    if ( !LoadCategoriesTree.bLoading )
    {
      LoadCategoriesTree.bLoading = true;
      xajax_load_cats_tree(constDXjxLoadCatsTree);
    }
  }
}


function HandleDXjxLoadCatsTree(oXMLElem, nRC)
{
  var i, arr;

  switch(nRC)
  {
    case 1://success
      UpdateCategories(oXMLElem);
      LoadCategoriesTree.bLoading = false;

      arr = HandleDXjxLoadCatsTree.arrFDoOnLoad;
      HandleDXjxLoadCatsTree.arrFDoOnLoad = new Array();

      if ( arr )
      {
        for(i = 0; i < arr.length; i++)
        {
          if ( null != arr[i] )
            arr[i]();
        }
      }
    break;

    default:
      LoadCategoriesTree.bLoading = false;
      rcerr(err043, nRC);
  }
}


function ReadCategory(oXMLItem, nLevel, nParent_id)
{
  if ( oXMLItem && "item" == oXMLItem.nodeName )
  {
    var i;
    var o       = new Object;
    o.id        = QS(oXMLItem.getAttribute("id"));
    o.parent_id = nParent_id;
    o.name      = QS(oXMLItem.getAttribute("text"));
    o.level     = nLevel;

    g_arrCatIndexes[o.id]                   = g_arrCategories.length;
    g_arrCategories[g_arrCategories.length] = o;

    if ( 0 < nParent_id && 0 <= g_arrCatIndexes[nParent_id] && g_arrCategories[g_arrCatIndexes[nParent_id]] )
    {
      if ( !g_arrCategories[g_arrCatIndexes[nParent_id]].childs )
        g_arrCategories[g_arrCatIndexes[nParent_id]].childs = new Array();

      i = g_arrCategories[g_arrCatIndexes[nParent_id]].childs.length;
      g_arrCategories[g_arrCatIndexes[nParent_id]].childs[i] = o;
    }
    else
    {
      if ( -1 == nParent_id )
      {
        if ( !g_arrCategories.root )
          g_arrCategories.root = new Array();

        g_arrCategories.root[g_arrCategories.root.length] = o;
      }
    }

    if ( oXMLItem.childNodes )
    {
      var oXMLNode;
      var nNLevel = nLevel + 1;

      for(i = 0; i < oXMLItem.childNodes.length; i++)
      {
        oXMLNode = oXMLItem.childNodes[i];

        if ( "item" == oXMLNode.nodeName )
        {
          ReadCategory(oXMLNode, nNLevel, o.id);
        }
      }
    }
  }
}


function UpdateCategories(oXMLElem)
{
  var oXMLCats = GetNamedChild(oXMLElem, "categories_tree");

  g_arrCategories = new Array();

  if ( oXMLCats && oXMLCats.childNodes && 0 < oXMLCats.childNodes.length )
  {
    var nLen = oXMLCats.childNodes.length;

    var i, oXMLItem;

    for(i = 0; i < nLen; i++)
    {
      oXMLItem = oXMLCats.childNodes[i];
      if ( "item" == oXMLItem.nodeName )
      {
        ReadCategory(oXMLItem, 1, -1);
      }
    }

    var l, nCurLevel, str;
    var arrLevels = new Array();

    nLen = g_arrCategories.length;

    for(i = 0; i < nLen; i++)
    {
      str       = "";
      nCurLevel = g_arrCategories[i].level - 1;

      for(l = 0; l < nCurLevel; l++)
        str += '/' + arrLevels[l];

      g_arrCategories[i].FullName = str + '/' + g_arrCategories[i].name;
      arrLevels[nCurLevel]        = g_arrCategories[i].name;
    }
  }
}


//----------------------------------------------------------------LoadUUMsgList


function ShowUUMsgList()
{
  LoadUUMsgList(0, constMsgsPerPage);
}


function LoadUUMsgList(nFromNum, nPerPage)
{
  xajax_load_uu_msg_list(constDXjxLoadUUMsgList, nFromNum, nPerPage);
}


function HandleDXjxLoadUUMsgList(oXMLElem, nRC)
{
  switch(nRC)
  {
    case 1://success
      UpdateUUMsgList(oXMLElem);
    break;

    case 2://user logged out
      SetInnerHtml(constUUMsgList, g_static_text[const_please_login]);
    break;

    default:
      rcerr(err041, nRC);
  }
}


function UpdateUUMsgList(oXMLElem)
{
  var strT            = "";
  var oXMLU2UList     = GetNamedChild(oXMLElem, "u2u_msg_list");
  var arrList         = new Array();
  var nLen            = 0;
  var i;

  if ( oXMLU2UList && oXMLU2UList.childNodes && 0 < oXMLU2UList.childNodes.length )
  {
    nLen = oXMLU2UList.childNodes.length;

    var o, oXMLUser;

    for(i = 0; i < nLen; i++)
    {
      oXMLUser = oXMLU2UList.childNodes[i];
      if ( "user" == oXMLUser.nodeName )
      {
        o          = new Object;
        o.name     = QS(oXMLUser.getAttribute("name"));
        o.btn_code = QS(oXMLUser.getAttribute("btn_code"));
        o.stamp    = parseInt(oXMLUser.getAttribute("last_stamp"));
        o.msgs_qnt = parseInt(oXMLUser.getAttribute("msgs_qnt"));
        o.num      = arrList.length;
        arrList[arrList.length] = o;
      }
    }
  }

  var nListCount = parseInt(oXMLU2UList.getAttribute("list_count"));
  var nListFrom  = parseInt(oXMLU2UList.getAttribute("from"));
  var nPageCount = Math.floor(nListCount / constMsgsPerPage)
                     + (0 == (nListCount % constMsgsPerPage) ? 0 : 1);
  var nPage      = 1 + Math.floor(nListFrom / constMsgsPerPage);

  nLen = arrList.length;
  if ( nLen <= 0 )
    strT += '<DIV>' + g_static_text[const_u2u_msg_list_empty] + '</DIV>';
  else
  {
    var fHrefDest = HrefLoadUUMsgList;
    var strPages = CreatePagesDiv(fHrefDest, nPage, nPageCount, constMsgsPerPage);

    strT += '<TABLE WIDTH="100%">';
    strT +=   '<TR>';
    strT +=     '<TD ALIGN="center" COLSPAN="3">';
    strT +=       strPages;
    strT +=     '</TD>';
    strT +=   '</TR>';
    strT +=   '<TR>';
    strT +=     '<TD>';
    strT +=       g_static_text[const_u2u_list_user];
    strT +=     '</TD>';
    strT +=     '<TD>';
    strT +=       g_static_text[const_u2u_list_stamp];
    strT +=     '</TD>';
    strT +=     '<TD>';
    strT +=       g_static_text[const_u2u_msgs_count];
    strT +=     '</TD>';
    strT +=   '</TR>';

    for(i = 0; i < nLen; i++)
    {
      strT += RenderU2UListRow(arrList[i]);
    }

    strT +=   '<TR>';
    strT +=     '<TD ALIGN="center" COLSPAN="3">';
    strT +=       strPages;
    strT +=     '</TD>';
    strT +=   '</TR>';
    strT += '</TABLE>';
  }

  SetInnerHtml(constUUMsgList, strT);
}


function HrefLoadUUMsgList(nPage, nPerPage)
{
  var n   = (nPage - 1) * nPerPage;
  var str = 'javascript:LoadUUMsgList(' + n + ',' + nPerPage + ');';

  return str;
}


function RenderU2UListRow(oUser)
{
  if ( !oUser )
    return "";

  var strT;
  var oDate  = new Date(1000 * oUser.stamp);
  var clrBkg = 0 == (oUser.num % constMsgsPerPage) % 2 ? "#F5F5F5" : "#FFFFFF";

  strT  = '<TR>';
  strT +=   '<TD BGCOLOR="' + clrBkg + '">';
  strT +=     '<A HREF="javascript:ShowPublicProfile(\'' + oUser.btn_code + '\');" >';
  strT +=       oUser.name;
  strT +=     '</A>';
  strT +=   '</TD>';
  strT +=   '<TD BGCOLOR="' + clrBkg + '">';
  strT +=     oDate.toLocaleString();
  strT +=   '</TD>';
  strT +=   '<TD BGCOLOR="' + clrBkg + '">';
  strT +=     oUser.msgs_qnt;
  strT +=   '</TD>';
  strT += '</TR>';

  delete oDate;
  return strT;
}


//---------------------------------------------------User-to-User-Message-Board


function ShowUUMsgBoard(strBtnCode)
{
  var strT = "";

  strT += '<DIV id="' + constUUMsgBrdID + '" >';
  strT +=    g_static_text[const_loading_ddd];
  strT += '</DIV>';
  strT += '<DIV id="' + constUUMsgBrdInputID + '" >';
  strT +=    g_static_text[const_loading_ddd];
  strT += '</DIV>';

  SetInnerHtml(constUUMsgBrdSectID, strT);

  LoadUUMsgInput(strBtnCode);
  LoadUUMsgBoard(strBtnCode, -1, constMsgsPerPage);
}


function LoadUUMsgBoard(strBtnCode, nFromNum, nPerPage)
{
  xajax_load_uu_msg_brd(constDXjxLoadUUMsgBoard, strBtnCode, nFromNum, nPerPage);
}


function HandleDXjxLoadUUMsgBoard(oXMLElem, nRC)
{
  switch(nRC)
  {
    case 1://success
      UpdateUUMsgBoard(oXMLElem);
    break;

    case 2://anonymous or new user
      SetInnerHtml(constUUMsgBrdID, g_static_text[const_u2u_msg_board_empty]);
    break;

    case 3://user not found
      SetInnerHtml(constUUMsgBrdID, g_static_text[const_u2u_user_not_found]);
    break;

    default:
      rcerr(err034, nRC);
  }
}


function UpdateUUMsgBoard(oXMLElem)
{
  var strT            = "";
  var oXMLMsgBrd      = GetNamedChild(oXMLElem, "u2u_msg_board");
  var arrMsgs         = new Array();
  var nLen            = 0;
  var strUser2BtnCode = "";
  var i;

  if ( oXMLMsgBrd && oXMLMsgBrd.childNodes && 0 < oXMLMsgBrd.childNodes.length )
  {
    strUser2BtnCode = QS(oXMLMsgBrd.getAttribute("user2_btn_code"));
    nLen            = oXMLMsgBrd.childNodes.length;

    var o, oXMLMsg;

    for(i = 0; i < nLen; i++)
    {
      oXMLMsg = oXMLMsgBrd.childNodes[i];
      if ( "msg" == oXMLMsg.nodeName )
      {
        o           = new Object;
        o.user_from = QS(oXMLMsg.getAttribute("user_from"));
        o.user_to   = QS(oXMLMsg.getAttribute("user_to"));
        o.msg_id    = parseInt(oXMLMsg.getAttribute("msg_id"));
        o.msg_num   = parseInt(oXMLMsg.getAttribute("msg_num"));
        o.nUTC      = parseInt(oXMLMsg.getAttribute("UTC_stamp"));
        o.strTxt    = GetSubNodeText(oXMLMsg);
        arrMsgs[arrMsgs.length] = o;
      }
    }
  }

  var nMsgsCount = parseInt(oXMLMsgBrd.getAttribute("msg_count"));
  var nListFrom  = parseInt(oXMLMsgBrd.getAttribute("list_from"));
  var nPageCount = Math.floor(nMsgsCount / constMsgsPerPage)
                     + (0 == (nMsgsCount % constMsgsPerPage) ? 0 : 1);
  var nPage      = 1 + Math.floor(nListFrom / constMsgsPerPage);

  nLen = arrMsgs.length;
  if ( nLen <= 0 )
    strT += '<DIV>' + g_static_text[const_u2u_msg_board_empty] + '</DIV>';
  else
  {
    var fHrefDest = HrefLoadUUMsgBoard;

    fHrefDest.m_stBtnCode = strUser2BtnCode;

    var strPages = CreatePagesDiv(fHrefDest, nPage, nPageCount, constMsgsPerPage);

    strT += '<TABLE WIDTH="100%" >';
    strT +=   '<TR>';
    strT +=     '<TD ALIGN="center">';
    strT +=       strPages;
    strT +=     '</TD>';
    strT +=   '</TR>';

    for(i = 0; i < nLen; i++)
    {
      strT += RenderU2UMsgRow(arrMsgs[i]);
    }

    strT +=   '<TR>';
    strT +=     '<TD ALIGN="center">';
    strT +=       strPages;
    strT +=     '</TD>';
    strT +=   '</TR>';
    strT += '</TABLE>';
  }

  SetInnerHtml(constUUMsgBrdID, strT);
}


function HrefLoadUUMsgBoard(nPage, nPerPage)
{
  var n   = (nPage - 1) * nPerPage;
  var str = 'javascript:LoadUUMsgBoard(\'' + HrefLoadUUMsgBoard.m_stBtnCode + '\',' + n + ',' + nPerPage + ');';

  return str;
}


function RenderU2UMsgRow(oMsg)
{
  if ( !oMsg )
    return "";

  var str;
  var oDate  = new Date(1000 * oMsg.nUTC);
  var clrBkg = 0 == (oMsg.msg_num % constMsgsPerPage) % 2 ? "#F5F5F5" : "#FFFFFF";

  str  = '<TR>';
  str +=   '<TD>';
  str +=     '<TABLE id="' + constUUBrdMsgID + oMsg.msg_num + '" WIDTH="100%" BGCOLOR="' + clrBkg + '">';
  str +=       '<TR>';
  str +=         '<TD STYLE="padding:10px 0px 6px 10px; border-bottom-style:dashed; border-width:1px; border-color:#c8ccbc;">';
  str +=           '<TABLE>';
  str +=             '<TR>';
  str +=               '<TD>';
  str +=                 g_static_text[const_u2u_msg_from];
  str +=               '</TD>';
  str +=               '<TD>';
  str +=                 oMsg.user_from;
  str +=               '</TD>';
  str +=             '</TR>';
  str +=             '<TR>';
  str +=               '<TD>';
  str +=                 g_static_text[const_u2u_msg_to];
  str +=               '</TD>';
  str +=               '<TD>';
  str +=                 oMsg.user_to;
  str +=               '</TD>';
  str +=             '</TR>';
  str +=           '</TABLE>';
  str +=         '</TD>';
  str +=         '<TD STYLE="padding:10px 6px 6px 10px; border-bottom-style:dashed; border-width:1px; border-color:#c8ccbc;" ALIGN="right" VALIGN="top">';
  str +=           oDate.toLocaleString();
  str +=         '</TD>';
  str +=       '</TR>';
  str +=       '<TR>';
  str +=         '<TD COLSPAN=2 STYLE="padding:6px 0px 10px 10px;">';
  str +=           oMsg.strTxt;
  str +=         '</TD>';
  str +=        '</TR>';
  str +=     '</TABLE>';
  str +=   '</TD>';
  str += '</TR>';

  delete oDate;
  return str;
}


//---------------------------------------------User-to-User-Message-Board-Input


function LoadUUMsgInput(strBtnCode)
{
  xajax_load_uu_msg_input(constXjxLoadUUMsgInput, strBtnCode);
}


function HandleXjxLoadUUMsgInput()
{
  var nRC = parseInt(g_arrXajaxRets[1]);

  switch(nRC)
  {
    case 1://success
      ShowUUInputMsg();
    break;

    case 2://logged out
      ShowPlaeseLoginToDropNote();
    break;

    case 3://user not found
      SetInnerHtml(constUUMsgBrdInputID, g_static_text[const_u2u_user_not_found]);
    break;

    default:
      SetInnerHtml(constUUMsgBrdInputID, g_static_text[const_internal_error] + g_static_text[const_unk_result] + "'" + nRC + "'");
  }
}


function ShowPlaeseLoginToDropNote()
{
  ValidateXajaxRets(4);
  //g_arrXajaxRets[2] - user_to button code
  //g_arrXajaxRets[3] - user_to name

  var strUserTo = g_arrXajaxRets[3];
  var strT      = ReplaceTxt(g_static_text[const_login_to_drop_uu_note], "{user}", strUserTo);

  strT += '<BR>';
  strT += '<A HREF="javascript:ShowLogin();" >';
  strT +=   g_static_text[const_href_login];
  strT += '</A>';

  SetInnerHtml(constUUMsgBrdInputID, strT);
}


function ShowUUInputMsg()
{
  ValidateXajaxRets(6);
  //g_arrXajaxRets[2] - user_to button code
  //g_arrXajaxRets[3] - user_to name
  //g_arrXajaxRets[4] - msg_id
  //g_arrXajaxRets[5] - text

  var str_btn   = g_arrXajaxRets[2];
  var strUserTo = g_arrXajaxRets[3];
  var msg_id    = parseInt(g_arrXajaxRets[4]);
  var strMsg    = g_arrXajaxRets[5];

  ShowUUInputMessage(str_btn, strUserTo, msg_id, strMsg);
}


function ShowUUInputMessage(str_btn, strUserTo, msg_id, strMsg)
{
  var strT = '<DIV>';

  strT += ReplaceTxt(g_static_text[const_uu_drop_note_for], "{user}", strUserTo);
  strT += '<TABLE WIDTH="100%">';
  strT +=   '<TR>';
  strT +=     '<TD COLSPAN="2">';
  strT +=       '<TEXTAREA id="' + constInputUUMsgID + '" STYLE="width:100%; height:4em;">';
  strT +=         strMsg;
  strT +=       '</TEXTAREA>';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD id="' + constAddUUMsgStatusID + '">';
  strT +=     '</TD>';
  strT +=     '<TD ALIGN="right">';
  strT +=       '<TABLE CELLPADDING="6" BORDER="0">';
  strT +=         '<TR>';
  strT +=           '<TD ALIGN="right">';
  strT +=             '<SPAN class="no_decor666666">';
  strT +=               '<A HREF="javascript:OnPreviewUUMsg(\'' + str_btn + '\',' + msg_id + ');" class="href_btn">';
  strT +=                 g_static_text[const_href_prvw_uu_msg_btn];
  strT +=               '</A>';
  strT +=             '</SPAN>';
  strT +=           '</TD>';
  strT +=           '<TD ALIGN="center" class="no_decor666666">';
  strT +=             '<A HREF="javascript:OnSaveUUMsg(\'' + str_btn + '\',' + msg_id + ');" class="href_btn">';
  strT +=               g_static_text[const_href_save_uu_msg_btn];
  strT +=             '</A>';
  strT +=           '</TD>';
  strT +=         '</TR>';
  strT +=       '</TABLE>';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT += '</TABLE>';
  strT += '</DIV>';

  SetInnerHtml(constUUMsgBrdInputID, strT);
}


function OnPreviewUUMsg(str_btn , msg_id)
{
  SaveUUMsg(str_btn, msg_id, 1);
}


function OnSaveUUMsg(str_btn , msg_id)
{
  SaveUUMsg(str_btn, msg_id, 0);
}


function SaveUUMsg(str_btn, msg_id, nPreview)
{
  var strTxt = "";
  var oInput = getEBId(constInputUUMsgID);

  if ( oInput )
    strTxt = oInput.value;

  strTxt = TrimSpaces(strTxt);

  if ( strTxt.length <= 0 )
    SetInnerHtml(constAddUUMsgStatusID, g_static_text[const_your_msg_is_empty]);
  else
  {
    SetInnerHtml(constAddUUMsgStatusID, g_static_text[const_saving_ddd]);

    if ( 1 == nPreview )
      xajax_save_uu_preview_msg(constXjxSaveUUPreviewMsg, str_btn, msg_id, strTxt);
    else
      xajax_save_uu_msg(constXjxSaveUUMsg, str_btn, msg_id, strTxt);
  }
}


function HandleXjxSaveUUMsg()
{
  var nRC = parseInt(g_arrXajaxRets[1]);

  switch(nRC)
  {
    case 1:
      //g_arrXajaxRets[2] - str_btn
      ValidateXajaxRets(3);
      ShowUUMsgBoard(g_arrXajaxRets[2]);
    break;

    case 2://logged out
      SetInnerHtml(constAddUUMsgStatusID, g_static_text[const_please_login]);
    break;

    case 3://empty message
      SetInnerHtml(constAddUUMsgStatusID, g_static_text[const_your_msg_is_empty]);
    break;

    case 4://user not found
      SetInnerHtml(constAddUUMsgStatusID, g_static_text[const_u2u_user_not_found]);
    break;

    default:
      rcerr(err036, g_arrXajaxRets[1]);
  }
}


function HandleXjxSaveUUPreviewMsg()
{
  var nRC = parseInt(g_arrXajaxRets[1]);

  switch(nRC)
  {
    case 1:
      PreviewUUMsg();
    break;

    case 2://logged out
      SetInnerHtml(constAddUUMsgStatusID, g_static_text[const_please_login]);
    break;

    case 3://empty message
      SetInnerHtml(constAddUUMsgStatusID, g_static_text[const_your_msg_is_empty]);
    break;

    case 4://user not found
      SetInnerHtml(constAddUUMsgStatusID, g_static_text[const_u2u_user_not_found]);
    break;

    default:
      rcerr(err037, g_arrXajaxRets[1]);
  }
}


function PreviewUUMsg()
{
  ValidateXajaxRets(8);

  var strUserFrom = g_arrXajaxRets[2];
  var strUserTo   = g_arrXajaxRets[3];
  var msg_id      = g_arrXajaxRets[4];
  var stamp       = g_arrXajaxRets[5];
  var strMsg      = g_arrXajaxRets[6];
  var str_btn     = g_arrXajaxRets[7];

  var oMsg        = new Object();

  oMsg.nUTC       = stamp;
  oMsg.msg_num    = -5;//fake
  oMsg.user_from  = strUserFrom;
  oMsg.user_to    = strUserTo;
  oMsg.strTxt     = strMsg;

  var strR        = RenderU2UMsgRow(oMsg);
  var strT        = '<DIV>';

  g_oInputUUMsg.str_btn   = str_btn;
  g_oInputUUMsg.strUserTo = strUserTo;
  g_oInputUUMsg.msg_id    = msg_id;
  g_oInputUUMsg.strMsg    = strMsg;

  strT += g_static_text[const_your_message];
  strT += '<TABLE WIDTH="100%">';
  strT +=   '<TR>';
  strT +=     '<TD COLSPAN="2">';
  strT +=       '<TABLE WIDTH="100%">';
  strT +=         strR;
  strT +=       '</TABLE>';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD id="' + constAddUUMsgStatusID + '">';
  strT +=     '</TD>';
  strT +=     '<TD ALIGN="right">';
  strT +=       '<TABLE CELLPADDING="6" BORDER="0">';
  strT +=         '<TR>';
  strT +=           '<TD ALIGN="right">';
  strT +=             '<SPAN class="no_decor666666">';
  strT +=               '<A HREF="javascript:ReShowInputUUMsg(\'' + str_btn + '\');" class="href_btn">';
  strT +=                 g_static_text[const_href_edit_uu_msg_btn];
  strT +=               '</A>';
  strT +=             '</SPAN>';
  strT +=           '</TD>';
  strT +=           '<TD ALIGN="center" class="no_decor666666">';
  strT +=             '<A HREF="javascript:OnPublicUUMsg(' + msg_id + ',\'' + str_btn + '\');" class="href_btn">';
  strT +=               g_static_text[const_href_save_uu_msg_btn];
  strT +=             '</A>';
  strT +=           '</TD>';
  strT +=         '</TR>';
  strT +=       '</TABLE>';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT += '</TABLE>';
  strT += '</DIV>';

  SetInnerHtml(constUUMsgBrdInputID, strT);
}


function ReShowInputUUMsg(str_btn)
{
  if ( g_oInputUUMsg && g_oInputUUMsg.str_btn && 0 < g_oInputUUMsg.str_btn.length )
    ShowUUInputMessage(g_oInputUUMsg.str_btn, g_oInputUUMsg.strUserTo, g_oInputUUMsg.msg_id, g_oInputUUMsg.strMsg);
  else
    LoadUUMsgInput(str_btn);
}


function OnPublicUUMsg(msg_id, str_btn)
{
  xajax_public_uu_msg(constXjxPublicUUMsg, msg_id, str_btn);
}


function HandleXjxPublicUUMsg()
{
  var nRC = parseInt(g_arrXajaxRets[1]);

  switch(nRC)
  {
    case 1:
      //g_arrXajaxRets[2] - str_btn
      ValidateXajaxRets(3);
      ShowUUMsgBoard(g_arrXajaxRets[2]);
    break;

    case 2://logged out
      SetInnerHtml(constAddUUMsgStatusID, g_static_text[const_please_login]);
    break;

    case 3://user logged, but wrong message id
      SetInnerHtml(constAddUUMsgStatusID, g_static_text[const_your_msg_is_empty]);
    break;

    default:
      rcerr(err038, g_arrXajaxRets[1]);
  }
}


//---------------------------------------------------------------Questions-List


function show_qlist()
{
  HomePage(eUI_ignore, eT100_load, eB100_load, eLCol_Asks_load, eCats_load);
}


function load_qlist()
{
  var nFrom  = 0;
  var nCount = constQListSize;
  var nCat   = 0 < g_nCurCategory ? g_nCurCategory : "";

  if ( 0 < arguments.length )
    nFrom = arguments[0];

  xajax_load_qlist(constDXjxLoadQList, nFrom, nCount, nCat, g_strCurSort, g_enQLTab);
}


function HandleDXjxLoadQList(oXMLElem, nRC)
{
  switch(nRC)
  {
    case 1://success
      UpdateQList(oXMLElem);
    break;

    case 2://anonymous user
      SetInnerHtml(constQListID, g_static_text[const_must_allow_cookies]);
    break;

    default:
      rcerr(err023, nRC);
  }
}


function UpdateQList(oXMLElem)
{
  var i;
  var strT         = "";
  var arrQuestions = GetQsfromXML(oXMLElem);

  if ( arrQuestions && arrQuestions.length <= 0 && 0 < arrQuestions.from && 0 < constQListSize )
  {
    load_qlist(arrQuestions.from - constQListSize);
    return;
  }

  strT += '<TABLE WIDTH="100%" CELLSPACING="0" CELLPADDING="0">';

  strT +=   '<TR>';
  strT +=     '<TD ALIGN="right" CLASS="tdAsksCapAddStory">';
  strT +=       '<TABLE CELLSPACING="0" CELLPADDING="0">';
  strT +=         '<TR>';
  strT +=           '<TD VALIGN="middle">';
  strT +=             '<IMG SRC="/images/rnd_trg_green.png" BORDER="0" onclick="javascript:AddQuestion();">';
  strT +=           '</TD>';
  strT +=           '<TD VALIGN="middle" CLASS="tdAsksCapAddStoryTxt">';
  strT +=             '<A CLASS="aAsksCapAddStoryTxt" HREF="javascript:AddQuestion();" >';
  strT +=               g_static_text[const_href_admin_console];
  strT +=             '</A>';
  strT +=           '</TD>';
  strT +=         '</TR>';
  strT +=       '</TABLE>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD ALIGN="left" CLASS="tdAsksCap">';
  strT +=       '<TABLE CELLSPACING="0" CELLPADDING="0">';
  strT +=         '<TR>';

  strT +=           '<TD CLASS="tdAsksSortNews">';
  strT +=             constSortPopular != g_strCurSort ? '&gt;' : '&nbsp;';
  strT +=             '<A CLASS="aAsksSortNews" HREF="javascript:SetCurSort(\'' + constSortNew + '\');" >';
  strT +=               g_static_text[const_href_news_sort];
  strT +=             '</A>';
  strT +=           '</TD>';

  strT +=           '<TD CLASS="tdAsksSortPop">';
  strT +=             constSortPopular == g_strCurSort ? '&gt;' : '&nbsp;';
  strT +=             '<A CLASS="aAsksSortPop" HREF="javascript:SetCurSort(\'' + constSortPopular + '\');" >';
  strT +=               g_static_text[const_href_popular_sort];
  strT +=             '</A>';
  strT +=           '</TD>';

  strT +=         '</TR>';
  strT +=       '</TABLE>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  if ( arrQuestions && 0 < arrQuestions.length )
  {
    strT +=   '<TR>';
    strT +=     '<TD ALIGN="left">';

    var oQ;
    for(i = 0; i < arrQuestions.length; i++)
    {
      oQ           = arrQuestions[i];
      oQ.strFOk    = 'javascript:SendCatAnswer(' + oQ.q_id + ',' + oQ.answers.length + ');';
      oQ.bComments = true;
      strT        += '<DIV id="' + constExtQuestion_id_ + oQ.q_id + '">';

      if ( 0 <= oQ.ua_id )
        strT      +=   GetQADiv(oQ);
      else
        strT      +=   GetQDiv(oQ);

      strT        += '</DIV>';
    }

    strT +=     '</TD>';
    strT +=   '</TR>';
  }
  else
  {
    strT +=   '<TR>';
    strT +=     '<TD ALIGN="left">';
    if ( eMyStories == g_enQLTab )
      strT +=      g_static_text[const_my_stories_empty_list];
    else
    {
      if ( eMyVotes == g_enQLTab )
        strT +=    g_static_text[const_my_votes_empty_list];
      else
      {
        if ( eMyOpinions == g_enQLTab )
          strT +=  g_static_text[const_my_opinions_empty_list];
        else
          strT +=  g_static_text[const_no_more_questions];
      }
    }
    strT +=     '</TD>';
    strT +=   '</TR>';
  }

  if ( 1 == arrQuestions.more || 0 < arrQuestions.from )
  {
    strT += '<TR>';
    strT +=   '<TD CLASS="tdAsksPrevNext">';
    strT +=     '<TABLE WIDTH="100%" CELLSPACING="0" CELLPADDING="0">';
    strT +=       '<TR>';
    strT +=         '<TD VALIGN="middle" CLASS="tdAsksPrev">';
    if ( 0 < arrQuestions.from )
    {
      strT +=         '<A CLASS="aAsksPrev" HREF="javascript:load_qlist(' + (arrQuestions.from - constQListSize) + ');" >';
      strT +=           g_static_text[const_href_asks_prev];
      strT +=         '</A>';
    }
    strT +=         '</TD>';
    strT +=         '<TD VALIGN="middle" CLASS="tdAsksNext">';
    if ( 1 == arrQuestions.more )
    {
      i = arrQuestions.from + (0 < arrQuestions.length ? arrQuestions.length : constQListSize);

      strT +=         '<A CLASS="aAsksNext" HREF="javascript:load_qlist(' + i + ');" >';
      strT +=           g_static_text[const_href_asks_next];
      strT +=         '</A>';
    }
    strT +=         '</TD>';
    strT +=       '</TR>';
    strT +=     '</TABLE>';
    strT +=   '</TD>';
    strT += '</TR>';
  }
  strT += '</TABLE>';

  strT = AddShadow(strT, 'CLASS="tableQCommon" WIDTH="100%"');

  SetInnerHtml(constQListID, strT);
}


function SendCatAnswer(q_id, nACount)
{
  var o, a_id;

  for(a_id = 0; a_id < nACount; a_id++)
  {
    o = getEBId(constQAPref + q_id + constQASuf + a_id);
    if ( o && o.checked )
    {
      CatSendAnswer(q_id, a_id);
      return;
    }
  }

  alert(g_static_text[const_select_your_answer]);
}


function SetCurSort(strSort)
{
  g_strCurSort = strSort;
  HomePage(eUI_load, eT100_load, eB100_load, eLCol_Asks_update);
}


//----------------------------------------------------------------CatSaveAnswer


function CatSendAnswer(q_id, a_id)
{
  SetInnerHtml(constQAStatusidID + q_id, g_static_text[const_saving_ddd]);
  xajax_cat_save_answer(constDXjxCatSaveAnswer, q_id, a_id);
}


function HandleDXjxCatSaveAnswer(oXMLElem, nRC)
{
  var oXMLQID = GetNamedChild(oXMLElem, "q_id");
  var q_id    = oXMLQID ? oXMLQID.getAttribute("id") : 0;

  switch(nRC)
  {
    case 1://success
      ShowAns(oXMLElem, constQAStatusidID + q_id);
    break;

    case 2://anonymous user
      SetInnerHtml(constQAStatusidID + q_id, g_static_text[const_must_allow_cookies]);
    break;

    case 3://save_answer: bad answer or question id.
      SetInnerHtml(constQAStatusidID + q_id, g_static_text[const_wrong_a_or_q_id]);
    break;

    default:
      rcerr(err024, nRC);
  }
}


function ShowAns(oXMLElem, strStatusID)
{
  var oXMLQuestion = GetNamedChild(oXMLElem, "q");
  var oQ           = GetQfromXML  (oXMLQuestion);

  if ( oQ )
  {
    oQ.bComments = true;

    var strT = GetQADiv(oQ);

    SetInnerHtml(constExtQuestion_id_ + oQ.q_id, strT);
  }
  else
    SetInnerHtml(strStatusID, g_static_text[const_wrong_a_or_q_id]);

  reload_bottop100();
}


//----------------------------------------------------------------------QSector


function LoadQSect(q_id)
{
  g_cur_q_id = q_id;
  HomePage(eUI_load, eT100_update, eB100_update, eLCol_Q_load);
}


function load_qsector()
{
  if ( g_cur_q_id < 0 )
    show_qlist();
  else
    HlpLoadQSector(g_cur_q_id, 0);
}


function HlpLoadQSector(q_id, msg_num)
{
  var strT;

  strT  = '<DIV id="' + constIdQID + '" >';
  strT +=   '<DIV id="' + constExtQuestion_id_ + q_id + '">';
  strT +=   g_static_text[const_loading_ddd];
  strT +=   '</DIV>';
  strT += '</DIV>';
  strT  = AddShadow(strT, "");
  strT += '<BR><BR><BR>';
  strT += '<DIV id="' + constMsgBoardID + '" >';
  strT +=   g_static_text[const_loading_ddd];
  strT += '</DIV>';
  strT += '<BR><BR><BR>';
  strT += '<DIV id="' + constAddMsgID + '" >';
  strT +=   g_static_text[const_loading_ddd];
  strT += '</DIV>';

  SetInnerHtml(constQSectID, strT);

  LoadCategoriesTree(LoadIdQ);
  LoadMsgBoard(q_id, msg_num, constMsgsPerPage);
  LoadInputMsg(q_id);
}


//-------------------------------------------------------------Question-section


function GetVoteBtn(strFOk)
{
  var strT = "";

  strT += '<TABLE CELLSPACING="0" CELLPADDING="0">';
  strT +=   '<TR>';
  strT +=     '<TD CLASS="tdVoteBtnLeft" onclick="' + strFOk + '">';
  strT +=       '<IMG SRC="/images/vote_btn_l.png" BORDER="0">';
  strT +=     '</TD>';
  strT +=     '<TD CLASS="tdVoteBtnCenter" onclick="' + strFOk + '">';
  strT +=       '<DIV CLASS="divVoteBtn">';
  strT +=         g_static_text[const_vote_btn];
  strT +=       '</DIV>';
  strT +=     '</TD>';
  strT +=     '<TD CLASS="tdVoteBtnRight" onclick="' + strFOk + '">';
  strT +=       '<IMG SRC="/images/vote_btn_r.png" BORDER="0">';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT += '</TABLE>';

  return strT;
}


function GetOpinionInput(oQ, bVisible, bFirst)
{
  if ( !oQ ) return;

  var strDisplay = bVisible ? "" : "display:none;";
  var strT       = "";

  strT += '<TR id="' + constQAAddOpinionRow1ID + oQ.q_id + '" STYLE="' + strDisplay + '">';
  strT +=   '<TD>';
  strT +=   '</TD>';
  strT +=   '<TD>';
  strT +=     '<TABLE WIDTH="100%" CELLSPACING="0" CELLPADDING="0">';
  strT +=       '<TR>';

  if ( bFirst )
    strT +=       '<TD></TD>';
  else
  {
    strT +=       '<TD CLASS="tdYouSay">';
    strT +=         g_static_text[const_you_say];
    strT +=       '</TD>';
  }

  strT +=         '<TD id="' + constQAAOCharsAvableID + oQ.q_id
                             + '" CLASS="' + (bFirst ? 'tdCharsAvailableFirst' : 'tdCharsAvailable') + '">';

  strT +=           ReplaceTxt(g_static_text[const_chars_available], "{chars}", constMaxOpinionLength);
  strT +=         '</TD>';
  strT +=       '</TR>';
  strT +=     '</TABLE>';
  strT +=   '</TD>';
  strT += '</TR>';
  strT += '<TR id="' + constQAAddOpinionRow2ID + oQ.q_id + '" STYLE="' + strDisplay + '">';
  strT +=   '<TD ALIGN="right" VALIGN="top">';
  strT +=     '<IMG SRC="/images/plus.png" BORDER="0">';
  strT +=   '</TD>';
  strT +=   '<TD CLASS="tdNewOpinion">';
  strT +=     '<TEXTAREA id="' + constQANewOpinionID + oQ.q_id + '" ' +
                    ' CLASS="textareaNewOpinion" ' +
                'onkeypress="OnQANOKeyPress(' + oQ.q_id + ');"' +
                   'onkeyup="OnQANOKeyUp(' + oQ.q_id + ');"' +
                   'onfocus="OnQANOFocus(' + oQ.q_id + ');"' +
              '>';
  strT +=       g_static_text[const_add_opinion_here];
  strT +=     '</TEXTAREA>';
  strT +=   '</TD>';
  strT += '</TR>';
  strT += '<TR id="' + constQAAddOpinionRow3ID + oQ.q_id + '" STYLE="' + strDisplay + '">';
  strT +=   '<TD>';
  strT +=   '</TD>';
  strT +=   '<TD ALIGN="right">';
  strT +=     '<DIV STYLE="padding-right:116px;">';
  strT +=       '<IMG SRC="/images/vtriangle.png">';
  strT +=     '</DIV>';
  strT +=   '</TD>';
  strT += '</TR>';

  if ( oQ.bPreview )
    oQ.strFNewOp = 'javascript:AQPreviewOk();';
  else
    oQ.strFNewOp = "javascript:NewOpinionVote(" + oQ.q_id + ");";

  strT += '<TR id="' + constQAAddOpinionBtnID + oQ.q_id + '" STYLE="' + strDisplay + '">';
  strT +=   '<TD>';
  strT +=   '</TD>';
  strT +=   '<TD ALIGN="right">';
  strT +=     '<DIV CLASS="divExtVoteBtn">';
  strT +=       GetVoteBtn(oQ.strFNewOp);
  strT +=     '</DIV>';
  strT +=   '</TD>';
  strT += '</TR>';
  strT += '<TR>';
  strT +=   '<TD>';
  strT +=   '</TD>';
  strT +=   '<TD id="' + constQAAOStatusidID + oQ.q_id + '">';
  strT +=   '</TD>';
  strT += '</TR>';

  return strT;
}


function GetQDiv(oQ)
{
  if ( !oQ ) return;

  var strT     = "";
  var strA     = "";
  var strQName = "Question_ID" + oQ.q_id;
  var nStamp   = Math.floor((new Date()).valueOf()/1000);
  var d        = Math.floor((nStamp - oQ.pub_stamp) / constSecInDay);
  var h        = Math.floor((nStamp - oQ.pub_stamp - d * constSecInDay) / 3600);
  var m        = Math.floor((nStamp - oQ.pub_stamp - d * constSecInDay - h * 3600) / 60);
  var strSDO   = "javascript:ShowDiffOpinion(" + oQ.q_id + ", " + oQ.answers.length + ");"
  var strPub   = g_static_text[const_q_publish_info];//by {author}, {days} days {hours} hrs {minutes} min ago
  var str;

  strA   = '<A CLASS="aQAuthor" HREF="javascript:ShowPublicProfile(\'' + oQ.author_bcode + '\');" >';
  strA  +=   oQ.author;
  strA  += '</A>';
  strPub = ReplaceTxt(strPub, "{author}" , strA);
  strPub = ReplaceTxt(strPub, "{days}"   , d);
  strPub = ReplaceTxt(strPub, "{hours}"  , h);
  strPub = ReplaceTxt(strPub, "{minutes}", m);

  if ( !oQ.q_MaxNAns )
    oQ.q_MaxNAns = constAQMaxUOpinionsCount;
  else
  {
    if ( oQ.q_MaxNAns < 2 )
      oQ.q_MaxNAns = 2;
  }

  strT += '<DIV id="' + constQuestion_id_ + oQ.q_id + '" CLASS="divQuestion">';
  strT +=   '<TABLE WIDTH="100%" CELLSPACING="0" CELLPADDING="0" BORDER="0">';

  strT +=     GetQRow1234(oQ, strPub);

  //shadow-seporator
  strT +=     '<TR>';
  strT +=       '<TD CLASS="tdSubAskEmpty">';
  strT +=       '</TD>';
  strT +=       '<TD CLASS="tdSubAskShadow">';
  strT +=         '<IMG SRC="/images/subaskshadow_trg.png" BORDER="0">';
  strT +=       '</TD>';
  strT +=     '</TR>';

  var a_id, oA;
  var nOpinions = 0;

  for(a_id = 0; a_id < oQ.answers.length; a_id++)
  {
    if ( oQ.answers[a_id] && oQ.answers[a_id].a_txt )
    {
      nOpinions++;
      oA     = oQ.answers[a_id];
      d      = Math.floor((nStamp - oA.pub_stamp) / constSecInDay);
      h      = Math.floor((nStamp - oA.pub_stamp - d * constSecInDay) / 3600);
      m      = Math.floor((nStamp - oA.pub_stamp - d * constSecInDay - h * 3600) / 60);
      strPub = g_static_text[const_q_publish_answer];
      strA   = '<A CLASS="aAAuthor" HREF="javascript:ShowPublicProfile(\'' + oA.author_bcode + '\');" >';
      strA  +=   oA.author;
      strA  += '</A>';
      strPub = ReplaceTxt(strPub, "{author}" , strA);
      strPub = ReplaceTxt(strPub, "{days}"   , d);
      strPub = ReplaceTxt(strPub, "{hours}"  , h);
      strPub = ReplaceTxt(strPub, "{minutes}", m);

      strT += '<TR>';
      strT +=   '<TD CLASS="tdOpinionRdn">';
      strT +=     '<INPUT type=radio name="' + strQName + '" ' +
                                     ' id="' + constQAPref + oQ.q_id + constQASuf + a_id + '" ' +
                                ' onclick="javascript:OnQAnswer(' + oQ.q_id + ', ' + a_id + ');" ';
      if ( a_id == oQ.ua_id )
        strT +=      ' CHECKED ';

      strT +=     '>';
      strT +=   '</TD>';
      strT +=   '<TD CLASS="tdOpinion">';
      strT +=     oA.a_txt;
      strT +=   '</TD>';
      strT += '</TR>';

      strT += '<TR>';
      strT +=   '<TD>';
      strT +=   '</TD>';
      strT +=   '<TD CLASS="tdAnswerPub">';
      strT +=     strPub;
      strT +=   '</TD>';
      strT += '</TR>';
    }
  }

  if ( nOpinions <= 0 )
  {
    strT += GetOpinionInput(oQ, true, true);
  }
  else
  {
    //input opinion section (invisible at first)
    strT += GetOpinionInput(oQ, false, false);

    strT +=   '<TR>';
    strT +=     '<TD>';
    strT +=     '</TD>';
    strT +=     '<TD id="' + constQAStatusidID + oQ.q_id + '">';
    strT +=     '</TD>';
    strT +=   '</TR>';

    if ( oQ.bPreview )
      oQ.strFOk = 'javascript:AQPreviewOk();';

    //button row
    strT +=   '<TR id="' + constQAVoteBtnID + oQ.q_id + '" STYLE="display:;">';
    strT +=     '<TD STYLE="padding-top:22px;">';
    strT +=     '</TD>';
    strT +=     '<TD STYLE="padding-top:22px;" ALIGN="right">';
    strT +=       '<DIV CLASS="divExtVoteBtn">';
    strT +=         GetVoteBtn(oQ.strFOk);
    strT +=       '</DIV>';
    strT +=     '</TD>';
    strT +=   '</TR>';

    //Disagree note
    if ( nOpinions < constAQMaxUOpinionsCount && nOpinions < oQ.q_MaxNAns )
    {
      strT +=   '<TR id="' + constQADisagreeNoteID + oQ.q_id + '" STYLE="display:;">';
      strT +=     '<TD ALIGN="right" VALIGN="top">';
      strT +=       '<A HREF="' + strSDO + '" >';
      strT +=         '<IMG SRC="/images/plus.png" BORDER="0">';
      strT +=       '</A>';
      strT +=     '</TD>';
      strT +=     '<TD ALIGN="left">';
      strT +=       '<SPAN>';
      strT +=         '<A HREF="' + strSDO + '" CLASS="aDisagree">';
      strT +=           g_static_text[const_disagree];
      strT +=         '</A>';
      strT +=       '</SPAN>';
      strT +=       '<DIV CLASS="divDisagreeSubnote">';
      strT +=         '<A HREF="' + strSDO + '" CLASS="aDisagreeSubnote">';
      strT +=           g_static_text[const_disagree_subnote];
      strT +=         '</A>';
      strT +=       '</DIV>';
      strT +=     '</TD>';
      strT +=   '</TR>';
    }
    //else todo
  }

  strT +=     '<TR>';
  strT +=       '<TD COLSPAN="2" CLASS="tdQBottomSpace">';
  strT +=       '</TD>';
  strT +=     '</TR>';

  strT +=   '</TABLE>';
  strT += '</DIV>';

  return strT;
}


function GetQRow1234(oQ, strPub)
{
  if ( !oQ ) return "";

  var i;
  var str;
  var strT = "";

  if ( oQ.bPreview )
    str = 'AQPreviewOk();';
  else
    str = 'LoadQSect(' + oQ.q_id + ');';

  //question row
  strT +=     '<TR>';
  strT +=       '<TD CLASS="tdPopularity">';
  strT +=         '<DIV CLASS="divPopularity">';
  strT +=           oQ.q_pop;
  strT +=         '</DIV>';
  strT +=       '</TD>';
  strT +=       '<TD CLASS="tdQuestions">';
  if ( oQ.bComments )
  {
    strT +=       '<A CLASS="aQuestions" HREF="javascript:' + str + '" >';
    strT +=         oQ.q_txt;
    strT +=       '</A>';
  }
  else
    strT +=       oQ.q_txt;
  strT +=       '</TD>';
  strT +=     '</TR>';

  //author row
  strT +=     '<TR>';
  strT +=       '<TD VALIGN="middle" CLASS="tdQPublishImg">';

  if ( 0 < oQ.author_pic.length )
    strT +=       '<IMG SRC="' + oQ.author_pic + '" onload="javascript:ResizeImg(this, ' + constUPicSmallImgW + ', ' + constUPicSmallImgH + ');">';

  strT +=       '</TD>';
  strT +=       '<TD VALIGN="middle" CLASS="tdQPublish">';

  strT +=         '<TABLE WIDTH="100%" CELLSPACING="0" CELLPADDING="0" BORDER="0">';
  strT +=           '<TR>';
  strT +=             '<TD VALIGN="middle" CLASS="tdQPubAuthor">';
  strT +=               strPub;
  strT +=             '</TD>';
  strT +=             '<TD VALIGN="middle" CLASS="tdQPubCategory">';

  if ( 0 < oQ.cat_id && 0 <= g_arrCatIndexes[oQ.cat_id] && g_arrCategories[g_arrCatIndexes[oQ.cat_id]] )
  {
    strT +=             '<A HREF="javascript:SetCurCategory(' + oQ.cat_id + ');" CLASS="aQPubCategory" >';
    strT +=               g_arrCategories[g_arrCatIndexes[oQ.cat_id]].name;
    strT +=             '</A>';
  }

  strT +=             '</TD>';
  strT +=           '</TR>';
  strT +=         '</TABLE>';
  strT +=       '</TD>';
  strT +=     '</TR>';

  //description row
  if ( 0 < oQ.description.length )
  {
    str = UnQS(oQ.description);

    if ( constQDMaxLen < str.length && oQ.bComments )
      str = QS(str.substr(0, constQDMaxLen) + "...");
    else
      str = oQ.description;

    strT +=   '<TR>';
    strT +=     '<TD CLASS="tdQHLeftEmpty">';
    strT +=     '</TD>';
    strT +=     '<TD CLASS="tdQDescription">';
    strT +=       str;
    strT +=     '</TD>';
    strT +=   '</TR>';
  }

  //question link(s)
  if ( !oQ.bComments )
  {
    if ( oQ.q_links && 0 < oQ.q_links.length )
    {
      strT += '<TR>';
      strT +=   '<TD CLASS="tdQHLeftEmpty">';
      strT +=   '</TD>';
      strT +=   '<TD CLASS="tdQLinks" ALIGN="right">';
      strT +=     '<TABLE ALIGN="right" CELLSPACING="0" CELLPADDING="0" BORDER="0">';
      strT +=       '<TR>';
      strT +=         '<TD CLASS="tdQLinksTxt" VALIGN="center" ALIGN="right">';
      strT +=           g_static_text[const_question_links];
      strT +=         '</TD>';
      strT +=         '<TD CLASS="tdQLinksHrefs" VALIGN="center" ALIGN="left">';
      for(i = 0; i < oQ.q_links.length; i++)
      {
        if ( oQ.q_links[i].url && 0 < oQ.q_links[i].url.length )
        {
          strT +=       '<A CLASS="aQLinksHrefs" HREF="' + oQ.q_links[i].url + '" target="_blank">';
          strT +=         oQ.q_links[i].title && 0 < oQ.q_links[i].title.length ? oQ.q_links[i].title : QS(oQ.q_links[i].url);
          strT +=       '</A>';
          strT +=       '<BR>';
        }
      }
      strT +=         '</TD>';
      strT +=       '</TR>';
      strT +=     '</TABLE>';
      strT +=   '</TD>';
      strT += '</TR>';
    }
  }

  //link to comments row
  if ( oQ.bComments )
  {
    //strT +=         g_static_text[const_href_comments];

    if ( oQ.bPreview )
      str = 'AQPreviewOk();';
    else
      str = 'LoadQSect(' + oQ.q_id + ');';

    if ( !oQ.qnt_comments )
      oQ.qnt_comments = 0;

    strT +=   '<TR>';
    strT +=     '<TD CLASS="tdQHLeftEmpty">';
    strT +=     '</TD>';
    strT +=     '<TD CLASS="tdQComment">';
    strT +=       '<TABLE ALIGN="right" CELLSPACING="0" CELLPADDING="0" BORDER="0">';
    strT +=         '<TR>';
    strT +=           '<TD VALIGN="center" ALIGN="right">';
    strT +=             '<IMG SRC="/images/comment_ico.png"'
                           + ' BORDER="0" STYLE="padding:2px 0px 0px 0px;" '
                           + ' onclick="javascript:' + str + '"' +
                        '>';
    strT +=           '</TD>';
    strT +=           '<TD VALIGN="center" ALIGN="left">';
    strT +=             '<A CLASS="aQComment" HREF="javascript:' + str + '" >';
    strT +=               oQ.qnt_comments;
    strT +=             '</A>';
    strT +=           '</TD>';
    strT +=         '</TR>';
    strT +=       '</TABLE>';
    strT +=     '</TD>';
    strT +=   '</TR>';
  }
  else
  {
    strT +=   '<TR>';
    strT +=     '<TD COLSPAN="2" CLASS="tdQHNonCommentsSpace">';
    strT +=     '</TD>';
    strT +=   '</TR>';
  }

  return strT;
}


function GetQADiv(oQ)
{
  if ( !oQ ) return "";

  var strT     = "";
  var strA     = "";
  var nStamp   = Math.floor((new Date()).valueOf()/1000);
  var d        = Math.floor((nStamp - oQ.pub_stamp) / constSecInDay);
  var h        = Math.floor((nStamp - oQ.pub_stamp - d * constSecInDay) / 3600);
  var m        = Math.floor((nStamp - oQ.pub_stamp - d * constSecInDay - h * 3600) / 60);
  var strPub   = g_static_text[const_q_publish_info];//by {author}, {days} days {hours} hrs {minutes} min ago
  var str;

  strA   = '<A CLASS="aQAuthor" HREF="javascript:ShowPublicProfile(\'' + oQ.author_bcode + '\');" >';
  strA  +=   oQ.author;
  strA  += '</A>';
  strPub = ReplaceTxt(strPub, "{author}" , strA);
  strPub = ReplaceTxt(strPub, "{days}"   , d);
  strPub = ReplaceTxt(strPub, "{hours}"  , h);
  strPub = ReplaceTxt(strPub, "{minutes}", m);

  if ( !oQ.q_MaxNAns )
    oQ.q_MaxNAns = constAQMaxUOpinionsCount;
  else
  {
    if ( oQ.q_MaxNAns < 2 )
      oQ.q_MaxNAns = 2;
  }

  strT += '<DIV id="' + constQuestion_id_ + oQ.q_id + '" CLASS="divQuestion">';
  strT +=   '<TABLE WIDTH="100%" CELLSPACING="0" CELLPADDING="0" BORDER="0">';

  strT +=     GetQRow1234(oQ, strPub);

  //shadow-seporator
  strT +=     '<TR>';
  strT +=       '<TD CLASS="tdSubAskEmpty">';
  strT +=       '</TD>';
  strT +=       '<TD CLASS="tdSubAskShadow">';
  strT +=         '<IMG SRC="/images/subaskshadow_bkg.png" BORDER="0">';
  strT +=       '</TD>';
  strT +=     '</TR>';

  var a_id, oA, qa_pop = 0;

  for(a_id = 0; a_id < oQ.answers.length; a_id++)
  {
    if ( oQ.answers[a_id] && oQ.answers[a_id].a_txt )
      qa_pop += oQ.answers[a_id].a_pop;
  }

  for(a_id = 0; a_id < oQ.answers.length; a_id++)
  {
    if ( oQ.answers[a_id] && oQ.answers[a_id].a_txt )
    {
      if ( 0 != qa_pop )
        oQ.answers[a_id].a_proc_pop = Math.round(oQ.answers[a_id].a_pop * 100 / qa_pop);
      else
        oQ.answers[a_id].a_proc_pop = 0;
    }
  }

  strT +=     '<TR>';
  strT +=       '<TD>';
  strT +=       '</TD>';
  strT +=       '<TD>';
  strT +=         '<TABLE WIDTH="100%" CELLSPACING="0" CELLPADDING="0" BORDER="0">';

  for(a_id = 0; a_id < oQ.answers.length; a_id++)
  {
    if ( oQ.answers[a_id] && oQ.answers[a_id].a_txt )
    {
      oA = oQ.answers[a_id];

      strT +=       '<TR>';
      strT +=         '<TD CLASS="tdAnswerResTxt">';
      strT +=           oA.a_txt;
      strT +=         '</TD>';
      strT +=         '<TD CLASS="' + (oQ.ua_id == a_id ? 'tdUAnswerResult' : 'tdAnswerResult') + '">';
      strT +=           oA.a_proc_pop + '%';
      strT +=         '</TD>';
      strT +=       '</TR>';
    }
  }
  strT +=         '</TABLE>';
  strT +=       '</TD>';
  strT +=     '</TR>';

  strT +=     '<TR>';
  strT +=       '<TD COLSPAN="2" CLASS="tdQBottomSpace">';
  strT +=       '</TD>';
  strT +=     '</TR>';

  strT +=   '</TABLE>';
  strT += '</DIV>';

  return strT;
}


function ShowDiffOpinion(q_id, nLen)
{
  SetDisplay(constQADisagreeNoteID   + q_id, "none");
  SetDisplay(constQAVoteBtnID        + q_id, "none");
  SetDisplay(constQAAddOpinionRow1ID + q_id, "");
  SetDisplay(constQAAddOpinionRow2ID + q_id, "");
  SetDisplay(constQAAddOpinionRow3ID + q_id, "");
  SetDisplay(constQAAddOpinionBtnID  + q_id, "");

  SetInnerHtml(constQAStatusidID     + q_id, "");
  SetInnerHtml(constQAAOStatusidID   + q_id, "");

  var o, i;
  for(i = 0; i < nLen; i++)
  {
    o = getEBId(constQAPref + q_id + constQASuf + i);
    if ( o && o.checked )
    {
      o.checked = false;
      return;
    }
  }
}


function ShowVoteBtn(q_id)
{
  var o = getEBId(constQADisagreeNoteID + q_id);

  if ( o && o.style && "none" == o.style.display )
  {
    o.style.display = "";

    SetDisplay(constQAVoteBtnID        + q_id, "");
    SetDisplay(constQAAddOpinionRow1ID + q_id, "none");
    SetDisplay(constQAAddOpinionRow2ID + q_id, "none");
    SetDisplay(constQAAddOpinionRow3ID + q_id, "none");
    SetDisplay(constQAAddOpinionBtnID  + q_id, "none");

    SetInnerHtml(constQAStatusidID     + q_id, "");
    SetInnerHtml(constQAAOStatusidID   + q_id, "");
  }
}


function OnQAnswer(q_id, a_id)
{
  ShowVoteBtn(q_id);
}


function OnQANOKeyUp(q_id)
{
  OnQANOKeyPress(q_id);
}


function OnQANOKeyPress(q_id)
{
  var str  = GetValue(constQANewOpinionID + q_id, "");
  var nLen = QS(str).length;

  if ( constMaxOpinionLength < nLen )
  {
    str  = GetQuotLimitSrt(str, constMaxOpinionLength);
    nLen = constMaxOpinionLength;
    SetValue(constQANewOpinionID + q_id, str);
  }

  var chars = constMaxOpinionLength - nLen;
  if ( chars <= 0 )
    chars = '<SPAN STYLE="color:#FF0000;">0</SPAN>';

  SetIfInHtml(
              constQAAOCharsAvableID + q_id,
              ReplaceTxt(g_static_text[const_chars_available], "{chars}", chars)
             );
}


function OnQANOFocus(q_id)
{
  var o = getEBId(constQANewOpinionID + q_id);

  if ( o && o.value == g_static_text[const_add_opinion_here] )
  {
    o.value       = "";
    o.style.color = "#666666";
  }
}


function NewOpinionVote(q_id)
{
  var strTxt = GetValue(constQANewOpinionID + q_id, "");

  strTxt = TrimSpaces(strTxt);

  if ( strTxt.length <= 0 || strTxt == g_static_text[const_add_opinion_here] )
    SetInnerHtml(constQAAOStatusidID + q_id, g_static_text[const_short_opinion]);
  else
  {
    SetInnerHtml(constQAAOStatusidID + q_id, g_static_text[const_processing_ddd]);
    xajax_add_opinion(constDXjxAddOpinion, q_id, strTxt);
  }
}

//------------------------------------------------------------------Add-Opinion


function HandleDXjxAddOpinion(oXMLElem, nRC)
{
  var oXMLQID = GetNamedChild(oXMLElem, "q_id");
  var q_id    = oXMLQID ? oXMLQID.getAttribute("id") : 0;
  var strStID = constQAAOStatusidID + q_id;

  switch(nRC)
  {
    case 1://success
      ShowAns(oXMLElem, strStID);
    break;

    case 2://logged out
      PleaseLogin(strStID);
    break;

    case 3://save_answer: bad answer or question id.
      SetInnerHtml(strStID, g_static_text[const_wrong_a_or_q_id]);
    break;

    case 4://answer alredy exist
      SetInnerHtml(strStID, g_static_text[const_answer_alredy_exist]);
    break;

    case 5://answer text too long
      SetInnerHtml(strStID, g_static_text[const_answer_too_long]);
    break;

    default:
      rcerr(err063, nRC);
  }
}


//------------------------------------------------------------------ID-Question


function GetQfromXML(oQNode)
{
  var oQ = null;

  if ( oQNode && "q" == oQNode.nodeName )
  {
    oQ              = new Object;
    oQ.q_id         = parseInt(oQNode.getAttribute("id")          );
    oQ.q_txt        =       QS(oQNode.getAttribute("txt")         );
    oQ.description  =       QS(oQNode.getAttribute("description") );
    oQ.author       =       QS(oQNode.getAttribute("author")      );
    oQ.author_pic   =          oQNode.getAttribute("author_pic")   ;
    oQ.author_bcode =       QS(oQNode.getAttribute("author_bcode"));
    oQ.q_pop        =       QS(oQNode.getAttribute("pop")         );
    oQ.qnt_comments = ParseInt(oQNode.getAttribute("qnt_comments"));
    oQ.ua_id        = ParseInt(oQNode.getAttribute("ua_id"), -1   );
    oQ.cat_id       = ParseInt(oQNode.getAttribute("category_id"), -1);
    oQ.pub_stamp    = ParseInt(oQNode.getAttribute("pub_time")    );
    oQ.q_MaxNAns    = ParseInt(oQNode.getAttribute("q_ans_limit") );
    oQ.answers      = new Array();
    oQ.q_links      = new Array();

    if ( oQNode.childNodes )
    {
      var i, j, oA, oANode, oLink, oLNode;
      for(j = 0; j < oQNode.childNodes.length; j++)
      {
        oANode = oQNode.childNodes[j];
        if ( "a" == oANode.nodeName )
        {
          //oA.author_pic = QS(oANode.getAttribute("author_pic"));

          oA               = new Object;
          a_id             = ParseInt(oANode.getAttribute("id"          ));
          oA.a_txt         =       QS(oANode.getAttribute("txt"         ));
          oA.a_pop         = ParseInt(oANode.getAttribute("pop"         ));
          oA.author        =       QS(oANode.getAttribute("author"      ));
          oA.author_bcode  =       QS(oANode.getAttribute("author_bcode"));
          oA.pub_stamp     = ParseInt(oANode.getAttribute("pub_time"    ));
          oQ.answers[a_id] = oA;
        }
        else
        {
          if ( "links" == oANode.nodeName )
          {
            if ( oANode.childNodes )
            {
              for(i = 0; i < oANode.childNodes.length; i++)
              {
                oLNode = oANode.childNodes[i];

                if ( "link" == oLNode.nodeName )
                {
                  oLink       = new Object;
                  oLink.title =         QS(oLNode.getAttribute("title"));
                  oLink.url   = TrimSpaces(oLNode.getAttribute("src"  ));

                  if ( !HasSubStrNoCase(g_objAQ.m_strLink, "javascript:", "vbscript:", "'", '"', ">", "<", " ") )
                    oQ.q_links[oQ.q_links.length] = oLink;
                }
              }
            }
          }
        }
      }
    }
  }

  return oQ;
}


function GetQsfromXML(oXMLElem)
{
  var arrQuestions = new Array();
  var oXMLAsks     = GetNamedChild(oXMLElem, "questions");

  if ( oXMLAsks && oXMLAsks.childNodes && 0 < oXMLAsks.childNodes.length )
  {
    arrQuestions.more = ParseInt(oXMLAsks.getAttribute("more"));
    arrQuestions.from = ParseInt(oXMLAsks.getAttribute("from"));

    var i;
    var oNode;
    var oQ;

    for(i = 0; i < oXMLAsks.childNodes.length; i++)
    {
      oNode = oXMLAsks.childNodes[i];
      if ( "q" == oNode.nodeName )
      {
        oQ = GetQfromXML(oNode);

        if ( oQ )
          arrQuestions[arrQuestions.length] = oQ;
      }
    }
  }

  return arrQuestions;
}


function LoadIdQ()
{
  xajax_load_id_question(constDXjxLoadIdQ, g_cur_q_id);
}


function HandleDXjxLoadIdQ(oXMLElem, nRC)
{
  switch(nRC)
  {
    case 1://success
      UpdateIdQ(oXMLElem);
    break;

    case 2://anonymous user
      SetInnerHtml(constIdQID, g_static_text[const_must_allow_cookies]);
    break;

    case 3://wrong question id
      SetInnerHtml(constIdQID, g_static_text[const_wrong_question_id]);
    break;

    default:
      rcerr(err028, nRC);
  }
}


function UpdateIdQ(oXMLElem)
{
  var oXMLQuestion = GetNamedChild(oXMLElem, "q");
  var oQ           = GetQfromXML  (oXMLQuestion);
  var strT;

  if ( oQ )
  {
    oQ.bComments = false;
    if ( 0 <= oQ.ua_id )
      strT = GetQADiv(oQ);
    else
    {
      oQ.strFOk = 'javascript:IdQAnswer(' + oQ.q_id + ',' + oQ.answers.length + ');';
      strT      = GetQDiv(oQ);
    }
    SetInnerHtml(constExtQuestion_id_ + oQ.q_id, strT);
  }
  else
  {
    strT = '<IMG SRC="' + constAnsDiagramURL + g_cur_q_id + '">';
    SetInnerHtml(constIdQID, strT);
  }
}


function IdQAnswer(q_id, nACount)
{
  var o, a_id;

  for(a_id = 0; a_id < nACount; a_id++)
  {
    o = getEBId(constQAPref + q_id + constQASuf + a_id);
    if ( o && o.checked )
    {
      IdQSaveAnswer(q_id, a_id);
      return;
    }
  }

  alert(g_static_text[const_select_your_answer]);
}


function IdQSaveAnswer(q_id, a_id)
{
  SetInnerHtml(constQAStatusidID + q_id, g_static_text[const_saving_ddd]);
  xajax_save_idq_answer(constDXjxSaveIdQAnswer, q_id, a_id);
}


function HandleDXjxSaveIdQAnswer(oXMLElem, nRC)
{
  var oXMLQID = GetNamedChild(oXMLElem, "q_id");
  var q_id    = oXMLQID ? oXMLQID.getAttribute("id") : 0;

  if ( q_id <= 0 )
    q_id = g_cur_q_id;

  var strID = constQAStatusidID + q_id;

  switch(nRC)
  {
    case 1://success
      ShowIdQAns(oXMLElem, q_id);
    break;

    case 2://anonymous user
      SetInnerHtml(strID, g_static_text[const_must_allow_cookies]);
    break;

    case 3://save_answer: bad answer or question id.
      SetInnerHtml(strID, g_static_text[const_wrong_a_or_q_id]);
    break;

    default:
      rcerr(err029, nRC);
  }
}


function ShowIdQAns(oXMLElem, q_id)
{
  var oXMLQuestion = GetNamedChild(oXMLElem, "q");
  var oQ           = GetQfromXML  (oXMLQuestion);

  if ( oQ )
  {
    oQ.bComments = false;

    var strT = GetQADiv(oQ);

    SetInnerHtml(constExtQuestion_id_ + q_id, strT);
  }
  else
    SetInnerHtml(constQAStatusidID + q_id, g_static_text[const_wrong_a_or_q_id]);

  reload_bottop100();
}


//--------------------------------------------------------------------Msg-Board


function LoadMsgBoard(q_id, nFrom, nQnt)
{
  xajax_load_msg_board(constDXjxLoadMsgBoard, q_id, nFrom, nQnt);
}


function HandleDXjxLoadMsgBoard(oXMLElem, nRC)
{
  switch(nRC)
  {
    case 1://success
      UpdateMsgBoard(oXMLElem);
    break;

    case 2://wrong question id
      SetInnerHtml(constMsgBoardID, g_static_text[const_wrong_question_id]);
    break;

    default:
      rcerr(err027, nRC);
  }
}


function UpdateMsgBoard(oXMLElem)
{
  var oXMLMsgBoard = GetNamedChild(oXMLElem, "message_board");
  var arrMsgs      = new Array();
  var i;

  if ( oXMLMsgBoard && oXMLMsgBoard.childNodes && 0 < oXMLMsgBoard.childNodes.length )
  {
    var o, oXMLMsg;
    var nLen = oXMLMsgBoard.childNodes.length;

    for(i = 0; i < nLen; i++)
    {
      if ( "msg" == oXMLMsgBoard.childNodes[i].nodeName )
      {
        oXMLMsg   = oXMLMsgBoard.childNodes[i];
        o         = new Object;
        o.strUser = QS(oXMLMsg.getAttribute("user_name"));
        o.strBtn  = QS(oXMLMsg.getAttribute("user_btn"));
        o.nUTC    = parseInt(oXMLMsg.getAttribute("UTC_stamp"));
        o.msg_id  = parseInt(oXMLMsg.getAttribute("msg_id"));
        o.msg_num = parseInt(oXMLMsg.getAttribute("msg_num"));
        o.strTxt  = GetSubNodeText(oXMLMsg);
        arrMsgs[arrMsgs.length] = o;
      }
    }
  }

  var q_id       = parseInt(oXMLMsgBoard.getAttribute("q_id"));
  var nMsgsCount = parseInt(oXMLMsgBoard.getAttribute("msg_count"));
  var nListFrom  = parseInt(oXMLMsgBoard.getAttribute("list_from"));
  var nListCount = constMsgsPerPage;
  var nFocusMsg  = parseInt(oXMLMsgBoard.getAttribute("focus_msg_num"));

  if ( nListCount <= 0 )
    nListCount = 1;

  var nPageCount =  Math.floor(nMsgsCount / nListCount)
                      + (0 == (nMsgsCount % nListCount) ? 0 : 1);
  var nPage      = 1 + Math.floor(nListFrom / nListCount);
  var strT       = "";

  if ( arrMsgs.length <= 0 )
    strT += '<DIV>' + g_static_text[const_empty_msg_board] + '</DIV>';
  else
  {
    var fHrefDest  = HrefLoadMsgBoard;

    fHrefDest.q_id = q_id

    var strPages   = CreatePagesDiv(fHrefDest, nPage, nPageCount, constMsgsPerPage);
    var clrBkg     = "#F5F5F5";

    strT += '<TABLE WIDTH="100%">';
    strT +=   '<TR>';
    strT +=     '<TD ALIGN="center">';
    strT +=       strPages;
    strT +=     '</TD>';
    strT +=   '</TR>';

    for(i = 0; i < arrMsgs.length; i++)
    {
      strT += RenderMsgRow(
                           arrMsgs[i].msg_num,
                           arrMsgs[i].nUTC,
                           clrBkg,
                           arrMsgs[i].strUser,
                           arrMsgs[i].strBtn,
                           arrMsgs[i].strTxt
                          );

      clrBkg = "#FFFFFF" == clrBkg ? "#F5F5F5" : "#FFFFFF";
    }

    strT +=   '<TR>';
    strT +=     '<TD ALIGN="center">';
    strT +=       strPages;
    strT +=     '</TD>';
    strT +=   '</TR>';
    strT += '</TABLE>';
  }

  SetInnerHtml(constMsgBoardID, strT);
  if ( nListFrom != nFocusMsg )
    VScrollTo(constBrdMsgID + nFocusMsg);
}


function RenderMsgRow(msg_num, nStamp, clrBkg, strUser, strBtn, strMsg)
{
  var str;
  var oDate = new Date(1000 * nStamp);

  str  = '<TR>';
  str +=   '<TD>';
  str +=     '<TABLE id="' + constBrdMsgID + msg_num + '" WIDTH="100%" BGCOLOR="' + clrBkg + '">';
  str +=       '<TR>';
  str +=         '<TD STYLE="padding:10px 0px 6px 10px; border-bottom-style:dashed; border-width:1px; border-color:#c8ccbc;">';
  str +=           strUser;
  str +=           '<BR><IMG SRC="' + constUDistance + '?code=' + strBtn + '&style=classic">';
  str +=         '</TD>';
  str +=         '<TD STYLE="padding:10px 6px 6px 10px; border-bottom-style:dashed; border-width:1px; border-color:#c8ccbc;" ALIGN="right">';
  str +=           oDate.toLocaleString();
  str +=         '</TD>';
  str +=       '</TR>';
  str +=       '<TR>';
  str +=         '<TD COLSPAN=2 STYLE="padding:6px 0px 10px 10px;">';
  str +=           strMsg;
  str +=         '</TD>';
  str +=        '</TR>';
  str +=     '</TABLE>';
  str +=   '</TD>';
  str += '</TR>';

  delete oDate;
  return str;
}


function HrefLoadMsgBoard(nPage, nPerPage)
{
  var n   = (nPage - 1) * nPerPage;
  var str = 'javascript:LoadMsgBoard(' + HrefLoadMsgBoard.q_id + ',' + n + ',' + nPerPage + ');';

  return str;
}


function GetPageStrT(n, fHrefDest, nPerPage, nPage)
{
  var strT = "";

  if ( n != nPage && fHrefDest )
  {
    strT += '<A HREF="' + fHrefDest(n, nPerPage) + '" >';
    strT +=   '[' + n + ']';
    strT += '</A>&nbsp;';
  }
  else
  {
    strT += '[' + n + ']&nbsp;';
  }

  return strT;
}


function CreatePagesDiv(fHrefDest, nPage, nPageCount, nPerPage)
{
  var nFrom;
  var strT = '<DIV>';

  if ( 1 < nPageCount )
  {
    var i;
    if ( nPageCount < constMaxPagesCount )
    {
      for(i = 1; i <= nPageCount; i++)
        strT += GetPageStrT(i, fHrefDest, nPerPage, nPage);
    }
    else
    {
      var n = nPage - constRangePageCount / 2;

      if ( n < 4 )
        n = 1;

      if ( nPageCount - 3 < n + constRangePageCount )
        n = nPageCount - constRangePageCount;

      if ( 1 < n )
        strT += GetPageStrT(1, fHrefDest, nPerPage, nPage) + '&nbsp;...&nbsp;&nbsp;';

      for(i = n; i <= nPageCount && i <= n + constRangePageCount; i++)
        strT += GetPageStrT(i, fHrefDest, nPerPage, nPage);

      if ( i < nPageCount )
        strT += '&nbsp;...&nbsp;&nbsp;' + GetPageStrT(nPageCount, fHrefDest, nPerPage, nPage);
    }
  }
  strT += '</DIV>';

  return strT;
}


//-----------------------------------------------------------------ShowInputMsg


function LoadInputMsg(q_id)
{
  xajax_load_input_msg(constXjxLoadInputMsg, q_id);
}


function HandleXjxLoadInputMsg()
{
  var strT;
  var nRC = parseInt(g_arrXajaxRets[1]);

  switch(nRC)
  {
    case 1://success
      ValidateXajaxRets(5);
      ShowInputMsg(g_arrXajaxRets[4], g_arrXajaxRets[2], g_arrXajaxRets[3]);
    break;

    case 2://logged out
      strT  = g_static_text[const_login_to_add_msg] + '<BR>';
      strT += '<A HREF="javascript:ShowLogin();" >';
      strT +=   g_static_text[const_href_login];
      strT += '</A>';

      SetInnerHtml(constAddMsgID, strT);
    break;

    default:
      ShowInputMsg("", g_cur_q_id, -1);
  }
}


function ShowInputMsg(strMsg, q_id, msg_id)
{
  var strT = '<DIV>';

  strT += g_static_text[const_type_your_message];
  strT += '<TABLE WIDTH="100%">';
  strT +=   '<TR>';
  strT +=     '<TD COLSPAN="2">';
  strT +=       '<TEXTAREA id="' + constInputMsgID + '" STYLE="width:100%; height:4em;">';
  strT +=         strMsg;
  strT +=       '</TEXTAREA>';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD id="' + constAddMsgStatusID + '">';
  strT +=     '</TD>';
  strT +=     '<TD ALIGN="right">';
  strT +=       '<TABLE CELLPADDING="6" BORDER="0">';
  strT +=         '<TR>';
  strT +=           '<TD ALIGN="right">';
  strT +=             '<SPAN class="no_decor666666">';
  strT +=               '<A HREF="javascript:OnPreviewMsg(' + q_id + ',' + msg_id + ');" class="href_btn">';
  strT +=                 g_static_text[const_href_preview_msg_btn];
  strT +=               '</A>';
  strT +=             '</SPAN>';
  strT +=           '</TD>';
  strT +=           '<TD ALIGN="center" class="no_decor666666">';
  strT +=             '<A HREF="javascript:OnSaveMsg(' + q_id + ',' + msg_id + ');" class="href_btn">';
  strT +=               g_static_text[const_href_save_msg_btn];
  strT +=             '</A>';
  strT +=           '</TD>';
  strT +=         '</TR>';
  strT +=       '</TABLE>';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT += '</TABLE>';
  strT += '</DIV>';

  SetInnerHtml(constAddMsgID, strT);
}


function OnPreviewMsg(q_id, msg_id)
{
  SaveMsg(q_id, msg_id, 1);
}


function OnSaveMsg(q_id, msg_id)
{
  SaveMsg(q_id, msg_id, 0);
}


function SaveMsg(q_id, msg_id, nPreview)
{
  var strTxt = "";
  var oInput = getEBId(constInputMsgID);

  if ( oInput )
    strTxt = oInput.value;

  strTxt = TrimSpaces(strTxt);

  if ( strTxt.length <= 0 )
    SetInnerHtml(constAddMsgStatusID, g_static_text[const_your_msg_is_empty]);
  else
  {
    SetInnerHtml(constAddMsgStatusID, g_static_text[const_saving_ddd]);

    if ( 1 == nPreview )
      xajax_save_preview_msg(constXjxSavePreviewMsg, q_id, msg_id, strTxt);
    else
      xajax_save_msg(constXjxSaveMsg, q_id, msg_id, strTxt);
  }
}


function HandleXjxSaveMsg()
{
  var nRC = parseInt(g_arrXajaxRets[1]);

  switch(nRC)
  {
    case 1:
      //g_arrXajaxRets[2] - q_id
      //g_arrXajaxRets[3] - msg_id
      //g_arrXajaxRets[4] - msg_num
      ValidateXajaxRets(5);
      HlpLoadQSector(g_arrXajaxRets[2], g_arrXajaxRets[4]);
    break;

    case 2://logged out
      SetInnerHtml(constAddMsgStatusID, g_static_text[const_please_login]);
    break;

    case 3://empty message
      SetInnerHtml(constAddMsgStatusID, g_static_text[const_your_msg_is_empty]);
    break;

    case 4://wrong question id
      SetInnerHtml(constAddMsgStatusID, g_static_text[const_wrong_question_id]);
    break;

    default:
      rcerr(err030, g_arrXajaxRets[1]);
  }
}


function HandleXjxSavePreviewMsg()
{
  var nRC = parseInt(g_arrXajaxRets[1]);

  switch(nRC)
  {
    case 1:
      PreviewMsg();
    break;

    case 2://logged out
      SetInnerHtml(constAddMsgStatusID, g_static_text[const_please_login]);
    break;

    case 3://empty message
      SetInnerHtml(constAddMsgStatusID, g_static_text[const_your_msg_is_empty]);
    break;

    case 4://wrong question id
      SetInnerHtml(constAddMsgStatusID, g_static_text[const_wrong_question_id]);
    break;

    default:
      rcerr(err066, g_arrXajaxRets[1]);
  }
}


function PreviewMsg()
{
  ValidateXajaxRets(8);

  var strName  = g_arrXajaxRets[2];
  var btn_code = g_arrXajaxRets[3];
  var msg_id   = g_arrXajaxRets[4];
  var stamp    = g_arrXajaxRets[5];
  var strMsg   = g_arrXajaxRets[6];
  var q_id     = g_arrXajaxRets[7];
  var strR     = RenderMsgRow(msg_id, stamp, "#F5F5F5", strName, btn_code, strMsg);

  g_oInputMsg.q_id   = q_id;
  g_oInputMsg.msg_id = msg_id;
  g_oInputMsg.strMsg = strMsg;

  var strT = '<DIV>';

  strT += g_static_text[const_your_message];
  strT += '<TABLE WIDTH="100%">';
  strT +=   '<TR>';
  strT +=     '<TD COLSPAN="2">';
  strT +=       '<TABLE WIDTH="100%">';
  strT +=         strR;
  strT +=       '</TABLE>';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD id="' + constAddMsgStatusID + '">';
  strT +=     '</TD>';
  strT +=     '<TD ALIGN="right">';
  strT +=       '<TABLE CELLPADDING="6" BORDER="0">';
  strT +=         '<TR>';
  strT +=           '<TD ALIGN="right">';
  strT +=             '<SPAN class="no_decor666666">';
  strT +=               '<A HREF="javascript:ReShowInputMsg();" class="href_btn">';
  strT +=                 g_static_text[const_href_edit_msg_btn];
  strT +=               '</A>';
  strT +=             '</SPAN>';
  strT +=           '</TD>';
  strT +=           '<TD ALIGN="center" class="no_decor666666">';
  strT +=             '<A HREF="javascript:OnPublicMsg(' + msg_id + ');" class="href_btn">';
  strT +=               g_static_text[const_href_save_msg_btn];
  strT +=             '</A>';
  strT +=           '</TD>';
  strT +=         '</TR>';
  strT +=       '</TABLE>';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT += '</TABLE>';
  strT += '</DIV>';

  SetInnerHtml(constAddMsgID, strT);
}


function ReShowInputMsg()
{
  if ( g_oInputMsg.q_id < 0 || g_oInputMsg.msg_id < 0 )
    LoadInputMsg(g_cur_q_id);
  else
    ShowInputMsg(g_oInputMsg.strMsg, g_oInputMsg.q_id, g_oInputMsg.msg_id);
}


function OnPublicMsg(msg_id)
{
  xajax_public_msg(constXjxPublicMsg, msg_id);
}


function HandleXjxPublicMsg()
{
  var nRC = parseInt(g_arrXajaxRets[1]);

  switch(nRC)
  {
    case 1:
      //g_arrXajaxRets[2] - q_id
      //g_arrXajaxRets[3] - msg_id
      //g_arrXajaxRets[4] - msg_num
      ValidateXajaxRets(5);
      HlpLoadQSector(g_arrXajaxRets[2], g_arrXajaxRets[4]);
    break;

    case 2://logged out
      SetInnerHtml(constAddMsgStatusID, g_static_text[const_please_login]);
    break;

    case 3://user logged, but wrong message id
      SetInnerHtml(constAddMsgStatusID, g_static_text[const_your_msg_is_empty]);
    break;

    default:
      rcerr(err031, g_arrXajaxRets[1]);
  }
}


//-----------------------------------------------------------------------Top100


function reload_bottop100()
{
  if ( "bot" == g_strBOTorTOP )
    load_bot100();
  else
    load_top100();
}


function load_top100()
{
  xajax_load_top100(constDXjxLoadTop100, g_nCurCategory);
}


function HandleDXjxLoadTop100(oXMLElem, nRC)
{
  switch(nRC)
  {
    case 1://success
      UpdateTop100(oXMLElem);
    break;

    case 2://anonymous user
      SetInnerHtml(constTopBot100ID, g_static_text[const_must_allow_cookies]);
    break;

    default:
      rcerr(err020, nRC);
  }
}


function UpdateTop100(oXMLElem)
{
  var i;
  var oXMLTop100 = GetNamedChild(oXMLElem, "top100");

  if ( oXMLTop100 )
  {
    var o;
    var strT = "";

    strT += '<TABLE CLASS="tableTop100" WIDTH="100%" CELLSPACING="0" CELLPADDING="0">';
    strT +=   '<TR><TD COLSPAN="4" ALIGN="center">';
    strT +=     '<TABLE WIDTH="100%" CELLSPACING="0" CELLPADDING="0" BORDER="0">';
    strT +=       '<TR>';
    strT +=         '<TD ROWSPAN="2" VALIGN="bottom" STYLE="padding: 20px 10px 5px 10px;">';
    strT +=           '<IMG SRC="/images/t100_prop.png">';
    strT +=         '</TD>';
    strT +=         '<TD VALIGN="bottom" CLASS="tdT100TMy">';
    strT +=           g_static_text[const_top100_my_prop];
    strT +=         '</TD>';
    strT +=         '<TD VALIGN="top" ALIGN="right">';
    strT +=           '<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0">';
    strT +=             '<TR>';
    strT +=               '<TD>';
    strT +=                 '<A HREF="javascript:load_bot100();" >';
    strT +=                   '<IMG SRC="/images/t100_rt_opp.png" BORDER="0">';
    strT +=                 '</A>';
    strT +=               '</TD>';
    strT +=               '<TD CLASS="tdT100RT" onclick="javascript:load_bot100();">';
    strT +=                 '<A HREF="javascript:load_bot100();" CLASS="aT100T">';
    strT +=                   g_static_text[const_top100_my_opp];
    strT +=                   '<BR>';
    strT +=                   g_static_text[const_top100_opponents];
    strT +=                 '</A>';
    strT +=               '</TD>';
    strT +=             '</TR>';
    strT +=           '</TABLE>';
    strT +=         '</TD>';
    strT +=       '</TR>';
    strT +=       '<TR>';
    strT +=         '<TD COLSPAN="2" VALIGN="top" CLASS="tdT100Soulmates">';
    strT +=           g_static_text[const_top100_soulmates];
    strT +=         '</TD>';
    strT +=       '</TR>';
    strT +=       '<TR>';
    strT +=         '<TD ALIGN="center" COLSPAN="3">';
    strT +=           '<IMG SRC="/images/t100_btm.png">';
    strT +=         '</TD>';
    strT +=       '</TR>';
    strT +=     '</TABLE>';
    strT +=   '</TD></TR>';

    g_arrTop100 = GetUsersFromXML(oXMLTop100);

    if ( 0 < g_arrTop100.length )
    {
      strT += GetTB100UserRows(g_arrTop100, true);
    }
    else
    {
      strT += '<TR><TD COLSPAN="4" ALIGN="center">';
      strT +=   g_static_text[const_top100_empty];
      strT += '</TD></TR>';
    }
    strT += '</TABLE>';

    strT = AddShadow(strT, ' WIDTH="100%" ');

    SetInnerHtml(constTopBot100ID, strT);
  }
}


function GetTB100UserRows(arr, bTop)
{
  var strT = "";
  if ( arr )
  {
    var i, o;

    for(i = 0; i < arr.length; i++)
    {
      o = arr[i];

      if ( !o )
      {
        //error in incoming XML - not all users exist
        o          = new Object();
        o.name     = "unknown";
        o.distance = 0;
        arr[i]     = o;
      }

      strT += GetTB100UserRow(o, i, bTop);
    }
  }
  return strT;
}


function GetTB100UserRow(oUser, nPos, bTop)
{
  var strT = "";

  if ( oUser )
  {
    strT += '<TR ';

    if ( bTop )
    {
      strT += ' id="' + constT100UserID + nPos + '" ';
      strT += ' onmouseover="OnMOverT100User(event,' + nPos + ');" ';
      strT += ' onmouseout="OnMOutT100User(event,' + nPos + ');" ';
    }
    else
    {
      strT += ' id="' + constB100UserID + nPos + '" ';
      strT += ' onmouseover="OnMOverB100User(event,' + nPos + ');" ';
      strT += ' onmouseout="OnMOutB100User(event,' + nPos + ');" ';
    }

    strT +=   ' onclick="ShowPublicProfile(\'' + oUser.btn_code + '\');;" ';
    strT +=   ' >';

    strT +=   '<TD VALIGN="middle" CLASS="tdTop100Rate">';
    strT +=     (1 + nPos);
    strT +=   '</TD>';
    strT +=   '<TD VALIGN="middle" CLASS="tdTop100Ico">';
    strT +=     '<IMG SRC="/images/t100_star.png">';
    strT +=   '</TD>';
    strT +=   '<TD VALIGN="middle" CLASS="tdTop100Pic">';
    strT +=     '<IMG SRC="' + oUser.pic + '" onload="javascript:ResizeImg(this, ' + constUPicTop100ImgW + ', ' + constUPicTop100ImgH + ');">';
    strT +=   '</TD>';
    strT +=   '<TD VALIGN="middle" CLASS="tdTop100Name">';
    strT +=     '<A CLASS="aTop100Name" HREF="javascript:ShowPublicProfile(\'' + oUser.btn_code + '\');" >';
    strT +=       oUser.name;
    strT +=     '</A>';
    strT +=   '</TD>';
    strT += '</TR>';
  }

  return strT;
}


function GetTB100UserTTText(o, strID)
{
  var strT = "";

  if ( o )
  {
    strT += '<TABLE CELLSPACING="0" CELLPADDING="0">';
    strT +=   '<TR>';
    strT +=     '<TD VALIGN="middle" ALIGN="center" STYLE="height:' + constUPicTB100TTipImgH + 'px; width:' + constUPicTB100TTipImgW + 'px;">';
    strT +=       '<IMG SRC="' + o.pic + '" onload="javascript:AlignImgTB100TTip(this,\'' + strID + '\',' + constUPicTB100TTipImgW + ', ' + constUPicTB100TTipImgH + ');">';
    strT +=     '</TD>';
    strT +=     '<TD VALIGN="top">';
    strT +=       '<TABLE CELLSPACING="0" CELLPADDING="0">';
    strT +=         '<TR>';
    strT +=           '<TD>';
    strT +=             g_static_text[const_tt_name];
    strT +=           '</TD>';
    strT +=           '<TD>';
    strT +=             o.name;
    strT +=           '</TD>';
    strT +=         '</TR>';
    strT +=         '<TR>';
    strT +=           '<TD COLSPAN="2">';
    strT +=             '<IMG SRC="' + constUDistance + '?code=' + o.btn_code + '&style=classic" onload="javascript:AlignTB100TTip(\'' + strID + '\');">';
    strT +=           '</TD>';
    strT +=         '</TR>';
    strT +=         '<TR>';
    strT +=           '<TD>';
    strT +=             g_static_text[const_tt_proximity];
    strT +=           '</TD>';
    strT +=           '<TD>';
    strT +=             o.distance;
    strT +=           '</TD>';
    strT +=         '</TR>';
    strT +=       '</TABLE>';
    strT +=     '</TD>';
    strT +=   '</TR>';
    strT += '</TABLE>';
  }

  return strT;
}


function GetUsersFromXML(oXMLUsers)
{
  var arrUsers = new Array();

  if ( oXMLUsers && oXMLUsers.childNodes && 0 < oXMLUsers.childNodes.length )
  {
    var i;
    var oNode;
    var oUser;
    var pos;

    for(i = 0; i < oXMLUsers.childNodes.length; i++)
    {
      oNode = oXMLUsers.childNodes[i];
      if ( "user" == oNode.nodeName )
      {
        pos            = ParseInt(oNode.getAttribute("pos"));
        oUser          = new Object();
        oUser.name     = QS(oNode.getAttribute("name"));
        oUser.distance = QS(oNode.getAttribute("distance"));
        oUser.btn_code = QS(oNode.getAttribute("btn_code"));
        oUser.pic      =    oNode.getAttribute("pic");
        oUser.pos      = pos;
        arrUsers[pos]  = oUser;
      }
    }
  }

  return arrUsers;
}


function OnMOverT100User(oEvent, nPos)
{
  var strID = constT100UserID + nPos;
  var str   = GetTB100UserTTText(g_arrTop100[nPos], strID);

  ShowTooltip(str, strID);
  AlignTB100TTip(strID);
}


function AlignImgTB100TTip(oImg, strElemID, w, h)
{
  ResizeImg     (oImg, w, h);
  AlignTB100TTip(strElemID);
}


function AlignTB100TTip(strElemID)
{
  var oTTip = GetByID(constTooltipID);
  var oElem = getEBId(strElemID);

  if ( oElem && oTTip && oTTip.m_strElemID == strElemID )
  {
    var xyElem = FindPos(oElem);
    var xyTTip = FindPos(oTTip);
    var x      = xyTTip[0] - (xyTTip[0] + oTTip.offsetWidth - (xyElem[0] + oElem.offsetWidth));

    oTTip.style.left = x + "px";
  }
}


function OnMOutT100User(oEvent, nPos)
{
  HideTTip();
}


//-----------------------------------------------------------------------Bot100


function load_bot100()
{
  xajax_load_bot100(constDXjxLoadBot100, g_nCurCategory);
}


function HandleDXjxLoadBot100(oXMLElem, nRC)
{
  switch(nRC)
  {
    case 1://success
      UpdateBot100(oXMLElem);
    break;

    case 2://anonymous user
      SetInnerHtml(constTopBot100ID, g_static_text[const_must_allow_cookies]);
    break;

    default:
      rcerr(err067, nRC);
  }
}


function UpdateBot100(oXMLElem)
{
  var i;
  var oXMLBot100 = GetNamedChild(oXMLElem, "bot100");

  if ( oXMLBot100 )
  {
    var o;
    var strT = "";

    strT += '<TABLE CLASS="tableTop100" WIDTH="100%" CELLSPACING="0" CELLPADDING="0">';
    strT +=   '<TR><TD COLSPAN="4" ALIGN="center">';
    strT +=     '<TABLE WIDTH="100%" CELLSPACING="0" CELLPADDING="0" BORDER="0">';
    strT +=       '<TR>';
    strT +=         '<TD VALIGN="top" ALIGN="left">';
    strT +=           '<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0">';
    strT +=             '<TR>';
    strT +=               '<TD>';
    strT +=                 '<A HREF="javascript:load_top100();" >';
    strT +=                   '<IMG SRC="/images/t100_lt_prop.png" BORDER="0">';
    strT +=                 '</A>';
    strT +=               '</TD>';
    strT +=               '<TD CLASS="tdT100LT" onclick="javascript:load_top100();">';
    strT +=                 '<A HREF="javascript:load_top100();" CLASS="aT100T">';
    strT +=                   g_static_text[const_top100_my_prop];
    strT +=                   '<BR>';
    strT +=                   g_static_text[const_top100_soulmates];
    strT +=                 '</A>';
    strT +=               '</TD>';
    strT +=               '<TD ALIGN="right">';
    strT +=                 '<IMG SRC="/images/t100_delim.png">';
    strT +=               '</TD>';
    strT +=             '</TR>';
    strT +=           '</TABLE>';
    strT +=         '</TD>';
    strT +=         '<TD VALIGN="bottom" CLASS="tdT100BMy">';
    strT +=           g_static_text[const_top100_my_opp];
    strT +=         '</TD>';
    strT +=         '<TD ROWSPAN="2" VALIGN="bottom" STYLE="padding: 20px 10px 5px 10px;">';
    strT +=           '<IMG SRC="/images/t100_opp.png">';
    strT +=         '</TD>';
    strT +=       '</TR>';
    strT +=       '<TR>';
    strT +=         '<TD COLSPAN="2" VALIGN="top" CLASS="tdT100Opponents">';
    strT +=           g_static_text[const_top100_opponents];
    strT +=         '</TD>';
    strT +=       '</TR>';
    strT +=       '<TR>';
    strT +=         '<TD ALIGN="center" COLSPAN="3">';
    strT +=           '<IMG SRC="/images/t100_btm.png">';
    strT +=         '</TD>';
    strT +=       '</TR>';
    strT +=     '</TABLE>';
    strT +=   '</TD></TR>';

    g_arrBot100 = GetUsersFromXML(oXMLBot100);

    if ( 0 < g_arrBot100.length )
    {
      strT += GetTB100UserRows(g_arrBot100, false);
    }
    else
    {
      strT += '<TR><TD COLSPAN="4" ALIGN="center">';
      strT +=   g_static_text[const_bot100_empty];
      strT += '</TD></TR>';
    }
    strT += '</TABLE>';

    strT = AddShadow(strT, ' WIDTH="100%" ');

    SetInnerHtml(constTopBot100ID, strT);
  }
}


function OnMOverB100User(oEvent, nPos)
{
  var strID = constB100UserID + nPos;
  var str   = GetTB100UserTTText(g_arrBot100[nPos], strID);

  ShowTooltip(str, strID);
  AlignTB100TTip(strID);
}


function OnMOutB100User(oEvent, nPos)
{
  HideTTip();
}


//----------------------------------------------------------------------Tooltip

function ShowTooltip(str, strElemID)
{
  var oTTip = GetByID(constTooltipID);

  if ( oTTip )
  {
    if ( "" == str )
      oTTip.style.display = "none";
    else
    {
      var oTTipTxt = GetByID(constTTTextID);
      var oElem    = getEBId(strElemID);

      if ( oElem && oTTipTxt )
      {
        var coors = FindPos(oElem);
        var x     = coors[0] + constTTXOffset;
        var y     = coors[1] + constTTYOffset + oElem.offsetHeight;

        oTTip.style.left    = x + "px";
        oTTip.style.top     = y + "px";
        oTTipTxt.innerHTML  = str;
        oTTip.style.display = "";
        oTTip.m_strElemID   = strElemID;
      }

      return 1;
    }
  }

  return 0;
}


function HideTTip()
{
  var oTTip = GetByID(constTooltipID);

  if ( oTTip )
    oTTip.style.display = "none";
}


//----------------------------------------------------------select-image-dialog


function SelectImgDlgMDown(oEvent)
{
  if ( 1 == g_objSImgDlg.m_bVisible )
  {
    if ( window.event )
      oEvent = window.event;

    var o = GetMEElement(oEvent);

    if ( oEvent && o && "INPUT" != o.tagName )
    {
      g_objSImgDlg.m_bMPressed = 1;
      g_objSImgDlg.m_nXPressed = oEvent.screenX;
      g_objSImgDlg.m_nYPressed = oEvent.screenY;

      if ( oEvent.preventDefault )//prevent browser's Drag-drop for Mozilla
        oEvent.preventDefault();

      return false;
    }
  }
}


function SelectImgDlgMMove(oEvent)
{
  if ( 1 == g_objSImgDlg.m_bVisible )
  {
    if ( 1 != g_objSImgDlg.m_bMPressed )
      return false;

    if ( window.event )
      oEvent = window.event;

    var o = GetMEElement(oEvent);

    if ( g_objSImgDlg.m_oElem && oEvent && o && "INPUT" != o.tagName )
    {
      var x = parseInt(g_objSImgDlg.m_oElem.style.left);
      var y = parseInt(g_objSImgDlg.m_oElem.style.top);

      x = x + (oEvent.screenX - g_objSImgDlg.m_nXPressed);
      y = y + (oEvent.screenY - g_objSImgDlg.m_nYPressed);

      g_objSImgDlg.m_nXPressed        = oEvent.screenX;
      g_objSImgDlg.m_nYPressed        = oEvent.screenY;
      g_objSImgDlg.m_oElem.style.left = x + "px";
      g_objSImgDlg.m_oElem.style.top  = y + "px";

      if ( oEvent.preventDefault )
        oEvent.preventDefault();

      return false;
    }
  }
}


function SelectImgDlgMUp(oEvent)
{
  g_objSImgDlg.m_bMPressed = 0;

  if ( 1 == g_objSImgDlg.m_bVisible )
  {
    var o = GetMEElement(oEvent);

    if ( !IsHasParent(o, constSImgDlgID) )
      SelectImgDlgClose();
  }
}


function SelectImgDlgClose()
{
  if ( g_objSImgDlg.m_oElem && 1 == g_objSImgDlg.m_bVisible )
  {
    g_objSImgDlg.m_oElem.style.display = "none";
    g_objSImgDlg.m_bVisible            = 0;
  }
}


function ShowSelectImgDlg(x, y, strURL, fOnUploaded)
{
  g_objSImgDlg.m_nDlgID++;//new id
  g_objSImgDlg.m_fOnUploaded = fOnUploaded;

  if ( !g_objSImgDlg.m_oElem )
    g_objSImgDlg.m_oElem = getEBId(constSImgDlgID);

  SetInnerHtml(constSImgDlgStatusID, "");

  var oFrm = getEBId(constSImgDlgFrmID);

  if ( oFrm )
    oFrm.action = strURL;

  if ( g_objSImgDlg.m_oElem )
  {
    g_objSImgDlg.m_oElem.style.left    = x + "px";
    g_objSImgDlg.m_oElem.style.top     = y + "px";
    g_objSImgDlg.m_oElem.style.display = '';
    g_objSImgDlg.m_bVisible            = 1;
  }
}


function SetHiddenDataToSDlg()
{
  var strT = "";

  if ( arguments )
  {
    var strName;
    var strVal;
    var i;
    for(i = 0; i < arguments.length; i += 2)
    {
      strName = arguments[i];
      strVal  = i + 1 < arguments.length ? arguments[i + 1] : "";
      strT   += '<INPUT TYPE="hidden" NAME="' + strName + '" VALUE="' + strVal + '">';
    }
  }

  SetInnerHtml(constSImgDlgHDataID, strT);
}


function SubmitImgDlg()
{
  var oFrm = getEBId(constSImgDlgFrmID);

  if ( oFrm )
  {
    SetSImgDlgStatus(g_static_text[const_processing_ddd]);
    oFrm.submit();
  }
  else
  {
    SetSImgDlgStatus(
                     g_static_text[const_internal_error] + err049
                                                         + g_static_text[const_can_not_find_elem]
                                                         + constSImgDlgFrmID
                    );
  }
}


function OnImgDlgUpload()
{
  if ( null != g_objSImgDlg.m_fOnUploaded )
    g_objSImgDlg.m_fOnUploaded(g_objSImgDlg.m_nDlgID);
}


function OnImgDlgCancel()
{
  SelectImgDlgClose();
}


//function IsSelectImgDlgVisible()
//{
//  return 1 == g_objSImgDlg.m_bVisible ? true : false;
//}
//

function SetSIDStatus(nID, strMsg)
{
  if ( g_objSImgDlg.m_nDlgID == nID )
  {
    SetSImgDlgStatus(strMsg);
    return 1;
  }

  return 0;
}


function SetSImgDlgStatus(strMsg)
{
  SetInnerHtml(constSImgDlgStatusID, strMsg);
}


//-------------------------------------------------------------Change-Name-Page


function ChangeNamePage()
{
  SetProgressState(g_static_text[const_please_wait_ddd]);
  xajax_load_change_name(constXjxLoadChangeName);
}


function HandleXjxLoadChangeName()
{
  var nRC = parseInt(g_arrXajaxRets[1]);

  switch(nRC)
  {
    case 1:
      OnLoadChangeNamePage();
    break;

    case 2:
      GoToLogin(g_static_text[const_login_4_change_name]);
    break;

    //case 3:
    default:
      GoToNewUser();
  }
}


function OnLoadChangeNamePage()
{
  HomePage(eUI_ignore);

  //g_arrXajaxRets[2] - secret_code
  //g_arrXajaxRets[3] - user name
  ValidateXajaxRets(4);

  var strT = "";

  strT += '<TABLE>';
  strT +=   '<TR>';
  strT +=     '<TD>';
  strT +=       g_static_text[const_name];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       '<INPUT TYPE="text" id="' + constNameID + '" VALUE="' + g_arrXajaxRets[3] + '">';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD COLSPAN="2">';
  strT +=       '<TABLE WIDTH="100%" CELLSPACING="0" CELLPADDING="0">';
  strT +=         '<TR>';
  strT +=           '<TD id="' + constProgressStateID + '" STYLE="padding-right:7px;" >';
  strT +=           '</TD>';
  strT +=           '<TD align="right">';
  strT +=             '<SPAN STYLE="padding-right:7px;">';
  strT +=               '<INPUT id="' + constSaveNameBtnID + '" TYPE="button" VALUE="' + g_static_text[const_save_new_name_btn] + '" onClick="javascript:SaveNewName();">';
  strT +=             '</SPAN>';
  strT +=             '<SPAN>';
  strT +=               '<INPUT TYPE="button" VALUE="' + g_static_text[const_cancel_btn] + '" onClick="javascript:CancelChangeName();">';
  strT +=             '</SPAN>';
  strT +=           '</TD>';
  strT +=         '</TR>';
  strT +=       '</TABLE>';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT += '</TABLE>';

  SetInnerHtml(constUserSectionID, strT);
}


function CancelChangeName()
{
  LoadUserInfo();
}


//----------------------------------------------------------------Save-New-Name

function SaveNewName()
{
  var oName = getEBId(constNameID);

  if ( oName )
  {
    Disable(constSaveNameBtnID);
    SetProgressState(g_static_text[const_saving_ddd]);
    xajax_save_change_name(constXjxSaveChangeName, oName.value);
  }
  else
    ferror(err001);
}


function HandleXjxSaveChangeName()
{
  var nRC = parseInt(g_arrXajaxRets[1]);

  switch(nRC)
  {
    case 1://Ok
      OnSaveChangeName();
    break;

    case 2://Empty name
    {
      var oBtn = getEBId(constSaveNameBtnID);

      if ( oBtn )
        oBtn.disabled = false;

      SetProgressState(g_static_text[const_err_empty_name]);
    }
    break;

    case 3://name already occupied
    {
      var oBtn = getEBId(constSaveNameBtnID);

      if ( oBtn )
        oBtn.disabled = false;

      SetProgressState(g_static_text[const_name_alredy_used]);
    }
    break;

    //case 4://Registered user can change his name after login
    //case 5://Unknown user
    default:
      GoToLogin(g_static_text[const_login_4_change_name]);
  }
}


function OnSaveChangeName()
{
  //g_arrXajaxRets[2] - new user name
  ValidateXajaxRets(3);
  g_strUserName = g_arrXajaxRets[2];
  HomePage(eUI_update);
}

//-----------------------------------------------------------------------Logout

function Logout()
{
  SetProgressState(g_static_text[const_please_wait_ddd]);
  xajax_logout(constXjxLogout);
}


function HandleXjxLogout()
{
  var nRC = parseInt(g_arrXajaxRets[1]);

  switch(nRC)
  {
    case 1:
      ClearCSObject();
      HomePage(eUI_update);
    break;

    default:
      SetInnerHtml(
                   constUserSectionID,
                   g_static_text[const_internal_error] + err018
                  );
  }
}

//------------------------------------------------------------------------Login


function Login()
{
  HomePage(eUI_login);
}


function ShowLogin()
{
  var strT = "";

  strT += '<TABLE id="' + constUserLoginID + '">';
  strT +=   '<TR>';
  strT +=     '<TD>';
  strT +=       g_static_text[const_login_or_email];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       '<INPUT TYPE="text" id="' + constLoginID + '" value="' + g_strUserName + '" TABINDEX=' + constTbILoginName + ' onkeydown="javascript:OnEnterDo(event, DoLogin);">';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD>';
  strT +=       g_static_text[const_password];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       '<INPUT TYPE="password" id="' + constPasswordID + '" TABINDEX=' + constTbIPassword + ' onkeydown="javascript:OnEnterDo(event, DoLogin);">';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=      '<TD id="' + constLoginStateID + '" COLSPAN="2" ALIGN="left" >';
  strT +=      '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD COLSPAN="2">';
  strT +=       '<TABLE WIDTH="100%" CELLSPACING="0" CELLPADDING="0">';
  strT +=         '<TR>';
  strT +=           '<TD ALIGN="right">';
  strT +=             '<SPAN STYLE="padding-right:7px;">';
  strT +=               '<INPUT id="' + constDoLoginBtnID     + '" TYPE="button" VALUE="' + g_static_text[const_login_btn]  + '" onClick="javascript:DoLogin();">';
  strT +=             '</SPAN>';
  strT +=             '<SPAN>';
  strT +=               '<INPUT id="' + constCancelLoginBtnID + '" TYPE="button" VALUE="' + g_static_text[const_cancel_btn] + '" onClick="javascript:CancelLogin();">';
  strT +=             '</SPAN>';
  strT +=           '</TD>';
  strT +=         '</TR>';
  strT +=       '</TABLE>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT += '</TABLE>';

  SetInnerHtml(constUserSectionID, strT);
  VScrollTo(constUserLoginID);
  SetFocus(constPasswordID);
}


function CancelLogin()
{
  LoadUserInfo();
}


function DoLogin()
{
  var oLogin    = getEBId(constLoginID);
  var oPassword = getEBId(constPasswordID);

  if ( oLogin && oPassword )
  {
    Disable(constDoLoginBtnID);
    SetInnerHtml(constLoginStateID, '<DIV><BLINK>' + g_static_text[const_processing_ddd] + '</BLINK><DIV>');
    xajax_login(constXjxLogin, oLogin.value, oPassword.value);
  }
  else
    ferror(err017 + " Can not find :" + constLoginID + " or " + constPasswordID);
}


function HandleXjxLogin()
{
  var nRC = parseInt(g_arrXajaxRets[1]);

  Enable(constDoLoginBtnID);
  switch(nRC)
  {
    case 1:
      ReloadHomePage();//all blocks can change
    break;

    case 2://unknown user or bad password
      SetInnerHtml(constLoginStateID, '<DIV>' + g_static_text[const_bad_name_or_password] + '<DIV>');
    break;

    case 3://confirmation required
      SetInnerHtml(constLoginStateID, '<DIV>' + g_static_text[const_confirmation_required] + '<DIV>');
    break;

    default:
      SetInnerHtml(
                   constUserSectionID,
                   g_static_text[const_internal_error] + err018
                  );
  }
}


//--------------------------------------------------------------------GoToLogin


function PleaseLogin(strID)
{
  var strT;

  strT  = '<A HREF="javascript:ShowLogin();" >';
  strT +=   g_static_text[const_please_login];
  strT += '</A>';

  SetInnerHtml(strID, strT);
}


var constGoToLoginWaitSec = 4;
var g_GoToLoginWaitCount  = constGoToLoginWaitSec;
var g_GoToLoginWaitTimer  = -1;


function DoGoToLogin()
{
  clearInterval(g_GoToLoginWaitTimer);
  HomePage(eUI_login);
}


function GoToLoginCountDown()
{
  g_GoToLoginWaitCount--;

  if ( g_GoToLoginWaitCount <= 0 )
  {
    SetInnerHtml(constWaitLoginTimerID, 0);
    DoGoToLogin();
  }
  else
    SetInnerHtml(constWaitLoginTimerID, g_GoToLoginWaitCount);
}


function GoToLogin(strMsg)
{
  var strT = "";

  strT += '<TABLE>';
  strT +=   '<TR>';
  strT +=     '<TD>';
  strT +=       strMsg;
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD>';
  strT +=       '<A HREF="javascript:DoGoToLogin();" >';
  strT +=         g_static_text[const_please_wait_ddd];
  strT +=       '</A>&nbsp;';
  strT +=       '<SPAN id="' + constWaitLoginTimerID + '">';
  strT +=         constGoToLoginWaitSec;
  strT +=       '</SPAN>';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT += '<TABLE>';

  if ( 1 == SetInnerHtml(constUserSectionID, strT) )
  {
    g_GoToLoginWaitCount = constGoToLoginWaitSec;
    g_GoToLoginWaitTimer = setInterval(GoToLoginCountDown, 1000);
  }
}


//-----------------------------------------------------------------Registration


function Registration()
{
  //GoToLogin(g_static_text[const_login_4_change_name]);
  LoadRegistration();
}


function LoadRegistration()
{
  xajax_load_registration(constXjxLoadRegistration);
}


function HandleXjxLoadRegistration()
{
  var nRC = parseInt(g_arrXajaxRets[1]);

  switch(nRC)
  {
    case 1:
      ShowRegForm();
    break;

    case 2://anonymous user
      SetInnerHtml(constUserSectionID, g_static_text[const_must_allow_cookies]);
    break;

    case 3://user already registered
      ShowAlredyRegForm();
    break;

    default:
      SetInnerHtml(
                   constUserSectionID,
                   g_static_text[const_internal_error] + err005
                  );
  }
}


function ShowAlredyRegForm()
{
  //g_arrXajaxRets[2] - secret_code
  //g_arrXajaxRets[3] - user name
  ValidateXajaxRets(4);

  var strSCode = g_arrXajaxRets[2];
  var strName  = g_arrXajaxRets[3];

  var strT = "";

  strT += '<TABLE>';
  strT +=   '<TR>';
  strT +=     '<TD COLSPAN="2" STYLE="padding-bottom:22px;">';
  strT +=       g_static_text[const_alredy_registered];
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD>';
  strT +=       g_static_text[const_your_secret_code];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       strSCode;
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD>';
  strT +=       g_static_text[const_name];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       strName;
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD COLSPAN="2">';
  strT +=       '<BR />';
  strT +=       '<A HREF="javascript:Login();" >';
  strT +=         g_static_text[const_href_login];
  strT +=       '</A>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD COLSPAN="2">';
  strT +=       '<A HREF="javascript:IamNewUser();" >';
  strT +=         g_static_text[const_href_I_am_new_user];
  strT +=       '</A>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD COLSPAN="2">';
  strT +=       '<A HREF="javascript:NotI();" >';
  strT +=         g_static_text[const_href_not_you_];
  strT +=       '</A>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT += '</TABLE>';

  SetInnerHtml(constUserSectionID, strT);
}


function IamNewUser()
{
  RegForm("", "");
}


function NotI()
{
  RegForm(" ", "");
}


function ShowRegForm()
{
  //g_arrXajaxRets[2] - secret_code
  //g_arrXajaxRets[3] - user name
  ValidateXajaxRets(4);

  RegForm(g_arrXajaxRets[2], g_arrXajaxRets[3]);
}


function RegForm(strSCode, strName)
{
  var strDoReg = ' onkeydown="javascript:OnEnterDo(event, DoRegister);" ';
  var strT     = "";

  strT += '<TABLE>';

  if ( "" != strSCode )
  {
    strT +=   '<TR>';
    strT +=     '<TD VALIGN="top">';
    strT +=       g_static_text[const_your_secret_code];
    strT +=     '</TD>';
    strT +=     '<TD>';
    strT +=       '<INPUT TYPE="text" id="' + constRegSCodeID + '" VALUE="' + strSCode + '"' + strDoReg + ' style="width:32ex"';

    if ( " " == strSCode )
      strT +=   ' >';
    else
    {
      strT +=   ' READONLY>';
      strT +=   '<BR />';
      strT +=   '<DIV id="' + constRegSCodeNoteID + '">';
      strT +=     '<A HREF="javascript:EnableRegSCode();" >';
      strT +=       g_static_text[const_href_change_ref_code];
      strT +=     '</A>';
      strT +=   '</DIV>';
    }

    strT +=     '</TD>';
    strT +=   '</TR>';
  }

  strT +=   '<TR>';
  strT +=     '<TD>';
  strT +=       g_static_text[const_name];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       '<INPUT TYPE="text" id="' + constRegLoginID + '" VALUE="' + strName + '" ' + strDoReg  + ' style="width:32ex">';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD>';
  strT +=       g_static_text[const_email];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       '<INPUT TYPE="text" id="' + constRegEMailID + '" ' + strDoReg + ' style="width:32ex">';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD>';
  strT +=       g_static_text[const_type_password];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       '<INPUT TYPE="password" id="' + constRegPwdID + '" ' + strDoReg + ' style="width:32ex">';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD>';
  strT +=       g_static_text[const_retype_password];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       '<INPUT TYPE="password" id="' + constRegRePwdID + '" ' + strDoReg + ' style="width:32ex">';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD id="' + constRegStatusID + '" COLSPAN="2">';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD COLSPAN="2" ALIGN="right">';
  strT +=       '<SPAN STYLE="padding-right:7px;">';
  strT +=         '<INPUT TYPE="button" VALUE="' + g_static_text[const_register_btn] + '" onClick="javascript:DoRegister();">';
  strT +=       '</SPAN>';
  strT +=       '<SPAN>';
  strT +=         '<INPUT TYPE="button" VALUE="' + g_static_text[const_cancel_btn]   + '" onClick="javascript:CancelRegister();">';
  strT +=       '</SPAN>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT += '</TABLE>';

  SetInnerHtml(constUserSectionID, strT);
  SetFocus(constRegLoginID);
}


function EnableRegSCode()
{
  var oRSCVal = getEBId(constRegSCodeID);

  if ( oRSCVal )
  {
    oRSCVal.readOnly = false;
    SetInnerHtml(constRegSCodeNoteID, g_static_text[const_note_ref_code]);
  }
}


function DoRegister()
{
  var strSCode = GetValue(constRegSCodeID, "");
  var strLogin = GetValue(constRegLoginID, "");
  var strEMail = GetValue(constRegEMailID, "");
  var strPwd   = GetValue(constRegPwdID  , "");
  var strRePwd = GetValue(constRegRePwdID, "");

  if ( "" == strLogin )
  {
    SetInnerHtml(constRegStatusID, g_static_text[const_regerr_empty_name]);
    return;
  }

  if ( "" == strEMail )
  {
    SetInnerHtml(constRegStatusID, g_static_text[const_regerr_empty_email]);
    return;
  }

  if ( strPwd.length < 3 || strRePwd.length < 3 )
  {
    SetInnerHtml(constRegStatusID, g_static_text[const_regerr_short_pwd]);
    return;
  }

  if ( strPwd != strRePwd )
  {
    SetInnerHtml(constRegStatusID, g_static_text[const_regerr_pwds_not_mach]);
    return;
  }

  SetInnerHtml  (constRegStatusID, '<DIV><BLINK>' + g_static_text[const_processing_ddd] + '</BLINK><DIV>');
  xajax_register(constXjxRegister,
                 strSCode,
                 strLogin,
                 strEMail,
                 strPwd
                );
}


function CancelRegister()
{
  LoadUserInfo();
}


function HandleXjxRegister()
{
  var nRC = parseInt(g_arrXajaxRets[1]);

  switch(nRC)
  {
    case 1://success
      ShowRegSuccess();
    break;

    case 2://user already registered
      SetInnerHtml(constRegStatusID, g_static_text[const_regerr_already]);
    break;

    case 3://empty name
      SetInnerHtml(constRegStatusID, g_static_text[const_regerr_empty_name]);
    break;

    case 4://short password
      SetInnerHtml(constRegStatusID, g_static_text[const_regerr_short_pwd]);
    break;

    case 5://name occupied
      ShowRegAlready();
    break;

    case 6://wrong cribla ID
      SetInnerHtml(constRegStatusID, g_static_text[const_wrong_cribla_id]);
    break;

    case 7://wrong email
      SetInnerHtml(constRegStatusID, g_static_text[const_regerr_empty_email]);
    break;

    case 8://email occupied
      ShowEMailRegAlready();
    break;

    case 9://name too long
      SetInnerHtml(constRegStatusID, g_static_text[const_name_too_long]);
    break;

    case 10://name has forbidden symbol
      SetInnerHtml(constRegStatusID, g_static_text[const_name_forbidden_symbol]);
    break;

    case 11://e-mail too long
      SetInnerHtml(constRegStatusID, g_static_text[const_email_too_long]);
    break;

    default:
      SetInnerHtml(
                   constRegStatusID,
                   g_static_text[const_internal_error] + err021
                  );
  }
}


function ShowRegSuccess()
{
  var strT = "";

  strT += '<TABLE CLASS="tableInnerPart" CELLSPACING="0" CELLPADDING="0">';
  strT +=   '<TR>';
  strT +=     '<TD>';
  strT +=       g_static_text[const_thank_for_register];
  strT +=       '<BR/>';
  strT +=       g_static_text[const_registering_continue];
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD>';
  strT +=       '<A HREF="javascript:ReloadHomePage();" >';
  strT +=         g_static_text[const_href_continue];
  strT +=       '</A>';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT += '</TABLE>';

  SetInnerHtml(constInnerBodyID, strT);
}


function ShowRegAlready()
{
  var strT = g_static_text[const_name_alredy_used];

  strT += '<BR />';
  strT += '<A HREF="javascript:Login();" >';
  strT +=   g_static_text[const_href_login];
  strT += '</A>';

  SetInnerHtml(constRegStatusID, strT);
}


function ShowEMailRegAlready()
{
  var strT = g_static_text[const_regerr_email_used];

  strT += '<BR />';
  strT += '<A HREF="javascript:Login();" >';
  strT +=   g_static_text[const_href_login];
  strT += '</A>';

  SetInnerHtml(constRegStatusID, strT);
}


//------------------------------------------------------------------UserProfile


function LoadUserProfile()
{
  xajax_load_user_profile(constXjxLoadUserProfile);
}


function HandleXjxLoadUserProfile()
{
  var nRC = parseInt(g_arrXajaxRets[1]);

  switch(nRC)
  {
    case 1:
      ShowUserProfile();
    break;

    case 2://anonymous user
      SetInnerHtml(constUserSectionID, g_static_text[const_must_allow_cookies]);
    break;

    case 3://logged out
      ShowPleaseLogin();
    break;

    default:
      SetInnerHtml(
                   constUserSectionID,
                   g_static_text[const_internal_error] + err022
                  );
  }
}


function ShowUserProfile()
{
  //g_arrXajaxRets[2] - name/login
  //g_arrXajaxRets[3] - secret_code/cribla id
  //g_arrXajaxRets[4] - email
  //g_arrXajaxRets[5] - btn_url
  //g_arrXajaxRets[6] - pic
  ValidateXajaxRets(7);

  var strName     = g_arrXajaxRets[2];
  var strCriblaID = g_arrXajaxRets[3];
  var strEMail    = g_arrXajaxRets[4];
  var strBtnURL   = g_arrXajaxRets[5];
  var strPicUrl   = g_arrXajaxRets[6];
  var strT        = "";

  strT += '<TABLE CLASS="tableInnerPart" CELLSPACING="0" CELLPADDING="4">';

  strT +=   '<TR>';
  strT +=     '<TD VALIGN="top">';
  strT +=       g_static_text[const_name];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       strName + '<BR />';
  strT +=       '<A HREF="javascript:ReloadChangeName();" >';
  strT +=         g_static_text[const_href_change_name_prof];
  strT +=       '</A>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD VALIGN="top">';
  strT +=       g_static_text[const_your_pic];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       '<TABLE CELLPADDING="0" CELLSPACING="0">';
  strT +=         '<TR>';
  strT +=           '<TD ALIGN="center" VALIGN="middle" HEIGHT="' + constPicHeight + '" WIDTH="' + constPicWidth + '">';
  strT +=             '<IMG SRC="' + strPicUrl + '">';
  strT +=           '</TD>';
  strT +=         '</TR>';
  strT +=       '</TABLE>';
  strT +=       '<A HREF="javascript:LoadChangePic();" >';
  strT +=         g_static_text[const_href_change_pic];
  strT +=       '</A>';
  strT +=       '<DIV id="' + constLCPicStatusID + '">';
  strT +=       '</DIV>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD VALIGN="top">';
  strT +=       g_static_text[const_password];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       '<A HREF="javascript:ReloadChangePassword();" >';
  strT +=         g_static_text[const_href_change_password];
  strT +=       '</A>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD VALIGN="top">';
  strT +=       g_static_text[const_email];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       strEMail + '<BR />';
  strT +=       '<A HREF="javascript:ChangeEMailB64(\'' + g_Base64.encode(strEMail) + '\');" >';
  strT +=         g_static_text[const_href_change_email];
  strT +=       '</A>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD VALIGN="top">';
  strT +=       g_static_text[const_your_secret_code];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       strCriblaID;
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD VALIGN="top">';
  strT +=       g_static_text[const_your_cribla_btn];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       '<IMG SRC="' + strBtnURL + '">';
  strT +=       '<BR /><INPUT TYPE="text" VALUE="&lt;IMG SRC=&quot;' + strBtnURL + '&quot;&gt;" style="width:84ex" READONLY>';

  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD COLSPAN="2" ALIGN="right">';
  strT +=       '<A HREF="javascript:GoOutProfile();" >';
  strT +=         g_static_text[const_href_cancel];
  strT +=       '</A>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT += '</TABLE>';

  strT += '<DIV id="' + constUUMsgList + '">';
  strT +=   g_static_text[const_loading_ddd];
  strT += '</DIV>';
  strT += '<DIV id="' + constOwnSurveyListID + '">';
  strT +=   g_static_text[const_loading_ddd];
  strT += '</DIV>';

  SetInnerHtml(constInnerBodyID, strT);

  ShowUUMsgList();
  ShowOwnSurveyList();
}


function ShowPleaseLogin()
{
  GoToLogin(g_static_text[const_please_login]);
//  var strT = "";
//
//  strT += g_static_text[const_please_login];
//  strT += '<BR />';
//  strT += '<A HREF="javascript:ReloadHomePage();" >';
//  strT +=   g_static_text[const_href_continue];
//  strT += '</A>';
//
//  SetInnerHtml(constUserSectionID, strT);
}


function GoOutProfile()
{
  HomePage(eUI_update);
}


function ReloadChangeName()
{
  ChangeNamePage();
}


function ReloadChangePassword()
{
  alert('to do');
}


//-------------------------------------------------------------------Change-Pic


function LoadChangePic()
{
  SetInnerHtml(constLCPicStatusID, g_static_text[const_loading_ddd]);
  xajax_load_user_profile(constXjxLoadUserPicProf);
}


function HandleXjxLoadUserPicProf()
{
  var nRC = parseInt(g_arrXajaxRets[1]);

  switch(nRC)
  {
    case 1:
      ShowChangePic();
    break;

    case 2://anonymous user
      SetInnerHtml(constLCPicStatusID, g_static_text[const_must_allow_cookies]);
    break;

    case 3://logged out
      GoToLogin(g_static_text[const_please_login]);
    break;

    default:
      SetInnerHtml(
                   constLCPicStatusID,
                   g_static_text[const_internal_error] + err039
                  );
  }
}


function ShowChangePic()
{
  //g_arrXajaxRets[2] - name/login
  //g_arrXajaxRets[3] - secret_code/cribla id
  //g_arrXajaxRets[4] - email
  //g_arrXajaxRets[5] - btn_url
  //g_arrXajaxRets[6] - pic
  ValidateXajaxRets(7);

  var strName     = g_arrXajaxRets[2];
  var strPicUrl   = g_arrXajaxRets[6];
  var strT        = "";

  strT += '<TABLE CELLPADDING="0">';

  strT +=   '<TR>';
  strT +=     '<TD ALIGN="left">';
  strT +=       '<A HREF="javascript:LoadUserProfile();" >';
  strT +=         strName;
  strT +=       '</A>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD VALIGN="top" STYLE="padding:8px 0px 0px 0px;">';
  strT +=       '<TABLE CELLPADDING="0" CELLSPACING="0">';
  strT +=         '<TR>';
  strT +=           '<TD ALIGN="center" VALIGN="middle" HEIGHT="' + constPicHeight + '" WIDTH="' + constPicWidth + '">';
  strT +=             '<IMG SRC="' + strPicUrl + '">';
  strT +=           '</TD>';
  strT +=         '</TR>';
  strT +=       '</TABLE>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD VALIGN="top" STYLE="padding:4px 0px 0px 0px;">';
  strT +=       '<DIV id="' + constRemovePicDivID + '">';
  strT +=         GetRemovePicDiv();
  strT +=       '</DIV>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD VALIGN="top" STYLE="padding:16px 0px 0px 0px;">';
  strT +=       '<DIV id="' + constNewPicDivID + '">';
  strT +=         '<FORM ACTION="save_pic.php" ENCTYPE="multipart/form-data" METHOD="post">';
  strT +=           '<INPUT NAME="user_pic" SIZE="40" TYPE="file">&nbsp;&nbsp;&nbsp;';
  strT +=           '<INPUT TYPE="submit" VALUE="' + g_static_text[const_upload_pic_btn] + '">';
  strT +=         '</FORM>';
  strT +=       '</DIV>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT += '</TABLE>';

  SetInnerHtml(constInnerBodyID, strT);
}


function GetRemovePicDiv()
{
  var strT = "";

  strT += '<A HREF="javascript:RemovePicAsk();" >';
  strT +=   g_static_text[const_href_remove_pic];
  strT += '</A>';

  return strT;
}


function RemovePicAsk()
{
  var strT = "";

  strT += '<TABLE CELLPADDING="0">';
  strT +=   '<TR>';
  strT +=     '<TD>';
  strT +=       g_static_text[const_do_remove_pic];
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD ALIGN="right">';
  strT +=       '<TABLE CELLPADDING="0" CELLSPACING="8">';
  strT +=         '<TR>';
  strT +=           '<TD>';
  strT +=             '<DIV class="no_decor666666">';
  strT +=               '<A HREF="javascript:OnRemovePic();" class="href_btn">';
  strT +=                 g_static_text[const_href_remove_pic_btn];
  strT +=               '</A>';
  strT +=             '</DIV>';
  strT +=           '</TD>';
  strT +=           '<TD>';
  strT +=             '<DIV class="no_decor666666">';
  strT +=               '<A HREF="javascript:CancelRemovePic();" class="href_btn">';
  strT +=                 g_static_text[const_href_cancel_btn];
  strT +=               '</A>';
  strT +=             '</DIV>';
  strT +=           '</TD>';
  strT +=         '</TR>';
  strT +=       '</TABLE>';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT += '</TABLE>';

  SetInnerHtml(constRemovePicDivID, strT);
}


//--------------------------------------------------------------------RemovePic


function OnRemovePic()
{
  SetInnerHtml(constRemovePicDivID, g_static_text[const_processing_ddd]);
  xajax_del_pic(constXjxDelPic);
}


function CancelRemovePic()
{
  SetInnerHtml(constRemovePicDivID, GetRemovePicDiv());
}


function HandleXjxDelPic()
{
  var nRC = parseInt(g_arrXajaxRets[1]);

  switch(nRC)
  {
    case 1:
      SetInnerHtml(constRemovePicDivID, g_static_text[const_pic_removed]);
      LoadUserProfile();
    break;

    case 2://anonymous user
    case 3://logged out
      SetInnerHtml(constRemovePicDivID, g_static_text[const_please_login]);
    break;

    case 4://pic is absent
      SetInnerHtml(constRemovePicDivID, g_static_text[const_def_pic_indelible]);
    break;

    default:
      rcerr(err040, g_arrXajaxRets[1]);
  }
}


//-----------------------------------------------------------------Change-EMail

function ChangeEMailB64(strEMailB64)
{
  alert('to do');

//constEMailID
//ChangeEMail
//const_change_email_btn
//
//  var strEMail = g_Base64.decode(strEMailB64);
//
//  var strT = "";
//
//  strT += '<TABLE>';
//  strT +=   '<TR>';
//  strT +=     '<TD>';
//  strT +=       g_static_text[const_email];
//  strT +=     '</TD>';
//  strT +=     '<TD>';
//  strT +=       '<INPUT TYPE="text" id="' + constEMailID + '" VALUE="' + strEMail + '">';
//  strT +=     '</TD>';
//  strT +=   '</TR>';
//
//  strT +=   '<TR>';
//  strT +=     '<TD COLSPAN="2">';
//  strT +=       '<TABLE WIDTH="100%" CELLSPACING="0" CELLPADDING="0">';
//  strT +=         '<TR>';
//  strT +=           '<TD id="' + constProgressStateID + '" STYLE="padding-right:7px;" >';
//  strT +=           '</TD>';
//  strT +=           '<TD align="right">';
//  strT +=             '<SPAN STYLE="padding-right:7px;">';
//  strT +=               '<INPUT TYPE="button" VALUE="' + g_static_text[const_change_email_btn] + '" onClick="javascript:ChangeEMail();">';
//  strT +=             '</SPAN>';
//  strT +=             '<SPAN>';
//  strT +=               '<INPUT TYPE="button" VALUE="' + g_static_text[const_cancel_btn] + '" onClick="javascript:LoadUserInfo();">';
//  strT +=             '</SPAN>';
//  strT +=           '</TD>';
//  strT +=         '</TR>';
//  strT +=       '</TABLE>';
//  strT +=     '</TD>';
//  strT +=   '</TR>';
//  strT += '</TABLE>';
//
//  SetInnerHtml(constUserSectionID, strT);
}


//----------------------------------------------------------------------NewUser


function GoToNewUser()
{
  var oInnerBody = GetByID(constInnerBodyID);

  if ( oInnerBody )
  {
    var strT = "";

    strT += '<TABLE>';
    strT +=   '<TR>';
    strT +=     '<TD>';
    strT +=       g_static_text[const_name];
    strT +=     '</TD>';
    strT +=     '<TD>';
    strT +=       '<INPUT TYPE="text" id="js_login" >';
    strT +=     '</TD>';
    strT +=   '</TR>';
    strT +=     '<TD>';
    strT +=       g_static_text[const_email];
    strT +=     '</TD>';
    strT +=     '<TD>';
    strT +=       '<INPUT TYPE="text" id="js_email" >';
    strT +=     '</TD>';
    strT +=   '</TR>';
    strT +=   '<TR>';
    strT +=     '<TD>';
    strT +=       g_static_text[const_type_password];
    strT +=     '</TD>';
    strT +=     '<TD>';
    strT +=       '<INPUT TYPE="password" id="js_type_password" >';
    strT +=     '</TD>';
    strT +=   '</TR>';
    strT +=   '<TR>';
    strT +=     '<TD>';
    strT +=       g_static_text[const_retype_password];
    strT +=     '</TD>';
    strT +=     '<TD>';
    strT +=       '<INPUT TYPE="password" id="js_retype_password" >';
    strT +=     '</TD>';
    strT +=   '</TR>';
    strT += '</TABLE>';

    oInnerBody.innerHTML = strT;
  }
  else
    ferror(err006 + " Can not find :" + constInnerBodyID);
}


//----------------------------------------------------------------------Surveys


function load_surveys()
{
  xajax_load_surveys(constDXjxLoadSurveys, g_nCurCategory);
}


function HandleDXjxLoadSurveys(oXMLElem, nRC)
{
  switch(nRC)
  {
    case 1://success
      UpdateSurveys(oXMLElem);
    break;

    default:
      rcerr(err061, nRC);
  }
}


function UpdateSurveys(oXMLElem)
{
  var i;
  var arrSSlices = GetSSlicesfromXML(oXMLElem);
  var strT       = "";

  for(i = 0; i < arrSSlices.length; i++)
    strT += GetSliceHtml(arrSSlices[i]);

  SetInnerHtml(constSurveysID, strT);
}


function GetSliceHtml(oSlice)
{
  if ( !oSlice )
    return "";

  var strT;
  var strTxt = '<DIV CLASS="divSliceText" id="' + constTxtSurvey_id_ + oSlice.survey_id + constSlice_id_ + oSlice.slice_id + '">' +
                 oSlice.text +
               '</DIV>';

  strT = '<DIV CLASS="divSlice">';

  if ( oSlice.model == eSOutModelTemplet )
  {
    strT += strTxt;
  }
  else
  {
    var strImg = '<IMG SRC="' + oSlice.img_url
                              + '" id="' + constImgSurvey_id_ + oSlice.survey_id + constSlice_id_ + oSlice.slice_id
                              + '" onload="javascript:ResizeImg(this, ' + constSliceImgW + ', ' + constSliceImgH + ');">';

    var strRes = '<DIV CLASS="divSliceResult" id="' + constResSurvey_id_ + oSlice.survey_id + constSlice_id_ + oSlice.slice_id + '">' +
                   oSlice.result +
                 '</DIV>';

    if ( oSlice.model == eSOutModelUser )
    {
      strT += strRes;
      strT += strTxt;
      strT += strImg;
    }
    else
    {
      strT += strImg;
      strT += strRes;
      strT += strTxt;
    }
  }

  strT += '</DIV>';
  strT  = AddShadow(strT);
  strT  = '<DIV CLASS="divSliceExter">' + strT + '</DIV>';

  return strT;
}


function GetSSlicesfromXML(oXMLElem)
{
  var oXMLSurveys = GetNamedChild(oXMLElem, "survey_list");
  var arrSSlices  = new Array();

  if ( oXMLSurveys )
  {
    arrSSlices.user_name = QS(oXMLSurveys.getAttribute("user_name"));

    if ( oXMLSurveys.childNodes && 0 < oXMLSurveys.childNodes.length )
    {
      var i, o, oXMLSx, s;
      var arrSSs;
      var survey_id, model, cmn_res, max_slc, max_res;

      for(i = 0; i < oXMLSurveys.childNodes.length; i++)
      {
        oXMLSx = oXMLSurveys.childNodes[i];
        if ( "slice" == oXMLSx.nodeName )
        {
          o = new Object();

          o.survey_id = ParseInt(oXMLSx.getAttribute("survey_id"));
          o.slice_id  = ParseInt(oXMLSx.getAttribute("slice_id" ));
          o.result    =       QS(oXMLSx.getAttribute("result"   ));
          o.text      =       QS(oXMLSx.getAttribute("text"     ));
          o.img_url   =          oXMLSx.getAttribute("img_url"  );
          o.model     = ParseInt(oXMLSx.getAttribute("model"    ), eSOutModelVotes);

          arrSSlices[arrSSlices.length] = o;
        }

        else
        {
          if ( "survey_res" == oXMLSx.nodeName && 0 < oXMLSx.childNodes.length )
          {
            arrSSs    = new Array();
            cmn_res   = 0;
            max_slc   = -1;
            max_res   = 0;
            model     = ParseInt(oXMLSx.getAttribute("model"), eSOutModelVotes);
            survey_id = ParseInt(oXMLSx.getAttribute("survey_id"));

            for(s = 0; s < oXMLSx.childNodes.length; s++)
            {
              oXMLSlice = oXMLSx.childNodes[s];
              if ( "slice" == oXMLSlice.nodeName )
              {
                o = new Object();

                o.slice_ind = ParseInt(oXMLSlice.getAttribute("slice_index"));
                o.pub       = ParseInt(oXMLSlice.getAttribute("pub"        ));
                o.result    =       QS(oXMLSlice.getAttribute("result"     ));
                o.text      =       QS(oXMLSlice.getAttribute("text"       ));
                o.img_url   =          oXMLSlice.getAttribute("img_url"    );

                arrSSs[o.slice_ind] = o;

                if ( max_res < o.result && 1 == o.pub )
                {
                  max_slc = o.slice_ind;
                  max_res = o.result;
                }
                cmn_res += o.result;
              }
            }

            o = MakeSliceRObj(survey_id, model, max_slc, max_res, cmn_res, arrSSlices.user_name, arrSSs);
            if ( o )
              arrSSlices[arrSSlices.length] = o;
          }
        }
      }
    }
  }

  return arrSSlices;
}


function MakeSliceRObj(survey_id, model, max_slc, max_res, cmn_res, user_name, arrSSs)
{
  var o = null;

  if ( 0 <= max_slc && 0 < max_res && 0 != cmn_res && arrSSs[max_slc] )
  {
    var n, s, pass, survey_res, strImg;
    var txt = arrSSs[max_slc].text;

    if ( model == eSOutModelTemplet )
    {
      survey_res = arrSSs[max_slc].result;

      if ( txt && "" != txt )
      {
        //substitute {name}, {img_1}, {txt_1}, {res_1}, {prc_1}...
        for(pass = 0; pass < arrSSs.length && 0 <= txt.indexOf("{"); pass++)
        {
          for(s = 0; s < arrSSs.length; s++)
          {
            if ( arrSSs[s] )
            {
              n   = s + 1;
              txt = ReplaceTxt(txt, "{res_" + n + "}", arrSSs[s].result);
              txt = ReplaceTxt(txt, "{prc_" + n + "}", Math.round(arrSSs[s].result * 100 / cmn_res) + "%");

              if ( arrSSs[s].img_url )
              {
                strImg = '<IMG SRC="' + arrSSs[s].img_url
                           + '" id="' + constImgSurvey_id_ + survey_id + constSlice_id_ + s
                           + '" onload="javascript:ResizeImg(this, ' + constSliceImgW + ', ' + constSliceImgH + ');">';

                txt = ReplaceTxt(txt, "{img_" + n + "}", strImg);
              }
            }
          }
          txt = ReplaceTxt(txt, "{name}", user_name);
        }
      }
    }
    else
    {
      if ( eSOutModelRating == model )// %
        survey_res = Math.round(max_res * 100 / cmn_res) + "%";
      else
      {
        if ( eSOutModelUser == model )
          survey_res = user_name;
        else
          survey_res = max_res;
      }
    }

    o           = new Object();
    o.survey_id = survey_id;
    o.slice_id  = max_slc;
    o.result    = survey_res;
    o.text      = txt;
    o.img_url   = arrSSs[max_slc].img_url;
    o.model     = model;
  }

  return o;
}


//-------------------------------------------------------------Pub-Prof-Surveys


function load_pub_prof_surveys(strBtnCode)
{
  xajax_load_pp_surveys(constDXjxLoadPPSurveys, strBtnCode);
}


function HandleDXjxLoadPPSurveys(oXMLElem, nRC)
{
  switch(nRC)
  {
    case 1://success
      UpdatePPSurveys(oXMLElem);
    break;

    default:
      rcerr(err011, nRC);
  }
}


function UpdatePPSurveys(oXMLElem)
{
  var i;
  var arrSSlices = GetSSlicesfromXML(oXMLElem);
  var strT       = "";

  for(i = 0; i < arrSSlices.length; i++)
    strT += GetSliceHtml(arrSSlices[i]);

  SetInnerHtml(constPPSurveysID, strT);

  if ( arrSSlices.user_name )
    strT = ReplaceTxt(g_static_text[const_kribla_about_n], "{name}", arrSSlices.user_name);
  else
    strT = g_static_text[const_surveys_head];

  SetInnerHtml(constPPSurveysHeadID, strT);
}


//--------------------------------------------------------------Own-Survey-List


function ShowOwnSurveyList()
{
  LoadOwnSurveyList();
}


function LoadOwnSurveyList()
{
  xajax_load_own_survey_list(constDXjxLoadOwnSurvList);
}


function HandleDXjxLoadOwnSurveyList(oXMLElem, nRC)
{
  switch(nRC)
  {
    case 1://success
      UpdateOwnSurveyList(oXMLElem);
    break;

    case 2://user logged out
      SetInnerHtml(constUUMsgList, g_static_text[const_please_login]);
    break;

    default:
      rcerr(err065, nRC);
  }
}


function UpdateOwnSurveyList(oXMLElem)
{
  var i;
  var oXMLSurveys = GetNamedChild(oXMLElem, "surveys");
  var arrSurveys  = new Array();

  if ( oXMLSurveys )
  {
    if ( oXMLSurveys.childNodes && 0 < oXMLSurveys.childNodes.length )
    {
      var o, oXMLSurvey;

      for(i = 0; i < oXMLSurveys.childNodes.length; i++)
      {
        oXMLSurvey = oXMLSurveys.childNodes[i];
        if ( "survey" == oXMLSurvey.nodeName )
        {
          o = new Object();

          o.survey_id = ParseInt(oXMLSurvey.getAttribute("id"       ));
          o.qn_slices = ParseInt(oXMLSurvey.getAttribute("qn_slices"));
          o.title     =       QS(oXMLSurvey.getAttribute("title"    ));
          o.type      = ParseInt(oXMLSurvey.getAttribute("type"     ));
          o.model     = ParseInt(oXMLSurvey.getAttribute("model"    ));
          o.state     = ParseInt(oXMLSurvey.getAttribute("state"    ));

          arrSurveys[arrSurveys.length] = o;
        }
      }
    }
  }

  var strT = "";
  if ( arrSurveys.length <= 0 )
  {
    strT += '<DIV STYLE="padding-top:20px;">';
    strT +=   g_static_text[const_own_empty_survey_list];
    strT += '</DIV>';
    strT += '<A HREF="javascript:CreateSurvey();" >';
    strT +=   g_static_text[const_href_create_survey];
    strT += '</A>';
  }
  else
  {
    strT += '<DIV STYLE="padding-top:20px;">';
    strT +=   g_static_text[const_own_survey_list];
    strT += '</DIV>';
    strT += '<TABLE CELLSPACING="0" CELLPADDING="5" WIDTH="100%">';
    strT +=   '<TR>';
    strT +=     '<TD>';
    strT +=       g_static_text[const_own_survey_title];
    strT +=     '</TD>';
    strT +=     '<TD>';
    strT +=       g_static_text[const_own_survey_state];
    strT +=     '</TD>';
    strT +=     '<TD>';
    strT +=       g_static_text[const_own_survey_type];
    strT +=     '</TD>';
    strT +=     '<TD>';
    strT +=       g_static_text[const_own_survey_model];
    strT +=     '</TD>';
    strT +=     '<TD>';
    strT +=       g_static_text[const_own_survey_qn_slices];
    strT +=     '</TD>';
    strT +=   '</TR>';

    var strState;
    var strTitle;
    var strTrStyle1 = 'STYLE="background-color:#F5F5F5;"';
    var strTrStyle2 = 'STYLE="background-color:#FFFFFF;"';

    for(i = 0; i < arrSurveys.length; i++)
    {
      strTitle = arrSurveys[i].title;
      strState = g_static_text[const_osstate_not_publish];

      if ( "" == TrimSpaces(strTitle) )
        strTitle = g_static_text[const_own_survey_noname];

      if ( 1 == (1 & arrSurveys[i].state) )
      {
        if ( 0 != ((2 | 4) & arrSurveys[i].state) )
          strState = g_static_text[const_osstate_publishing];
        else
          strState = g_static_text[const_osstate_published];
      }

      strT += '<TR ' + (0 == i % 2 ? strTrStyle1 : strTrStyle2) + ' >';
      strT +=   '<TD>';
      strT +=     '<A HREF="javascript:EditSurvey(' + arrSurveys[i].survey_id + ');" >';
      strT +=       strTitle;
      strT +=     '</A>';
      strT +=   '</TD>';
      strT +=   '<TD>';
      strT +=     strState;
      strT +=   '</TD>';
      strT +=   '<TD>';
      strT +=     GetSurveyTypeStr(arrSurveys[i].type);
      strT +=   '</TD>';
      strT +=   '<TD>';
      strT +=     GetSurveyStyleStr(arrSurveys[i].model);
      strT +=   '</TD>';
      strT +=   '<TD>';
      strT +=     arrSurveys[i].qn_slices;
      strT +=   '</TD>';
      strT += '</TR>';
    }

    strT += '</TABLE>';
  }

  SetInnerHtml(constOwnSurveyListID, strT);
}


function EditSurvey(survey_id)
{
  CreateSurvey(survey_id);
}


//----------------------------------------------------------------Create-Survey


var g_objCS =
{
  m_bPublished     : false,
  m_nSurveyID      : -1,
  m_strSurveyTitle : "",
  m_nStyle         :  1,
  m_nType          :  1,
  m_nCategory_id   :  0,
  m_strLanguage    : "en",
  m_arrSlices      : new Array(),
  m_nSlices        : 0,
  m_arrQuestions   : new Array(),
  m_arrCurAsks     : null,
  m_enCurFilter    : 0,//one of eCSFilter_xxx
  m_oFilter_All    : null,
  m_oFilter_My     : null,
  m_oFilter_Survey : null,
  m_oFilter_Find   : null,

  GorC_CurFilter   : function (enFilter)
  {
    switch(enFilter)
    {
      case eCSFilter_Survey:
        if ( !this.m_oFilter_Survey )
        {
          this.m_oFilter_Survey      = new Object();
          this.m_oFilter_Survey.from = 0;
        }
      return this.m_oFilter_Survey;

      case eCSFilter_My    :
        if ( !this.m_oFilter_My )
        {
          this.m_oFilter_My          = new Object();
          this.m_oFilter_My.from     = 0;
          this.m_oFilter_My.category = -1;
        }
      return this.m_oFilter_My;

      case eCSFilter_Find  :
        if ( !this.m_oFilter_Find )
        {
          this.m_oFilter_Find          = new Object();
          this.m_oFilter_Find.from     = 0;
          this.m_oFilter_Find.category = -1;
          this.m_oFilter_Find.strFind  = "";
        }
      return this.m_oFilter_Find;

      case eCSFilter_All   :
      default:
        if ( !this.m_oFilter_All )
        {
          this.m_oFilter_All          = new Object();
          this.m_oFilter_All.from     = 0;
          this.m_oFilter_All.category = -1;
        }
    }

    return this.m_oFilter_All;
  },

  GetFrom          : function ()
  {
    var o = null;
    switch(this.m_enCurFilter)
    {
      case eCSFilter_Survey: o = this.m_oFilter_Survey ; break;
      case eCSFilter_All   : o = this.m_oFilter_All    ; break;
      case eCSFilter_My    : o = this.m_oFilter_My     ; break;
      case eCSFilter_Find  : o = this.m_oFilter_Find   ; break;
    }

    if ( o )
      return o.from;

    return 0;
  },

  SetFrom          : function (nFrom)
  {
    if ( nFrom < 0 )
      nFrom = 0;

    this.GorC_CurFilter(this.m_enCurFilter);//create

    switch(this.m_enCurFilter)
    {
      case eCSFilter_Survey: this.m_oFilter_Survey.from = nFrom; break;
      case eCSFilter_All   : this.m_oFilter_All   .from = nFrom; break;
      case eCSFilter_My    : this.m_oFilter_My    .from = nFrom; break;
      case eCSFilter_Find  : this.m_oFilter_Find  .from = nFrom; break;
    }

    return nFrom;
  },

  GetQ : function(q_id)
  {
    var n = eCSFilter_Survey == this.m_enCurFilter ? this.CSFindSQ(q_id) : this.CSFindQ(q_id);

    if ( 0 <= n )
    {
      return eCSFilter_Survey == this.m_enCurFilter ? this.m_arrQuestions[n]
                                                    : this.m_arrCurAsks  [n];
    }

    return null;
  },

  CSFindQ : function(q_id)
  {
    if ( this.m_arrCurAsks )
    {
      var i;

      for(i = 0; i < this.m_arrCurAsks.length; i++)
      {
        if ( this.m_arrCurAsks[i].q_id == q_id )
          return i;
      }
    }

    return -1;
  },

  CSFindSQ : function(q_id)
  {
    if ( this.m_arrQuestions )
    {
      var i;

      for(i = 0; i < this.m_arrQuestions.length; i++)
      {
        if ( this.m_arrQuestions[i].q_id == q_id )
          return i;
      }
    }

    return -1;
  },


  ValidLang : function()
  {
    if ( "en" != this.m_strLanguage && "fr" != this.m_strLanguage && "ru" != this.m_strLanguage )
      this.m_strLanguage = g_language;

    return this.m_strLanguage;
  }
}
ClearCSObject();


function CreateSurvey()//nSurvey_id, enCSAsks, enCats, enCS, enUI
{
  g_strCurPage = "CreateSurvey";

  var oInnerBody = GetByID(constInnerBodyID);
  var nSurvey_id = -1;
  var enCSAsks   = eCSAsks_load;
  var enCats     = eCats_load;
  var enCS       = eCS_load;
  var enUI       = eUI_load;

  if ( 0 < arguments.length )
  {
    nSurvey_id = arguments[0];

    if ( 1 < arguments.length )
    {
      enCSAsks = arguments[1];

      if ( 2 < arguments.length )
      {
        enCats = arguments[2];

        if ( 3 < arguments.length )
        {
          enCS = arguments[3];

          if ( 4 < arguments.length )
            enUI = arguments[4];
        }
      }
    }
  }

  if ( oInnerBody )
  {
    var bExist = getEBId(constCrtSurveyPageID) ? 1 : 0;
    var strT   = "";

    if ( 0 == bExist )
    {
      strT += '<TABLE id="' + constCrtSurveyPageID + '" WIDTH="100%" CLASS="tableInnerPart" CELLSPACING="0" CELLPADDING="0">';
      strT +=   '<TR>';
      strT +=     '<TD STYLE="padding-bottom:22px;">';
      strT +=       '&nbsp;';
      strT +=     '</TD>';
      strT +=   '</TR>';
      strT +=   '<TR>';
      strT +=     '<TD>';
      strT +=       '<DIV id="' + constCreateSurveyID + '" >';
      strT +=         g_static_text[const_loading_ddd];
      strT +=       '</DIV>';
      strT +=     '</TD>';
      strT +=   '</TR>';
      strT +=   '<TR>';
      strT +=     '<TD>';
      strT +=       '<DIV STYLE="padding-top:15px; border-bottom-style:dashed; border-bottom-width:1px;">';
      strT +=       '</DIV>';
      strT +=     '</TD>';
      strT +=   '</TR>';
      strT +=   '<TR>';
      strT +=     '<TD STYLE="padding-top:15px;">';
      strT +=       '<DIV id="' + constQCategoriesID + '" >';
      strT +=         g_static_text[const_loading_ddd];
      strT +=       '</DIV>';
      strT +=     '</TD>';
      strT +=   '</TR>';
      strT +=   '<TR>';
      strT +=     '<TD STYLE="padding-top:15px;">';
      strT +=       '<DIV id="' + constCrtSAsksFilterID + '" >';
      strT +=         g_static_text[const_loading_ddd];
      strT +=       '</DIV>';
      strT +=     '</TD>';
      strT +=   '</TR>';
      strT +=   '<TR>';
      strT +=     '<TD STYLE="padding-top:15px;">';
      strT +=       '<DIV id="' + constCrtSurveyAsksID + '" >';
      strT +=         g_static_text[const_loading_ddd];
      strT +=       '</DIV>';
      strT +=     '</TD>';
      strT +=   '</TR>';
      strT += '</TABLE>';

      oInnerBody.innerHTML = strT;

      if ( eUI_load == enUI )
        enUI = eUI_update;

      enCats = eCats_update;
      enCS   = eCS_update;
    }

    ShowUserInfo(enUI);

    if ( eCS_update == enCS )
    {
      LoadCrtSurvey(nSurvey_id);

      if ( 0 < g_arrCategories.length )
         LoadCrtSurvey(nSurvey_id);
      else
      {
        DoLoadCrtSurvey.nSurvey_id = nSurvey_id;
        LoadCategoriesTree(DoLoadCrtSurvey);
      }
    }
    else
    {
      if ( eCSAsks_update == enCSAsks )
        ReloadCSAsks();
    }

    if ( eCats_update == enCats )
      load_categories();
  }
  else
    ferror(err048 + g_static_text[const_can_not_find_elem] + constInnerBodyID);
}


function ShowCrtSurvey()
{
  var i;
  var strLang = g_objCS.ValidLang();
  var strT    = "";

  strT += '<TABLE id="' + constCrtSurveyTblID + '" CELLSPACING="0" CELLPADDING="0" WIDTH="100%" BORDER="0">';

  //survey name
  strT +=   '<TR>';
  strT +=     '<TD WIDTH="5%">&nbsp;</TD>';
  strT +=     '<TD WIDTH="7%" VALIGN="center" STYLE="padding-bottom:4px;">';
  strT +=       g_static_text[const_cs_survey];
  strT +=     '</TD>';
  strT +=     '<TD WIDTH="40%" STYLE="padding-bottom:4px;">';
  strT +=       '<INPUT id="' + constCrtSurveyTitleID + '" VALUE="' + g_objCS.m_strSurveyTitle + '" TYPE="text" STYLE="width:100%;">';
  strT +=     '</TD>';
  strT +=     '<TD WIDTH="48%" ></TD>';
  strT +=   '</TR>';

  //survey language
  strT +=   '<TR>';
  strT +=     '<TD>&nbsp;</TD>';
  strT +=     '<TD VALIGN="center">';
  strT +=       ReplaceTxt(g_static_text[const_cs_survey_language], " ", "&nbsp;");
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       '<SELECT id="' + constCrtSLanguageID + '" STYLE="width:100%;">';
  strT +=         '<OPTION' + ("en" == strLang ? ' SELECTED ' : ' ') + 'VALUE="en">'
                    + g_static_text[const_cs_lang_en] +
                  '</OPTION>';
  strT +=         '<OPTION' + ("fr" == strLang ? ' SELECTED ' : ' ') + 'VALUE="fr">'
                    + g_static_text[const_cs_lang_fr] +
                  '</OPTION>';
  strT +=         '<OPTION' + ("ru" == strLang ? ' SELECTED ' : ' ') + 'VALUE="ru">'
                    + g_static_text[const_cs_lang_ru] +
                  '</OPTION>';
  strT +=       '</SELECT>';
  strT +=     '</TD>';
  strT +=     '<TD></TD>';
  strT +=   '</TR>';

  //survey type
  strT +=   '<TR>';
  strT +=     '<TD>&nbsp;</TD>';
  strT +=     '<TD VALIGN="center">';
  strT +=       ReplaceTxt(g_static_text[const_cs_survey_type], " ", "&nbsp;");
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       '<SELECT id="' + constCrtSTypeID + '" STYLE="width:100%;" onchange="OnCSTypeChanged();">';
  strT +=         '<OPTION' + (eCommonSurvey == g_objCS.m_nType  ? ' SELECTED ' : ' ') + 'VALUE="' + eCommonSurvey + '">'
                    + GetSurveyTypeStr(eCommonSurvey) +
                  '</OPTION>';
  strT +=         '<OPTION' + (ePubProfSurvey == g_objCS.m_nType ? ' SELECTED ' : ' ') + 'VALUE="' + ePubProfSurvey + '">'
                    + GetSurveyTypeStr(ePubProfSurvey) +
                  '</OPTION>';
  strT +=       '</SELECT>';
  strT +=     '</TD>';
  strT +=     '<TD></TD>';
  strT +=   '</TR>';

  //survey category
  strT +=   '<TR id="' + constCrtSCatRowID + '" STYLE="display:' + (eCommonSurvey == g_objCS.m_nType ? ' ' : 'none;') + '">';
  strT +=     '<TD>&nbsp;</TD>';
  strT +=     '<TD VALIGN="center">';
  strT +=       g_static_text[const_cs_survey_category];
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       '<SELECT id="' + constCrtSCategoryID + '" STYLE="width:100%;">';
  strT +=         '<OPTION VALUE="0"'
                    + (0 == g_objCS.m_nCategory_id ? ' SELECTED ' : ' ') +
                  '>'
                    + g_static_text[const_cs_any_category] +
                 '</OPTION>';

  for(i = 0; i < g_arrCategories.length; i++)
  {
    strT +=  '<OPTION VALUE="' + g_arrCategories[i].id + '"';

    if ( g_objCS.m_nCategory_id == g_arrCategories[i].id )
      strT +=  ' SELECTED ';

    strT +=  '>' + g_arrCategories[i].FullName + '</OPTION>';
  }

  strT +=       '</SELECT>';
  strT +=     '</TD>';
  strT +=     '<TD></TD>';
  strT +=   '</TR>';

  //empty space
  strT +=   '<TR>';
  strT +=     '<TD></TD>';
  strT +=     '<TD></TD>';
  strT +=     '<TD>';
  strT +=       '<DIV STYLE="height:12px;">';
  strT +=       '</DIV>';
  strT +=     '</TD>';
  strT +=     '<TD></TD>';
  strT +=   '</TR>';

  for(i = 0; i < g_objCS.m_nSlices; i++)
  {
    strT += '<TR>';
    strT +=   '<TD ALIGN="right" STYLE="padding:0px 3px 6px 0px;">';

    if ( i == g_objCS.m_nSlices - 1 )
    {
      if ( 2 <= i )
      {
        strT += '<A HREF="javascript:RemoveSlice();" >';
        strT +=   '<IMG SRC="/images/minus.png" BORDER="0" ALT="-" >';
        strT += '</A>';
        strT += '<BR>';
      }

      strT +=   '<A HREF="javascript:AddSlice();" >';
      strT +=     '<IMG SRC="/images/plus.png" BORDER="0" ALT="+" >';
      strT +=   '</A>';
    }
    else
      strT +=   '&nbsp;';

    strT +=   '</TD>';
    strT +=   '<TD STYLE="padding:0px 3px 6px 0px;">';
    strT +=     ReplaceTxt(g_static_text[const_cs_slice], "{N}", i + 1);
    strT +=   '</TD>';
    strT +=   '<TD STYLE="padding:0px 3px 6px 0px;">';
    strT +=     '<INPUT id="' + constCrtSSliceName_id_ + i
                                                       +      '" VALUE="' + g_objCS.m_arrSlices[i].m_strName
                                                       + '" onkeypress="OnCrtSSNKeyPress(' + i + ');"'
                                                       +      'onkeyup="OnCrtSSNKeyUp('    + i + ');"'
                                                       +         'TYPE="text" STYLE="width:100%;">';
    strT +=     '<BR>';
    strT +=     '<TEXTAREA id="' + constCrtSSliceText_id_ + i
                                 + '" onkeypress="OnCrtSSTKeyPress(' + i + ');"'
                                 +      'onkeyup="OnCrtSSTKeyUp('    + i + ');"'
                                 + ' STYLE="width:100%; height:2.5em;">';
    strT +=       g_objCS.m_arrSlices[i].m_strText;
    strT +=     '</TEXTAREA>';
    strT +=   '</TD>';

    strT +=   '<TD id="' + constCrtSSliceImgTD_id_ + i + '" STYLE="padding:0px 0px 6px 10px;">';
    strT +=     GetCrtSSliceImgHTML(i);
    strT +=   '</TD>';

    strT += '</TR>';
  }

  //save button
  strT +=   '<TR STYLE="display:' + (g_objCS.m_bPublished ? 'none;' : ' ') + '">';
  strT +=     '<TD>&nbsp;</TD>';
  strT +=     '<TD id="' + constCrtSurveyStatusID + '" VALIGN="top" ALIGN="left" COLSPAN="3">';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT +=   '<TR STYLE="display:' + (g_objCS.m_bPublished ? 'none;' : ' ') + '">';
  strT +=     '<TD>&nbsp;</TD>';
  strT +=     '<TD>&nbsp;</TD>';
  strT +=     '<TD>&nbsp;</TD>';
  strT +=     '<TD VALIGN="top" ALIGN="left" CLASS="no_decor666666" STYLE="padding: 3px 0px 3px 10px;">';
  strT +=       '<A HREF="javascript:OnSaveCrtSurvey(0);" CLASS="href_btn">';
  strT +=         g_static_text[const_href_cs_save_survey];
  strT +=       '</A>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  //publish row
  strT +=   '<TR>';
  strT +=     '<TD>&nbsp;</TD>';
  strT +=     '<TD COLSPAN="3" STYLE="padding:6px 0px;">';

  var strP = "";
  strP +=       '<DIV STYLE="padding:4px;">';
  strP +=         g_static_text[const_cs_publish_style];
  strP +=         '<SELECT id="' + constCrtSPStyleID + '" onchange="OnCSStyleChange();">';
  strP +=           '<OPTION' + (g_objCS.m_nStyle == eSOutModelRating  ? ' SELECTED ' : ' ') + 'VALUE="' + eSOutModelRating + '">'
                      + GetSurveyStyleStr(eSOutModelRating) +
                    '</OPTION>';
  strP +=           '<OPTION' + (g_objCS.m_nStyle == eSOutModelVotes   ? ' SELECTED ' : ' ') + 'VALUE="' + eSOutModelVotes + '">'
                      + GetSurveyStyleStr(eSOutModelVotes) +
                    '</OPTION>';
  strP +=           '<OPTION' + (g_objCS.m_nStyle == eSOutModelUser    ? ' SELECTED ' : ' ') + 'VALUE="' + eSOutModelUser + '">'
                      + GetSurveyStyleStr(eSOutModelUser) +
                    '</OPTION>';
  strP +=           '<OPTION' + (g_objCS.m_nStyle == eSOutModelTemplet ? ' SELECTED ' : ' ') + 'VALUE="' + eSOutModelTemplet + '">'
                      + GetSurveyStyleStr(eSOutModelTemplet) +
                    '</OPTION>';
  strP +=         '</SELECT>';
  strP +=         '<DIV>';
  strP +=           g_static_text[const_cs_publish_slices];

  for(i = 0; i < g_objCS.m_nSlices; i++)
  {
    strP +=         '<INPUT TYPE="checkbox" id="' + constCrtSSPubChk_id_ + i + '" onclick="OnCSSPubChk(' + i + ')"'
                      + (g_objCS.m_arrSlices[i].m_bPublish ? ' CHECKED ' : ' ')
                      + '>';
    strP +=         '<SPAN id="' + constCrtSSPubChkTxt_id_ + i + '">';
    strP +=           g_objCS.m_arrSlices[i].m_strName;
    strP +=         '</SPAN>';

    if ( i + 1 < g_objCS.m_nSlices )
      strP +=       ', ';
  }
  strP +=         '</DIV>';
  strP +=         '<DIV id="' + constCrtSSExamplesID + '">';
  strP +=         '</DIV>';
  strP +=       '</DIV>';

  strT += FrameAround(strP, g_static_text[const_cs_publish], constCSPublishID, constCSPublishTDID, 10);

  strT +=     '</TD>';
  strT +=   '</TR>';

  //warning row
  strT +=   '<TR>';
  strT +=     '<TD>&nbsp;</TD>';
  strT +=     '<TD id="' + constCrtSWarningsID + '" VALIGN="top" ALIGN="left" COLSPAN="3">';
  strT +=     '</TD>';
  strT +=   '</TR>';

  //publish button
  strT +=   '<TR>';
  strT +=     '<TD>&nbsp;</TD>';
  strT +=     '<TD id="' + constCrtSPublishStatID + '" VALIGN="top" ALIGN="left" COLSPAN="3">';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD>&nbsp;</TD>';
  strT +=     '<TD>&nbsp;</TD>';
  strT +=     '<TD>&nbsp;</TD>';
  strT +=     '<TD VALIGN="top" ALIGN="left" CLASS="no_decor666666" STYLE="padding: 3px 0px 3px 10px;">';
  strT +=       '<A HREF="javascript:OnSaveCrtSurvey(1);" CLASS="href_btn">';
  strT +=         g_static_text[const_cs_publish_btn];
  strT +=       '</A>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT += '</TABLE>';

  SetInnerHtml(constCreateSurveyID, strT);
  SetTheSameWidth(constCSPublishID, constCSPublishTDID);
  ShowSliceExamples();
}


function GetCrtSSliceImgHTML(n)
{
  var strDo = 'javascript:AddSliceImage(\'' + constCrtSSliceAImg_id_ + n + '\',' + n + ');'
  var strT  = "";

  if ( "" != g_objCS.m_arrSlices[n].m_strImgURL )
  {
    strT += '<IMG SRC="' + g_objCS.m_arrSlices[n].m_strImgURL
                         + '" onclick="' + strDo
                         + '" onload="javascript:ResizeImg(this, ' + constSliceImgW + ', ' + constSliceImgH + ');">';
    strT += '<BR>';
  }

  strT += '<A id="' + constCrtSSliceAImg_id_ + n + '" HREF="' + strDo + '" >';
  strT +=   g_static_text[const_href_cs_add_slice_image];
  strT += '</A>';

  return strT;
}


function OnCrtSSNKeyPress(nSlice){ SetCrtSPubChkAsName(nSlice); }
function OnCrtSSNKeyUp   (nSlice){ SetCrtSPubChkAsName(nSlice); }

function SetCrtSPubChkAsName(nSlice)
{
  SetIfInHtml(constCrtSSPubChkTxt_id_ + nSlice, QS(GetValue(constCrtSSliceName_id_ + nSlice, "")));
}


function OnCrtSSTKeyPress(nSlice){ SetExampleSurveyText(nSlice); }
function OnCrtSSTKeyUp   (nSlice){ SetExampleSurveyText(nSlice); }

function SetExampleSurveyText(nSlice)
{
  var str = QS(TrimSpaces(GetValue(constCrtSSliceText_id_ + nSlice, "")));

  if ( eSOutModelTemplet == g_objCS.m_nStyle )
  {
    g_objCS.m_arrSlices[nSlice].m_strText  = str;
    ShowSliceExamples();
  }
  else
    SetIfInHtml(constTxtSurvey_id_ + 0 + constSlice_id_ + nSlice, str);
}


function OnCSTypeChanged()
{
  var o = getEBId(constCrtSCatRowID);

  if ( o && o.style )
  {
    g_objCS.m_nType = GetCmbValue(constCrtSTypeID);

    if ( eCommonSurvey == g_objCS.m_nType )
      o.style.display = "";
    else
      o.style.display = "none";
  }
}


function OnCSStyleChange()
{
  CS2Vals();
  ShowSliceExamples();
}


function ClearCSObject()
{
  g_objCS.m_bPublished     = false;
  g_objCS.m_nSurveyID      = -1;
  g_objCS.m_strSurveyTitle = "";
  g_objCS.m_nStyle         = eSOutModelRating;
  g_objCS.m_nType          = ePubProfSurvey;
  g_objCS.m_nCategory_id   = 0;
  g_objCS.m_strLanguage    = g_language;
  g_objCS.m_arrSlices      = new Array();
  AddEmptySlice();
  AddEmptySlice();
  g_objCS.m_nSlices        = g_objCS.m_arrSlices.length;
  g_objCS.m_arrQuestions   = new Array();
  g_objCS.m_arrCurAsks     = null;
  g_objCS.m_enCurFilter    = eCSFilter_All;
  g_objCS.m_oFilter_All    = null;
  g_objCS.m_oFilter_My     = null;
  g_objCS.m_oFilter_Survey = null;
  g_objCS.m_oFilter_Find   = null;
}


function AddEmptySlice()
{
  var i = g_objCS.m_arrSlices.length;

  g_objCS.m_arrSlices[i]              = new Object();
  g_objCS.m_arrSlices[i].m_strName    = "";
  g_objCS.m_arrSlices[i].m_strText    = "";
  g_objCS.m_arrSlices[i].m_strImgURL  = "";
  g_objCS.m_arrSlices[i].m_strImgFile = "";
  g_objCS.m_arrSlices[i].m_bPublish   = false;
}


function RemoveSlice()
{
  if ( 2 < g_objCS.m_nSlices )
  {
    CS2Vals();
    g_objCS.m_nSlices--;
    ShowCrtSurvey();
    ShowCSAskList();
  }
}


function AddSlice()
{
  CS2Vals();
  g_objCS.m_nSlices++;

  if ( g_objCS.m_arrSlices.length < g_objCS.m_nSlices )
    AddEmptySlice();

  ShowCrtSurvey();
  ShowCSAskList();
}


function GetSurveyTypeStr(nType)
{
  if ( eCommonSurvey == nType )
    return g_static_text[const_cs_type_common];

  return g_static_text[const_cs_type_user_profile];
}


function GetSurveyStyleStr(nStyle)
{
  if ( eSOutModelVotes == nStyle )
    return g_static_text[const_cs_pub_model_votes];

  if ( eSOutModelUser == nStyle )
    return g_static_text[const_cs_pub_model_user];

  if ( eSOutModelTemplet == nStyle )
    return g_static_text[const_cs_pub_model_templet];

  return g_static_text[const_cs_pub_model_rating];
}


function CS2Vals()
{
  var i;

  g_objCS.m_strSurveyTitle = QS(TrimSpaces(GetValue(constCrtSurveyTitleID, "")));
  g_objCS.m_strLanguage    = GetCmbValue(constCrtSLanguageID);
  g_objCS.m_nType          = GetCmbValue(constCrtSTypeID    );
  g_objCS.m_nStyle         = GetCmbValue(constCrtSPStyleID  );

  var o = getEBId(constCrtSCatRowID);

  if ( o && o.style && "none" != o.style.display )
    g_objCS.m_nCategory_id = GetCmbValue(constCrtSCategoryID);

  for(i = 0; i < g_objCS.m_nSlices; i++)
  {
    g_objCS.m_arrSlices[i].m_strName  = QS(TrimSpaces(GetValue(constCrtSSliceName_id_ + i, "")));
    g_objCS.m_arrSlices[i].m_strText  = QS(TrimSpaces(GetValue(constCrtSSliceText_id_ + i, "")));
    g_objCS.m_arrSlices[i].m_bPublish = GetChecked(constCrtSSPubChk_id_ + i);
  }
}


function OnCSSPubChk(nSlice)
{
  CS2Vals();
  ShowSliceExamples();
}


function ShowSliceExamples()
{
  var i, str;
  var strT;
  var bPub    = false;
  var strName = g_static_text[const_cs_john_doe];

  if ( eSOutModelTemplet == g_objCS.m_nStyle )
  {
    strT  = '<TABLE CELLSPACING="0" CELLPADDING="0">';

    var o, arrSSs, cmn_res;

    for(i = 0; i < g_objCS.m_nSlices; i++)
    {
      if ( g_objCS.m_arrSlices[i].m_bPublish )
      {
        bPub    = true;
        arrSSs  = new Array();
        str     = "";
        cmn_res = 0;

        for(j = 0; j < g_objCS.m_nSlices; j++)
        {
          o = new Object();

          o.slice_ind = j;
          o.pub       = g_objCS.m_arrSlices[j].m_bPublish;
          o.text      = g_objCS.m_arrSlices[j].m_strText;
          o.img_url   = g_objCS.m_arrSlices[j].m_strImgURL;

          if ( 0 < j )
            str += ', ';

          if ( i == j )
          {
            o.result = 60;
            str += '<B>' + o.result + '</B>';
          }
          else
          {
            o.result = Math.round(60 * Math.random());
            str += o.result;
          }

          arrSSs[o.slice_ind] = o;
          cmn_res            += o.result;

        }

        o = MakeSliceRObj(0, g_objCS.m_nStyle, i, 60, cmn_res, strName, arrSSs);
        if ( o )
        {
          strT += '<TR>'
          strT +=   '<TD>'
          strT +=     ReplaceTxt(g_static_text[const_cs_templet_examples], "{N}", str)
                        + '<BR />'
                        + GetSliceHtml(o);
          strT +=   '</TD>'
          strT += '</TR>'
        }
      }
    }
    strT += '</TABLE>';

    if ( !bPub )
      strT = ' ';
  }
  else
  {
    var o       = new Object;
    var nVotes  = 2342;
    var nRate   = 23;

    o.survey_id = 0;

    strT  = '<TABLE CELLSPACING="0" CELLPADDING="0">';
    strT +=   '<TR>'
    for(i = 0; i < g_objCS.m_nSlices; i++)
    {
      if ( g_objCS.m_arrSlices[i].m_bPublish )
      {
        bPub       = true;
        o.slice_id = i;
        o.text     = g_objCS.m_arrSlices[i].m_strText;
        o.img_url  = g_objCS.m_arrSlices[i].m_strImgURL;
        o.model    = g_objCS.m_nStyle;

        if ( eSOutModelRating == g_objCS.m_nStyle )
          o.result = nRate + "%";
        else
        {
          if ( eSOutModelUser == g_objCS.m_nStyle )
            o.result = strName;
          else
            o.result = nVotes;
        }

        strT += '<TD VALIGN="top">' + GetSliceHtml(o) + '</TD>';
      }
    }
    strT +=   '</TR>'
    strT += '</TABLE>';

    if ( bPub )
    {
      str = '<BR />';

      if ( eSOutModelRating == g_objCS.m_nStyle )
        str += ReplaceTxt(g_static_text[const_cs_rate_examples] , "{N}", nRate);
      else
      {
        if (  eSOutModelUser == g_objCS.m_nStyle )
          str += ReplaceTxt(g_static_text[const_cs_name_examples], "{N}", '<B>' + strName + '</B>');
        else
          str += ReplaceTxt(g_static_text[const_cs_votes_examples], "{N}", nVotes);
      }

      strT = str + '<BR>' + strT;
    }
  }

  SetIfInHtml(constCrtSSExamplesID, strT);
}


//--------------------------------------------------------Survey-Questions-List

function UpdateCSFilter()
{
  var o;
  var strCssA  = ' CLASS="aCreateSurveyFilter" ';
  var strCssAA = ' CLASS="aCreateSurveyFilterActive" ';
  var strCss   = "";

  var strT = "";
  strT += '<TABLE CLASS="tableCreateSurveyFilter">';
  strT +=   '<TR>';

  strCss = eCSFilter_All    == g_objCS.m_enCurFilter ? strCssAA : strCssA;

  strT +=     '<TD CLASS="td_1CreateSurveyFilter">';
  strT +=       '<A ' + strCss + ' HREF="javascript:CrtSrvAllAsks();" >';
  strT +=         g_static_text[const_href_cs_all_asks];
  strT +=       '</A>';
  strT +=     '</TD>';

  strCss = eCSFilter_My     == g_objCS.m_enCurFilter ? strCssAA : strCssA;

  strT +=     '<TD CLASS="td_xCreateSurveyFilter">';
  strT +=       '<A ' + strCss + ' HREF="javascript:CrtSrvMyAsks();" >';
  strT +=         g_static_text[const_href_cs_my_asks];
  strT +=       '</A>';
  strT +=     '</TD>';

  strCss = eCSFilter_Survey == g_objCS.m_enCurFilter ? strCssAA : strCssA;

  strT +=     '<TD CLASS="td_xCreateSurveyFilter">';
  strT +=       '<A ' + strCss + ' HREF="javascript:CrtSrvAsks();" >';
  strT +=         g_static_text[const_href_cs_survey_asks];
  strT +=       '</A>';
  strT +=     '</TD>';

  o      = g_objCS.GorC_CurFilter(eCSFilter_Find);
  strCss = eCSFilter_Find   == g_objCS.m_enCurFilter ? strCssAA : strCssA;

  strT +=     '<TD CLASS="td_endCreateSurveyFilter">';
  strT +=       '<A ' + strCss + ' HREF="javascript:CrtSrvFindAsks();" >';
  strT +=         g_static_text[const_href_cs_find_asks];
  strT +=       '</A>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strCss = eCSFilter_Find == g_objCS.m_enCurFilter ? "inline" : "none";

  strT +=   '<TR>';
  strT +=     '<TD COLSPAN="4">';
  strT +=       '<DIV id="' + constCrtSrvFindDivID + '" STYLE="display:' + strCss + ';">';

  strT +=         '<TABLE CELLSPACING="0" CELLPADDING="0">';
  strT +=           '<TR>';
  strT +=             '<TD>';
  strT +=               g_static_text[const_cs_find_asks];
  strT +=             '</TD>';
  strT +=             '<TD>';
  strT +=               '<INPUT id="' + constCrtSrvFindID + '" VALUE="' + o.strFind
                                                          + '" TYPE="text" STYLE="width:100px;">';
  strT +=             '</TD>';
  strT +=           '</TR>';
  strT +=           '<TR>';
  strT +=             '<TD COLSPAN="2" ALIGN="right">';
  strT +=               '<A HREF="javascript:OnCrtSrvFind();" class="href_btn">';
  strT +=                 g_static_text[const_href_cs_find];
  strT +=               '</A>';
  strT +=             '</TD>';
  strT +=           '</TR>';
  strT +=         '</TABLE>';

  strT +=       '</DIV>';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT += '</TABLE>';

  SetInnerHtml(constCrtSAsksFilterID, strT);
}


function CrtSrvAllAsks()
{
  LoadCrtSurveyAllAsks();
}


function CrtSrvMyAsks()
{
  LoadCrtSurveyMyAsks();
}


function CrtSrvAsks()
{
  LoadCrtSurveyAsks();
}


function CrtSrvFindAsks()
{
  SetInnerHtml(constCrtSurveyAsksID, " ");
  g_objCS.m_enCurFilter = eCSFilter_Find;
  UpdateCSFilter();
}


function OnCrtSrvFind()
{
  g_objCS.GorC_CurFilter(eCSFilter_Find);
  g_objCS.m_oFilter_Find.strFind = QS(TrimSpaces(GetValue(constCrtSrvFindID, "")));

  if ( g_objCS.m_oFilter_Find.strFind.length <= 0 )
    SetInnerHtml(constCrtSurveyAsksID, g_static_text[const_cs_find_str_empty]);
  else
    LoadCrtSurveyFindAsks();
}


function GetCSQuestionRow(o)
{
  var strT = "";

  if ( !o )
    return strT;

  strT +=   '<TR>';
  strT +=     '<TD>';
  strT +=       '<DIV id="' + constCrtSrvQSign_id_ + o.q_id + '">';
  strT +=         '<A HREF="javascript:CSShowQ(' + o.q_id + ');" >';
  strT +=           '+';
  strT +=         '</A>';
  strT +=       '</DIV>';
  strT +=     '</TD>';

  strT +=     '<TD CLASS="tdCSAdded" VALIGN="top">';
  strT +=       '<IMG id="' + constCrtSrvQImgYes_id_ + o.q_id + '" SRC="/images/cs_ask_added.png" STYLE="display:' + (-1 != g_objCS.CSFindSQ(o.q_id) && !o.bRemoved ? ' ' : 'none') + ';">';
  strT +=     '</TD>';

  strT +=     '<TD CLASS="tdCSPopularity">';
  strT +=       '<DIV CLASS="divCSPopularity">';
  strT +=         o.q_pop;
  strT +=       '</DIV>';
  strT +=     '</TD>';
  strT +=     '<TD>';
  strT +=       '<DIV id="' + constCrtSrvQText_id_ + o.q_id + '" ';

  if ( o.bRemoved )
    strT +=       'CLASS="divCSRemovedQuestions"';
  else
    strT +=       'CLASS="divCSQuestions"';

  strT +=       '>';
  strT +=         o.q_txt;
  strT +=       '</DIV>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT +=   '<TR>';
  strT +=     '<TD>';
  strT +=       '&nbsp;';
  strT +=     '</TD>';
  strT +=     '<TD COLSPAN="3">';

  strT +=       '<DIV id="' + constCrtSrvQDiv_id_ + o.q_id + '">';
  strT +=       '</DIV>';

  strT +=     '</TD>';
  strT +=   '</TR>';

  return strT;
}


function ShowCSurveyAsks()
{
  var strT = g_static_text[const_empty_list];

  if ( g_objCS.m_arrQuestions && 0 < g_objCS.m_arrQuestions.length )
  {
    var i, o;
    var nFrom = g_objCS.GetFrom();

    if ( -1 != g_nCurCategory )
    {
      g_nCurCategory = -1;
      load_categories();
    }

    strT =    '<TABLE CELLSPACING="0" CELLPADDING="0">';
    for(i = nFrom; i < g_objCS.m_arrQuestions.length && i - nFrom < constCSAsksPerPage; i++)
    {
      o     = g_objCS.m_arrQuestions[i];
      strT += GetCSQuestionRow(o);
    }

    if ( 0 < nFrom || i < g_objCS.m_arrQuestions.length )
    {
      strT +=   '<TR>';
      strT +=     '<TD COLSPAN="2" ALIGN="left">';
      if ( 0 < nFrom )
      {
        strT +=     '<A CLASS="aCreateSurveyPrevAsks" HREF="javascript:CSPrevPage();" >';
        strT +=       g_static_text[const_cs_prev_asks];
        strT +=     '</A>';
      }
      strT +=     '</TD>';
      strT +=     '<TD COLSPAN="2" ALIGN="right">';
      if ( i < g_objCS.m_arrQuestions.length )
      {
        strT +=     '<A CLASS="aCreateSurveyNextAsks" HREF="javascript:CSNextPage();" >';
        strT +=       g_static_text[const_cs_next_asks];
        strT +=     '</A>';
      }
      strT +=     '</TD>';
      strT +=   '</TR>';
    }

    strT +=   '</TABLE>';
  }

  strT += GetCSSaveBtnDiv();

  SetInnerHtml(constCrtSurveyAsksID, strT);
}


function ShowCSAskList()
{
  UpdateCSFilter();

  if ( eCSFilter_Survey == g_objCS.m_enCurFilter )
  {
    ShowCSurveyAsks();
    return;
  }

  var strT = "";

  if ( g_objCS.m_arrCurAsks && 0 < g_objCS.m_arrCurAsks.length )
  {
    var i, n, o;

    strT +=   '<TABLE CELLSPACING="0" CELLPADDING="0">';
    for(i = 0; i < g_objCS.m_arrCurAsks.length; i++)
    {
      o = g_objCS.m_arrCurAsks[i];
      n = g_objCS.CSFindSQ(o.q_id);

      if ( 0 <= n )
        o.bRemoved = g_objCS.m_arrQuestions[n].bRemoved;

      strT += GetCSQuestionRow(o);
    }

    var nFrom = g_objCS.GetFrom();
    if ( 0 < nFrom || 1 == g_objCS.m_arrCurAsks.more )
    {
      strT +=   '<TR>';
      strT +=     '<TD COLSPAN="2" ALIGN="left">';
      if ( 0 < nFrom )
      {
        strT +=     '<A CLASS="aCreateSurveyPrevAsks" HREF="javascript:CSPrevPage();" >';
        strT +=       g_static_text[const_cs_prev_asks];
        strT +=     '</A>';
      }
      strT +=     '</TD>';
      strT +=     '<TD COLSPAN="2" ALIGN="right">';
      if ( 1 == g_objCS.m_arrCurAsks.more )
      {
        strT +=     '<A CLASS="aCreateSurveyNextAsks" HREF="javascript:CSNextPage();" >';
        strT +=       g_static_text[const_cs_next_asks];
        strT +=     '</A>';
      }
      strT +=     '</TD>';
      strT +=   '</TR>';
    }

    strT +=   '</TABLE>';
  }
  else
    strT = g_static_text[const_empty_list];

  strT += GetCSSaveBtnDiv();

  SetInnerHtml(constCrtSurveyAsksID, strT);
}


function GetCSSaveBtnDiv()
{
  var strT = "";

  strT += '<DIV STYLE="display:' + (g_objCS.m_bPublished ? 'none;' : ';') + ' padding: 5px;">';
  strT +=   '<DIV ALIGN="right" CLASS="no_decor666666">';
  strT +=     '<A HREF="javascript:OnSaveCrtSurvey(0);" CLASS="href_btn">';
  strT +=       g_static_text[const_href_cs_save_survey];
  strT +=     '</A>';
  strT +=   '</DIV>';
  strT += '</DIV>';

  return strT;
}


function CSShowQ(q_id)
{
  CS2Vals();
  var q = g_objCS.GetQ(q_id);

  if ( !q )
  {
    ferror(err059);
    return;
  }

  var i, a_id, bFirst;
  var strT     = "";
  var strCss   = "";
  var strT     = "";
  var clrS1    = "background-color:#EBF7D2;";
  var clrS2    = "background-color:#EFF3F7;";
  var brd1     = "border-top:1px solid #000000;";
  var brdR     = "border-right :1px solid  #000000;"
  var brdL     = "border-left  :1px solid  #000000;";
  var brdB     = "border-bottom:1px solid  #000000;";
  var brdBDash = "border-bottom:1px dashed #D0D0D0;";

  strT  += '<TABLE CELLSPACING="0" CELLPADDING="0" WIDTH="100%">';
  strCss = brd1;
  bFirst = true;
  for(a_id = 1; a_id < q.answers.length; a_id++)
  {
    if ( q.answers[a_id] && q.answers[a_id].a_txt )
    {
      strCss += brdL;
      strCss += brdR;
      strCss += brdBDash;

      strT +=   '<TR>';
      strT +=     '<TD STYLE="' + strCss + '">';
      strT +=       q.answers[a_id].a_txt;
      strT +=     '</TD>';

      for(i = 0; i < g_objCS.m_nSlices; i++)
      {
        strCss  = bFirst ? brd1 : "";
        strCss += brdR;
        strCss += brdBDash;
        strCss += 0 == i % 2 ? clrS1 : clrS2;

        strT +=   '<TD ALIGN="center" STYLE="' + strCss + '">';
        strT +=     '<INPUT TYPE="checkbox" id="' + constCrtSq_ + q_id + constCrtSa_ + a_id + constCrtSs_ + i + '"';

        if ( q.slices && q.slices[i] && 1 == q.slices[i][a_id] )
          strT +=     ' CHECKED '

        if ( eCSFilter_Survey == g_objCS.m_enCurFilter )
          strT +=     ' onclick="javascript:CSChangeWeight(' + q_id + ',' + a_id + ',' + i + ');" ';

        strT +=     '>';
        strT +=   '</TD>';
      }
      strT  +=  '</TR>';
      strCss = "";
      bFirst = false;
    }
  }

  strT +=   '<TR>';
  strT +=     '<TD STYLE="' + brdL + brdR + brdB + '">';
  strT +=       '&nbsp;';
  strT +=     '</TD>';
  for(i = 0; i < g_objCS.m_nSlices; i++)
  {
    strCss  = 0 == i % 2 ? clrS1 : clrS2;
    strCss += brdR;

    strT +=   '<TD STYLE="' + strCss + '">';
    strT +=     '&nbsp;';
    strT +=   '</TD>';
  }
  strT +=   '</TR>';

  var j, n = 0;

  for(i = 0; i < g_objCS.m_nSlices; i++)
  {
    strCss  = 0 == i % 2 ? clrS1 : clrS2;
    strCss += brdL + brdB + brdR;
    n       = 2 + i;

    strT +=   '<TR>';
    strT +=     '<TD STYLE="' + strCss + '" COLSPAN="' + n + '">';
    strT +=       g_objCS.m_arrSlices[i].m_strName;
    strT +=     '</TD>';

    for(j = n - 1; j < g_objCS.m_nSlices; j++)
    {
      strCss  = 0 == j % 2 ? clrS1 : clrS2;
      strCss += brdR;

      strT +=   '<TD STYLE="' + strCss + '">';
      strT +=     '&nbsp;';
      strT +=   '</TD>';
    }
    strT +=   '</TR>';
  }

  strT +=   '<TR>';
  strT +=     '<TD ALIGN="right" COLSPAN="' + (g_objCS.m_nSlices + 1) + '">';
  strT +=       '<DIV STYLE="padding:6px 0px 10px 10px;">';

  if ( eCSFilter_Survey == g_objCS.m_enCurFilter || -1 != g_objCS.CSFindSQ(q_id) )
  {
    strT +=       '<TABLE CELLSPACING="0" CELLPADDING="0">';
    strT +=         '<TR>';
    strT +=           '<TD ALIGN="right" STYLE="padding-right:20px;">';

    if ( q.bRemoved )
    {
      strT +=           '<A HREF="javascript:OnCSAddQ(' + q_id + ');" class="href_btn">';
      strT +=             g_static_text[const_href_cs_add_to_survey];
      strT +=           '</A>';
    }
    else
    {
      strT +=           '<A HREF="javascript:OnCSRemoveQ(' + q_id + ');" class="href_btn">';
      strT +=             g_static_text[const_href_cs_del_from_survey];
      strT +=           '</A>';
    }

    strT +=           '</TD>';
    strT +=           '<TD>';
    strT +=             '<A HREF="javascript:OnCSOkQ(' + q_id + ');" class="href_btn">';
    strT +=               g_static_text[const_ok_big];
    strT +=             '</A>';
    strT +=           '</TD>';
    strT +=         '</TR>';
    strT +=       '</TABLE>';
  }
  else
  {
    strT +=       '<A HREF="javascript:OnCSAddQ(' + q_id + ');" class="href_btn">';
    strT +=         g_static_text[const_href_cs_add_to_survey];
    strT +=       '</A>';
  }
  strT +=       '</DIV>';
  strT +=     '</TD>';
  strT +=   '</TR>';

  strT += '</TABLE>';

  SetInnerHtml(constCrtSrvQDiv_id_ + q_id, strT);

  strT  = '<A HREF="javascript:OnCSOkQ(' + q_id + ');" >';
  strT +=   '-';
  strT += '</A>';

  SetInnerHtml(constCrtSrvQSign_id_ + q_id, strT);
}


function OnCSAddQ(q_id)
{
  var i = g_objCS.CSFindQ(q_id);

  if ( i < 0 )
  {
    ferror(err060);
    return;
  }

  var a_id;
  var n = g_objCS.CSFindSQ(q_id);

  if ( n < 0 )
    n = g_objCS.m_arrQuestions.length;

  g_objCS.m_arrQuestions[n]          = g_objCS.m_arrCurAsks[i];
  g_objCS.m_arrQuestions[n].slices   = new Array();
  g_objCS.m_arrQuestions[n].bRemoved = false;

  for(i = 0; i < g_objCS.m_nSlices; i++)
  {
    g_objCS.m_arrQuestions[n].slices[i] = new Array();
    for(a_id = 1; a_id < g_objCS.m_arrQuestions[n].answers.length; a_id++)
    {
      g_objCS.m_arrQuestions[n].slices[i][a_id] = GetChecked(constCrtSq_ + q_id + constCrtSa_ + a_id + constCrtSs_ + i) ? 1 : 0;
    }
  }

  var o = getEBId(constCrtSrvQText_id_ + q_id);

  if ( o )
    o.className = "divCSQuestions";

  SetDisplay(constCrtSrvQImgYes_id_ + q_id, "");
  OnCSOkQ(q_id);
}


function OnCSRemoveQ(q_id)
{
  var n = g_objCS.CSFindSQ(q_id);
  var o = getEBId(constCrtSrvQText_id_ + q_id);

  if ( 0 <= n )
    g_objCS.m_arrQuestions[n].bRemoved = true;

  if ( o )
    o.className = "divCSRemovedQuestions";

  SetDisplay(constCrtSrvQImgYes_id_ + q_id, 'none');

  OnCSOkQ(q_id);
}


function OnCSOkQ(q_id)
{
  SetInnerHtml(constCrtSrvQDiv_id_ + q_id, "");

  var strT = '<A HREF="javascript:CSShowQ(' + q_id + ');" >+</A>';

  SetInnerHtml(constCrtSrvQSign_id_ + q_id, strT);
}


function CSChangeWeight(q_id, a_id, s_ind)
{
  var n = g_objCS.CSFindSQ(q_id);

  if ( 0 <= n )
  {
    if ( !g_objCS.m_arrQuestions[n].slices )
      g_objCS.m_arrQuestions[n].slices = new Array();

    if ( !g_objCS.m_arrQuestions[n].slices[s_ind] )
      g_objCS.m_arrQuestions[n].slices[s_ind] = new Array();

    g_objCS.m_arrQuestions[n].slices[s_ind][a_id] = GetChecked(constCrtSq_ + q_id + constCrtSa_ + a_id + constCrtSs_ + s_ind) ? 1 : 0;
  }
}


function CSPrevPage()
{
  g_objCS.SetFrom(g_objCS.GetFrom() - constCSAsksPerPage);
  ReloadCSAsks();
}


function CSNextPage()
{
  if ( g_objCS.m_arrCurAsks )
    g_objCS.SetFrom(g_objCS.GetFrom() + g_objCS.m_arrCurAsks.length);

  ReloadCSAsks();
}


//-------------------------------------------------------------Save/Load-Survey

function DoLoadCrtSurvey()
{
  if ( null != DoLoadCrtSurvey.nSurvey_id )
    LoadCrtSurvey(DoLoadCrtSurvey.nSurvey_id);
}


function LoadCrtSurvey(nSurvey_id)
{
  xajax_load_saved_survey(constDXjxLoadSavedSurvey, nSurvey_id);
}


function HandleDXjxLoadSavedSurvey(oXMLElem, nRC)
{
  switch(nRC)
  {
    case 1://success
      UpdateCrtSurvey(oXMLElem);
    break;

    case 2://logged out
      PleaseLogin(constCreateSurveyID);
    break;

    case 3://There is no saved surveys
      g_objCS.m_strLanguage = g_language;
      ShowCrtSurvey();
    break;

    case 4://survey not found
      SetInnerHtml(constCreateSurveyID, g_static_text[const_cs_not_own_or_not_found]);
    break;

    default:
      rcerr(err052, nRC);
  }
  LoadCrtSurveyAsks();
}


function UpdateCrtSurvey(oXMLElem)
{
  ClearCSObject();

  var oXMLSurvey = GetNamedChild(oXMLElem, "survey");

  if ( oXMLSurvey )
  {
    var nState = ParseInt(oXMLSurvey.getAttribute("state"));

    g_objCS.m_bPublished     = 0 != (1 & nState);
    g_objCS.m_nSurveyID      = parseInt(oXMLSurvey.getAttribute("id"   ));
    g_objCS.m_strSurveyTitle =       QS(oXMLSurvey.getAttribute("title"));
    g_objCS.m_nStyle         = ParseInt(oXMLSurvey.getAttribute("model"));
    g_objCS.m_nType          = ParseInt(oXMLSurvey.getAttribute("type" ));
    g_objCS.m_nCategory_id   = ParseInt(oXMLSurvey.getAttribute("category"));
    g_objCS.m_strLanguage    =       QS(oXMLSurvey.getAttribute("language"));

    if ( oXMLSurvey.childNodes && 0 < oXMLSurvey.childNodes.length )
    {
      var i, n, oXMLSlice;

      for(i = 0; i < oXMLSurvey.childNodes.length; i++)
      {
        oXMLSlice = oXMLSurvey.childNodes[i];
        if ( "slice" == oXMLSlice.nodeName )
        {
          n = parseInt(oXMLSlice.getAttribute("index"));

          while(g_objCS.m_arrSlices.length <= n)
            AddEmptySlice();

          g_objCS.m_arrSlices[n].m_strName    = QS(oXMLSlice.getAttribute("name"    ));
          g_objCS.m_arrSlices[n].m_strText    = QS(oXMLSlice.getAttribute("text"    ));
          g_objCS.m_arrSlices[n].m_strImgURL  =    oXMLSlice.getAttribute("img_url" );
          g_objCS.m_arrSlices[n].m_strImgFile =    oXMLSlice.getAttribute("img_file");
          g_objCS.m_arrSlices[n].m_bPublish   = 1 == parseInt(oXMLSlice.getAttribute("publish")) ? true : false;
        }
      }
      g_objCS.m_nSlices = g_objCS.m_arrSlices.length;
    }
  }

  ShowCrtSurvey();
}


//---asks

function ReloadCSAsks()
{
  switch(g_objCS.m_enCurFilter)
  {
    case eCSFilter_All   : LoadCrtSurveyAllAsks (); break;
    case eCSFilter_My    : LoadCrtSurveyMyAsks  (); break;
    case eCSFilter_Survey: LoadCrtSurveyAsks    (); break;
    case eCSFilter_Find  : LoadCrtSurveyFindAsks(); break;
  }
}


function LoadCrtSurveyAsks()
{
  if ( 0 <= g_objCS.m_nSurveyID )
  {
    if ( g_objCS.m_arrQuestions && 0 < g_objCS.m_arrQuestions.length )
    {
      g_objCS.m_enCurFilter = eCSFilter_Survey;
      ShowCSAskList();
    }
    else
    {
      SetInnerHtml(constCrtSurveyAsksID, g_static_text[const_loading_ddd]);
      xajax_load_cs_asks(constDXjxCrtSrvAsks, g_objCS.m_nSurveyID);
    }
  }
  else
    LoadCrtSurveyAllAsks();
}


function LoadCrtSurveyAllAsks()
{
  SetInnerHtml(constCrtSurveyAsksID, g_static_text[const_loading_ddd]);

  var o = g_objCS.GorC_CurFilter(eCSFilter_All);

  if ( o.category != g_nCurCategory )
  {
    g_objCS.m_oFilter_All.from     = 0;
    g_objCS.m_oFilter_All.category = g_nCurCategory;
  }

  xajax_load_cs_all_asks(constDXjxCrtSrvAllAsks, g_nCurCategory, o.from, constCSAsksPerPage);
}


function LoadCrtSurveyMyAsks()
{
  SetInnerHtml(constCrtSurveyAsksID, g_static_text[const_loading_ddd]);

  var o = g_objCS.GorC_CurFilter(eCSFilter_My);

  if ( o.category != g_nCurCategory )
  {
    g_objCS.m_oFilter_My.from     = 0;
    g_objCS.m_oFilter_My.category = g_nCurCategory;
  }

  xajax_load_cs_my_asks(constDXjxCrtSrvMyAsks, g_nCurCategory, o.from, constCSAsksPerPage);
}


function LoadCrtSurveyFindAsks()
{
  SetInnerHtml(constCrtSurveyAsksID, g_static_text[const_processing_ddd]);

  var o = g_objCS.GorC_CurFilter(eCSFilter_Find);

  if ( o.category != g_nCurCategory )
  {
    g_objCS.m_oFilter_My.from     = 0;
    g_objCS.m_oFilter_My.category = g_nCurCategory;
  }

  xajax_cs_find_asks(constDXjxCrtSrvFindAsks, o.strFind, g_nCurCategory, o.from, constCSAsksPerPage);
}


function HandleDXjxLoadCSAsks(oXMLElem, nRC)
{
  switch(nRC)
  {
    case 1://success
      g_objCS.m_enCurFilter = eCSFilter_Survey;
      UpdateCSAskList(oXMLElem);
    break;

    default:
      rcerr(err055, nRC);
  }
}


function HandleDXjxLoadCSAllAsks(oXMLElem, nRC)
{
  switch(nRC)
  {
    case 1://success
      g_objCS.m_enCurFilter = eCSFilter_All;
      UpdateCSAskList(oXMLElem);
    break;

    default:
      rcerr(err056, nRC);
  }
}


function HandleDXjxLoadCSMyAsks(oXMLElem, nRC)
{
  switch(nRC)
  {
    case 1://success
      g_objCS.m_enCurFilter = eCSFilter_My;
      UpdateCSAskList(oXMLElem);
    break;

    default:
      rcerr(err057, nRC);
  }
}


function HandleDXjxCSFindAsks(oXMLElem, nRC)
{
  switch(nRC)
  {
    case 1://success
      g_objCS.m_enCurFilter = eCSFilter_Find;
      UpdateCSAskList(oXMLElem);
    break;

    default:
      rcerr(err058, nRC);
  }
}


function UpdateCSAskList(oXMLElem)
{
  var i, n;

  g_objCS.m_arrCurAsks = GetQsfromXML(oXMLElem);

  if ( eCSFilter_Survey == g_objCS.m_enCurFilter )
  {
    g_objCS.m_arrQuestions = g_objCS.m_arrCurAsks;

    var oXMLAsks = GetNamedChild(oXMLElem, "survey_questions");

    if ( oXMLAsks && oXMLAsks.childNodes && 0 < oXMLAsks.childNodes.length )
    {
      var oQNode, q_id, arrSlices, j, oSlice, slice_index, oAns, a_id, weight;

      for(i = 0; i < oXMLAsks.childNodes.length; i++)
      {
        oQNode = oXMLAsks.childNodes[i];
        if ( "question" == oQNode.nodeName )
        {
          q_id = parseInt(oQNode.getAttribute("q_id"));
          n    = g_objCS.CSFindSQ(q_id);

          if ( 0 <= n && oQNode.childNodes && 0 < oQNode.childNodes.length )
          {
            arrSlices = new Array();

            for(j = 0; j < oQNode.childNodes.length; j++)
            {
              oSlice = oQNode.childNodes[j];

              if ( "slice" == oSlice.nodeName )
              {
                slice_index = parseInt(oSlice.getAttribute("index"));

                if ( 0 <= slice_index && oSlice.childNodes && 0 < oSlice.childNodes.length )
                {
                  arrSlices[slice_index] = new Array();

                  for(a = 0; a < oSlice.childNodes.length; a++)
                  {
                    oAns = oSlice.childNodes[a];

                    if ( "answer_weight" == oAns.nodeName )
                    {
                      a_id   = parseInt(oAns.getAttribute("a_id"));
                      weight = parseInt(oAns.getAttribute("weight"));

                      arrSlices[slice_index][a_id] = weight;
                    }
                  }
                }
              }
            }
            g_objCS.m_arrQuestions[n].slices = arrSlices;
          }
        }
      }
    }
  }
  else
  {
    for(i = 0; i < g_objCS.m_arrCurAsks.length; i++)
    {
      n = g_objCS.CSFindSQ(g_objCS.m_arrCurAsks[i].q_id);

      if ( 0 <= n )
        g_objCS.m_arrCurAsks[i].slices = g_objCS.m_arrQuestions[n].slices;
    }
  }

  ShowCSAskList();
}

//---save

function OnSaveCrtSurvey(nPublish)
{
  var nDoPublish = 1 == nPublish || g_objCS.m_bPublished ? 1 : 0;

  SetIfInHtml(constCrtSurveyStatusID, g_static_text[const_processing_ddd]);

  if ( 1 == nDoPublish )
    SetIfInHtml(constCrtSPublishStatID, g_static_text[const_processing_ddd]);
  else
    SetIfInHtml(constCrtSPublishStatID, "");

  CS2Vals();

  var i, q, a, o, str;
  var b              = false;
  var arrSlices      = new Array();
  var arrSliceWeight = new Array();
  var arrQuestions   = new Array();
  var strSurveyTitle = UnQS(g_objCS.m_strSurveyTitle);

  for(i = 0; i < g_objCS.m_nSlices; i++)
  {
    o         = new Object();
    o.name    = UnQS(g_objCS.m_arrSlices[i].m_strName   );
    o.text    = UnQS(g_objCS.m_arrSlices[i].m_strText   );
    o.image   = UnQS(g_objCS.m_arrSlices[i].m_strImgFile);
    o.publish = g_objCS.m_arrSlices[i].m_bPublish ? 1 : 0;

    arrSlices[i]      = o;
    arrSliceWeight[i] = 0;
  }

  var strWarns = "";
  if ( g_objCS.m_arrQuestions )
  {
    for(q = 0; q < g_objCS.m_arrQuestions.length; q++)
    {
      if ( !g_objCS.m_arrQuestions[q].bRemoved )
      {
        if ( !g_objCS.m_arrQuestions[q].slices )
          g_objCS.m_arrQuestions[q].slices = new Array();

        o        = new Object();
        o.q_id   = g_objCS.m_arrQuestions[q].q_id;
        o.slices = g_objCS.m_arrQuestions[q].slices;

        arrQuestions[arrQuestions.length] = o;

        b = false;
        for(i = 0; i < g_objCS.m_nSlices; i++)
        {
          if ( o.slices[i] )
          {
            for(a = 1; a < o.slices[i].length; a++)
            {
              if ( 1 == o.slices[i][a] )
              {
                b = true;
                arrSliceWeight[i]++;
              }
            }
          }
        }

        if ( !b )
        {
          strWarns += ReplaceTxt(
                                 g_static_text[const_cs_warn_q_no_weight],
                                 "{question}",
                                 '<BR><STRONG>' + g_objCS.m_arrQuestions[q].q_txt + '</STRONG><BR>'
                                )
                      +
                      '<BR>';
        }
      }
    }
  }

  for(i = 0; i < g_objCS.m_nSlices; i++)
  {
    if ( 0 == arrSliceWeight[i] )
    {
      strWarns += ReplaceTxt(
                             g_static_text[const_cs_warn_s_no_weight],
                             "{slice_name}",
                             '<STRONG>' + ("" == arrSlices[i].name ? i + 1 : arrSlices[i].name) + '</STRONG>'
                            )
                  +
                  '<BR>';
    }
  }

  SetIfInHtml(constCrtSWarningsID, strWarns);

  if ( 1 == nDoPublish )
  {
    //check data for publication
    var strErr = "";

    b = false;
    for(i = 0; i < arrSlices.length; i++)
    {
      if ( 1 == arrSlices[i].publish )
      {
        b = true;
        break;
      }
    }

    if ( !b )
      strErr += g_static_text[const_cs_err_no_slice4pub] + '<BR>';

    for(i = 0; i < arrSlices.length; i++)
    {
      if ( 1 == arrSlices[i].publish )
      {
        if ( arrSlices[i].text.length <= 0 )
          strErr += ReplaceTxt(g_static_text[const_cs_err_slice_no_text] , "{name}", arrSlices[i].name) + '<BR>';

        if ( arrSlices[i].image.length <= 0 )
          strErr += ReplaceTxt(g_static_text[const_cs_err_slice_no_image], "{name}", arrSlices[i].name) + '<BR>';
      }
    }

    if ( arrQuestions.length <= 0 )
      strErr += g_static_text[const_cs_err_qlist_empty] + '<BR>';

    b = false;
    for(q = 0; q < arrQuestions.length; q++)
    {
      for(i = 0; i < arrSlices.length; i++)//NO arrQuestions[q].slices.length
      {
        if ( arrQuestions[q].slices[i] )
        {
          for(a = 1; a < arrQuestions[q].slices[i].length; a++)
          {
            if ( 1 == arrQuestions[q].slices[i][a] )
            {
              b = true;
              i = arrSlices.length;
              q = arrQuestions.length;
              break;
            }
          }
        }
      }
    }

    if ( !b )
      strErr += g_static_text[const_cs_err_no_weight] + '<BR>';

    if ( g_objCS.m_nStyle == eSOutModelUser && g_objCS.m_nType == eCommonSurvey )
    {
      str = g_static_text[const_cs_model_vs_type];
      str = ReplaceTxt(str, "{model}", GetSurveyStyleStr(g_objCS.m_nStyle));
      str = ReplaceTxt(str, "{type}" , GetSurveyTypeStr (g_objCS.m_nType ));
      strErr += str + '<BR>';
    }

    if ( "" != strErr )
    {
      strErr = '<BR>' + g_static_text[const_cs_publish_errs]
               +
               '<DIV STYLE="color:#FF0000;">' + strErr + '</DIV>';
      SetIfInHtml (constCrtSurveyStatusID, "");
      SetInnerHtml(constCrtSPublishStatID, strErr);
      return;
    }
  }

  xajax_save_survey(
                    constXjxSaveSurvey,
                    g_objCS.m_nSurveyID,
                    strSurveyTitle,
                    g_objCS.m_strLanguage,
                    g_objCS.m_nStyle,
                    g_objCS.m_nType,
                    g_objCS.m_nCategory_id,
                    nDoPublish,
                    arrSlices,
                    arrQuestions
                   );

  SetInnerHtml(constCrtSurveyStatusID, g_static_text[const_saving_ddd]);
}


function HandleXjxSaveSurvey()
{
  var nRC    = parseInt(g_arrXajaxRets[1]);
  var strErr = "";
  var n2;

  SetIfInHtml (constCrtSurveyStatusID, "");
  SetInnerHtml(constCrtSPublishStatID, "");

  switch(nRC)
  {
    case 1:
      OnXjxSaveSurvey();
    break;

    case 2://logged out
      SetInnerHtml(constCrtSurveyStatusID, g_static_text[const_please_login]);
    break;

    case 3://not owner
      SetInnerHtml(constCrtSurveyStatusID, g_static_text[const_it_is_not_your_survey]);
    break;

    case 4://publish err: no questions
      strErr = g_static_text[const_cs_err_qlist_empty];
    break;

    case 6://publish err: empty slice text
      ValidateXajaxRets(3);
      n2     = parseInt(g_arrXajaxRets[2]);
      strErr = ReplaceTxt(
                          g_static_text[const_cs_err_slice_no_text],
                          "{name}",
                          arrSlices[n2] ? arrSlices[n2].name : "unknown"
                         );
    break;

    case 7://publish err: empty slice image
      ValidateXajaxRets(3);
      n2     = parseInt(g_arrXajaxRets[2]);
      strErr = ReplaceTxt(
                          g_static_text[const_cs_err_slice_no_image],
                          "{name}",
                          arrSlices[n2] ? arrSlices[n2].name : "unknown"
                         );
    break;

    case 5://publish err: no slices
    case 8://publish err: no publish slice
      strErr = g_static_text[const_cs_err_no_slice4pub];
    break;

    case 9://publish err: type not compatible with model
      strErr = g_static_text[const_cs_model_vs_type];
      strErr = ReplaceTxt(strErr, "{model}", GetSurveyStyleStr(g_objCS.m_nStyle));
      strErr = ReplaceTxt(strErr, "{type}" , GetSurveyTypeStr (g_objCS.m_nType ));
    break;

    default:
      rcerr(err050, g_arrXajaxRets[1]);
  }

  if ( 4 <= nRC )
    SetInnerHtml(constCrtSPublishStatID, g_static_text[const_cs_publish_errs] + '<BR>' + strErr);

  OnSaveSurveyNotif(nRC);
}


function OnXjxSaveSurvey()
{
  ValidateXajaxRets(5);

  var nSurveyID  = parseInt(g_arrXajaxRets[2]);
  var nPublished = parseInt(g_arrXajaxRets[3]);
  var nWarnings  = ParseInt(g_arrXajaxRets[4], 0);

  if ( -1 == g_objCS.m_nSurveyID )
    g_objCS.m_nSurveyID = nSurveyID;

  if ( -1 < g_objCS.m_nSurveyID && g_objCS.m_nSurveyID == nSurveyID )
    SetInnerHtml(constCrtSurveyStatusID, g_static_text[const_survey_saved]);

  if ( -1 < g_objCS.m_nSurveyID && 1 == nPublished && g_objCS.m_nSurveyID == nSurveyID )
    SetInnerHtml(constCrtSPublishStatID, g_static_text[const_cs_survey_published]);

  if ( 0 < nWarnings )
  {
    var i, str, arr, q_id, a_id, q_n;
    var strWarns = "";
    var o        = getEBId(constCrtSWarningsID);

    for(i = 0; i < nWarnings; i++)
    {
      str = g_arrXajaxRets[5 + i];
      arr = str.split(":");
      if ( 1 < arr.length )
      {
        q_id = ParseInt(arr[0], -1);
        a_id = ParseInt(arr[1], -1);

        if ( 0 <= q_id && 0 < a_id )
        {
          q_n = g_objCS.CSFindSQ(q_id);

          if ( 0 <= q_n && g_objCS.m_arrQuestions[q_n].answers[a_id] )
          {
            str = ReplaceTxt(
                             g_static_text[const_cs_warn_a_of_q_invalid],
                             "{answer}",
                             '<STRONG>' + g_objCS.m_arrQuestions[q_n].answers[a_id].a_txt + '</STRONG>'
                            );
            str = ReplaceTxt(str, "{question}", '<STRONG>' + g_objCS.m_arrQuestions[q_n].q_txt + '</STRONG>');

            strWarns += str + '<BR>';
          }
        }
      }
    }

    if ( o )
      o.innerHTML = o.innerHTML + strWarns;
  }
}


function OnSaveSurveyNotif(nRC)
{
  if ( 1 == OnSaveSurveyNotif.bUploadImg )
  {
    switch(nRC)
    {
      case 1:
        SliceImgUpload.survey = g_objCS.m_nSurveyID;
        SliceImgUpload(OnSaveSurveyNotif.nSliceImgDlgID);
      break;

      case 2://logged out
        SetSIDStatus(OnSaveSurveyNotif.nSliceImgDlgID, g_static_text[const_please_login]);
      break;

      case 3://not owner
        SetSIDStatus(OnSaveSurveyNotif.nSliceImgDlgID, g_static_text[const_it_is_not_your_survey]);
      break;
    }
    OnSaveSurveyNotif.bUploadImg = 0;
  }
}


//------------------------------------------------------------------Slice-Image


function AddSliceImage(strID, n)
{
  var x = 20;
  var y = 20;
  var o = getEBId(strID);

  if ( o )
  {
    var coors = FindPos(o);

    x = coors[0];
    y = coors[1] + o.offsetHeight;
  }

  SliceImgUpload.slice  = n;
  SliceImgUpload.survey = g_objCS.m_nSurveyID;

  ShowSelectImgDlg(x, y, constURLSubmitSliceImg, SliceImgUpload);
}


function SliceImgUpload(nDlgID)
{
  if ( SliceImgUpload.survey != g_objCS.m_nSurveyID )
    SetSIDStatus(nDlgID, g_static_text[const_internal_error] + err051);
  else
  {
    if ( g_objCS.m_nSurveyID < 0 )
    {
      //save survey before upload image
      OnSaveSurveyNotif.bUploadImg     = 1;
      OnSaveSurveyNotif.nSliceImgDlgID = nDlgID;
      OnSaveCrtSurvey(0);
    }
    else
    {
      OnSaveSurveyNotif.bUploadImg = 0;
      SetHiddenDataToSDlg(
                          "pstDlgID" , nDlgID               ,
                          "pstSlice" , SliceImgUpload.slice ,
                          "pstSurvey", SliceImgUpload.survey
                         );
      SubmitImgDlg();
    }
  }
}


function OnSliceImgUploaded(nID, nRC, nSlice, nSurvey, strImgFile, strImgUrl)
{
  nRC    = parseInt(nRC);
  nSlice = parseInt(nSlice);

  //nRC = 0 - upload error
  //      1 - all done
  //      2 - logged out
  //      3 - wrond survey or slice id
  //      4 - not owner
  //      5 - file too big
  //      6 - unsupported type
  switch(nRC)
  {
    case 0://upload error
      SetSIDStatus(nID, g_static_text[const_upload_error]);
    break;

    case 1://success
      if ( g_objCS.m_nSurveyID == nSurvey )
      {
        SelectImgDlgClose();
        g_objCS.m_arrSlices[nSlice].m_strImgURL  = strImgUrl;
        g_objCS.m_arrSlices[nSlice].m_strImgFile = strImgFile;
        SetInnerHtml(constCrtSSliceImgTD_id_ + nSlice, GetCrtSSliceImgHTML(nSlice));

        var o = getEBId(constImgSurvey_id_ + 0 + constSlice_id_ + nSlice);
        if ( o )
          o.src = strImgUrl;
      }
    break;

    case 2://logged out
      SetSIDStatus(nID, g_static_text[const_please_login]);
    break;

    case 3://wrond survey or slice id
      SetSIDStatus(nID, g_static_text[const_internal_error] + err053);
      ferror(err053);
    break;

    case 4://not owner
      SetSIDStatus(nID, g_static_text[const_it_is_not_your_survey]);
    break;

    case 5://file too big
      SetSIDStatus(nID, ReplaceTxt(g_static_text[const_pic_file_too_big], "{size}", constMaxUploadFileSize));
    break;

    case 6://unsupported type
      SetSIDStatus(nID, g_static_text[const_pic_file_wrong_type]);
    break;

    default:
      rcerr(err054, nRC);
  }
}


//------------------------------------------------------------------OnWndResize


function OnWndResize()
{
  ReShowAddQuestion();
}


function OnMouseOver(oEvent)
{
  SelectImgDlgMMove(oEvent);
}


function OnMouseUp(oEvent)
{
  SelectImgDlgMUp(oEvent);
}


function OnDocumentClick()
{
  HideTTip();
  //SelectImgDlgClose();
}


//----------------------------------------------------------------Hlp functions


//strData - string like "ok:q[2]{To be or not to be?}a[23]{yes}a[25]{no}a[26]{other}"
function ParseQuestion(strData)
{
  var oQuestion = new Object();

  oQuestion.bValid = 0;

  if ( StartWith(strData, "ok:") )
  {
    var o;
    var bRes   = 0;
    var oParse = new Object();

    oQuestion.q_id   = -1;
    oQuestion.q_txt  = "";
    oQuestion.answer = new Array();

    oParse.strData = strData.substr(3);
    oParse.bQorA   = 0;//1 - q, 0 - a
    oParse.strID   = 0;
    oParse.strTxt  = 0;

    do
    {
      bRes = ParseQuestionData(oParse);

      if ( 1 == bRes )
      {
        if ( 1 == oParse.bQorA )
        {
          oQuestion.q_id   = oParse.strID;
          oQuestion.q_txt  = oParse.strTxt;
        }
        else
        {
          o     = new Object();
          o.id  = oParse.strID;
          o.txt = oParse.strTxt;

          oQuestion.answer[oQuestion.answer.length] = o;
        }
      }
    }
    while(1 == bRes);

    if ( 0 <= oQuestion.q_id
         &&
         0 < oQuestion.q_txt.length
         &&
         1 < oQuestion.answer.length
       )
    {
      oQuestion.bValid = 1;
    }
  }

  return oQuestion;
}


function ParseQuestionData(oParse)
{
  if ( oParse && oParse.strData && 5 < oParse.strData.length && '[' == oParse.strData.charAt(1) )
  {
    var i    = 0;
    var ch   = oParse.strData.charAt(0);
    var nLen = oParse.strData.length;

    oParse.bQorA = 'q' == ch ? 1 : 0;
    oParse.strID = parseInt(oParse.strData.substr(2));

    i  = 3;
    ch = oParse.strData.charAt(i);

    while('{' != ch && i < nLen)
    {
      i++;
      ch = oParse.strData.charAt(i);
    }

    if ( i < nLen)
    {
      var str = "";

      i++;
      ch = oParse.strData.charAt(i);
      while('}' != ch && i < nLen)
      {
        if ( '\\' == ch )
        {
          i++;
          if ( i < nLen )
            ch = oParse.strData.charAt(i);
        }
        str += ch;
        i++;
        ch = oParse.strData.charAt(i);
      }
      oParse.strTxt  = str;
      i++;
      oParse.strData = i < nLen ? oParse.strData.substr(i) : "";

      return 1;
    }
  }

  return 0;
}


function QS($str)
{
  return Quote_smart($str);
}


function UnQS($str)
{
  return UnQuote_smart($str);
}


function GetNamedChild(oXMLElem, strName)
{
  var oRet = null;

  if ( oXMLElem && oXMLElem.childNodes && 0 < oXMLElem.childNodes.length )
  {
    for(i = 0; i < oXMLElem.childNodes.length; i++)
    {
      if ( strName == oXMLElem.childNodes[i].nodeName )
      {
        oRet = oXMLElem.childNodes[i];
        return oRet;
      }
    }
  }

  return oRet;
}


function GetSubNodeText(oXMLElem)
{
  var strRet = "";

  if ( oXMLElem && oXMLElem.childNodes && 0 < oXMLElem.childNodes.length )
  {
    var i;
    var nLen = oXMLElem.childNodes.length;

    for(i = 0; i < nLen; i++)
    {
      if ( 3 == oXMLElem.childNodes[i].nodeType )//3 - text
        strRet += QS(oXMLElem.childNodes[i].nodeValue);
    }
  }

  return strRet;
}


function AddShadow(strHtm, strTblAttrs)
{
  var strT = "";

  strT += '<TABLE CELLSPACING="0" CELLPADDING="0" ' + (strTblAttrs ? strTblAttrs : ' ') + '>';
  strT +=   '<TR>';
  strT +=     '<TD>';
  strT +=       strHtm;
  strT +=     '</TD>';
  strT +=     '<TD CLASS="tdRShadow" ALIGN="left" VALIGN="top">';
  strT +=       '<IMG SRC="/images/rtshadow.png">';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD CLASS="tdBShadow" ALIGN="left" VALIGN="top">';
  strT +=       '<IMG SRC="/images/lbshadow.png">';
  strT +=     '</TD>';
  strT +=     '<TD CLASS="tdRBShadow">';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT += '</TABLE>';

  return strT;
}


function ferror(strCode)
{
  alert(g_static_text[const_internal_error] + strCode);
}


function rcerr(strErr, nRC)
{
  ferror(strErr + g_static_text[const_unk_result] + "'" + nRC + "'");
}


function getEBId(strEID)
{
  return document.getElementById(strEID);
}


function IsElemExist(strEID)
{
  return document.getElementById(strEID) ? 1 : null;
}


function SetProgressState(strState)
{
  var oState = getEBId(constProgressStateID);

  if ( oState )
    oState.innerHTML = '<DIV><BLINK>' + strState + '</BLINK><DIV>';
}


function SetDisplay(strID, strVal)
{
  var o = getEBId(strID);

  if ( o )
    o.style.display = strVal;
}


function Disable(strID)
{
  var oBtn = getEBId(strID);

  if ( oBtn )
    oBtn.disabled = true;
}


function Enable(strID)
{
  var oBtn = getEBId(strID);

  if ( oBtn )
    oBtn.disabled = false;
}


function SetInnerHtml(strID, strHTML)
{
  var o   = getEBId(strID);
  var ret = 1;

  if ( o )
    o.innerHTML = strHTML;
  else
  {
    ferror(err009 + g_static_text[const_can_not_find_elem] + strID);
    ret = 0;
  }

  return ret;
}


function SetIfInHtml(strID, strHTML)
{
  var o = getEBId(strID);

  if ( o )
    o.innerHTML = strHTML;
}


function VScrollTo(strID)
{
  var o = getEBId(strID);

  if ( o )
  {
    var pt = FindPos(o);

    window.scrollTo(document.documentElement.offsetLeft, pt[1]);
  }
}


function FrameAround
(
  strHtm, strCaption, strCaptionID, strTDCaptionID, strLeftOffset
)
{
  var strBrdStyle = "1px solid #000000;";
  var strT        = "";

  strT += '<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0">';
  strT +=   '<TR>';
  strT +=     '<TD STYLE="font-size:3pt; width:' + strLeftOffset + 'px;">';
  strT +=       '&nbsp;';
  strT +=     '</TD>';
  strT +=     '<TD ROWSPAN="2" id="' + strTDCaptionID + '">';
  strT +=       '<SPAN id="' + strCaptionID + '">';
  strT +=         strCaption;
  strT +=       '</SPAN>';
  strT +=     '</TD>';
  strT +=     '<TD STYLE="font-size:3pt;">';
  strT +=       '&nbsp;';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD STYLE="font-size:3pt; border-top:' + strBrdStyle + ' border-left:'  + strBrdStyle + '">';
  strT +=       '&nbsp;';
  strT +=     '</TD>';
  strT +=     '<TD STYLE="font-size:3pt; border-top:' + strBrdStyle + ' border-right:' + strBrdStyle + '">';
  strT +=       '&nbsp;';
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT +=   '<TR>';
  strT +=     '<TD COLSPAN="3" STYLE="border-left:' + strBrdStyle + ' border-right:' + strBrdStyle + ' border-bottom:' + strBrdStyle + '">';
  strT +=       strHtm;
  strT +=     '</TD>';
  strT +=   '</TR>';
  strT += '</TABLE>';

  return strT;
}


function SetTheSameWidth(strID, strIDTo)
{
  var oSrc = document.getElementById(strID);
  var oTrg = document.getElementById(strIDTo);

  if ( oSrc && oTrg )
    oTrg.style.width = oSrc.offsetWidth + "px";
}

//** (END OF FILE  : kribla.js) ***********************************************

