<!--

//--- HISTORY ----------------------------------------------------------------/

//navigation
jQuery(document).ready(function($) {
  //tabs
  if(typeof(tabObj)!="undefined") {
    //IE
    if(window.navigator.userAgent.indexOf("MSIE")!=-1) {
      $.history.init(function(hash) {
        //hash
        var tab="";
        var vals="";
        var m=hash.match(/^([a-z]*)\/(.*)$/);
        if(m) {
          var tab=m[1];
          var vals=hs_h2p(m[2]);
        }
        else tab=hash;
        if(tab=="") tab=tabObj.prim;
        //new tab
        if(tab!=tabObj.active) new_tab2(tab,vals,0);
        //new part
        else if(vals!=tabObj.params) {
          //list
          if(typeof(listObj)!="undefined") list_submit2(vals,0);
        }
      },
      {unescape: "/"});
    }
    else {
      if(tabObj.hstate==1) {
        //hash
        var hash=tabObj.hash;
        var tab="";
        var vals="";
        var m=hash.match(/^([a-z]*)\/(.*)$/);
        if(m) {
          var tab=m[1];
          var vals=hs_h2p(m[2]);
        }
        else tab=hash;
        if(tab=="") tab=tabObj.prim;
        //new tab
        if(tab!=tabObj.active) new_tab2(tab,vals,0);
        //new part
        else if(vals!=tabObj.params) {
          //list
          if(typeof(listObj)!="undefined") list_submit2(vals,0);
        }
      }
    }
  }
});

// hash to params
function hs_h2p(hvals) {
  var params="";

  if(hvals!="") {
    for(var i=0;i<3;i++) {
      m=hvals.match(/^([a-z]+)\/([0-9]+)\/?(.*)/);
      if(m) {
	    if(params!="") params+="&";
	    params+=m[1]+"="+m[2];
	    hvals=m[3];
      }
      else break;
    }
  }
  
  return params;
}

// params to hash
function hs_p2h(params) {
  var hvals="";
  
  if(params!="") {
    for(var i=0;i<3;i++) {
      m=params.match(/^([a-z]+)=([0-9]+)&?(.*)/);
      if(m) {
        hvals+="/"+m[1]+"/"+m[2];
        params=m[3];
      }
      else break;
    }
    if(hvals!="") hvals+="/";
  }
  
  return hvals;
}


//--- EVENTS -----------------------------------------------------------------/

// add event
function me_add(evt,fun) {
  if(window.navigator.userAgent.indexOf("MSIE")!=-1) document.attachEvent(evt,fun);
  else document.addEventListener(evt.substr(2),fun,false);
}

// remove event
function me_rem(evt,fun) {
  if(window.navigator.userAgent.indexOf("MSIE")!=-1) document.detachEvent(evt,fun);
  else document.removeEventListener(evt.substr(2),fun,false);
}

// cancel event
function me_cancel(evt) {
  if(evt.stopPropagation) {
    evt.stopPropagation();
    evt.preventDefault();
  }
  else {
    evt.cancelBubble=true;
    evt.returnValue=false;
  }
}


//--- MENU -------------------------------------------------------------------/

// menu initialization
function menu_init() {
  if(typeof(menuObj)=="undefined") menuObj=new Object();
  menuObj.active=0;
  //timer
  menuObj.timer=null;

  //add events
  for(var i=1;i<20;i++) {
    var elem=document.getElementById("menu"+i);
    if(!elem) break;
    elem.onmouseover = menu_iover;
    elem.onmouseout = menu_iout;

    var elem=document.getElementById("smenu"+i);
    if(elem) {
      elem.onmouseover = menu_sover;
      elem.onmouseout = menu_sout;
    }
  }
}

// item over
function menu_iover() {
  var id=this.id.substr(4);
  if(menuObj.timer) clearTimeout(menuObj.timer);
  if(menuObj.active) menuObj.timer=setTimeout("menu_on("+id+")",300);
  else menu_on(id);
}

// item out
function menu_iout() {
  if(menuObj.timer) clearTimeout(menuObj.timer);
  menuObj.timer=setTimeout("menu_off()",300);
}

// show submenu
function menu_on(id) {
  menu_off();

  var elem=document.getElementById("menu"+id);
  if(elem) elem.className="menuaitem";

  var elem=document.getElementById("smenu"+id);
  if(elem) elem.className="";
  
  menuObj.active=id;
}

// hide submenu
function menu_off() {
  if(menuObj.active) {
    var elem=document.getElementById("menu"+menuObj.active);
    if(elem) elem.className="menupitem";

    var elem=document.getElementById("smenu"+menuObj.active);
    if(elem) elem.className="hide";
    
    menuObj.active=0;
  }
}

// submenu over
function menu_sover() {
  if(menuObj.timer) clearTimeout(menuObj.timer);
}

// submenu out
function menu_sout() {
  menu_iout();
}


//--- GEO --------------------------------------------------------------------/

//open geo
function geo_open(pid,id) {
  //bg message
  field_bgval(0,id,"Начните вводить название");

  if(typeof(geoObj)=="undefined") {
    geoObj=new Object();
    geoObj.id="";
  }    
  if(geoObj.id!="") geo_close(geoObj.id,0);
  
  //parent
  var pval=0;
  if(pid!="") {
    var pelem=document.getElementById(pid);
    pval=parseInt(pelem.value);
    if(!pval) return;
  }
  geoObj.parent=pval;
  //geo data
  geoObj.id=id;
  geoObj.state=0;
  geoObj.items=new Array();
  geoObj.active=-1;
  //value
  var elem=document.getElementById(id);
  geoObj.val=elem.value;

  //add events
  me_add("onkeyup",geo_onkeyup);
  me_add("onkeydown",geo_onkeydown);
}

//close geo
function geo_close(id,act) {
  //bg message
  field_bgval(1,id,"Начните вводить название");

  if(geoObj.id!=id) return;

  //delay
  if(act) {
    setTimeout("geo_close(\'"+id+"\',0)",200);
    return;
  }

  //remove events
  me_rem("onkeyup",geo_onkeyup);
  me_rem("onkeydown",geo_onkeydown);

  //hide list
  geo_hide();

  //clear
  geoObj.id="";
}

//hide list
function geo_hide() {
  if(geoObj.state) {
    var lelem=document.getElementById("lpop");
    lelem.style.display='none';
    lelem.innerHTML='';

    geoObj.state=0;
  }
}

//geo key up
function geo_onkeyup(evt) {
  if(!evt) var evt=window.event;

  //new value
  var elem=document.getElementById(geoObj.id);
  if(elem.value!=geoObj.val) {
    //val
    geoObj.val=elem.value;
    //id
    elem=document.getElementById("hf"+geoObj.id.substr(2));
    if(elem) {
      elem.value=0;
      //event
      if(document.createEvent) {
        var evt=document.createEvent("Event");
        evt.initEvent("change",true,true);
        elem.dispatchEvent(evt);
      }
      else if(document.createEventObject) {
        var evt=document.createEventObject();
        elem.fireEvent("onchange",evt);
      }
    }

    //hide list
    geo_hide();

    //request
    var vals="val="+encodeURIComponent(geoObj.val);
    get_data("/part.php?i=GEO&id="+geoObj.parent,vals,"geo_ok","geo_fail");
  }

  //navigation
  else {
    //enter
    if(evt.keyCode==13) geo_sel(geoObj.active);
  }
}

//geo key down
function geo_onkeydown(evt) {
  if(!evt) var evt=window.event;

  //down
  if(evt.keyCode==40) geo_active(geoObj.active+1);
  //up
  else if(evt.keyCode==38) geo_active(geoObj.active-1);
}

//list loaded
function geo_ok(val) {
  //ok
  if(val==1) {
    var lelem=document.getElementById('lpop');
    if(geoObj.id.substr(2)>1000) lelem.style.position="fixed";
    else lelem.style.position="absolute";
    //list
    var tab='';
    geoObj.items=new Array();
    geoObj.active=-1;
    var i=0;
    for(var param in geo_items) {
      if(param=="more") {
        tab+='<tr><td align="center" class="geobot">..........</td></tr>';
        continue;
      }
      var id=param.substr(1);
      var iarr=geo_items[param].split("|");
      geoObj.items[i]=id+"|"+iarr[0];
      var item=iarr[0];
      if(typeof(iarr[1])!="undefined") {
        if(iarr[1]!="") {
          item+=", "+iarr[1];
        }
      }
      if(typeof(iarr[2])!="undefined") {
        if(iarr[2]!="") {
          item+="<br><span class='geoad'>("+iarr[2]+")</span>";
        }
      }
      tab+='<tr><td><a href="#" onclick="geo_sel('+i+');return false" title="Выбрать"><div id="geoi'+i+'" onmouseover="geo_active('+i+')">'+item+'</div></a></td></tr>';
      i++;
    }
    if(tab!="") {
      tab='<table border="0" cellspacing="0" cellpadding="0" class="geotab">'+tab+'</table>';

      //container
      lelem.style.left=-1000;
      lelem.style.top=-1000;
      lelem.style.width=800;
      lelem.style.height=800;
      lelem.style.display='block';
      lelem.innerHTML=tab;

      //size
      var tw=lelem.firstChild.offsetWidth+1;  //for FF big scale
      var th=lelem.firstChild.offsetHeight;

      //position
      var cpos=get_pos(geoObj.id);
      var px=cpos[0];
      var py=cpos[1];
      var elem=document.getElementById(geoObj.id);
      py+=elem.offsetHeight;

      //layer
      lelem.style.left=px;
      lelem.style.top=py;
      lelem.style.width=tw;
      lelem.style.height=th;

      geo_active(0);

      geoObj.state=1;
    }
    //hide list
    else geo_hide();
  }
  //errors
  else geo_fail(val);
}

//geo fail
function geo_fail(val) {
  //hide list
  geo_hide();
}

//active item
function geo_active(id) {
  if(id==geoObj.active) return;
  if(id<0 || id>=geoObj.items.length) return;
  //unselect prev
  if(geoObj.active!=-1) {
    var elem=document.getElementById("geoi"+geoObj.active);
    elem.className="geopitem";
  }
  var elem=document.getElementById("geoi"+id);
  elem.className="geoaitem";
  geoObj.active=id;
}

