// fm.form.js // v 2.59 // 2011 Dec 15 Th // ID: 1019 //

var fm = {};
var deb = "";

fm.Foto = function() {
  this.fotoSliders = [];
};

fm.Foto.prototype.getFotoSlider = function( argHotelId ) {
  var result;
  //
  if (!!this.fotoSliders[ argHotelId ]) {
    result = this.fotoSliders[ argHotelId ];
  }
  else {
    result = new fm.FotoSlider();
    this.fotoSliders[ argHotelId ] = result;
  }
  return result;
};

fm.Foto.prototype.onLeft = function( argHotelId, argSlideSize, argTotalSize ) {
  //
  if (argSlideSize >= argTotalSize) return false;
  //
  var fotoSlider  = this.getFotoSlider( "" + argHotelId );
  var startPosNew = fotoSlider.startPos-1;
  var endPosOld   = fotoSlider.startPos + (argSlideSize - 1);
  //
  if ((startPosNew >= 1) && (endPosOld <= argTotalSize)) {
    var prefix  = "foto-" + argHotelId + "-";
    var leftId  = prefix + startPosNew;
    var rightId = prefix + endPosOld;
    fm.Div_openB( leftId );
    fm.Div_hide(  rightId );
    fotoSlider.setStartPos( argHotelId, startPosNew );
    fotoSlider.setEndPos( argHotelId, startPosNew, argSlideSize, argTotalSize );
  }
  return false;
};

fm.Foto.prototype.onRight = function( argHotelId, argSlideSize, argTotalSize ) {
  //
  if (argSlideSize >= argTotalSize) return false;
  //
  var fotoSlider  = this.getFotoSlider( "" + argHotelId );
  var startPosNew = fotoSlider.startPos+1;
  var endPosNew   = fotoSlider.startPos + argSlideSize;
  //
  if ((startPosNew < (argTotalSize - (argSlideSize-2))) && (endPosNew <= argTotalSize)) {
    var prefix  = "foto-" + argHotelId + "-";
    var leftId  = prefix + fotoSlider.startPos;
    var rightId = prefix + endPosNew;
    fm.Div_hide(  leftId );
    fm.Div_openB( rightId );
    fotoSlider.setStartPos( argHotelId, startPosNew );
    fotoSlider.setEndPos( argHotelId, startPosNew, argSlideSize, argTotalSize );
  }
  return false;
};

fm.FotoSlider = function() {
  this.startPos  = 1;
};

fm.FotoSlider.prototype.setEndPos = function( argHotelId, argStartPos, argSlideSize, argTotalSize ) {
  var anchorElemId = "fotoRight-" + argHotelId;
  var anchorElem = document.getElementById( anchorElemId );
  //
  if (!!anchorElem) {
    var nextPos = argStartPos + argSlideSize;
    var altText;
    //
    if (nextPos <= argTotalSize ) {
      altText = "дальше к " + nextPos + "/" + argTotalSize;
    }
    else {
      altText = "-";
    }
    anchorElem.title = altText;
  }
};

fm.FotoSlider.prototype.setStartPos = function(  argHotelId, argStartPos ) {
  this.startPos = argStartPos;
  var anchorElemId = "fotoLeft-" + argHotelId;
  var anchorElem = document.getElementById( anchorElemId );
  //
  if (!!anchorElem) {
    var altText;
    //
    if (argStartPos > 1) {
      altText = "назад к " + (argStartPos - 1);
    }
    else {
      altText = "-";
    }
    anchorElem.title = altText;
  }
};

fm.Geo = function() {
  this.refIndPos = {};
};

fm.Geo.prototype.chaptMore = function( argPos ) {
  var rmoreId = "rmore-" + argPos;
  var hmoreId = "hmore-" + argPos;
  fm.Div_hide( rmoreId );
  fm.Div_openI( hmoreId );
};

fm.Geo.prototype.getRefIndPos = function( argGeoType ) {
  var result = 1;
  //
  if (!!this.refIndPos[ argGeoType ]) {
    result = this.refIndPos[ argGeoType ];
  }
  else {
    this.refIndPos[ argGeoType ] = 1;
  }
  return result;
};

fm.Geo.prototype.refInd = function( argGeoType, argPos ) {
  if (argPos == -1) this.refInd_all( argGeoType, false );
  if (argPos ==  0) this.refInd_all( argGeoType, true );
  if (argPos >   0) this.refInd_one( argGeoType, argPos );
};

fm.Geo.prototype.refInd_all = function( argGeoType, argShowAll ) {
  var divIndId    = "refInd-" + argGeoType + "-main";
  var divOpenId   = "refInd-" + argGeoType + "-open";
  var divIndElem  = document.getElementById( divIndId );
  var divOpenElem = document.getElementById( divOpenId );
  var c_countNonStd = 3;
  var errCount = 0;
  //
  if (!!divIndElem && !!divOpenElem) {

    for (var n=1; n<100; n++) {
      var divEachId = argGeoType + "-" + n;
      var divEachElem = document.getElementById( divEachId );
      //
      if (!divEachElem) {
        errCount++;
        //
        if (errCount > c_countNonStd) break;
      }

      if (argShowAll || (n == 1)) {
        fm.Div_openB( divEachId );
      }
      else {
        fm.Div_hide(  divEachId );
      }
    }
    if (argShowAll) {
      fm.Div_hide(  divIndId );
      fm.Div_openB( divOpenId );
    }
    else {
      fm.Div_openB( divIndId );
      fm.Div_hide(  divOpenId );
    }
    this.refIndPos[ argGeoType ] = 1;
  }
};

