function ev_source(ev) {
 if(!ev)
  ev = window.event;
 if(ev.target) return ev.target;
 if(ev.srcElement) return ev.srcElement;
}
function get_requester() {
 try{
  return new XMLHttpRequest();
 }catch(e) {
  try{
   return new ActiveXObject("Msxml2.XMLHTTP");
  }catch(e) {
   return new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
}

function val_extract(xh,tn) {
 if(xh.responseXML) {
  return xh.responseXML.getElementsByTagName(tn).item(0).firstChild.nodeValue;
 }
 return xh.getElementsByTagName(tn).item(0).firstChild.nodeValue;
}

function add_class(e,cn) {
 var s = e.className.split(/\s+/);
 for(var i=s.length-1;i>=0;--i) {
  if(s[i]==cn)
   return;
 }
 e.className += ' '+cn;
}
function remove_class(e,cn) {
 var s = e.className.split(/\s+/);
 for(var i=s.length-1;i>=0;--i) {
  if(s[i]==cn) {
   e.className = 
    (i?s.slice(0,i).join(' '):'')
    +
    ((i==s.length-1)?'':s.slice(i+1,s.length).join(' '));
   return;
  }
 }
}

function a_get_expanded(e) {
 return (e.innerHTML.substr(0,1)=='\u25BC');
}
function a_set_expanded(a,e) {
 var c = a.innerHTML.substr(0,1);
 if(c!='\u25BC' && c!='\u25BA')
  return;
 c = e?'&#x25BC;':'&#x25BA;';
 a.innerHTML = c+a.innerHTML.substr(1);
}
function a_toggle_expanded(e) {
 var c = e.innerHTML.substr(0,1);
 if(c=='\u25BC') {
  e.innerHTML = '&#x25BA;'+e.innerHTML.substr(1);
  return false;
 }
 if(c=='\u25BA'){
  e.innerHTML = '&#x25BC;'+e.innerHTML.substr(1);
  return true;
 }
 return false;
}

function g_get_anchor(g) {
 return document.getElementById('ga_'+g);
}
function g_get_div(g) {
 return document.getElementById('gd_'+g);
}

function g_load(g,on_completion) {
 var a = g_get_anchor(g);
 var d = g_get_div(g);
 d.style.display='none'; d.innerHTML='Загрузка...'; d.className='g_loading'; d.style.display='block';
 var hr = get_requester();
 hr.open("GET",a+'?group='+g);
 hr.onreadystatechange=function() {
  if(hr.readyState!=4) return false;
  if(hr.status==200) {
   d.className='g_loaded'; d.innerHTML=hr.responseText;
  }else{
   d.className='g_loading_error'; d.innerHTML='Ошибка';
  }
  if(on_completion) on_completion();
  return true;
 }
 hr.send(null);
}

function g_toggle(g) {
 var a = g_get_anchor(g);
 a.blur();
 var d = g_get_div(g);
 if(a_toggle_expanded(a)) {
  d.style.display='block';
  if(d.className!='g_loading' && d.className!='g_loaded') {
   g_load(g,function(){
    g_copy(g);
   });
  }else{
   g_copy(g);
  }
 }else{
  d.style.display = 'none';
  g_copy(g);
 }
}

function g_open(g,on_completion) {
 var a = g_get_anchor(g);
 var d = g_get_div(g);
 if(!a_get_expanded(a)) {
  a_set_expanded(a,true);
  d.style.display='block';
  if(d.className!='g_loading' && d.className!='g_loaded') {
   g_load(g,function(){
    if(on_completion) on_completion();
   });
  }
 }else{
  if(on_completion) on_completion();
 }
}

function g_copy(g) {
 var sh = g_get_anchor(g);
 var sl = g_get_div(g);
 var d = document.getElementById('b_items');
 d.className='b_items';
 if(g=='s' || g=='f')
  return;
 if(g=='c') {
  d.innerHTML = ''; d.className='';
  return;
 }
 var nih = 
  '<h1>'+(/nbsp/.test(sh.innerHTML)?sh.innerHTML.substr(7):sh.innerHTML.substr(2))+'</h1>'
  +sl.innerHTML.replace(/id="/,'id="_junkit_');
 if(d.innerHTML!=nih) d.innerHTML = nih;
}

function g_click(ev,g) {
 // try{
  g_toggle(g);
  return false;
 // }catch(e){ }
 return true;
}

function sg_get_anchor(sg) {
 return document.getElementById('_sga_'+sg);
}

/*
var b_shown_sg = null;
 */

function sg_load(sg,on_completion) {
 try {
  document.getElementById('b_item').innerHTML='';
  document.getElementById('b_item').style.display='none';
 }catch(e) { }
 var a = sg_get_anchor(sg);
 a.blur();
 /*if(b_shown_sg) {
  b_shown_sg.className=''; b_shown_sg=null;
 }*/
 var d = document.getElementById('b_items');
 d.style.display='none'; d.className='sg_loading'; d.innerHTML='Загрузка...'; d.style.display='block';
 var hr = get_requester();
 var dnow = new Date();
 hr.open("GET",a+'?subgroup='+sg+filter_qp()+'&dummy='+dnow.getTime());
 hr.onreadystatechange=function() {
  if(hr.readyState!=4) return false;
  if(hr.status==200) {
   d.className='b_items'; d.innerHTML=hr.responseText;
   /*if(b_shown_sg)
    b_shown_sg.className='';
   b_shown_sg = a.parentNode.parentNode; b_shown_sg.className='open'; */
  }else{
   d.className='sg_loading_error'; d.innerHTML='Ошибка';
  }
  if(on_completion) on_completion();
  return true;
 }
 hr.send(null);
}

function sg_open(g,sg) {
 g_open(g,function(){
  sg_load(sg);
 });
}

function sg_click(ev,sg) {
 // try{
  sg_load(sg);
  return false;
 // }catch(e) { }
 return true;
}

function i_get_anchor(i) {
 return document.getElementById('_ia_'+i);
}
function i_get_div(i) {
 return document.getElementById('_id_'+i);
}

function i_load(i,on_completion,more_pars) {
 var a = i_get_anchor(i);
 var d = i_get_div(i);
 d.className='i_loading'; d.innerHTML='Загрузка...';
 var hr = get_requester();
 hr.open("GET",String(a).replace(/(#|\?).*/,'')+'?item='+i+(more_pars?'&'+more_pars:''));
 hr.onreadystatechange=function() {
  if(hr.readyState!=4) return false;
  if(hr.status==200) {
   d.className='b_item_inline'; d.innerHTML=hr.responseText;
  }else{
   d.className='i_loading_error'; d.innerHTML='Ошибка';
  }
  if(on_completion) on_completion();
  return true;
 }
 hr.send(null);
}

function i_toggle(i,ext_pars) {
 var a = i_get_anchor(i);
 a.blur();
 var d = i_get_div(i);
 if(a_toggle_expanded(a)) {
  d.style.display='block';
  if(d.className!='i_loading' && d.className!='b_item_inline')
   i_load(i,null,ext_pars);
 }else{
  d.style.display = 'none';
 }
}

function i_click(ev,i) {
 // try {
  i_toggle(i);
  return false;
 // }catch(e) { }
 return true;
}

function ig_click(ev,g) {
 // try {
  g_open(g);
  return false;
 // }catch(e) { }
 return true;
}

function isg_click(ev,g,sg) {
 // try {
  sg_open(g,sg);
  return false;
 // }catch(e) { }
 return true;
}


function ipg_open(ev,i) {
 var s = ev_source(ev);
 if(s.nodeName=='IMG' || s.nodeName=='img')
  s=s.parentNode;
 var pars = 'height='+(window.innerHeight*3/4)+',width='+(window.innerWidth*3/4)
  +',dependent,resizable,status=no,location=no,menubar=no,toolbar=no';
 gallewin = window.open(s,'ig_win',pars);
 if(window.focus)
  gallewin.focus();
 return false;
}

function ipg_closeup(ev,s) {
 var i = document.getElementById('ig_closeup_img');
 if(!i)
  return true;
 i.src=s;
 return false;
}

function s_fire(ev) {
 try {
  document.getElementById('b_item').innerHTML='';
  document.getElementById('b_item').style.display='none';
 }catch(e) { }
 var f = document.getElementById('search_form');
 var opt='and';
 for(var o=0;o<f.opt.length;++o) {
  if(f.opt.item(o).checked) {
   opt=f.opt.item(o).value;
   break;
  }
 }
 var dt = new Date();
 var u = f.action+'?frag=frag&q='+encodeURIComponent(f.q.value)+'&opt='+opt+(f.details.checked?'&details=on':'')
  +'&cache='+dt.getTime();
 /*if(b_shown_sg) {
  b_shown_sg.className=''; b_shown_sg = null;
 }*/
 var d = document.getElementById('b_items');
 d.className='sg_loading'; /* TODO: sg -> sr? */
 d.innerHTML='Поиск...';
 var hr = get_requester();
 hr.open("GET",u);
 hr.onreadystatechange=function() {
  if(hr.readyState!=4) return false;
  if(hr.status==200) {
   d.className='b_items search_results'; d.innerHTML = hr.responseText;
  }else{
   d.className='sg_loading_error'; d.innerHTML = 'Ошибка'; /* TODO: sg -> sr? */
  }
  return true;
 }
 hr.send(null);
 return false;
}

/*
 * shopping cart
 */

function c_update() {
 var d = document.getElementById('cart_summary');
 if(!d) return;
 var s = '(пусто)';
 var i = document.getElementById('co_items');
 if(i && !isNaN(i.innerHTML)) {
  var ii = Number(i.innerHTML);
  if(ii) {
   var p = document.getElementById('co_price');
   if(p)
    s = '('+p.innerHTML+' руб.)';
  }
 }
 d.innerHTML = s;
}

function c_add(i,p,q) {
 var dt = new Date();
 var u = '?cart_op=in_add&item='+i+'&price='+p+'&qty='+q+'&cache='+dt.getTime();
 var d = document.getElementById('gd_c');
 d.className='g_loading'; d.innerHTML='Погрузка...';
 var hr = get_requester();
 hr.open("GET",u);
 hr.onreadystatechange=function() {
  if(hr.readyState!=4) return false;
  if(hr.status==200) {
   d.className='g_loaded';
   d.innerHTML = hr.responseText;
   c_update();
  }else{
   d.className='g_loading_error'; d.innerHTML = 'Ошибка';
  }
  return true;
 }
 hr.send(null);
}
function c_add_prompt(i,p,ina,dt) {
 var q = window.prompt(ina+'\012 Добавить в заказ ('+dt+'):',1);
 c_add(i,p,q);
}

function tocart_click(ev,i,p,ina,dt) {
 c_add_prompt(i,p,ina,dt);
 return false;
}

function c_contents_load() {
 try {
  document.getElementById('b_item').innerHTML='';
  document.getElementById('b_item').style.display='none';
 }catch(e) { }
 var dt = new Date();
 var u = '?cart_op=in_contents&cache='+dt.getTime();
 /*if(b_shown_sg) {
  b_shown_sg.className=''; b_shown_sg = null;
 }*/
 var d = document.getElementById('b_items');
 d.className='sg_loading'; /* TODO: sg -> cc? */
 d.innerHTML='Погрузка...';
 var hr = get_requester();
 hr.open("GET",u);
 hr.onreadystatechange=function() {
  if(hr.readyState!=4) return false;
  if(hr.status==200) {
   d.className='b_items cart_contents'; d.innerHTML = hr.responseText;
  }else{
   d.className='sg_loading_error'; d.innerHTML = 'Ошибка'; /* TODO: sg -> sr? */
  }
  return true;
 }
 hr.send(null);
}

function cart_reset(nofrontpage) {
 var dt = new Date();
 var u = '?cart_op=in_empty_cart&cache='+dt.getTime();
 var d = document.getElementById('gd_c');
 d.className='g_loading'; d.innerHTML='Разгрузка...';
 var hr = get_requester();
 hr.open("GET",u);
 hr.onreadystatechange=function() {
  if(hr.readyState!=4) return false;
  if(hr.status==200) {
   d.className='g_loaded';
   d.innerHTML = hr.responseText;
   c_update();
   if(!nofrontpage) help_click();
  }else{
   d.className='g_loading_error'; d.innerHTML='Ошибка';
  }
  return true;
 }
 hr.send(null);
}

function co_contents_click(ev) {
 c_contents_load();
 return false;
}

function co_reset_click(ev) {
 if(!confirm('Вы уверены, что хотите очистить заказ?'))
  return false;
 cart_reset();
 return false;
}

function ci_click(ev,i) {
 // try {
  i_toggle(i,'&in_cart=in_cart');
  return false;
 // }catch(e) { }
 return true;
}

function ci_update(rn,ino,p,q) {
 var qe = document.getElementById('ci_q_'+rn);
 var se = document.getElementById('ci_s_'+rn);
 var te = document.getElementById('c_total');
 var oe = document.getElementById('ci_qo_'+rn);
 qe.disabled = true;
 add_class(se,'cil_updating'); se.innerHTML='пересчёт';
 add_class(te,'cil_updating'); te.innerHTML='пересчёт';
 var dt = new Date();
 var u = '?cart_op=x_update_item&item='+ino+'&price='+p+'&qty='+q+'&cache='+dt.getTime();
 var hr = get_requester();
 hr.open("GET",u);
 hr.onreadystatechange=function() {
  if(hr.readyState!=4) return false;
  if(hr.status==200) {
   var x = hr.responseXML;
   qe.value = val_extract(x,'qty');
   se.innerHTML = val_extract(x,'subtotal');
   var t = val_extract(x,'total');
   te.innerHTML = t;
   oe.value = qe.value;
   try {
    document.getElementById('cart_summary').innerHTML='('+t+' руб.)';
    document.getElementById('co_price').innerHTML=t;
   }catch(e) { }
   remove_class(se,'cil_updating'); remove_class(se,'cil_update_error')
   remove_class(te,'cil_updating'); remove_class(te,'cil_update_error')
  }else{
   alert('Ошибка');
   qe.value = oe.value;
   se.innerHTML='Ошибка!'; remove_class(se,'cil_updating'); add_class(se,'cil_update_error');
   te.innerHTML='Ошибка!'; remove_class(te,'cil_updating'); add_class(te,'cil_update_error');
  }
  qe.disabled = false;
  return true;
 }
 hr.send(null);
}

function ciq_blur(ev,rn,ino,p) {
 var ove = document.getElementById('ci_qo_'+rn);
 var ibe = document.getElementById('ci_q_'+rn);
 if(ibe.value == ove.value)
  return true;
 if(isNaN(ibe.value)) {
  alert('Недопустимое значение');
  ibe.value = ove.value;
  return false;
 }
 var q = Number(ibe.value);
 if(q<0) {
  alert('Недопустимое значение');
  ibe.value = ove.value;
  return false;
 }
 ci_update(rn,ino,p,q);
 return true;
}

function cop_process() {
 var rv = '';
 var e = document.getElementById('cop_entity');
 if(e.value=='') {
  alert('Заполните поле "Покупатель"'); e.focus();
  return null;
 }
 rv += 'cop_entity='+encodeURIComponent(e.value);
 e = document.getElementById('cop_email');
 if(e.value=='') {
  alert('Заполните поле "Электронная почта"'); e.focus();
  return null;
 }
 if(!/^[a-z0-9_\.-]+@([a-z0-9][a-z0-9-]*\.)+[a-z]{2,4}$/.test(e.value)) {
  alert('Проверьте правильность заполнения поля "Электронная почта"'); e.focus();
  return null;
 }
 rv += '&cop_email='+encodeURIComponent(e.value);
 rv += '&cop_email_copy='+encodeURIComponent(document.getElementById('cop_email_copy').checked?'on':'off');
 e = document.getElementById('cop_contact');
 if(e.value=='') {
  alert('Заполните поле "Контактное лицо"'); e.focus();
  return null;
 }
 rv += '&cop_contact='+encodeURIComponent(e.value);
 e = document.getElementById('cop_phone');
 if(e.value=='') {
  alert('Заполните поле "Телефон"'); e.focus();
  return null;
 }
 if(!/[0-9\/\- \(\)]+/.test(e.value)) {
  alert('Проверьте правильность заполнения поля "Телефон"');
  return null;
 }
 rv += '&cop_phone='+encodeURIComponent(e.value);
 e = document.getElementById('cop_fax');
 if(e.value!='' && !/[0-9\/\- \(\)]+/.test(e.value)) {
  alert('Проверьте правильность заполнения поля "Факс"');
  return null;
 }
 rv += '&cop_fax='+encodeURIComponent(e.value);
 rv += '&cop_remarks='+encodeURIComponent(document.getElementById('cop_remarks').value);
 return rv;
}

function cop_submitten(ev) {
 var s = document.getElementById('cop_submit');
 s.disabled = true;
 var d = document.getElementById('b_items');
 var rb = cop_process();
 if(rb==null) {
  s.disabled = false;
  return false;
 }
 var hr=get_requester();
 var dt = new Date();
 if(typeof(hr.setRequestHeader)=='function') {
  hr.open("POST",'?cart_op=in_preview_order&cache='+dt.getTime());
  hr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
 }else{
  hr.open("POST",'?cart_op=in_preview_order&badbrowserpost=badbrowser&cache='+dt.getTime());
 }
 hr.onreadystatechange=function() {
  if(hr.readyState!=4) return false;
  if(hr.status==200) {
   d.innerHTML = hr.responseText;
  }else{
   alert('Ошибка');
   s.disabled=false;
  }
  return true;
 }
 hr.send(rb);
 return false;
}

function os_click(event,ecopy) {
 var u = '?cart_op=in_send_order&email_copy='+ecopy;
 var d = document.getElementById('b_items');
 d.className='sg_loading'; /* TODO: order_sending */
 d.innerHTML='Отправка...';
 var hr = get_requester();
 hr.open("GET",u);
 hr.onreadystatechange=function() {
  if(hr.readyState!=4) return false;
  if(hr.status==200) {
   d.className='b_items order_send_report'; d.innerHTML = hr.responseText;
   cart_reset(1);
  }else{
   d.className='sg_loading_error'; d.innerHTML='Ошибка'; /* TODO: order_send_error? */
  }
  return true;
 }
 hr.send(null);
 return false;
}

function oe_click(event) {
 c_contents_load();
 return false;
}

function load_frontpage() {
 try {
  document.getElementById('b_item').innerHTML='';
  document.getElementById('b_item').style.display='none';
 }catch(e) { }
 /*if(b_shown_sg) {
  b_shown_sg.className=''; b_shown_sg=null;
 }*/
 var d = document.getElementById('b_items');
 d.className='sg_loading'; d.innerHTML='Загрузка...'; /* TODO: sg ->fp ? */
 var hr = get_requester();
 hr.open("GET",'?op=frontpage');
 hr.onreadystatechange=function() {
  if(hr.readyState!=4) return false;
  if(hr.status==200) {
   d.className='b_items'; d.innerHTML=hr.responseText;
   /*if(b_shown_sg) b_shown_sg.className='';*/
  }else{
   d.className='sg_loading_error'; d.innerHTML='Ошибка'; /* TODO: sg->fp? */
  }
  return true;
 }
 hr.send(null);
 return false;
}

function help_click() {
 try {
  document.getElementById('b_item').innerHTML='';
  document.getElementById('b_item').style.display='none';
 }catch(e) { }
 /*if(b_shown_sg) {
  b_shown_sg.className=''; b_shown_sg=null;
 }*/
 var d = document.getElementById('b_items');
 d.className='sg_loading'; d.innerHTML='Загрузка...'; /* TODO: sg ->fp ? */
 var hr = get_requester();
 hr.open("GET",'?op=help');
 hr.onreadystatechange=function() {
  if(hr.readyState!=4) return false;
  if(hr.status==200) {
   d.className='b_items'; d.innerHTML=hr.responseText;
   /*if(b_shown_sg) b_shown_sg.className='';*/
  }else{
   d.className='sg_loading_error'; d.innerHTML='Ошибка'; /* TODO: sg->fp? */
  }
  return true;
 }
 hr.send(null);
 return false;
}

function filter_li() {
 document.write( '<a id="ga_f" href="#" onclick="return g_click(event,\'f\');">&#x25BA; Показывать <span id="current_filter">'+inpo_filters[inpo_filter]+'</span></a>');
 document.write( '<div style="display: none" id="gd_f" class="g_loaded"><ul id="filters_box">');
 for(var i=0;i<inpo_filters.length;++i) {
  document.write( '<li><a href="#" onclick="return filter_set('+i+');">'+inpo_filters[i]+'</a></li>');
 }
 document.write( '</ul></div>');
}

function filter_set(f) {
 inpo_filter = f;
 document.getElementById('current_filter').innerHTML = inpo_filters[inpo_filter];
 a_set_expanded(g_get_anchor('f'),false);
 g_get_div('f').style.display = 'none';
 var d = document.getElementById('b_real_groups');
 d.style.display='none'; d.innerHTML='Загрузка...';
 d.className='g_loading'; d.style.display='block';
 var hr = get_requester();
 hr.open("GET",'?filteredgroups='+inpo_filter);
 hr.onreadystatechange=function() {
  if(hr.readyState!=4) return false;
  if(hr.status==200) {
   d.className='g_loaded'; d.innerHTML=hr.responseText;
   reset_right_list();
  }else{
   d.className='g_loading_error'; d.innerHTML='Ошибка';
  }
 }
 hr.send(null);
 return false;
}

function filter_qp() {
 if(!inpo_filter)
  return '';
 return '&filter='+inpo_filter;
}

function reset_right_list() {
 var d = document.getElementById('b_items');
 d.innerHTML = '';
}