//select item
function geo_sel(id) {
  //new value
  if(typeof(geoObj.items[id])!="undefined") {
    var iarr=geoObj.items[id].split("|");
    //val
    var elem=document.getElementById(geoObj.id);
    elem.value=iarr[1];
    //id
    elem=document.getElementById("hf"+geoObj.id.substr(2));
    if(elem) {
      elem.value=iarr[0];
      //event
      if(document.createEvent) {
        var evt=document.createEvent("Event");
        evt.initEvent("change",true,true);
        elem.dispatchEvent(evt);
      }
      else if(document.createEventObject) {
        var evt=document.createEventObject();
        elem.fireEvent("onchange",evt);
      }
    }

    //save
    geoObj.val=iarr[1];
  }

  //close list
  geoObj.items=new Array();
  geoObj.active=-1;

  //hide list
  geo_hide();
}

//new geo object
function geo_new(parent,id,sb,lid) {
  if(typeof(geonewObj)=="undefined") geonewObj=new Object();
  geonewObj.parent=parent;
  geonewObj.id=id;
  geonewObj.sb=sb;  //autosubmit
  geonewObj.lid=lid;   //location for edit
  //new location
  var tval="";
  if(id!="") {  
    var elem=document.getElementById(id);
    tval=elem.value;
  }
  geonewObj.val=tval;

  //table
  var tab='<form name="geo">';
  tab+='<table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0"><tr><td valign="middle" align="center">';
  tab+='<div id="geowait"><div align="center"><table border="0" cellspacing="0" cellpadding="0"><tr>';
  tab+='<td><img src="/tpl/i/loading.gif" border="0"></td><td>Загрузка...</td></tr></table></div></div>';
  tab+='<div id="geoform" class="hide"></div>';
  tab+='</td></tr></table>';
  tab+='</form>';

  //layer
  var lelem=document.getElementById("fproc");
  lelem.style.display='block';
  lelem=document.getElementById("lproc");
  lelem.innerHTML=tab;
  lelem.style.display='block';

  //form
  if(lid) geo_new_page(2);
  else geo_new_page(1);
}

//load page
function geo_new_page(page) {
  //close
  if(!page) {
    //layer
    var lelem=document.getElementById("lproc");
    lelem.style.display='none';
    lelem.innerHTML='';
    lelem=document.getElementById("fproc");
    lelem.style.display='none';
  }

  //new page
  else {
    form_reset();

    //wait state
    var elem=document.getElementById("geoform");
    elem.className="hide";
    elem=document.getElementById("geowait");
    elem.className="";

    //request
    var vals="";
    if(geonewObj.lid) vals="lid="+geonewObj.lid;
    else vals="val="+encodeURIComponent(geonewObj.val);
    vals+="&action=page"+page;
    get_data("/part.php?i=GEO&id="+geonewObj.parent,vals,"geo_new_ok","geo_new_fail");
  }
}

//new geo ok
function geo_new_ok(val) {
  //ok
  if(val==1) {
    //remove wait state
    var elem=document.getElementById("geowait");
    elem.className="hide";

    //form code
    elem=document.getElementById("geoform");
    elem.innerHTML=geo_html;
    elem.className="";
    
    //additional jscript
    tab_addjs();
  }
  //errors
  else geo_new_fail(val);
}

//new geo fail
function geo_new_fail(val) {
  //remove wait state
  var elem=document.getElementById("geowait");
  elem.className="hide";

  //error message
  var tab='<table width="500" border="0" cellspacing="0" cellpadding="0" class="framtab">';
  tab+='<tr><td><div class="framerr">Ошибка загрузки!</div></td></tr>';
  tab+='<tr class="geontb"><td><input class="fbt" type="button" onclick="geo_new_page(0)" value="Назад"></td></tr></table>';

  //form code
  elem=document.getElementById("geoform");
  elem.innerHTML=tab;
  elem.className="";
}

//alternative list
function geo_new_alter() {
  var tab='';
  for(var param in geo_items) {
    if(param=="more") {
  	  tab+='<tr><td>..........</td></tr>';
	  continue;
    }
    var id=param.substr(1);
    var iarr=geo_items[param].split("|");
    var item=iarr[0];
      if(typeof(iarr[1])!="undefined") {
	  if(iarr[1]!="") {
  	    item+=", "+iarr[1];
	  }
    }
    if(typeof(iarr[2])!="undefined") {
  	  if(iarr[2]!="") {
        item+="<br><span class='geoad'>("+iarr[2]+")</span>";
	  }
    }
    tab+='<tr><td><a href="#" onclick="geo_new_sel('+id+');return false" title="Выбрать"><div>'+item+'</div></a></td></tr>';
  }
  if(tab!="") {
    var list='<table width="100%" border="0" cellspacing="0" cellpadding="0" class="geoalt">';
    list+='<tr><td><div>Возможно вы имели в виду:</div></td></tr>';
    list+=tab+'</table>';
    var elem=document.getElementById("geoalter");
    elem.innerHTML=list;
  }
}

//alternative selected
function geo_new_sel(id) {
  //new value
  if(typeof(geo_items["i"+id])!="undefined") {
    var iarr=geo_items["i"+id].split("|");
    form_rdata=new Array();
    form_rdata["val"]=id+"|"+iarr[0];
    geo_new_form(1);
  }
  else {
    //back
    geo_new_page(0);
  }
}

//region changed
function geo_new_region(sid,id) {
  var elem=document.getElementById(sid);
  //new areas
  if(elem.value!=0) {
    var reg=elem.value;
    if(typeof(geo_area[reg])!="undefined") {
      //items
      elem=document.getElementById(id);
      elem.options.length=0;
      var i=0;
      for(var param in geo_area[reg]) {
        elem.options[i]= new Option(geo_area[reg][param],param);
        i++;
      }
    }
  }
  //clear
  else {
    elem=document.getElementById(id);
    elem.options.length=0;
  }
}

//submit page
function geo_new_submit(page,ids) {
  //wait state
  var elem=document.getElementById("geoform");
  elem.className="hide";
  elem=document.getElementById("geowait");
  elem.className="";

  //request
  var vals="action=submit"+page;
  form_submit("geo",ids,"/part.php?i=GEO&id="+geonewObj.parent,vals,"geo_new_form");
}

//form finished
function geo_new_form(val) {
  //ok
  if(val==1) {
    //edit
    if(geonewObj.lid) {
      //reload list
      geo_list();
    }
    //new
    else {
      var iarr=form_rdata["val"].split("|");
      //val
      var elem=document.getElementById(geonewObj.id);
      elem.value=iarr[1];
      //id
      elem=document.getElementById("hf"+geonewObj.id.substr(2));
      elem.value=iarr[0];
      //event
      if(document.createEvent) {
        var evt=document.createEvent("Event");
        evt.initEvent("change",true,true);
        elem.dispatchEvent(evt);
      }
      else if(document.createEventObject) {
        var evt=document.createEventObject();
        elem.fireEvent("onchange",evt);
      }
    }

    //back
    geo_new_page(0);

    //autosubmit
    if(geonewObj.sb!="") {
      var elem=document.getElementById(geonewObj.sb);
      if(document.createEvent) {
        var evt=document.createEvent("Event");
        evt.initEvent("click",true,true);
        elem.dispatchEvent(evt);
      }
      else if(document.createEventObject) {
        var evt=document.createEventObject();
        elem.fireEvent("onclick",evt);
      }
    }
  }

  //incorrect
  else if(!val) {
    //remove wait state
    var elem=document.getElementById("geowait");
    elem.className="hide";

    //form code
    elem=document.getElementById("geoform");
    elem.className="";

    //message
    var rmess="Некоторые поля формы не заполнены или заполнены неправильно!\nПожалуйста, исправьте поля, помеченные красным.";
    if(typeof(form_rmess) != "undefined") {
      if(form_rmess!="") rmess=form_rmess;
      form_rmess="";
    }
    alert(rmess);
  }
  //error
  else geo_new_fail(val);
}

//list position
function geo_lpos(cpos,npos) {
  if(cpos!=npos) {
    var vals="lpos="+npos;
    geo_list(vals);
  }
}

//submit list
function geo_list(vals) {
  //wait state
  var elem=document.getElementById("tab"+tabObj.active);
  elem.className="hide";
  elem=document.getElementById("tabwait");
  elem.className="";

  //request
  elem=document.getElementById("hf401");
  var ids=elem.value;
  if(vals!="") vals+="&";
  vals+="action=geobase";
  form_submit("realt",ids,"/part.php?i=TAB&"+tabObj.path+"&tab="+tabObj.active,vals,"tab_form");
}


//--- PHOTOS -----------------------------------------------------------------/

//create
function img_create() {
  if(typeof(imgObj)=="undefined") {
    imgObj=new Object();
    imgObj.frame=5;
  }
  //photos data
  imgObj.start=0;
  imgObj.items=new Array();
  imgObj.idr="";
  imgObj.ids=new Array();
  imgObj.photo=0;
  imgObj.full=-1;
  //load ids
  if(typeof(img_items["root"])!="undefined") {
    imgObj.idr=img_items["root"];
    if(img_items["ids"]!="") {
      imgObj.ids=img_items["ids"].split(",");
    }
  }
  //init
  var pelem=document.getElementById("imglist");
  pelem.innerHTML="";
  img_pos(0);
}