fm.Geo.prototype.refInd_one = function( argGeoType, argPos ) {
  var divIdOld = argGeoType + "-" + this.getRefIndPos( argGeoType );
  var divIdNew = argGeoType + "-" + argPos;
  fm.Div_hide(  divIdOld );
  fm.Div_openB( divIdNew );
  this.refIndPos[ argGeoType ] = argPos;
};

fm.Geo.prototype.selInd = function( argGeoType ) {
  var selId = 'sel-' + argGeoType;
  var selElem = document.getElementById( selId );
  //
  if (!!selElem) {
    var selOption = selElem.options[ selElem.selectedIndex ];
    var selPos = selOption.value;
    this.refInd( argGeoType, selPos );
  }
};

fm.ImgList = function() {
  this.state = [];
};

fm.ImgList.prototype.goto = function( argIdList, argImageNo, argImageCount, argDirection ) {
  //
  if (!this.state[ argIdList ]) {
    this.state[ argIdList ] = argImageNo;
  }
  var imageNoOld = this.state[ argIdList ];
  //
  if (argDirection == -1 && imageNoOld == 1) return;
  if (argDirection ==  1 && imageNoOld == argImageCount) return;
  //
  var imageNoNew = imageNoOld + argDirection;
  var butLeftOnId   = "but-left-on-"   + argIdList;
  var butLeftOffId  = "but-left-off-"  + argIdList;
  var butRightOnId  = "but-right-on-"  + argIdList;
  var butRightOffId = "but-right-off-" + argIdList;
  var imageNoId     = "image-no-"      + argIdList;
  //
  if (imageNoNew == 1 || argImageCount == 1) {
    fm.Div_onOff([ butLeftOnId, "off", butLeftOffId, "on" ]);
  }
  else {
    fm.Div_onOff([ butLeftOnId, "on", butLeftOffId, "off" ]);
  }
  //
  if (imageNoNew == argImageCount || argImageCount == 1) {
    fm.Div_onOff([ butRightOnId, "off", butRightOffId, "on" ]);
  }
  else {
    fm.Div_onOff([ butRightOnId, "on", butRightOffId, "off" ]);
  }
  var spanElem = document.getElementById( imageNoId );
  //
  if (!!spanElem) {
    spanElem.innerHTML = "" + imageNoNew;
  }
  var imageElemIdOld = "image-" + argIdList + "-" + imageNoOld;
  var imageElemIdNew = "image-" + argIdList + "-" + imageNoNew;
  var imageElemOld = document.getElementById( imageElemIdOld );
  var imageElemNew = document.getElementById( imageElemIdNew );
  //
  if (!!imageElemOld && !!imageElemNew) {
    fm.Div_onOff([ imageElemIdOld, "off", imageElemIdNew, "on"]);
  }
  this.state[ argIdList ] = imageNoNew;
};

fm.LinkLists = function() {
  this.lists = {};
};

fm.LinkLists.prototype.getDivState = function( argDivId ) {
  if (!!this.lists[ argDivId ]) {
    return (this.lists[ argDivId ] == "T");
  }
  else {
    return false;
  }
};

fm.LinkLists.prototype.setDivState = function( argDivId, argValue ) {
  this.lists[ argDivId ] = (argValue ? "T" : "F" );
};

fm.LinkLists.prototype.switchOver = function( argDivId ) {
  var divState = this.getDivState( argDivId );
  divState = !divState;
  fm.Div_openHide( argDivId, divState );
  this.setDivState( argDivId, divState );
};

fm.Reports = function() {
  this.returnValue = null;
  this.refAllHide = true;
};

fm.Reports.prototype.addReport = function( argId ) {
  var refFormId = "ref-form-" + argId;
  var repFormId = "rep-form-" + argId;
  fm.Div_hide( refFormId );
  fm.Div_openB( repFormId );
};

function incAntiflood() {
  var p = document.getElementsByName('antiflood');
  if ( p != null ) {
    p[0].value = parseInt( p[0].value, 10)+5;
    setTimeout( incAntiflood, 5000);
  }
};

fm.Reports.prototype.showHideAll = function( argId ) {
  var c_all_rep  = "Все отзывы";
  var c_hide_rep = "Скрыть отзывы";
  var repAllId = "rep-all-" + argId;
  var refAllId = "ref-all-" + argId;
  //
  if (this.refAllHide) {
    fm.Div_openB( repAllId );
  }
  else {
    fm.Div_hide( repAllId );
  }
  var refAllElem = document.getElementById( refAllId );
  //
  if (!!refAllElem) {
    refAllElem.innerHTML = (this.refAllHide ? c_hide_rep : c_all_rep);
  }
  this.refAllHide = !this.refAllHide;
};