//position
function img_pos(act) {
  var cpos=imgObj.start;
  //forward
  if(act==1) {
    imgObj.start=imgObj.start+imgObj.frame;
    if(imgObj.start>=imgObj.ids.length) imgObj.start=cpos;
  }
  //back
  else if(act==2) {
    imgObj.start=imgObj.start-imgObj.frame;
    if(imgObj.start<0) imgObj.start=0;
  }
  //check
  else {
    if(imgObj.start>=imgObj.ids.length) {
      imgObj.start=imgObj.start-imgObj.frame;
      if(imgObj.start<0) imgObj.start=0;
    }
  }

  //new position
  if(!act || imgObj.start!=cpos) {
    //hide current
    if(act) {
      var cmax=cpos+imgObj.frame;
      if(cmax>imgObj.items.length) cmax=imgObj.items.length;
      for(var i=cpos;i<cmax;i++) {
        var elem=document.getElementById("imgid"+i);
        elem.className="hide";
      }
    }

    //create photos
    var cmax=imgObj.start+imgObj.frame;
    if(cmax>imgObj.items.length) {
      if(imgObj.ids.length>imgObj.items.length) {
        if(cmax>imgObj.ids.length) cmax=imgObj.ids.length;
        var pelem=document.getElementById("imglist");
        for(var i=imgObj.items.length;i<cmax;i++) {
          //new photo
          var tab='<a href="#" onclick="img_full('+i+');return false" title="Увеличить"><img id="imgidi'+i+'" src="/img/'+imgObj.idr+imgObj.ids[i]+'s.jpg" class="imgpsmall" border="0" width="90" height="60" onmouseover="img_small('+i+',1)" onmouseout="img_small('+i+',2)"></a>';
          //container
          var snode=document.createElement("span");
          snode.id="imgid"+i;
          snode.className="hide";
          snode.innerHTML=tab;
          pelem.appendChild(snode);
          //save item
          imgObj.items[i]=imgObj.ids[i];
        }
      }
      else cmax=imgObj.items.length;
    }

    //show photos
    for(var i=imgObj.start;i<cmax;i++) {
      var elem=document.getElementById("imgid"+i);
      elem.className="";
    }

    //main photo
    if(act) img_main(imgObj.start);
    else {
      var cphoto=imgObj.photo;
      if(cphoto>=imgObj.items.length) cphoto=imgObj.items.length-1;
      if(cphoto<0) cphoto=0;
      imgObj.photo=-1;
      img_main(cphoto);
    }
  }
}

//main photo
function img_small(id,act) {
  var elem=document.getElementById("imgidi"+id);
  //over
  if(act==1) {
    elem.className="imgasmall";
    img_main(id);
  }
  //out
  else if(act==2) {
    elem.className="imgpsmall";
  }
}

//main photo
function img_main(id) {
  if(imgObj.photo==id) return;

  var elem=document.getElementById("imgmain");
  var tval="photo.gif";
  if(typeof(imgObj.ids[id])!="undefined") tval=imgObj.idr+imgObj.ids[id]+"m.jpg";
  //photo
  var tab='<a href="#" onclick="img_full('+id+');return false" title="Увеличить"><img src="/img/'+tval+'" border="0" width="458" height="305"></a>';
  elem.innerHTML=tab;
  //save
  imgObj.photo=id;
  //text
  tval="Нет фото";
  if(imgObj.ids.length) {
    tval=imgObj.photo+1;
    tval="Фото "+tval+" из "+imgObj.ids.length;
  }
  elem=document.getElementById("imgnum");
  elem.innerHTML=tval;
}

//delete photo
function img_del(type) {
  if(type==2 || type==3) {
    if(!img_items["ids"]) return;

    if(!confirm("Удалить фотографию?")) return;

    //request
    var vals="pid=1&action=delete";
    get_data("/part.php?i=PHOTO&"+tabObj.path,vals,"img_ok","img_fail");

    //update primary
    var elem=document.getElementById("imgprim");
    var tval='photo';
    if(type==3) tval='person';
    elem.src="/img/"+tval+".gif";

    img_items["ids"]=0;
  }
  else if(type==4) {
    if(!img_items["lids"]) return;

    if(!confirm("Удалить логотип?")) return;

    //request
    var vals="pid=1&action=delete";
    get_data("/part.php?i=LOGO&"+tabObj.path,vals,"img_ok","img_fail");

    //update primary
    var elem=document.getElementById("logoprim");
    elem.src="/tpl/i/0.gif";

    //hide logo
    elem=document.getElementById("logoid");
    elem.className="hide";

    img_items["lids"]=0;
  }
  else if(type==5) {
    if(img_items["exts"]=="") return;

    if(!confirm("Удалить баннер?")) return;

    //request
    var vals="pid=1&action=delete";
    get_data("/part.php?i=BANNER&"+tabObj.path,vals,"img_ok","img_fail");

    //update primary
    var elem=document.getElementById("imgmain");
    elem.innerHTML='<img src="/img/banner.gif" border="0">';

    img_items["exts"]="";
  }
  else {
    if(typeof(imgObj.items[imgObj.photo])=="undefined") return;

    if(!confirm("Удалить выбранную фотографию?")) return;

    //primary
    var fprim=0;
    if(!imgObj.photo) fprim=1;

    //request
    var vals="pid="+imgObj.items[imgObj.photo]+"&action=delete";
    get_data("/part.php?i=PHOTO&"+tabObj.path,vals,"img_ok","img_fail");

    //remove from list
    var pelem=document.getElementById("imglist");
    for(var i=imgObj.photo;i<imgObj.items.length;i++) {
      elem=document.getElementById("imgid"+i);
      pelem.removeChild(elem);
    }

    //recreate ids
    var nids=new Array();
    var nitems=new Array();
    var ni=0;
    for(var i=0; i<imgObj.ids.length;i++) {
      if(i!=imgObj.photo) {
        nids[ni]=imgObj.ids[i];
        if(i<imgObj.photo) nitems[ni]=imgObj.ids[i];
        ni++;
      }
    }
    imgObj.ids=nids;
    imgObj.items=nitems;

    //update list
    img_pos(0);

    //update primary
    if(fprim) {
      var tval="photo.gif";
      if(typeof(imgObj.ids[imgObj.photo])!="undefined") tval=imgObj.idr+imgObj.ids[imgObj.photo]+"m.jpg";

      var elem=document.getElementById("imgprim");
      elem.src="/img/"+tval;
    }
  }
}

//full photo
function img_full(id) {
  if(typeof(imgObj.ids[id])=="undefined") return;

  if(imgObj.full==id) return;

  //popup
  if(imgObj.full==-1) {
    //table
    var tab='<table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0"><tr><td valign="middle" align="center">';
    tab+='<table border="0" cellspacing="0" cellpadding="0"><tr><td>';
    tab+='<div class="imgfdiv">';
    tab+='<span id="imgwait"><div align="center" class="imgfwait"><table border="0" cellspacing="0" cellpadding="0"><tr>';
    tab+='<td><img src="/tpl/i/loading.gif" border="0"></td><td>Загрузка...</td></tr></table></div></span>';
    tab+='<span id="imgfull" class="hide"></span>';
    tab+='<span class="imgclose"><a href="#" onclick="img_close();return false" title="Закрыть (Esc)"><img src="/tpl/i/fclose.png" border="0" width="30" height="30"></a></span>';
    tab+='<span class="imgfnp"><a href="#" onclick="img_fnav(2);return false" title="Предыдущая"><img src="/tpl/i/fprev.png" border="0" width="30" height="30"></a></span>';
    tab+='<span class="imgfnn"><a href="#" onclick="img_fnav(1);return false" title="Следующая"><img src="/tpl/i/fnext.png" border="0" width="30" height="30"></a></span>';
    tab+='</div></td></tr></table>';
    tab+='</td></tr></table>';

    //layer
    var lelem=document.getElementById("fproc");
    lelem.style.display='block';
    lelem=document.getElementById("lproc");
    lelem.innerHTML=tab;
    lelem.style.display='block';

    //add events
    me_add("onkeydown",img_onkeydown);
  }

  //wait state
  var elem=document.getElementById("imgfull");
  elem.className="hide";
  var welem=document.getElementById("imgwait");
  welem.className="";

  //photo
  var tab='<a href="#" onclick="img_fnav(1);return false" title="Следующая (Пробел)"><img id="imgfscr"onload="img_onload()" border="0"></a>';
  elem.innerHTML=tab;
  //load
  elem=document.getElementById("imgfscr");
  elem.src="/img/"+imgObj.idr+imgObj.ids[id]+".jpg"
   
  //save id
  imgObj.full=id;
}

//full photo loaded
function img_onload(act) {
  //remove wait state
  var elem=document.getElementById("imgwait");
  elem.className="hide";
  elem=document.getElementById("imgfull");
  elem.className="";
}

//full photos navigation
function img_fnav(act) {
  //forward
  if(act==1) {
    var num=imgObj.full+1;
    if(num<imgObj.ids.length) img_full(num);
  }
  //back
  else if(act==2) {
    var num=imgObj.full-1;
    if(num>=0) img_full(num);
  }
}

//full photo key
function img_onkeydown(evt) {
  if(!evt) var evt=window.event;

  if(evt.keyCode==32) img_fnav(1);        //space
  else if(evt.keyCode==27) img_close();  //esc
  else if(evt.keyCode==39) img_fnav(1);  //right
  else if(evt.keyCode==37) img_fnav(2);  //left
}

//full photos navigation
function img_close() {

  //remove events
  me_rem("onkeydown",img_onkeydown);

  //layer
  var lelem=document.getElementById("lproc");
  lelem.style.display='none';
  lelem.innerHTML='';
  lelem=document.getElementById("fproc");
  lelem.style.display='none';

  imgObj.full=-1;
}

//photo loaded
function img_ok(val) {
  if(val==3) form_post("","/login/","_self","");
}

//photo fail
function img_fail(val) {}


//--- FRAMES -----------------------------------------------------------------/

//new frame
function new_frame(type) {
  if(typeof(frmObj)=="undefined") frmObj=new Object();
  frmObj.type=type;

  //photos
  if(frmObj.type==1 || frmObj.type==2 || frmObj.type==3 || frmObj.type==4 || frmObj.type==5) {
    var tab='<table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0"><tr><td valign="middle" align="center">';
    tab+='<div id="framewait"><div align="center"><table border="0" cellspacing="0" cellpadding="0"><tr>';
    tab+='<td><img src="/tpl/i/loading.gif" border="0"></td><td>Загрузка...</td></tr></table></div></div>';
    tab+='<div id="frameform" class="hide"><iframe onload="frame_load()" id="pframe" name="pframe" frameborder="0" src="/frame.php?i=';
    if(frmObj.type==4) tab+='LOGO';
    else if(frmObj.type==5) tab+='BANNER';
    else tab+='PHOTO';
    tab+='&'+tabObj.path+'"></iframe></div>';
    tab+='</td></tr></table>';
  }

  //layer
  var lelem=document.getElementById("fproc");
  lelem.style.display='block';
  lelem=document.getElementById("lproc");
  lelem.innerHTML=tab;
  lelem.style.display='block';
}

//frame loaded
function frame_load() {
  var elem=document.getElementById("pframe");
  var doc=(elem.contentWindow || elem.contentDocument);
  if(doc.document) doc=doc.document;
  if(doc) {
    var elem=doc.getElementById("fret");
    if(!elem) {
      alert('Ошибка загрузки файла изображения!');
      frame_close();
    }
  }
}

//frame loaded
function frame_ok(val) {
  frame_wait(0);
  //ok
  if(val) {
    //close popup
    frame_close();

    //photo
    if(frmObj.type==1) {
      //save photo
      var max=imgObj.ids.length;
      imgObj.ids[max]=val;

      //show photo
      if(max<imgObj.start+imgObj.frame) img_pos(0);

      //update primary
      if(!imgObj.photo) {
        var elem=document.getElementById("imgprim");
        elem.src="/img/"+imgObj.idr+imgObj.ids[0]+"m.jpg";
      }
    }
    //photo/group
    else if(frmObj.type==2) {
      //update primary
      var elem=document.getElementById("imgprim");
      elem.src="/img/"+img_items["root"]+"g1.jpg"+"?"+Math.round(Math.random()*2147483647);
      img_items["ids"]=1;
    }
    //photo/person
    else if(frmObj.type==3) {
      //update primary
      var elem=document.getElementById("imgprim");
      elem.src="/img/"+img_items["root"]+"p1m.jpg"+"?"+Math.round(Math.random()*2147483647);
      img_items["ids"]=1;
    }
    //logo/group
    else if(frmObj.type==4) {
      //update primary
      var elem=document.getElementById("logoprim");
      elem.src="/img/"+img_items["root"]+"l1.jpg"+"?"+Math.round(Math.random()*2147483647);
      //show logo
      elem=document.getElementById("logoid");
      elem.className="";
      img_items["lids"]=1;
    }
    //banner
    else if(frmObj.type==5) {
      block_banner(img_items["root"]+"1."+val)
      img_items["exts"]=val;
    }
  }
}

//wait mode
function frame_wait(act) {
  if(act) {
    //hide form
    var elem=document.getElementById("frameform");
    elem.className="hide";
    //wait state
    elem=document.getElementById("framewait");
    elem.className="";
  }
  else {
    //hide state
    var elem=document.getElementById("framewait");
    elem.className="hide";
    //show form
    elem=document.getElementById("frameform");
    elem.className="";
  }
}

//close popup
function frame_close() {
  //layer
  var lelem=document.getElementById("lproc");
  lelem.style.display='none';
  lelem.innerHTML='';
  lelem=document.getElementById("fproc");
  lelem.style.display='none';
}


//--- MAP --------------------------------------------------------------------/

//create
function map_create() {
  if(typeof(mapObj)=="undefined") {
    mapObj=new Object();
    mapObj.pos1=0;
    mapObj.pos2=0;
    mapObj.mark=null;
    //load map
    if(typeof(YMaps)!="undefined") YMaps.load(map_init);
    else map_error();
  }
  else if(mapObj.map) {
    mapObj.pos1=0;
    mapObj.pos2=0;
    map_object();
  }
}

//initialization
function map_init() {
  var map=new YMaps.Map(YMaps.jQuery("#mapid")[0]);

  //controls
  map.addControl(new YMaps.TypeControl());
  map.addControl(new YMaps.ToolBar());
  map.addControl(new YMaps.Zoom());
  map.addControl(new YMaps.MiniMap());
  map.addControl(new YMaps.ScaleLine());

  //init
  mapObj.map=map;

  //show object
  map_object();
}

//show object
function map_object() {
  //coordinates
  if(!mapObj.pos1) {
    if(typeof(map_loc["pos1"])!="undefined") {
      mapObj.pos1=map_loc["pos1"];
      mapObj.pos2=map_loc["pos2"];

      //title
      mapObj.title="";
      if(map_loc["address"]!="") mapObj.title+=map_loc["address"];
      if(map_loc["house"]!="") {
        if(mapObj.title!="") mapObj.title+=", ";
        mapObj.title+=map_loc["house"];
      }
    }
    //geocoding
    else if(typeof(map_loc["region"])!="undefined") {
      //address
      var addr="Беларусь";
      if(map_loc["region"]!="") addr+=", "+map_loc["region"]+" обл.";
      if(map_loc["area"]!="") addr+=", "+map_loc["area"]+" р-н.";
      if(map_loc["city"]!="") addr+=", "+map_loc["city"];
      if(map_loc["address"]!="") addr+=", "+map_loc["address"];
      if(map_loc["house"]!="") addr+=", "+map_loc["house"];

      //get coordinates
      var geocoder=new YMaps.Geocoder(addr,{results: 1});
      YMaps.Events.observe(geocoder, geocoder.Events.Load, map_geo);

      return;
    }
    //get address
    else {
      //data request
      tab_req("map","");

      return;
    }
  }

  //show object
  var geoCoords=new YMaps.GeoPoint(mapObj.pos1,mapObj.pos2);
  mapObj.map.setCenter(geoCoords,16);

  //marker
  if(tabObj.priv) {
    if(!mapObj.mark) {
      var placemark = new YMaps.Placemark(geoCoords, {draggable: true, style: "default#houseIcon"});
      placemark.description=mapObj.title;
      mapObj.map.addOverlay(placemark);
      mapObj.mark=placemark;

      //drag
      YMaps.Events.observe(placemark, placemark.Events.DragEnd, map_coords);
    }
    else mapObj.mark.setCoordPoint(geoCoords);
  }

  //balloon
  else mapObj.map.openBalloon(geoCoords,mapObj.title);
}

//geocoding results
function map_geo() {
  if(this.length()) {
    var geoCoords=this.get(0).getGeoPoint();
    map_loc["pos1"]=geoCoords.getX();
    map_loc["pos2"]=geoCoords.getY();

    //show object
    map_object();
  }
}

//new coordinates
function map_coords() {
  var geoCoords=this.getGeoPoint();

  //reset position
  mapObj.pos1=0;
  mapObj.pos2=0;

  //data request
  var vals="pos1="+geoCoords.getX()+"&pos2="+geoCoords.getY()+"&action=submit";
  tab_req("map",vals);
}

//error
function map_error() {
  mapObj.map=null;

  //error code
  var tab='<table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0"><tr><td class="mapms">';
  tab+="Карта временно недоступна!";
  tab+='</td></tr></table>';

  //form code
  elem=document.getElementById("mapid");
  elem.innerHTML=tab;
}


//--- LAYERS -----------------------------------------------------------------/

// client area
function get_carea() {
  var cw=0, ch=0;
  if(typeof(window.innerWidth)=="number") {
    //except IE
    cw=window.innerWidth;
    ch=window.innerHeight;
  }
  else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
    //IE 6+ strict
    cw=document.documentElement.clientWidth;
    ch=document.documentElement.clientHeight;
  } else if(document.body && (document.body.clientWidth || document.body.clientHeight)) {
    //IE
    cw=document.body.clientWidth;
    ch=document.body.clientHeight;
  }

  //scroll
  var sx=0, sy=0;
  if(typeof(window.pageYOffset)=="number") {
    //except IE
    sx=window.pageXOffset;
    sy=window.pageYOffset;
  }
  else if(document.body && (document.body.scrollLeft || document.body.scrollTop)) {
    //IE
    sx=document.body.scrollLeft;
    sy=document.body.scrollTop;
  }
  else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
    //IE 6+ strict
    sx=document.documentElement.scrollLeft;
    sy=document.documentElement.scrollTop;
  }
  return [cw,ch,sx,sy];
}

// object position
function get_pos(id) {
  var elem=document.getElementById(id);
  var cx=elem.offsetLeft;
  var cy=elem.offsetTop;
  while((elem=elem.offsetParent) != null) {
    cx=cx+elem.offsetLeft;
    cy=cy+elem.offsetTop;
  }
  return [cx,cy];
}


//--- TAB --------------------------------------------------------------------/

// tabs initialization
function tab_init(act,tab,path,priv) {
  if(typeof(tabObj)=="undefined") tabObj=new Object();
  //action
  tabObj.act=act;
  //path
  tabObj.path=path;
  //privileges
  tabObj.priv=priv;
  //tabs
  tabObj.tab=new Array();
  //news
  if(act=="news_object") {
    tabObj.tab["article"]=0;
    tabObj.tab["edit"]=0;
  }
  else if(act=="news_list") {
    tabObj.tab["articles"]=0;
    tabObj.tab["add"]=0;
  }
  //docs
  else if(act=="docs_object") {
    tabObj.tab["document"]=0;
    tabObj.tab["edit"]=0;
  }
  //sale
  else if(act=="sale_object") {
    tabObj.tab["about"]=0;
    tabObj.tab["photos"]=0;
    tabObj.tab["map"]=0;
    tabObj.tab["state"]=0;
    tabObj.tab["edit"]=0;
  }
  else if(act=="sale_list") {
    tabObj.tab["specials"]=0;
    tabObj.tab["base"]=0;
    tabObj.tab["add"]=0;
  }
  //rent
  else if(act=="rent_object") {
    tabObj.tab["about"]=0;
    tabObj.tab["photos"]=0;
    tabObj.tab["map"]=0;
    tabObj.tab["state"]=0;
    tabObj.tab["edit"]=0;
  }
  else if(act=="rent_list") {
    tabObj.tab["specials"]=0;
    tabObj.tab["base"]=0;
    tabObj.tab["add"]=0;
  }
  //groups
  else if(act=="groups_object") {
    tabObj.tab["about"]=0;
    tabObj.tab["persons"]=0;
    tabObj.tab["news"]=0;
    tabObj.tab["objects"]=0;
    tabObj.tab["edit"]=0;
  }
  else if(act=="groups_list") {
    tabObj.tab["agencies"]=0;
    tabObj.tab["developers"]=0;
    tabObj.tab["banks"]=0;
    tabObj.tab["add"]=0;
  }
  //persons
  else if(act=="persons_object") {
    tabObj.tab["about"]=0;
    tabObj.tab["objects"]=0;
    tabObj.tab["edit"]=0;
    tabObj.tab["admin"]=0;
  }
  else if(act=="persons_list") {
    tabObj.tab["login"]=0;
    tabObj.tab["register"]=0;
  }
  //blocks
  else if(act=="blocks_object") {
    tabObj.tab["state"]=0;
    tabObj.tab["edit"]=0;
  }
  //active tab
  tabObj.active=tab;
  tabObj.tab[tabObj.active]=1;
  //primary tab
  tabObj.prim=tab;
  //active params
  tabObj.params="";
  
  //history
  tabObj.hstate=0;
  //not IE
  if(window.navigator.userAgent.indexOf("MSIE")==-1) {
    $.history.init(function(hash) {
      //hash
      if(tabObj.hstate==0) {
        tabObj.hstate=1;
        tabObj.hash=hash;
      }
      else {
        tabObj.hstate=2;
        var tab="";
        var vals="";
        var m=hash.match(/^([a-z]*)\/(.*)$/);
        if(m) {
          var tab=m[1];
          var vals=hs_h2p(m[2]);
        }
        else tab=hash;
        if(tab=="") tab=tabObj.prim;
        //new tab
        if(tab!=tabObj.active) new_tab2(tab,vals,0);
        //new part
        else if(vals!=tabObj.params) {
          //list
          if(typeof(listObj)!="undefined") list_submit2(vals,0);
        }
      }
    },
    {unescape: "/"});
  }
}