function validateForm() {
  fm.reports.validateOpinionForm( validateForm.arguments );
}

fm.Reports.prototype.validateForm = function() {
  fm.reports.validateOpinionForm( validateForm.arguments );
}

fm.Reports.prototype.validateOpinionForm = function( args ) { // v4.0
  // скопировано из design03.js
  //alert( mn + "args.length: " + args.length );
  var val;
  var p;
  var nm;
  var test;
  var num;
  var min;
  var max;
  var errors='';
  //var args = validateForm.arguments;
  //
  for (var i=0; i<(args.length-2); i+=3 ) {
    test = args[i+2];
    val = MM_findObj( args[i] );
    //
    if (val) {
      nm = val.id;
      if ((val = val.value) != "") {
        if (test.indexOf('isEmail') != -1) {
          p = val.indexOf('@');
          //
          if (p < 1 || p == (val.length-1)) {
            errors += '- ' + nm + ' должен содержать e-mail адрес.\n';
          }
        }
        else if (test!='R') {
          num = parseFloat(val);
          //
          if (isNaN(val)) {
            errors += '- ' + nm + ' должен содержать число.\n';
          }
          if (test.indexOf('inRange') != -1) {
            p   = test.indexOf(':');
            min = test.substring(8,p);
            max = test.substring(p+1);
            //
            if (num < min || max < num) {
              errors += '- ' + nm + ' должен содержать значение между ' + min + ' и ' + max + '.\n';
            }
          }
        }
      }
      else if (test.charAt(0) == 'R') {
        errors += '- ' + nm + ' требуется.\n';
      }
    }
  }
  if (errors) alert('При обработке формы были встречены следующие ошибки:\n' + errors);
  //
  fm.reports.returnValue = (errors == '');
};

fm.Div_hide  = function( argElemId ) { fm.Div_setDisplay( argElemId, "none"); };
fm.Div_openB = function( argElemId ) { fm.Div_setDisplay( argElemId, "block"); };
fm.Div_openI = function( argElemId ) { fm.Div_setDisplay( argElemId, "inline"); };

fm.Div_onOff = function( argArray ) {
  //
  if ((argArray == null) || !(argArray instanceof Array)) return;
  //
  for (var n=0; n<argArray.length; n+=2) {
    var elemId = argArray[n];
    var opName = argArray[n+1];
    //
    if ((elemId != null) && ((opName == "on" ) || (opName == "off"))) {
      var opValue = (opName == "on" ? "block" : "none");
      fm.Div_setDisplay( elemId, opValue );
    }
  }
};

fm.Div_openHide = function( argElemId, argToOpen ) {
  var displayValue = (argToOpen ? "block" : "none" );
  this.Div_setDisplay( argElemId, displayValue );
};

fm.Div_setDisplay = function( argElemId, argValue ) {
  var openElem = document.getElementById( argElemId );
  //
  if (!!openElem) {
    openElem.style.display = argValue;
  }
};

fm.Radio_getValue = function( argRadioName ) {
  // it is supposed that radio-items has ids like xxx.1, xxx.2, etc //
  var result = null;
  //
  for (var n=1; n<100; n++ ) {
    var itemId = argRadioName + "." + n;
    var itemElem = document.getElementById( itemId );
    //
    if (!itemElem) {
      return result;
    }
    if (itemElem.checked) {
      result = itemElem.value;
      break;
    }
  }
  return result;
};

fm.Select_send = function( argFormId, argSelElem, argUrlTemplate ) {
  var formElem = document.getElementById( argFormId );
  //
  if (formElem != null) {
    var value = argSelElem.value;
    formElem.action = argUrlTemplate.replace( "*", value );
  }
  formElem.submit();
};

fm.Win_openVT = function( argUrl ) {
  var host = window.location.hostname;
  var port = window.location.port;
  port = (port != null ? ":" + port : "");
  var urlFull = "http://" + host + port + argUrl;
  this.Win_open( urlFull, "Virtual_Tour", 649, 408 );
};

fm.Win_open = function( argUrl, argTitle, argWid, argHei ) {
  var params = "width=" + argWid + ",height=" + argHei + ",resizable=no,status=no,toolbar=no,menubar=no";
  window.open( argUrl, argTitle, params );
};

/*
fm.Object_trace = function( argObj ) {
  var result = "";
  for (var attr in argObj )  {
    try {
      var val = argObj[attr];
      if (val.indexOf("function") < 0) {
        result += attr + "=" + val + "   ";
      }
    }
    catch(err) {
    }
  }
  return result;
};
*/

fm.foto      = new fm.Foto();
fm.geo       = new fm.Geo();
fm.linkLists = new fm.LinkLists();
fm.reports   = new fm.Reports();
fm.imgList   = new fm.ImgList();