// tab tag
function tab_tag(tab) {
  //unselect current
  var elem=document.getElementById("tag"+tabObj.active);
  elem.className="ptab";
  //select new
  elem=document.getElementById("tag"+tab);
  elem.className="atab";
}

// new tab
function new_tab(tab,vals) {
  new_tab2(tab,vals,1);
}

// change tab
function new_tab2(tab,vals,hflag) {
  if(tabObj.active==tab) return;

  //tag
  tab_tag(tab);

  //hide current
  var elem=document.getElementById("tab"+tabObj.active);
  elem.className="hide";
  //activate new
  tabObj.active=tab;

  //add to history
  if(hflag) {
    var hvals=hs_p2h(vals);
    if(tabObj.prim==tab) $.history.load(hvals);
    else $.history.load(tab+hvals);
  }

  //switch
  if(tabObj.tab[tab]) {
    //remove wait state
    elem=document.getElementById("tabwait");
    elem.className="hide";
    //activate tab
    elem=document.getElementById("tab"+tab);
    elem.className="";
  }
  //new tab
  else {
    //dynamic tabs
    if((tabObj.act=="sale_object" || tabObj.act=="rent_object") && (tab=="photos" || tab=="map")) {
      //tab code
      var elem=document.getElementById("tab"+tab);
      elem.className="";

      //tab state
      tabObj.tab[tab]=1;

      //create photos
      if(tab=="photos") img_create();
      //create map
      else if(tab=="map") map_create();
    }
    else {
      //wait state
      elem=document.getElementById("tabwait");
      elem.className="";

      //tab request
      tab_req(tab,vals);
    }
  }
}

// reload tab
function tab_reload(vals) {
  //hide current
  var elem=document.getElementById("tab"+tabObj.active);
  elem.className="hide";
  //wait state
  elem=document.getElementById("tabwait");
  elem.className="";

  //tab request
  tab_req(tabObj.active,vals);
}

// tab request
function tab_req(tab,vals) {
  tabObj.req=tab;
  get_data("/part.php?i=TAB&"+tabObj.path+"&tab="+tabObj.req,vals,"tab_ok","tab_fail");
}

// tab loaded
function tab_ok(val) {
  //ok
  if(val==1) {
    //dynamic tabs
    if((tabObj.act=="sale_object" || tabObj.act=="rent_object") && tabObj.req=="map") map_object();
    else {
      //remove wait state
      var elem=document.getElementById("tabwait");
      elem.className="hide";

      //tab code
      var elem=document.getElementById("tab"+tabObj.req);
      elem.innerHTML=tab_html;
      elem.className="";

      //additional jscript
      tab_addjs();

      //tab state
      tabObj.tab[tabObj.req]=1;
    }
    //init list
    if((tabObj.act=="sale_list" || tabObj.act=="rent_list") && (tabObj.req=="specials" || tabObj.req=="base")) list_fnew();
    else if(tabObj.act=="groups_list" && (tabObj.req=="agencies" || tabObj.req=="developers" || tabObj.req=="banks")) list_fnew();
  }
  //errors
  else tab_fail(val);
}

// tab fail
function tab_fail(val) {
  if(val==3) form_post("","/login/","_self","");
  else {
    //error message
    var elem=document.getElementById("tabwait");
    elem.innerHTML='<div class="emess">Ошибка загрузки!</div>';
  }
}

// submit form
function tab_submit(ids,act) {
  //check geo
  if(((tabObj.act=="sale_object" || tabObj.act=="rent_object" || tabObj.act=="persons_object" || tabObj.act=="groups_object") && tabObj.active=="edit") || ((tabObj.act=="sale_list" || tabObj.act=="rent_list") && tabObj.active=="add")) {
    //city
    var elem=document.getElementById("hf1");
    if(elem) {
      var val=parseInt(elem.value);
      if(!val) {
        elem=document.getElementById("tf1");
        tval=elem.value;
        //bg value
        if(elem.className.substr(elem.className.length-2,2)=="bg") tval="";
        if(tval!="") {
          geo_new(0,"tf1","bt1",0);
          return;
        }
      }
    }
    //address
    var parent=val;
    elem=document.getElementById("hf2");
    if(elem && val) {
      var val=parseInt(elem.value);
      if(!val) {
        elem=document.getElementById("tf2");
        tval=elem.value;
        //bg value
        if(elem.className.substr(elem.className.length-2,2)=="bg") tval="";
        if(tval!="") {
          geo_new(parent,"tf2","bt1",0);
          return;
        }
      }
    }
  }

  //wait state
  var elem=document.getElementById("tab"+tabObj.active);
  elem.className="hide";
  elem=document.getElementById("tabwait");
  elem.className="";

  //request
  var vals="";
  if(act!="") vals+="action="+act;
  form_submit("realt",ids,"/part.php?i=TAB&"+tabObj.path+"&tab="+tabObj.active,vals,"tab_form");
}

// form finished
function tab_form(val) {
  //ok
  if(val==1 || val==2) {
    //news
    if(tabObj.act=="news_object") {
      if(tabObj.active=="edit") {
        //refresh
        if(val==2) {
          tabObj.tab["article"]=0;
        }
        new_tab("article","");
      }
    }
    else if(tabObj.act=="news_list") {
      //code
      tabObj.req="add";
      tab_ok(1);
      //refresh
      tabObj.tab["articles"]=0;
      tabObj.tab["add"]=0;
    }
    //docs
    else if(tabObj.act=="docs_object") {
      if(tabObj.active=="edit") {
        //refresh
        if(val==2) {
          tabObj.tab["document"]=0;
        }
        new_tab("document","");
      }
    }
    //sale
    else if(tabObj.act=="sale_object") {
      if(tabObj.active=="edit") {
        //refresh
        if(val==2) {
          tabObj.tab["map"]=0;
          map_loc=new Array();
        }
        tabObj.tab["about"]=0;
        tabObj.tab["state"]=0;
        obj_title();
        new_tab("about","");
      }
      else if(tabObj.active=="state") {
        //refresh
        if(val==2) {
          tabObj.tab["about"]=0;
          tabObj.tab["state"]=0;
        }
        new_tab("about","");
      }
    }
    else if(tabObj.act=="sale_list") {
      //code
      tabObj.req="add";
      tab_ok(1);
      //refresh
      tabObj.tab["base"]=0;
      tabObj.tab["add"]=0;
    }
    //rent
    else if(tabObj.act=="rent_object") {
      if(tabObj.active=="edit") {
        //refresh
        if(val==2) {
          tabObj.tab["map"]=0;
          map_loc=new Array();
        }
        tabObj.tab["about"]=0;
        tabObj.tab["state"]=0;
        obj_title();
        new_tab("about","");
      }
      else if(tabObj.active=="state") {
        //refresh
        if(val==2) {
          tabObj.tab["about"]=0;
          tabObj.tab["state"]=0;
        }
        new_tab("about","");
      }
    }
    else if(tabObj.act=="rent_list") {
      //code
      tabObj.req="add";
      tab_ok(1);
      //refresh
      tabObj.tab["base"]=0;
      tabObj.tab["add"]=0;
    }
    //groups
    else if(tabObj.act=="groups_object") {
      if(tabObj.active=="edit") {
        //refresh
        if(val==2) {
          tabObj.tab["about"]=0;
        }
        obj_title();
        new_tab("about","");
      }
      else if(tabObj.active=="persons") {
        //code
        tabObj.req="persons";
        tab_ok(1);
        //refresh
        tabObj.tab["persons"]=0;
      }
    }
    else if(tabObj.act=="groups_list") {
      //code
      tabObj.req="add";
      tab_ok(1);
      //refresh
      tabObj.tab[form_rdata["base"]]=0;
      tabObj.tab["add"]=0;
    }
    //persons
    else if(tabObj.act=="persons_object") {
      if(tabObj.active=="edit") {
        //refresh
        if(val==2) {
          tabObj.tab["about"]=0;
        }
        new_tab("about","");
      }
      if(tabObj.active=="admin") {
        //code
        tabObj.req="admin";
        tab_ok(1);
        //refresh
        tabObj.tab["admin"]=0;
      }
    }
    else if(tabObj.act=="persons_list") {
      if(tabObj.active=="register") {
        //code
        tabObj.req="register";
        tab_ok(1);
      }
    }
    //blocks object
    else if(tabObj.act=="blocks_object") {
      if(tabObj.active=="state") new_tab("edit","");
      else if(tabObj.active=="edit") new_tab("state","");
    }
  }

  //incorrect
  else if(!val) {
    //remove wait state
    var elem=document.getElementById("tabwait");
    elem.className="hide";

    //form code
    var elem=document.getElementById("tab"+tabObj.active);
    elem.className="";

    //message
    var rmess="Некоторые поля формы не заполнены или заполнены неправильно!\nПожалуйста, исправьте поля, помеченные красным.";
    if(typeof(form_rmess) != "undefined") {
      if(form_rmess!="") rmess=form_rmess;
      form_rmess="";
    }
    alert(rmess);
  }
  //error
  else tab_fail(val);
}

//additional jscript
function tab_addjs() {
  if(typeof(tab_jscode) != "undefined") {
    if(tab_jscode!="") eval(tab_jscode);
    tab_jscode="";
  }
}

//base path
function tab_bpath() {
  var path=new Array();
  //params
  var params=tabObj.path.split("&");
  for(var i=0; i<params.length; i++) {
    var param=params[i];
    if(param=="") continue;
    var parr=param.split("=");
    path[parr[0]]=parr[1];
  }

  return path;
}

//register
function tab_reg() {
  if(tabObj.act=="persons_list") new_tab('register','');
  else self.location.href="/register/";
}


//--- FORM -------------------------------------------------------------------/

// submit form
function form_submit(form,ids,url,vals,fun) {
  if(typeof(formObj)=="undefined") {
    formObj=new Object();
    formObj.mark='';
  }
  formObj.fun=fun;
  //form data
  var fvals=form_vals(form,ids);
  if(vals != "") fvals+="&"+vals;
  //submit
  get_data(url,fvals,"form_ok","form_fail");
}

// reset form
function form_reset() {
  if(typeof(formObj)!="undefined") {
    //unmark prev
    var params=formObj.mark.split(",");
    for(var i=0; i<params.length; i++) {
      if(params[i]=="") continue;
      form_ftitle(params[i],0);
    }
    formObj.mark='';
  }
}

// get form values
function form_vals(form,ids) {
  var fval=document.forms[form];
  var vals="";
  if(ids=="") return vals;

  var params=ids.split(",");
  for(var i=0; i<params.length; i++) {
    var param=params[i];
    if(param=="") continue;
    var val="";
    //fields
    var m=param.match(/^.*([a-z]{2})[0-9]+$/);
    if(m) {
      if(m[1]=="tf" || m[1]=="dl" || m[1]=="ta" || m[1]=="hf") {
        var elem=fval.elements[param];
        if(elem) {
          //html editor
          if(m[1]=="ta") {
            if(typeof(tinyMCE)!="undefined") val=tinyMCE.get(param).getContent();
          }
          if(val=="") val=elem.value;
          //bg value
          if(elem.className.substr(elem.className.length-2,2)=="bg") val="";
          val=param+"="+encodeURIComponent(val);
        }  
      }
      else if(m[1]=="cb") {
        var elem=fval.elements[param];
        if(elem) {
          if(elem.checked) val=param+"="+encodeURIComponent(elem.value);
        }
      }
      else if(m[1]=="lb") {
        var elem=fval.elements[param];
        if(elem) {
          for(var i2=0; i2<elem.length; i2++) {
            if(elem[i2].selected) {
              if(val != "") val+="&";
              val+=param+"[]="+encodeURIComponent(elem[i2].value);
            }
          }
        }
      }
      //unions / radio
      else if(m[1]=="un") {
        var elem=fval.elements[param];
        if(elem) {
          for(var i2=0; i2<elem.length; i2++) {
            if(elem[i2].checked) {
              if(val != "") val+="&";
              val+=param+"="+encodeURIComponent(elem[i2].value);
              break;
            }
          }
        }
      }
    }
    //custom
    else {
      var elem=fval.elements[param];
      if(elem) val=param+"="+encodeURIComponent(elem.value);
    }

    //add value
    if(val != "") {
      if(vals != "") vals+="&";
      vals+=val;
    }
  }

  return vals;
}

// clear form fields
function form_clear(form,ids) {
  var fval=document.forms[form];
  var vals="";
  if(ids=="") return;

  var params=ids.split(",");
  for(var i=0; i<params.length; i++) {
    var param=params[i];
    if(param=="") continue;
    var val="";
    //fields
    var m=param.match(/^.*([a-z]{2})[0-9]+$/);
    if(m) {
      if(m[1]=="tf" || m[1]=="dl" || m[1]=="ta" || m[1]=="hf") {
        var elem=fval.elements[param];
        if(elem) {
          if(m[1]=="tf" && elem.className.substr(elem.className.length-2,2)=="bg") {}
          else elem.value="";
        }
      }
      else if(m[1]=="cb") {
        var elem=fval.elements[param];
        if(elem) elem.checked=false;
      }
      else if(m[1]=="lb") {
        var elem=fval.elements[param];
        if(elem) for(var i2=0; i2<elem.length; i2++) elem[i2].selected=false;
      }
      //unions / radio
      else if(m[1]=="un") {
        var elem=fval.elements[param];
        if(elem) for(var i2=0; i2<elem.length; i2++) elem[i2].checked=false;
      }
    }
    //custom
    else {
      var elem=fval.elements[param];
      if(elem) elem.value="";
    }
  }
}

// field title
function form_ftitle(id,act) {
  var elem=document.getElementById("t"+id);
  if(elem) {
    if(act) elem.className="ftmark";
    else elem.className="";
  }
}

// form submitted
function form_ok(val) {
  //ok
  if(val==1) {
    //incorrect fields
    if(!form_resp) {
      //marked
      var mids=new Array();
      var params=formObj.mark.split(",");
      for(var i=0; i<params.length; i++) {
        if(params[i]=="") continue;
        mids[params[i]]=0;
      }
      //new marks
      params=form_rids.split(",");
      for(var i=0; i<params.length; i++) {
        if(typeof(mids[params[i]]) != "undefined") mids[params[i]]=1;
        else form_ftitle(params[i],1);
      }
      //unmark prev
      for(var param in mids) {
       if(!mids[param]) form_ftitle(param,0);
      }
      formObj.mark=form_rids;
    }
    //submit
    else form_reset();
    
    //form function
    var req=formObj.fun+"("+form_resp+")";
    eval(req);
  }
  //errors
  else form_fail(val);
}

// form fail
function form_fail(val) {
  if(val==3) form_post("","/login/","_self","");
  else {
    //form function
    var req=formObj.fun+"(20)";
    eval(req);
  }
}

// post data
function form_post(form,act,target,vals) {
  //form
  var fval=document.createElement("form");
  if(form!="") fval=document.forms[form];
  fval.action=act;
  fval.method="post";
  fval.target=target;
  document.body.appendChild(fval);
  //params
  var params=vals.split("&");
  for(var i=0; i<params.length; i++) {
    var param=params[i];
    if(param=="") continue;
    var parr=param.split("=");
    if(parr[0]!="") {
      //hidden field
      var elem=document.createElement("input");
      elem.type="hidden";
      elem.name=parr[0];
      elem.value=parr[1];
      fval.appendChild(elem);
    }
  }
  //submit
  fval.submit();
}

// city part
function form_city(id,aid,ids) {
  //clear address
  if(aid!="") {
    var elem=document.getElementById(aid);
    if(elem) {
      elem.value="";
      elem=document.getElementById("hf"+aid.substr(2));
      elem.value=0;

      //bg message
      field_bgval(1,aid,"Начните вводить название");
    }
  }

  //Minsk part
  if(aid!="") {
    var elem=document.getElementById(id);
    var tval="";
    if(elem.value!=1) tval="hide";
    //parts
    var params=ids.split(",");
    for(var i=0; i<params.length; i++) {
      var param=params[i];
      if(param=="") continue;
      elem=document.getElementById(param);
      if(elem) elem.className=tval;
    }
  }
}

// hide/show parts
function form_part(hids,sids) {
  //hide
  var params=hids.split(",");
  for(var i=0; i<params.length; i++) {
    var param=params[i];
    if(param=="") continue;
    var elem=document.getElementById(param);
    elem.className="hide";
  }
  //show
  params=sids.split(",");
  for(var i=0; i<params.length; i++) {
    var param=params[i];
    if(param=="") continue;
    var elem=document.getElementById(param);
    elem.className="";
  }
}


//--- LIST -------------------------------------------------------------------/

//initialization
function list_init(act,ids,fids) {
  if(typeof(listObj)=="undefined") listObj=new Array();
  //active list
  if(typeof(listObj[tabObj.active])=="undefined") listObj[tabObj.active]=new Object();
  //filter ids
  listObj[tabObj.active].ids=ids;
  listObj[tabObj.active].fids=fids;
  //filter mode
  listObj[tabObj.active].filter=act;
  //list data
  listObj[tabObj.active].start=0;
  listObj[tabObj.active].len=0;
  listObj[tabObj.active].frame=0;
  listObj[tabObj.active].sort=0;
}

//frame initialization
function list_frame(pos,len,frame,sort,fcost) {
  listObj[tabObj.active].start=pos;
  listObj[tabObj.active].len=len;
  listObj[tabObj.active].frame=frame;
  listObj[tabObj.active].sort=sort;
  listObj[tabObj.active].fcost=fcost;
}

//new frame
function list_fnew() {
  //objects
  var tval="Нет объектов";
  if(tabObj.act=="news_list") tval="Нет статей";
  else if(tabObj.act=="groups_list") tval="Нет компаний";
  if(listObj[tabObj.active].len) {
    var tval1=listObj[tabObj.active].start+1;
    var tval2=listObj[tabObj.active].start+listObj[tabObj.active].frame;
    if(tval2>listObj[tabObj.active].len) tval2=listObj[tabObj.active].len;
    tval="Показаны объекты";
    if(tabObj.act=="news_list") tval="Показаны статьи";
    else if(tabObj.act=="groups_list") tval="Показаны компании";
    tval+=" "+tval1+"-"+tval2+" из "+listObj[tabObj.active].len;
  }
  var elem=document.getElementById("listnum"+tabObj.active);
  elem.innerHTML=tval;

  //max pages
  var mpg=0;
  if(listObj[tabObj.active].frame) {
    mpg=parseInt(listObj[tabObj.active].len/listObj[tabObj.active].frame);
    if(listObj[tabObj.active].len%listObj[tabObj.active].frame) mpg++;
  }
  if(!mpg) mpg=1;
  elem=document.getElementById("listmax"+tabObj.active);
  elem.innerHTML=mpg;
  elem=document.getElementById("listmax2"+tabObj.active);
  elem.innerHTML=mpg;

  //page
  var cpg=1;
  if(listObj[tabObj.active].frame) {
    cpg=parseInt(listObj[tabObj.active].start/listObj[tabObj.active].frame);
    cpg++;
  }
  elem=document.getElementById("listpg"+tabObj.active);
  elem.options.length=0;
  var elem2=document.getElementById("listpg2"+tabObj.active);
  elem2.options.length=0;
  var li=0;
  var cli=0;
  for(var i=1;i<=mpg;i++) {
    var ci=0;
    if(!ci && ((i>50 && i<(cpg-50)) || (i>(cpg+50) && cpg<=(mpg-50)))) {
      ci=parseInt(i/100);
      if(i%100) ci++;
      ci*=100;
      if(ci<=mpg && (ci<=cpg || cli)) tval="..."+ci;
      else {
        ci-=50;
        if(ci>i && ci<=mpg && (ci<=cpg || cli)) tval="..."+ci;
        else ci=0;
      }
    }
    if(!ci && ((i>5 && i<(cpg-5)) || (i>(cpg+5) && cpg<=(mpg-5)))) {
      ci=parseInt(i/10);
      if(i%10) ci++;
      ci*=10;
      if(ci<=mpg && (ci<=cpg || cli)) tval="..."+ci;
      else {
        ci-=5;
        if(ci>i && ci<=mpg && (ci<=cpg || cli)) tval="..."+ci;
        else ci=0;
      }
    }
    if(!ci) tval=i;
    else i=ci;
    if(i==cpg) cli=li;
    //add item
    elem.options[li]= new Option(tval,i);
    elem2.options[li]= new Option(tval,i);
    li++
  }
  elem.options[cli].selected=true;
  elem2.options[cli].selected=true;

  //cost units
  if((tabObj.act=="sale_list" || tabObj.act=="rent_list") && tabObj.active=="base") list_cunits();
}

// frame size
function list_fsize(val) {
  var vals="";
  if(listObj[tabObj.active].start>0) vals+="lpos="+listObj[tabObj.active].start;
  if(listObj[tabObj.active].sort>0) {
    if(vals!="") vals+="&";
    vals+="lsort="+listObj[tabObj.active].sort;
  }
  if(vals!="") vals+="&";
  vals+="lframe="+val;
  list_submit(vals);
}

//list page
function list_page(val) {
  var npos=(val-1)*listObj[tabObj.active].frame;
  if(npos>=0 && npos<listObj[tabObj.active].len) {
    var vals="";
    if(npos>0) vals+="lpos="+npos;
    if(listObj[tabObj.active].sort>0) {
      if(vals!="") vals+="&";
      vals+="lsort="+listObj[tabObj.active].sort;
    }
    if(vals!="") vals+="&";
    vals+="lframe="+listObj[tabObj.active].frame;
    list_submit(vals);
  }
}

//new search
function list_search(act,hids,sids) {
  //new list
  listObj[tabObj.active].filter=act;

  //params
  var vals=""; 
  if(listObj[tabObj.active].sort>0) vals+="lsort="+listObj[tabObj.active].sort;
  if(vals!="") vals+="&";
  vals+="lframe="+listObj[tabObj.active].frame;

  //request
  var ids=listObj[tabObj.active].ids;
  if(listObj[tabObj.active].filter) {
    ids+=","+listObj[tabObj.active].fids;
    if(vals!="") vals+="&";
    vals+="lfilter=1";
  }

  //form data
  var fvals=form_vals("realt",ids);
  if(vals != "") fvals+="&"+vals;

  list_nsearch(fvals);
}

//list position
function list_pos(act) {
  var lpos=-1;

  //forward
  if(act==1) {
    var npos=listObj[tabObj.active].start+listObj[tabObj.active].frame;
    if(npos<listObj[tabObj.active].len) lpos=npos;
  }
  //back
  else if(act==2) {
    var npos=listObj[tabObj.active].start-listObj[tabObj.active].frame;
    if(npos<0 && listObj[tabObj.active].start>0) npos=0;
    if(npos>=0) lpos=npos;
  }
  //reload
  else if(act==3) lpos=listObj[tabObj.active].start;
  //reset
  else lpos=0;
  
  //new list
  if(lpos!=-1) {
    var vals="";
    if(lpos>0) vals+="lpos="+lpos;
    if(listObj[tabObj.active].sort>0) {
      if(vals!="") vals+="&";
      vals+="lsort="+listObj[tabObj.active].sort;
    }
    if(vals!="") vals+="&";
    vals+="lframe="+listObj[tabObj.active].frame;
    list_submit(vals);
  }
}

//list sorting
function list_sort(act) {
  //invert
  if(act==listObj[tabObj.active].sort) act+=100;
  var vals="";
  if(act>0) vals+="lsort="+act;
  if(vals!="") vals+="&";
  vals+="lframe="+listObj[tabObj.active].frame;
  list_submit(vals);
}

//submit list
function list_submit(vals) {
  list_submit2(vals,1);
}

//change list
function list_submit2(vals,hflag) {
  //wait state
  var elem=document.getElementById("list"+tabObj.active);
  elem.className="hide";
  elem=document.getElementById("listwait"+tabObj.active);
  elem.className="";

  //new params
  tabObj.params=vals;

  //add to history
  if(hflag) {
    var hvals=hs_p2h(vals);
    if(tabObj.prim==tabObj.active) $.history.load(hvals);
    else $.history.load(tabObj.active+hvals);
  }

  //request
  var ids=listObj[tabObj.active].ids;
  if(listObj[tabObj.active].filter) {
    ids+=","+listObj[tabObj.active].fids;
    if(vals!="") vals+="&";
    vals+="lfilter=1";
  }
  form_submit("realt",ids,"/part.php?i=LIST&"+tabObj.path+"&tab="+tabObj.active,vals,"list_form");
}

//list finished
function list_form(val) {
  //ok
  if(val==1) {
    //remove wait state
    var elem=document.getElementById("listwait"+tabObj.active);
    elem.className="hide";

    //navigator
    var nav=0;
    if(window.navigator.userAgent.indexOf("MSIE")!=-1) nav=1;

    //list code
    var elem=document.getElementById("list"+tabObj.active);
    if(!nav) {
      elem.innerHTML=tab_html;
      elem.className="";
    }
    //IE
    else {
      var pelem=elem.parentNode;
      //create container
      var bnode=document.createElement("tbody");
      bnode.id=elem.id;
      //remove old
      var pos=elem.nextSibling;
      pelem.removeChild(elem);
      //add new
      if(pos) pelem.insertBefore(bnode,pos);
      else pelem.appendChild(bnode);
      //table
      pelem=pelem.parentNode;
      var tab='<tbody id="'+bnode.id+'">'+tab_html+'</tbody>';
      var re=new RegExp('<tbody id=\"?'+bnode.id+'\"?>\s*</tbody>',"i");
      pelem.innerHTML=pelem.innerHTML.replace(re,tab);
    }

    //new frame
    list_fnew();
  }
  //error
  else list_fail(val);
}

//list fail
function list_fail(val) {
  //error message
  var elem=document.getElementById("listwait"+tabObj.active);
  elem.firstChild.innerHTML='<div class="emess">Ошибка загрузки!</div>';
}

// new search
function list_nsearch(vals) {
  var path=tab_bpath();
  //action
  var act="";
  if(path["part"]=="news") act="/"+path["part"]+"/"+path["base"]+"/";
  else if(path["part"]=="groups") act="/"+path["base"]+"/";
  else act="/"+path["part"]+"/"+path["base"]+"/base/";
  //submit
  form_post("",act,"_self",vals);
}

// cost units
function list_cunits() {
  var tval="";
  if(!listObj[tabObj.active].fcost) tval=", $";
  else if(listObj[tabObj.active].fcost==1) tval=", &euro;";
  else if(listObj[tabObj.active].fcost==2) tval=", млн.&nbsp;руб.";
  var elem=document.getElementById("lcv");
  if(elem) elem.innerHTML=tval;
  elem=document.getElementById("lcv2");
  if(elem) elem.innerHTML=tval;
}

// search from specials
function list_sfspec(mode,ids) {
  var vals="";
  if(mode) vals+="lfmode=1";

  //form data
  var fvals=form_vals("realt",ids);
  if(vals != "") fvals+="&"+vals;
  
  list_nsearch(fvals);
}


//--- OBJECT -----------------------------------------------------------------/

// delete
function obj_del(id,type) {
  //confirm
  if(type=="news") {
    if(!confirm("Удалить статью?")) return;
  }
  else if(type=="docs") {
    if(!confirm("Удалить документ?")) return;
  }
  else if(type=="object") {
    if(!confirm("Удалить объект?")) return;
  }
  else if(type=="group") {
    if(!confirm("Удалить компанию?")) return;
  }
  else if(type=="person") {
    if(tabObj.act=="groups_object") {
      if(!confirm("Удалить сотрудника?")) return;
    }
    else if(!confirm("Удалить пользователя?")) return;
  }
  else if(type=="block") {
    if(!confirm("Удалить блок?")) return;
  }
  else if(type=="geo") {
    if(!confirm("Удалить географическое название?")) return;
  }
  
  //object
  if(typeof(objObj)=="undefined") objObj=new Object();
  objObj.id=id;
  objObj.type=type;

  //table
  var tab='<table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0"><tr><td valign="middle" align="center">';
  tab+='<div align="center"><table border="0" cellspacing="0" cellpadding="0"><tr>';
  tab+='<td><img src="/tpl/i/loading.gif" border="0"></td><td>Загрузка...</td></tr></table></div>';
  tab+='</td></tr></table>';

  //layer
  var lelem=document.getElementById("fproc");
  lelem.style.display='block';
  lelem=document.getElementById("lproc");
  lelem.innerHTML=tab;
  lelem.style.display='block';

  //request
  var vals="oid="+id+"&otype="+type+"&action=delete";
  if(typeof(tabObj)=="undefined") get_data("/part.php?i=DEL",vals,"obj_dok","obj_fail");
  else get_data("/part.php?i=DEL&"+tabObj.path+"&tab="+tabObj.active,vals,"obj_dok","obj_fail");
}

//delete completed
function obj_dok(val) {
  //ok
  if(val==1 || val==2) {
    if(typeof(tabObj)=="undefined") {
      if(objObj.type=="block") {
        //delete block
        block_del(objObj.id);
      }
      else if(objObj.type=="news") {
        //reload page
        self.location.reload();
        return;
      }
    }
    else {
      if(tabObj.act=="blocks_object") {
        //go to main page
        self.location.href="/";
        return;
      }
      else if(tabObj.act=="news_object") {
        //go to base
        list_nsearch("");
        return;
      }
      else if(tabObj.act=="news_list") {
        //reload frame
        list_pos(3);
      }
      else if(tabObj.act=="docs_object") {
        //go to main page
        self.location.href="/";
        return;
      }
      else if(tabObj.act=="sale_object") {
        //go to base
        list_nsearch("");
        return;
      }
      else if(tabObj.act=="sale_list") {
        //reload tabs
        if(tabObj.active=="base") {
          tabObj.tab["specials"]=0;
        }
        //reload frame
        list_pos(3);
      }
      else if(tabObj.act=="rent_object") {
        //go to base
        list_nsearch("");
        return;
      }
      else if(tabObj.act=="rent_list") {
        //reload tabs
        if(tabObj.active=="base") {
          tabObj.tab["specials"]=0;
        }
        //reload frame
        list_pos(3);
      }
      else if(tabObj.act=="groups_object") {
        //reload tab
        if(tabObj.active=="persons" || tabObj.active=="news") {
          tab_reload("");
        }
        else {
          //go to base
          list_nsearch("");
          return;
        }
      }
      else if(tabObj.act=="groups_list") {
        //reload frame
        list_pos(3);
      }
      else if(tabObj.act=="persons_object") {
        //reload list
        if(tabObj.active=="admin") {
          geo_list();
        }
        else {
          //go to main page
          self.location.href="/";
          return;
        }
      }
    }

    //layer
    var lelem=document.getElementById("lproc");
    lelem.style.display='none';
    lelem.innerHTML='';
    lelem=document.getElementById("fproc");
    lelem.style.display='none';
  }
  //errors
  else obj_fail(val);
}

//object fail
function obj_fail(val) {
  if(val==3) form_post("","/login/","_self","");
  else {
    //layer
    var lelem=document.getElementById("lproc");
    lelem.style.display='none';
    lelem.innerHTML='';
    lelem=document.getElementById("fproc");
    lelem.style.display='none';

    //error
    alert('Ошибка удаления объекта!');
  }
}

//advertising
function obj_advert(id) {
  var vals="rid="+id;
  //action
  var act="/advert/request/";
  //submit
  form_post("",act,"_self",vals);

/* same page for SMS !!!
  var vals="action=advert&type="+val;
  //tab
  if(tabObj.active=="state") {
    tab_reload(vals);
  }
  //page
  else if(tabObj.active=="add") {
    var path=tab_bpath();
    //action
    var act="/"+path["part"]+"/"+path["base"]+"/"+id+"/state/";
    //submit
    form_post("",act,"_self",vals);
  }
*/
}

//find object
function obj_find(id) {
  var link='';
  var elem=document.getElementById(id);
  if(elem.value.length>2) {
    var id=elem.value.substr(0,elem.value.length-2);
    var pref=elem.value.substr(0,1);
    if(pref=="s" || pref=="p") {
      id=id.substr(1);
      pref="state/";
    }
    else pref="";
    if(id) {
      var base=elem.value.substr(elem.value.length-2,2);
      if(base==11) link="/sale/flats/"+id+"/"+pref;
      else if(base==12) link="/sale/newbuildings/"+id+"/"+pref;
      else if(base==13) link="/sale/houses/"+id+"/"+pref;
      else if(base==14) link="/sale/nonres/"+id+"/"+pref;
    }
  }
  
  if(link=="") alert("Неправильный номер объявления!");
  else form_post("",link,"_blank","");
}

//title
function obj_title(id) {
  if(typeof(form_rdata)=="undefined") return;
  //page
  if(typeof(form_rdata["ptitle"])!="undefined") {
    document.title=form_rdata["ptitle"];
  }
  //object
  if(typeof(form_rdata["otitle"])!="undefined") {
    var elem=document.getElementById("objtitle");
    if(elem) elem.innerHTML=form_rdata["otitle"];
  }
}


//--- BLOCKS -----------------------------------------------------------------/

// submit block
function block_submit(id,type,ids,act) {
  if(typeof(blockObj)=="undefined") blockObj=new Object();
  blockObj.id=id;
  blockObj.type=type;

  //wait state
  var elem=document.getElementById("block"+blockObj.id);
  elem.className="hide";
  elem=document.getElementById("blockwait"+blockObj.id);
  elem.className="";

  //request
  var vals="";
  if(act!="") vals+="action="+act;
  form_submit("realt",ids,"/part.php?i=BLOCK&id="+id,vals,"block_form");
}

//form finished
function block_form(val) {
  //ok
  if(val==1) {
    //tab
    if(blockObj.type=="auth") {
      //reload page
      self.location.reload();
      return;
    }

    //remove wait state
    var elem=document.getElementById("blockwait"+blockObj.id);
    elem.className="hide";

    //block code
    var elem=document.getElementById("block"+blockObj.id);
    elem.innerHTML=block_html;
    elem.className="";
  }
  //incorrect
  else if(!val) {
    //remove wait state
    var elem=document.getElementById("blockwait"+blockObj.id);
    elem.className="hide";

    //form code
    elem=document.getElementById("block"+blockObj.id);
    elem.className="";

    //message
    var rmess="Некоторые поля формы не заполнены или заполнены неправильно!\nПожалуйста, исправьте поля, помеченные красным.";
    if(typeof(form_rmess) != "undefined") {
      if(form_rmess!="") rmess=form_rmess;
      form_rmess="";
    }
    alert(rmess);
  }
  //error
  else block_fail(val);
}

//block fail
function block_fail(val) {
  //error message
  var elem=document.getElementById("blockwait"+blockObj.id);
  elem.innerHTML='<div class="emess">Ошибка загрузки!</div>';
}

// delete block
function block_del(id) {
  var elem=document.getElementById("block"+id);
  if(elem) {
    var pelem=elem.parentNode;
    pelem.removeChild(elem);
    
    var tval=pelem.innerHTML.replace(/\s/g,"");
    if(tval=="") pelem.innerHTML="&nbsp;";
  }
}

// show banner
function block_banner(img) {
  //type
  var type=0;
  var m=img.match(/\.([a-z]+)$/);
  if(m) {
    if(m[1]=="swf") type=1;
  }
  
  //banner
  img+="?"+Math.round(Math.random()*2147483647);
  var tab='';
  if(type==1) {
     tab+='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" border="0" wmode="transparent">';
     tab+='<param name="movie" value="/img/'+img+'">';
     tab+='<param name="quality" value="high">';
     tab+='<embed src="/img/'+img+'" quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" wmode="transparent"></embed>';
     tab+='</object>';
  }
  else tab='<img src="/img/'+img+'" border="0">';
  
  //show
  var elem=document.getElementById("imgmain");
  elem.innerHTML=tab;
}


//--- FIELDS -----------------------------------------------------------------/

//new object type
function field_ntype(elem,id) {
  if(elem.value==1) form_part(id,"");
  else form_part("",id);
}

//object status type
function field_stype(elem,ids) {
  if(!elem.value) form_part(ids,"");
  else form_part("",ids);
}

//background value
function field_bgval(act,id,val) {
  var elem=document.getElementById(id);
  if(!elem) return;
  if(!act) {
    if(elem.value==val) elem.value="";
    if(elem.className.substr(elem.className.length-2,2)=="bg") elem.className=elem.className.substr(0,elem.className.length-2);
  }
  else {
    if(elem.value=="") {
      if(elem.className.substr(elem.className.length-2,2)!="bg") elem.className=elem.className+"bg";
      elem.value=val;
    }
  }
}

//enter event
function field_enter(e,id) {
  if(!e) var e=window.event;
 
  if(e.keyCode==13) {
    var elem=document.getElementById(id);
    //event
    if(document.createEvent) {
      var evt=document.createEvent("Event");
      evt.initEvent("click",true,true);
      elem.dispatchEvent(evt);
    }
    else if(document.createEventObject) {
      var evt=document.createEventObject();
      elem.fireEvent("onclick",evt);
    }
  }
}


//--- AJAX -------------------------------------------------------------------/

// data request
function get_data(url,data,fok,ffail) {
  if(typeof(rObj)=="undefined") {
    rObj=new Object();
    rObj.timeout=null;
  }
  if(rObj.timeout) return;  //reject multiple requests
  //interface
  req_clr();
  rObj.url=url;
  rObj.data=data;
  rObj.ok=fok;
  rObj.fail=ffail;
  //request
  if(rObj.url!="") {
    get_req();
    if(rObj.req || rObj.data=="") {
      if(rObj.req) req_send();  //http
      else js_send();  //jscript
      //set timeout
      rObj.timeout=setTimeout("req_timeout()",30000);
    }
    else req_fail(4);
  }
}

// request complete
function req_ok(val) {
  req_clr();
  var req=rObj.ok+"(val)";
  eval(req);
}

// request failed: 1-incorrect answer, 2-receiving problems, 3-timeout, 4-can't post
function req_fail(val) {
  req_clr();
  val+=10;
  var req=rObj.fail+"(val)";
  eval(req);
}

// create interface
function get_req() {
  if(typeof(XMLHttpRequest) != "undefined") rObj.req=new XMLHttpRequest();
  else if(window.ActiveXObject) {
    var axs=new Array("MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP.2.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP");
    for (var i=0; i<axs.length; i++) {
      try {rObj.req=new ActiveXObject(axs[i]);break;}
      catch(e) {}
    }
  }
}

// send request
function req_send() {
  //post method
  if(rObj.data != "") {
    rObj.req.open("POST",rObj.url,true);
    //headers
    rObj.req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    rObj.req.setRequestHeader("Content-length", rObj.data.length);
    rObj.req.setRequestHeader("Connection", "close");
    //send
    rObj.req.onreadystatechange=req_state;
    rObj.req.send(rObj.data);
  }
  //get method
  else {
    rObj.req.open("GET",rObj.url,true);
    rObj.req.onreadystatechange=req_state;
    rObj.req.send(null);
  }
}

// request state
function req_state() {
  try {
    if(rObj.req.readyState==4) {
      if(rObj.req.status==200) eval(rObj.req.responseText);
      else req_fail(1);
    }
  }
  catch(e) {req_fail(2);}
}

// jscript request
function js_send() {
  var th=document.getElementsByTagName("head")[0];
  var tc=document.getElementById("jsreq");
  if(tc) th.removeChild(tc);
  //load jscript
  var ts=document.createElement("script");
  ts.id="afci";
  ts.type="text/javascript";
  ts.defer=true;
  ts.src=rObj.url;
  th.appendChild(ts);
}

// timeout
function req_timeout() {
  req_break();
  req_fail(3);
}

// break request
function req_break() {
  if(rObj.req) rObj.req.abort();
  else {
    var th=document.getElementsByTagName("head")[0];
    var tc=document.getElementById("jsreq");
    if(tc) th.removeChild(tc);
  }
  req_clr();
}

// clear request
function req_clr() {
  if(rObj.timeout) clearTimeout(rObj.timeout);
  rObj.timeout=null;
  rObj.req=null;
}

//-->
