var loading_layout = '<table class="vam b-loading w100"><tr><td class="tac"><img src="/images/loading.gif" alt="Loading..." /></td></tr></table>'
window._s25_w_stack = new Array();
document.observe("dom:loaded", function(event) {
  document.observe('click', function(event) {
    if(!event.element().ancestors || window._s25_w_stack.length == 0) return;

    var el = event.element().up('#' + window._s25_w_stack[window._s25_w_stack.length - 1].identify());
    if (!(el && el.identify() == window._s25_w_stack[window._s25_w_stack.length - 1].identify())) {
      var el = pop_out_window_stack();
      el.hide();
    }
  })
});
Object.extend(Event, {
	wheel:function (event){
		var delta = 0;
		if (!event) event = window.event;
		if (event.wheelDelta) {
			delta = event.wheelDelta/120;
			if (Prototype.Browser.Opera) { delta = -delta; }
		} else if (event.detail) { delta = -event.detail/3;	}
		return Math.round(delta); //Safari Round
	}
});

Effect.BlindRight = function(element) {
  element = $(element);
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({
    scaleContent: false,
    scaleY: false,
    scaleFrom: 0,
    duration: 0.3,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makeClipping().setStyle({width: '0px'}).show();
    },  
    afterFinishInternal: function(effect) {
      effect.element.undoClipping();
      effect.element.setStyle({
        overflow: 'auto',
        overflowX: 'hidden',
        overflowY: 'auto'
      });
    }
  }, arguments[1] || { }));
};

Effect.BlindLeft = function(element) {
  element = $(element);
  element.makeClipping();
  return new Effect.Scale(element, 0,
    Object.extend({ scaleContent: false,
      scaleY: false,
      duration: 0.3,
      restoreAfterFinish: true,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping();
      }
    }, arguments[1] || { })
  );
};

// DF1.1 :: domFunction 
// *****************************************************
// DOM scripting by brothercake -- http://www.brothercake.com/
// GNU Lesser General Public License -- http://www.gnu.org/licenses/lgpl.html
//******************************************************
//DOM-ready watcher
function domFunction(f, a)
{
var n = 0;
var t = setInterval(function()
{
  var c = true;
  n++;
  if(typeof document.getElementsByTagName != 'undefined' && (document.getElementsByTagName('body')[0] != null || document.body != null))
  {
    c = false;
    if(typeof a == 'object')
    {
      for(var i in a){
        if(
          (a[i] == 'id' && document.getElementById(i) == null)
          ||
          (a[i] == 'tag' && document.getElementsByTagName(i).length < 1)
        ) 
        { 
          c = true; 
          break; 
        }
      }
    }

    if(!c) { f(); clearInterval(t); }
  }
  if(n >= 60)
  {
    clearInterval(t);
  }
}, 250);
};




function show_menu(event, id) {
  Event.stop(event);
  var el = $('show_me_' + id);
  push_in_window_stack(el, true)
  el.show();
}

function client_login() {
  $('login_form_div').select('div.b-error').invoke('remove');
  $('login_form').request({
    onComplete: function(req){
      var v = req.responseJSON;
      if (v && v.res == true) {
        return $('login_form').submit();
      }
      if (v && v.res == false)
      {
        var err = '';
        v.err.each(function (el) {err += '<li>' + el.e + '</li>';});
        $('login_form').insert({before: '<div class="b-error"><ul class="b-error-list">' + err + '</ul></div>'});
      }
    }
  });
}

function client_register() {
  $('other_form_div').select('div.b-error').invoke('remove');
  $('register_form').request({
    onComplete: function(req){
      var v = req.responseJSON;
      if (v == null && req.responseText != null && req.responseText.empty() == false) {
        $('other_form_div').update(req.responseText);
        (function() {location.href = location.href;}).delay(3);
        return;
      }
      if (v && v.res == false)
      {
        var err = '';
        v.err.each(function (el) {err += '<li>' + el.e + '</li>';});
        $('register_form').insert({before: '<div class="b-error"><h3>' + v.caption + '</h3><ul class="b-error-list">' + err + '</ul></div>'});
      }
    }
  });
}

function client_recover() {
  $('other_form_div').select('div.b-error').invoke('remove');
  $('recover_form').request({
    onComplete: function(req){
      var v = req.responseJSON;
      if (v == null && req.responseText != null && req.responseText.empty() == false) {
        $('other_form_div').update(req.responseText);
        return;
      }
      if (v && v.res == false)
      {
        var err = '';
        v.err.each(function (el) {err += '<li>' + el.e + '</li>';});
        $('recover_form').insert({before: '<div class="b-error"><h3>' + v.caption + '</h3><ul class="b-error-list">' + err + '</ul></div>'});
      }
    }
  });
}



function show_login_form(event) {
  $('login_form_div').select('div.b-error').invoke('remove');
  $('other_form_div').hide();
  show_js_element(event, 'js_window_form');
  $('login_form_div').show();
}



function show_js_element(event, id)
{
  Event.stop(event);
  push_in_window_stack($(id));
  $(id).show();
}




function load_search_groups(id, url) {
  $('search-navigate-tech-types').select('li').invoke('addClassName', 'b-pre-rnd');
  $('s_tech_type_' + id).removeClassName('b-pre-rnd');
  var req = new Ajax.Request(url, {method: 'get',
    onCreate:   function() {
      $('top_loader').show();
      $('search-navigate-result').update('');
    },
    onComplete: function(res) {
      $('top_loader').hide();
      $('search-navigate-result').update('');
      var r = res.responseText;
      if (r == 'false' || r.strip().empty()) {$('search-navigate-groups').update('');}
      $('search-navigate-groups').update(r);
    }
  });
}

function load_search_techs(id, url)
{
  $('search-navigate-groups').select('li span').invoke('addClassName', 'b-pre-rnd');
  $('s_tgrp_' + id).removeClassName('b-pre-rnd');
  var req = new Ajax.Request(url, {method: 'get',
    onCreate:   function() {
      $('top_loader').show();
      $('search-navigate-result').update('');
    },
    onComplete: function(res) {
      $('top_loader').hide();
      var r = res.responseText; if (r == 'false' || r.strip().empty()) {return;}
      $('search-navigate-result').update(r);
    }
  });
}



function preview_spare_price(event, id, list_id, tech_id, url)
{
  Event.stop(event);
  if ($('price_info_wnd').visible()) {
    var el = pop_out_window_stack();
    el.hide();
  }
  $('price_info').update(loading_layout);
  $('price_info_wnd').show();
  push_in_window_stack($('price_info_wnd'))
  var doc = getPageSize();
  var obj = $('price_info_wnd').getDimensions()
  var scroll = getPageScroll()
  $('price_info_wnd').setStyle({
    'left': doc[2]/2-obj.width/2+'px',
    'top': (doc[3]>obj.height) ? scroll[1] + doc[3]/2-obj.height/2+'px' : scroll[1] + 10 + 'px'
  });
  new Ajax.Request(url + '/id/' + id + '/list/' + list_id + '/tech/' + tech_id, {
    method: 'get',
    onSuccess: function(resp) {
      $('price_info').update(resp.responseText);
      var obj = $('price_info_wnd').getDimensions()
      $('price_info_wnd').setStyle({
        'left': doc[2]/2-obj.width/2+'px',
        'top': (doc[3]>obj.height) ? scroll[1] + doc[3]/2-obj.height/2+'px' : scroll[1] + 10 + 'px'
      });
    }
  });
  return false;
}
function close_spare_price(event)
{
  Event.stop(event);
  if ($('price_info_wnd').visible()) {
    var el = pop_out_window_stack();
    el.hide();
  }
}

function add_in_cart(id, price, valuta) {
  cart_data.cnt  += 1;
  cart_data.summ  = my_round(cart_data.summ + my_round(price));
  var cart = get_cookie('cart');
  if (cart == null || !Object.isArray(cart.evalJSON(true))) {
    cart = [];
  } else {
    cart = cart.evalJSON(true);
  }
  cart[cart.length++] = id;
  set_cookie('cart', cart.toJSON(), '', '/', '', '' );
  if (cart_data.cnt > 1) {
    var info = cart_i18n_many.evaluate({cnt: cart_data.cnt, price: format_price(cart_data.summ, valuta)});
  } else {
    var info = cart_i18n_1.evaluate({price: format_price(cart_data.summ, valuta)});
  }
  var info = cart_template.evaluate({cart_info: info});
  update_cart({responseText: info}, 'add_to_cart_btn_' + id);
}

function update_cart(resp, from) {
  if (Object.isUndefined(from))
  {
    from = 'add_to_cart_btn';
  }
  var my_div = document.createElement('div');
  Element.extend(my_div);
  document.body.appendChild(my_div);
  my_div.style.display = 'none';
  my_div.addClassName('b-add-to-cart-fade');
//  document.body.appendChild(my_div);
  new Effect.Opacity(my_div, { to: 0.6, duration: 0.2 });
  var dy = getPageScroll();
  Element.clonePosition(my_div, from)
  my_div.show()
  var new_dest = $('cart').cumulativeOffset();
  var new_size = $('cart').getDimensions();
  new Effect.Parallel([
    new Effect.Move(my_div, {sync: true,  x: new_dest[0], y: new_dest[1] + dy[1], mode: 'absolute' }),
    new Effect.Opacity(my_div, {sync: true,  from: 0.6, to: 0 }),
    new Effect.Morph(my_div, {sync: true, style: 'width: ' + new_size.width + 'px; height: ' + new_size.height + 'px;'})

  ], {
    duration: 0.5
  });
  Element.remove.delay(0.5, my_div);
  Element.replace.delay(0.45, 'cart', resp.responseText);
}

var update_cart_info_timer = false;
function add_to_cart_done()
{
  $('add_to_cart_done').disabled = false;
  if (typeof update_cart_info_timer == "number") {
    window.clearTimeout(update_cart_info_timer);
  }
  update_cart_info_timer = setTimeout(update_cart_info, 2000);
}

function update_cart_info()
{
  if (!$('login_form'))
  {
    var req = new Ajax.Request(
      '/ajax/ru/updateCartInfo',
      {
          method: 'post',
          onCreate: function () { $('top_loader').show(); },
          on0: function () { $('top_loader').hide(); },
          onComplete: function(req) {
            $('top_loader').hide();
            $('cart').replace(req.responseText);
          }
      }
    );
  }
}



// getPageScroll()
// Returns array with x,y page scroll values.
// Core code from - quirksmode.org

function getPageScroll(){
  var yScroll;
  if (self.pageYOffset) {
    yScroll = self.pageYOffset;
  } else if (document.documentElement && document.documentElement.scrollTop){  // Explorer 6 Strict
    yScroll = document.documentElement.scrollTop;
  } else if (document.body) {// all other Explorers
    yScroll = document.body.scrollTop;
  }

  arrayPageScroll = new Array('',yScroll)
  return arrayPageScroll;
}

// getPageSize()
// Returns array with page width, height and window width, height
// Core code from - quirksmode.org
// Edit for Firefox by pHaez

function getPageSize(){
  var xScroll, yScroll;
  if (window.innerHeight && window.scrollMaxY) {
    xScroll = document.body.scrollWidth;
    yScroll = window.innerHeight + window.scrollMaxY;
  } else if (document.body.scrollHeight > document.body.offsetHeight){
    // all but Explorer Mac
    xScroll = document.body.scrollWidth;
    yScroll = document.body.scrollHeight;
  } else {
    // Explorer Mac...would also work in Explorer 6 Strict,
    // Mozilla and Safari
    xScroll = document.body.offsetWidth;
    yScroll = document.body.offsetHeight;
  }

  var windowWidth, windowHeight;
  if (self.innerHeight) {      // all except Explorer
    windowWidth = self.innerWidth;
    windowHeight = self.innerHeight;
  } else if (document.documentElement
            && document.documentElement.clientHeight) {
   // Explorer 6 Strict Mode
   windowWidth = document.documentElement.clientWidth;
   windowHeight = document.documentElement.clientHeight;
   } else if (document.body) { // other Explorers
   windowWidth = document.body.clientWidth;
   windowHeight = document.body.clientHeight;
   }

   // for small pages with total height less then height of the viewport
   if(yScroll < windowHeight){
   pageHeight = windowHeight;
   } else {
   pageHeight = yScroll;
   }

   // for small pages with total width less then width of the viewport
   if(xScroll < windowWidth){
   pageWidth = windowWidth;
   } else {
   pageWidth = xScroll;
   }

   arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight)
   return arrayPageSize;
}






function a_fill_profile_edit(prfx, id)
{
    var req = new Ajax.Request(
        '/profile/get',
        {method: 'get', parameters: {'id': id, 'el': prfx}, onComplete: r_fill_profile_edit}
    );
}
function r_fill_profile_edit(or) {
  try {
    res = or.responseText.evalJSON('true');
    var id = _get_suffix_for_input_id(or.request.parameters.el);
    if (typeof res == 'object' && res['success'] == true)
    {
      var c = $(id + '_city');
      var s = $(id + '_region');
      var m = $(id + '_country');
      c.options.length = s.options.length = 0;
      c.disabled = false;
      s.options[s.options.length] = new Option('', 0);
      $H(res['regions']).each(function(el) { s.options[s.options.length] = new Option(el[1], el[0]); if (el[0] == res['profile']['region']) { s.selectedIndex = s.options.length - 1; } })
      $H(res['cities']).each(function(el) { c.options[c.options.length] = new Option(el[1], el[0]); if (el[0] == res['profile']['city']) { c.selectedIndex = c.options.length - 1; } })
      for (var i = 0; i < m.options.length; i++) { if (m.options[i]['value'] == res['profile']['country']) { m.selectedIndex = i; } }
      $(id + '_phone').value         = res['profile']['phone'];
      $(id + '_address').value       = res['profile']['address'];
      $(id + '_post_index').value    = res['profile']['index'];
      $(id + '_inn').value           = res['profile']['inn'];
      $(id + '_kpp').value           = res['profile']['kpp'];
      $(id + '_full_name').value     = res['profile']['fio'];
      if (res['profile']['is_law'] == true)
      {
        $(id + '_inn').disabled = false;
        $(id + '_kpp').disabled = false;
        $(id + '_is_law_client').checked = true;
      }
      else
      {
        $(id + '_inn').disabled = true;
        $(id + '_kpp').disabled = true;
        $(id + '_is_law_client').checked = false;
      }
    }
  } catch (e) {}
}
function download_doc(id, label)
{
  Dialog.alert($(label + '_' + id).innerHTML, {width:520, height:210, okLabel: "I18N ЗАКРЫТЬ!", ok:function(win) {Dialog.closeInfo(); return true;}});
}
function reserve_window(id)
{
  Dialog.confirm($('bill_reserve_' + id).innerHTML, {width:320, height:160, okLabel: "Submit", ok:function(win) {win.getContent().down('form').submit(); return true;}});
}

function open_window()
{
  Dialog.confirm($('upload_form').innerHTML, {width:320, height:160, okLabel: "Submit", ok:function(win) {win.getContent().down('form').submit(); return true;}});
}

function toggle_law_profile(pref, law_name, not_law_name, region_url)
{
  try {
    var label = $$('label[for=' + pref + 'full_name]');
    label = label[0];
    if ($(pref + 'is_law_client').checked) {
      $(pref + 'inn').disabled = false;
      $(pref + 'inn').up('tr').show();
      $(pref + 'kpp').disabled = false;
      $(pref + 'kpp').up('tr').show();
      if ($F('edit_country') != 1)
      {
        $('edit_country').selectedIndex = 0;
        load_region(region_url, 'edit_country');
        $('edit_country').up('tr').hide();
      }
      label.innerHTML = law_name;
    } else {
      $(pref + 'inn').disabled = true;
      $(pref + 'inn').up('tr').hide();
      $(pref + 'kpp').disabled = true;
      $(pref + 'kpp').up('tr').hide();
      $('edit_country').up('tr').show();
      label.innerHTML = not_law_name;
    }
  } catch (e) {}
}
function client_profile(oR)
{
  try {
    res = originalRequest.responseText.evalJSON('true');
  } catch (e) {}
}
function _get_suffix_for_input_id(id)
{
  var re = /^([a-z_]+)_/i;
  var id_suffix = id.match(re);
  return id_suffix[1].toString();
}

function switch_tab(id_tab, tab_id, cntr_id)
{
  $$("#" + tab_id + " li[id]").each(function (el) {if (el.id == "tab_" + id_tab) {el.addClassName("curr_tab");} else {el.removeClassName("curr_tab");}});
  $$("#" + cntr_id + " div[id]").each(function (el) {if (el.id == "tab_data_" + id_tab) {el.show();} else {el.hide();}});
}

function load_deliveries_prices(url, valuta, free_txt)
{
  var id = $F('js_cargo_city_id');
  var req = new Ajax.Request(url, {method: 'get', parameters: {'id': id}, onComplete: function(res) {var r = res.responseText.evalJSON(true); if (r == false) {return;}
    dprice = r;
    $H(r).each(function(el) {
      $('pr_delivery_' + el[0]).update('стоимость: ' + (el[1]['price'] == 'free' ? '&mdash;' : ( el[1]['price'] == 0 ? '&mdash;' : format_price(my_round(el[1]['price']), valuta))));
      if ($('delivery_' + el[0]).checked) {
        _toggle_delivery(el[0]);
      }
    });
  }});
}

function show_js_menu(event, id)
{
  show_js_element(event, id);
}

function push_in_window_stack(el, clean)
{
  if (clean == true)
  {
    while(window._s25_w_stack.length > 0)
    {
      var tmp = pop_out_window_stack();
      tmp.hide();
    }
  }
  window._s25_w_stack.push(el);
}

function pop_out_window_stack()
{
  if (window._s25_w_stack.length > 0)
  {
    return window._s25_w_stack.pop();
  }

  return false;
}
function my_round(val) {
  return Math.round(parseFloat(val, 10)*100)/100;
}

var s25_cart_observer = Class.create({
  initialize: function(url, valuta, delivery_url, dtext){
    this._url = url;
    this._delivery_url = delivery_url;
    this._valuta = valuta;
    this._delay = $H();
    this._dtext = dtext;
    $('cart_form').select('input[type=text]').each(function (el) {
      Event.observe(el, 'keyup', this.update_count.bindAsEventListener(this));
      Event.observe(el, 'keydown', this.filter_input.bindAsEventListener(this));
    }, this);
    $('cart_form').select('input[type=checkbox]').each(function (el) {
      el.checked = !(el.disabled);
      Event.observe(el, 'click', this.toggle_cart_item.bindAsEventListener(this));
    }, this);
    this._update    = this._update_count.bindAsEventListener(this);
    this._delivery  = this._update_delivery.bindAsEventListener(this);
  },

  toggle_cart_item: function (event) {
    var el = Event.element(event);
    if (el.checked == false) {
      el.up('tr').addClassName('del');
    } else {
      el.up('tr').removeClassName('del');
    }
    this.update_total();
  },
  filter_input: function(event) {
    var code = event.keyCode;
    var stop = (
      (code >= 48 && code <= 57) ||
      (code >= 96 && code <= 105) ||
      code == Event.KEY_BACKSPACE ||
      code == Event.KEY_TAB ||
      code == Event.KEY_LEFT ||
      code == Event.KEY_UP ||
      code == Event.KEY_RIGHT ||
      code == Event.KEY_DOWN ||
      code == Event.KEY_DELETE ||
      code == Event.KEY_HOME ||
      code == Event.KEY_END ||
      code == Event.KEY_INSERT);
      if (stop == false)
      {
        Event.stop(event);
      }
    return stop;
  },
  _update_count: function(event) {
    var el = Event.element(event);
    var value = el.value;
    if (isNaN(parseInt(value, 10)))
    {
      //Так как мы запретили ввод не чисел, то NaN означает пустую строку
      value = 0;
    }
    param = 'id=' + el.id.replace('quantity_', '') + '&q=' + parseInt(value, 10);
    new Ajax.Request(this._url, {
      method: 'post',
      parameters: param,
      onSuccess: this.update.bind(this)
    });
    this.blur_count(event);
  },
  blur_count: function(event)
  {
    var el = Event.element(event);
    if (typeof this._delay.get(el.id) == "number") {
      window.clearTimeout(this._delay.get(el.id));
      this._delay.set(el.id, false);
    }
  },
  update_count: function(event) {
    var el = Event.element(event);
    if (typeof this._delay.get(el.id) == "number") {
      window.clearTimeout(this._delay.get(el.id));
      this._delay.set(el.id, false);
    }
    if (el.value == 0 || el.value.strip().empty() == true)
    {
      return;
    }
    var id = el.id.replace('quantity_', '');
    var q  =  parseInt(el.value, 10);
    $('part_total_' + id).update(format_price(my_round($F('part_price_' + id) * q), this._valuta));
    this.update_total();

    this._delay.set(el.id, this._update.delay(1, event))
  },
  update: function(t) {
    if (t.responseText.indexOf('false') < 0)
    {
      var id = t.request.parameters.id;
      var q = t.request.parameters.q;
      if (q > 0)
      {
        $('part_total_' + id).update(format_price(my_round($F('part_price_' + id) * q), this._valuta));
      }
      else
      {
        new Effect.Parallel([
          new Effect.Highlight('nom_' + id, {sync: true}),
          new Effect.Fade('nom_' + id, {sync: true})
        ], {
          duration: 0.5
        });
      }
    }
    this.update_total();
  },

  count_delivery: function() {
    var r = '';
    $('cart_form').select('input[type=text]').each(function (el) {
      var q  = parseInt(el.value, 10);
      var id = el.id.replace('quantity_', '');
      if (!isNaN(q) && $('tgl_cart_' + id).checked)
      {
        r += 'data[' + id + ']=' + q + '&';
      }
    })
    new Ajax.Request(this._delivery_url, {
      method: 'post',
      parameters: r,
      onSuccess: this._delivery
    });
  },

  _update_delivery: function(res) {
    var v = res.responseJSON;

    if (v == false) {
      return false;
    }
    var d = v.details, row = $('delivery_data'), html = '', phtml = '';
    for (var i = 0; i < d.length; i++) {
      html += '<p>' + this._dtext + ' (' + d[i].country + '):</p>';
      phtml += '<p>' + ((d[i].summ == 'free_delivery') ? 'бесплатно' : format_price(d[i].summ, this._valuta)) + '</p>';
      
    }
    row.down('td').update(html);
    row.down('td').next().update(phtml);
    $('total_cart').update(format_price(my_round(v.cart) + my_round(v.delivery), this._valuta))
  },

  update_total: function() {
    var total = 0;
    $('cart_form').select('input[type=text]').each(function (el) {
      var q = parseInt(el.value, 10);
      if (isNaN(q))
      {
        //Так как мы запретили ввод не чисел, то NaN означает пустую строку
        q = el.value = 0;
      }
      var id = el.id.replace('quantity_', '');
      if ($('tgl_cart_' + id).checked) {
        total += my_round($F('part_price_' + id) * q);
      }
    })
    $('cart_list_total').update(format_price(my_round(total), this._valuta));
    this.count_delivery();
  }
});

function format_price(nStr, valuta) {
  x = nStr.toString().split('.');
  x1 = x[0];
  x2 = x.length > 1 ? (s25_i18n.currency[valuta].dec_delimeter + x[1] + ((x[1].length == 1) ? '0' : '')) : '';
  var rgx = /(\d+)(\d{3})/;
  while (rgx.test(x1)) {
    x1 = x1.replace(rgx, '$1' + s25_i18n.currency[valuta].thousand_delimeter + '$2');
  }
  if (s25_i18n.currency[valuta].sign_position == 'before')
  {
    return s25_i18n.currency[valuta].curr_sign + ' ' + x1 + x2;
  }
  else
  {
    return x1 + x2 + ' ' + s25_i18n.currency[valuta].curr_sign;
  }
}

function num2str(n, form1, form2, form5)
{
  n = Math.abs(n) % 100;
  n1 = n % 10;
  if (n > 10 && n < 20) return form5;
  if (n1 > 1 && n1 < 5) return form2;
  if (n1 == 1) return form1;
  return form5;
}

function multiselect_create(element, table, form, values, legend) {
    var filtr_status = new Control.SelectMultiple(element, table, {
      checkboxSelector: 'table.select_multiple_table tr td input[type=checkbox]',
      nameSelector: 'table.select_multiple_table tr td.select_multiple_name label',
      multipleValue: [values],
      overflowLength: 2,
      overflowString: function(str) {str = (str.indexOf(',') != -1) ? str.substr(0, str.indexOf(',')) + ', ...' : str; return str.truncate(); },
      afterChange: function(){
        if(this && this.setSelectedRows)
          this.setSelectedRows();
        var cnt = (this ? this.numberOfCheckedBoxes : 0);
        if (cnt > 0) {
          var str = $(element).options[$(element).options.selectedIndex].innerHTML;
          $(element + '_open').down('span').update(str);
          $(element + '_open').down('div.legend').show();
        } else {
          $(element + '_open').down('span').update(legend);
          $(element + '_open').down('div.legend').hide();
        }
      }
    });


    //adds and removes highlighting from table rows
    filtr_status.setSelectedRows = function(){
      this.checkboxes.each(function(checkbox){
        var tr = $(checkbox.parentNode.parentNode);
        tr.removeClassName('selected');
        if(checkbox.checked)
          tr.addClassName('selected');
      });
    }.bind(filtr_status);

    filtr_status.checkboxes.each(function(checkbox){
      $(checkbox).observe('click',filtr_status.setSelectedRows);
    });
    filtr_status.setSelectedRows();

    //link open and closing
    $(element + '_open').observe('click',function(event){
      if ($(table).visible())
      {
        pop_out_window_stack();
      }
      else
      {
        push_in_window_stack($(table), true);
      }
      this.container.toggle();
      Event.stop(event);
      return false;
    }.bindAsEventListener(filtr_status));

    $(element + '_close').observe('click',function(event){
      if ($(table).visible())
      {
        pop_out_window_stack();
      }
      else
      {
        push_in_window_stack($(table), true);
      }
      this.container.toggle();
      Event.stop(event);
      $(form).submit();
      return false;
    }.bindAsEventListener(filtr_status));
}

function message_validate()
{
  var show = true;
  if ($F('message_text').strip().empty())
  {
    show = false;
  }
  if (show)
  {
    $('post_message_disabled').hide();
    $('post_message_enabled').show();
  }
  else
  {
    $('post_message_disabled').show();
    $('post_message_enabled').hide();
  }
}

function message_quote(id)
{
  var txt = get_quote();
  if (txt.toString().empty())
  {
   txt = '[quote="' +
    $('msg_author_' + id).innerHTML.stripTags().strip() + '"]' +
    $('mquote_' + id).value.stripTags().strip() + '[/quote]';
    $('message_text').value += txt + "\n";
  }
  else
  {
    $('message_text').value += '[quote="' +
      $('msg_author_' + id).innerHTML.stripTags().strip() + '"]' + txt + "[/quote]\n";
  }
  $('message_text').scrollTo();
  set_caret_pos($('message_text'), $F('message_text').length);
}

function get_quote()
{
  var txt = '';
  if (window.getSelection)
  {
    txt = window.getSelection();
  }
  else if (document.getSelection)
  {
    txt = document.getSelection();
  }
  else if (document.selection)
  {
    txt = document.selection.createRange().text;
  }
  else 
  {
    return false;
  }
  return txt;
}

function get_caret_pos(el)
{
  var pos = 0;
  if (Prototype.Browser.IE) {
    var sel = document.selection.createRange();
    sel.moveStart ('character', -el.value.length);
    pos = oSel.text.length;
  } else {
    pos = el.selectionEnd;
  }
  return pos;
}

function set_caret_pos(el, pos)
{
  if (Prototype.Browser.IE) {
    var sel = document.selection.createRange();
    sel.moveStart ('character', -el.value.length);
    sel.moveStart ('character', pos);
    sel.moveEnd ('character', 0);
    sel.select ();
  } else {
    el.selectionStart = pos;
    el.selectionEnd = pos;
  }
  el.focus();
}

function send_message(fill_message_text)
{
  var text = $F('message_text').strip();
  if (text.empty())
  {
    alert(fill_message_text);
    return false;
  }
  if (Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5))==6)
  {
    //IE6 и моя кривая вёрстка не уживаются вместе.
    return $('new_message_form').submit();
  }

  $('new_message_form').request({
    onCreate: function () {
      $('top_loader').show();
    },
    onComplete: function(req) {
      $('top_loader').hide();
      var v = req.responseJSON;
      if (v === false) {
        alert('error');
      } else {
        Element.insert($('messages_all_wrap'), {bottom: req.responseText});
        $('messages_all_wrap').show();
        $('message_text').value = '';
        message_validate();
      }
    }
  })
}

var s25_reorder = Class.create({
  initialize: function(urls){
    this._urls = urls;
    var tbl = $('order_subtotal');
    this.timeout = null;
    this.els = {
      'spare_row': tbl.down('tr'),
      'tbody': tbl.down('tbody'),
      'spare_price': tbl.down('tr').down('td').next('td'),
      'total_price': tbl.down('tfoot').down('tr').down('td').next('td')
    }
    this.delivery_row_tpl = new Template('<tr><td><p>Доставка:</p> <p class="del i-fs11">#{shipper}</p> </td>'
                                         + '<td class="tar"><p>#{price}</p></td></tr>');
    this.qt_tpl = new Template('<div class="del i-fs11 pr2m">в упаковке<br/>#{qt}&nbsp;шт.</div>');
    $$('#change_cart_form div.h-submit-small input[type=checkbox]').each(function(el) {el.checked = true;});

    $('change_cart_form').select('tr input[type=checkbox]').each(function (el) {
      el.checked = (!el.disabled && !el.hasClassName('ch-off'));
      Event.observe(el, 'click', this.toggle_item.bindAsEventListener(this));
    }, this);

    this._update_qt = this.update_qt.bindAsEventListener(this);
    $('change_cart_form').select('tr input[type=text]').each(function (el) {
      Event.observe(el, 'keyup', this._update_qt);
      Event.observe(el, 'blur', this._update_qt);
    }, this);

    $('change_cart_form').select('select').each(function (el) {
      Event.observe(el, 'change', this.change_price_sel.bindAsEventListener(this));
    }, this);

    $('change_cart_form').select('.b-shdw li a').each(function (el) {
      Event.observe(el, 'click', this.change_price.bindAsEventListener(this));
    }, this);

    $$('#change_delivery_tbl input[type=radio]').each(function(el) {
      Event.observe(el, 'click', this.delivery_toggle.bindAsEventListener(this));
      el.checked = (el.up('tr').hasClassName('current'));
    }, this);

    this._responce  = this.responce.bindAsEventListener(this);
    this._update_total = this.update_total.bindAsEventListener(this);
    this._update_summ  = this.update_summ_for_timeout.bindAsEventListener(this);
  },

  delivery_toggle: function () {
    $$('#change_delivery_tbl input[type=radio]').each(function(el) {
      if (el.checked) {
        el.up('tr').addClassName('current');
      } else {
        el.up('tr').removeClassName('current');
      }
    }, this);
    this._update_summ();
  },

  update_qt: function(event)
  {
    Event.stop(event);
    var el = Event.element(event);
    var id = el.id.replace('iqt_', '');
    this._update_quantity(id);
  },

  _update_quantity: function(id)
  {
    var el = $('iqt_' + id);
    var qt = parseInt($F(el), 10);
    var pr = parseInt($F('nom_price_' + id), 10);
    if (isNaN(qt) || qt <= 0 || isNaN(pr) || pr <= 0)
    {
      return false;
    }
    $('itotal_' + id).update(format_price(my_round(qt * pr), 'RUB'));
    this.update_summ();
  },

  update_summ: function()
  {
    if (this.timeout)
    {
      window.clearTimeout(this.timeout);
    }
    this.timeout = this._update_summ.delay(1);
  },

  update_summ_for_timeout: function() {
    var params = '';
    $$('input[name=delivery]').each(function(el) {
      if ((el.type == 'radio' && el.checked) || (el.type == 'hidden'))
      {
         params += 'delivery=' + el.value;
      }
    });
    $('change_cart_form').select('tr input[type=text]').each(function (el) {
      var qt = parseInt($F(el), 10);
      var id = el.id.replace('iqt_', '');
      if (isNaN(qt) || qt <= 0) {return false;}
      if ($('pselect_' + id) && $('tgl_cart_' + id) && $('tgl_cart_' + id).checked) {
        params += '&data[' + id + '][q]=' + qt + '&data[' + id + '][p]=' + $F('pselect_' + id);
      }
    });
    new Ajax.Request(this._urls.all, {
      parameters: params,
      onCreate:  function() {$('top_loader').show();},
      onSuccess: this._update_total
    });
  },

  update_total: function (req) {
    $('top_loader').hide();
    var res = req.responseJSON;
    if (res.res == false)
    {
      return false;
    }
    this.els.spare_price.update(format_price(my_round(res.cart), 'RUB'));
    this.els.total_price.update(format_price(my_round(res.cart + res.delivery), 'RUB'));
    this.els.spare_row.nextSiblings().invoke('remove');
    res.details.each(function(el) {
      var summ = my_round(el.summ);
      if (!isNaN(summ) && summ >= 0)
      {
        var tr = this.delivery_row_tpl.evaluate({
          country: el.country,
          shipper: el.shipper,
          price: summ > 0 ? format_price(summ, 'RUB') : '&mdash;'
        });
        Element.insert(this.els.tbody, tr);
      }
    }, this);
  },

  responce: function(req) {
    $('top_loader').hide();
    var v = req.responseJSON;
    var p = req.request.parameters;
    if (!v || v.res == false) {
      return false;
    }
    $('nom_price_' + p.part).value = my_round(v.p);
    $('sh_for_' + p.part).update(v.n);
    $('iprice_' + p.part).update(format_price(my_round(v.p), v.v) + ' &times;');
    this.update_summ();
    if ($('iqt_' + p.part).next('div')) {
      $('iqt_' + p.part).next('div').remove();
    }
    $('iqt_' + p.part).next('span').update((v.m > 1 ? 'уп.' : 'шт.'));
    if (v.m > 1) {
      Element.insert($('iqt_' + p.part).next('span'), {after: this.qt_tpl.evaluate({qt: v.m})});
    }
    this._update_quantity(p.part);
  },

  change_price_sel: function(event) {
    Event.stop(event);
    var el = Event.findElement(event, 'select');

    var params = el.id.match(/([0-9]+)/gi);
    if (params.length < 1) {return false;}

    new Ajax.Request(this._urls.price, {
      parameters: {id: $F(el), part: params[0]},
      onCreate:  function() {$('top_loader').show();},
      onSuccess: this._responce
    });
  },

  change_price: function(event) {
    Event.stop(event);
    var el = Event.element(event);
    var wnd = pop_out_window_stack();
    if (wnd != false) {wnd.hide();}

    var params = el.id.match(/([0-9]+)/gi);
    if (params.length < 2) {return false;}

    var sel = $('pselect_' + params[0]);
    for (var i = 0, len = sel.options.length; i < len; i++) {
      if (sel.options[i].value == params[1]) {
        sel.selectedIndex = i;
      }
    }
    new Ajax.Request(this._urls.price, {
      parameters: {id: params[1], part: params[0]},
      onCreate:  function() {$('top_loader').show();},
      onSuccess: this._responce
    });
  },
  toggle_item: function (event) {
    var el = Event.element(event);
    if (el.checked == false) {
      el.up('tr').addClassName('del');
    } else {
      el.up('tr').removeClassName('del');
    }
    this.update_summ();
  }
});

/**
 * Реализует поведение у полей ввода, при котором по старту ввода убирается подсветка ошибки.
 * В качестве параметра принимает id элемента, дочерние input'ы которого должны перенять поведение. 
 * @param id
 * @return
 */
function clear_class_on_keyup(id)
{
  var clr_fnc = function(event) {
    var el = Event.element(event); 
    if (el.up('.has_error')) {
      el.up('.has_error').removeClassName('has_error');
    }
  }
  $$('#' + id + ' input[type=text]').each(function(el) {
    Event.observe(el, 'keyup', clr_fnc);
  });
  $$('#' + id + ' input[type=checkbox]').each(function(el) {
    Event.observe(el, 'change', clr_fnc);
  });
  $$('#' + id + ' input[type=radio]').each(function(el) {
    Event.observe(el, 'change', clr_fnc);
  });
  $$('#' + id + ' select').each(function(el) {
    Event.observe(el, 'keyup', clr_fnc);
  });
}
function check_city_input(url, id, location, autocomplete_object, check_delivery)
{
  var v = $F(id).strip();
  if (v.empty()) {
    $(id + '_name').value = '';
    $(id + '_id').value = '';
    $(location).hide().update('');
    if (Object.isFunction(check_delivery)) {check_delivery.delay(0.5);}
  }
  if (v.empty() || v == $F(id + '_name').strip()) {
    return false;
  }

  new Ajax.Request(url, {
    parameters: {'name': v},
    onCreate: function() {
      $('top_loader').show();
    },
    onComplete: function (req) {
      $('top_loader').hide();
      var r = req.responseJSON;
      if (r.res == false)
      {
        $(location).hide();
        $(id + '_id').value = '';
        return false;
      } else if (r.multi == true)
      {
        $(id).focus();
        autocomplete_object.changed = true;
        autocomplete_object.hasFocus = true;
 
         if(autocomplete_object.observer) clearTimeout(autocomplete_object.observer);
         autocomplete_object.observer =
           setTimeout(autocomplete_object.onObserverEvent.bind(autocomplete_object), autocomplete_object.options.frequency*1000);
        return false;
      }
      $(id).value = r.name;
      $(id + '_name').value = r.name;
      $(id + '_id').value = r.id;
      $(location).update(r.loc).show();
      if (Object.isFunction(check_delivery)) {check_delivery.delay(0.5);}
    }
  });
}

//============================================================
//
// @option link		(id or Element) - button, clicking on which starts expansion of menu
// @option label	(id or Element) - replaces button to simulate it is inactive
// @option list		(id or Element) - expanding menu list
// @option duration (number)      - duration of effects
//
//============================================================

var S25_BlindUpDownMenu = Class.create({
  initialize: function (options)
  {
    this.allow_expand    = true;
    this.allow_collapse  = false;

    this.link     = $(options['link']);
    this.label    = $(options['label']);
    this.submenu_container  = $(options['list']);
    this.duration = options['duration'] || 0.3;

    var _this        = this;
    var link_onclick = function(event)
    {
      if (_this.allow_expand)
      {
        _this.allow_expand = false;
        event.stop();
    
        _this.link.hide();
        _this.label.setStyle('display: inline;');
    
        _this.submenu_container.hide();
        _this.submenu_container.removeClassName('hide-js');
        
        new Effect.BlindDown(
          _this.submenu_container.readAttribute('id'),
          {
            afterFinish: function() {_this.allow_collapse = true;},
            duration: _this.duration
          }
        );

        S25_BlindUpDownMenu.list.each(function(menu){
          menu.collapse();
        });
      }
    };

    this.link.observe('click', link_onclick);
    
    // Глобальный список подменюшек
    if (!Object.isArray(S25_BlindUpDownMenu.list))
    {
    	S25_BlindUpDownMenu.list = [];
    }
    S25_BlindUpDownMenu.list.push(this);
  },

  collapse: function()
  {
    if (this.allow_collapse)
    {
      this.allow_collapse = false;

      this.link.show();
      this.label.hide();

      new Effect.BlindUp(
        this.submenu_container.readAttribute('id'),
        {
          afterFinish: function() {_this.allow_expand = true;},
          duration: this.duration
        }
      )
    }
  }
});


function toggle_reason_inp(id) {
  $$('#cancel_form tr.j-show').each(function(el) {el.removeClassName('j-show');});
  $('reason_' + id).up('tr').addClassName('j-show');
}

function tech_filter_apply(type, callback)
{
  $('tech_filtr_form').request({
    onComplete: function(req) {
      $('tech_items_content').update(req.responseText);
      $('top_loader').hide();
      if (Object.isFunction(callback))
      {
        callback(type);
      }
    },
    on0 : function() {
      $('top_loader').hide();
    }
  });
}
function show_more(id) {
  var el = $(id);
  el.hide();
  el.next().show(); 
}

function get_tech_filtr_params(type)
{
  try {
  new Ajax.Request(filter_params_get_url, {
    method: 'get',
    parameters: $('tech_filtr_form').serialize(),
    onComplete: function(req) {
      var v = req.responseJSON;
      if (v.res == false)
      {
        return false;
      }
      $H(v.values).each(function(el){
        if (el.key != type && el.value.min > 0 && el.value.max > el.value.min) {
          trackbar.getObject('oTrackbar_' + el.key).set_left_val(el.value.min);
          trackbar.getObject('oTrackbar_' + el.key).set_right_val(el.value.max);
        }
      });
    }
  });
  } catch(e) {
    console.log(e);
  }
}

function accessory_filter_apply(type, callback)
{
  $('top_loader').show();
  $('accessory_filter_form').request({
    onComplete: function(req) {
      $('accessories_content').update(req.responseText);
      $('top_loader').hide();
      if (Object.isFunction(callback))
      {
        callback(type);
      }
    },
    on0 : function() {
      $('top_loader').hide();
    }
  });
  var res = [];
  $$('#accessory_filter_form input').each(
    function (el) {
      switch (el.type)
      {
        case 'checkbox':
          if (el.checked) {
            res[res.length++] = {i: el.id, v: 1};
          }
          break;
        case 'hidden':
          res[res.length++] = {i: el.id, v: el.value};
          break;
      }
    }
  );
  var opened_block = 0;
  $$('div.accuracy').each(function(el){
    if (el.visible()) {
      opened_block = el.id.replace('accessory_appl_', '');
    }
  });
  set_cookie('acc_f', [{g: acc_group_id, f: res, b: opened_block}].toJSON(), false, '/');
}

function init_accessory_filter() {
  var res = get_cookie('acc_f');
  if (res == null || res.empty()) {return false;}
  try {
    res = res.evalJSON(true);
    res = res[0];
    if (res.g != acc_group_id) {delete_cookie('acc_f', '/');return false;}
    if (location.href.indexOf('?') == -1) {return false;}
    if (res.b > 0) {
      show_accessory_appl(res.b);
    }
    res.f.each(function(v){
      var el = $(v.i);
      if (el) {
        if (el.type == 'checkbox') {
          el.checked = true;
        }
        if (el.type == 'hidden') {
          el.value = v.v;
        }
      }
    });
  } catch (e) {
    delete_cookie('acc_f', '/');
    return false;
  }
}

function show_price_chooser(evt, el_id, text) {
  Event.stop(evt);
  var prices = price_json.evalJSON(true);
  var sh     = shippers.evalJSON(true);
  var data   = $F('sval_' + el_id).evalJSON(true);
  var tpl = new Template('<h1 class="fs16">#{number}&nbsp;&mdash; #{name}</h1> <p>#{subheader}</p>');
  var html = tpl.evaluate({subheader: text.subheader, number: data.number, name: data.name});

  var spare = new Template('<table class="w100 list-tbl b-add-cart vat"><thead><tr class="i-fs11">'
    + '<td>Поставщик и страна поставки</td><td>Цена за единицу</td><td>&nbsp;</td></tr></thead>'
    + '<tbody>#{many_data}</tbody></table>');
  
  var item = new Template('<tr><td><p class="i-fs16">#{shipper}</p></td><td>#{price_text} #{complect}</td><td class="b-cart-add-btn">'
    + '<span class="b-rnd-btn"><a onclick="add_in_cart(#{price_id}, #{price}, \'#{valuta}\');add_to_cart_done();return false;" '
    + 'class="b-rnd-btn" id="add_to_cart_btn_#{price_id}" href="#">#{in_cart}</a></span></td></tr>');
  
  var tmp = '';
  prices[data.id].each(function(el){
    tmp += item.evaluate({
      shipper: sh[el.shipper_id].name,
      price_text: '<p class="i-fs16">1 ' + (el.min_qt == 1 || 0 || '' ? 'шт.' : 'уп.') + ' &times; ' + format_price(el.price, text.valuta) + '</p>',
      price: el.price,
      price_id: el.price_id,
      valuta: text.valuta,
      in_cart: text.in_cart,
      complect: (el.min_qt == 1 || 0 || '') ? text.complect_1 : text.complect_many.evaluate({cnt: el.min_qt})
    });
  });
  html += spare.evaluate({
    shipper_text: text.shipper_text,
    price_text: text.price_text,
    many_data: tmp
  });

  if (data.qt > 1)
  {
    html += text.in_block_many.evaluate({
      group: text.group_name.strip(),
      cnt_spares: data.qt + num2str(data.qt, ' деталь', ' детали', ' деталей'),
      name: data.name.strip()
    });
  }

  var form = new Template(' <form method="get" action="#{action_form}"><p class="h-submit"><input type="submit" id="add_to_cart_done" value="#{submit_text}" disabled="disabled">'
    + ' #{or_text} <a href="#{continue_form}" class="js" onclick="close_spare_price(event); return false;">#{continue_text}</a></p></form>');

  html +=  form.evaluate({
    action_form: text.cart_action,
    submit_text: text.submit_text,
    or_text: text.or_text,
    continue_text: text.continue_text,
    continue_form: text.continue_action
  });

  if ($('price_info_wnd').visible()) {
    var el = pop_out_window_stack();
    el.hide();
  }
  push_in_window_stack($('price_info_wnd'))
  var doc = getPageSize();
  var scroll = getPageScroll()
  $('price_info').update(html);
  $('price_info_wnd').show();
  var obj = $('price_info_wnd').getDimensions()
  $('price_info_wnd').setStyle({
    'left': doc[2]/2-obj.width/2+'px',
    'top': (doc[3]>obj.height) ? scroll[1] + doc[3]/2-obj.height/2+'px' : scroll[1] + 10 + 'px'
  });
  if (Object.isUndefined(cart_data) == false && Object.isUndefined(cart_data.cnt) == false && cart_data.cnt > 0)
  {
    add_to_cart_done();
  }
  return false;
}

function toggle_delivery(evt) {
  var el = Event.element(evt);
  var id = el.value;
  _toggle_delivery(id);
}
function _toggle_delivery(id) {
  try {
    new Ajax.Request(url_update_cart_total, {
      "parameters": { delivery: id, city: $F("js_cargo_city_id") },
      onCreate: function() {$('top_loader').show()},
      on0: function() {$('top_loader').hide()},
      onComplete: function (req) {
        $('top_loader').hide();
        $("order_subtotal").update(req.responseText);
      }
    });
    if (typeof deliveries_data == "string" && $('delivery_info')) {
      var data = deliveries_data.evalJSON(true);
      $('delivery_info').update(delivery_info_template.evaluate(data[id]));
    }
  }catch(e){}
}
function update_incart_qt(id)
{
  var s = $('add_to_cart_btn_' + id).down('span');
  if (Object.isUndefined(s) == true) {return;}
  var qt = s.innerHTML.replace(/[^0-9]+/gi, '');
  if (qt.empty() || isNaN(parseInt(qt, 10))) {
    qt = 0;
  } else {
    qt = parseInt(qt, 10);
  }
  qt += 1;
  if (arguments.length == 1)
  {
    s.update(' &nbsp;' + qt);
  } else {
    s.update(qt);
  }
}
function show_accessory_appl(id) {
  $$('div.applicability div.accuracy').each(function(el) {
    if (el.visible()) {
      hide_accessory_appl(el.id.replace('accessory_appl_', ''), false);
    }
  });
  $('accessory_appl_toggle_' + id).hide();
  $('accessory_appl_' + id).show();
  $$('#accessory_appl_' + id + ' input[type=hidden]').each(function(el){el.disabled=false;});
  accessory_filter_apply();
}
function hide_accessory_appl(id) {
  $('accessory_appl_toggle_' + id).show();
  $('accessory_appl_' + id).hide();
  $$('#accessory_appl_' + id + ' input[type=hidden]').each(function(el){el.disabled=true;});
  $$('#accessory_appl_' + id + ' input[type=checkbox]').each(function(el) {el.checked=false;});
  trackbar.getObject('oTrackbar_power' + id).reset();
  if (arguments.length != 2 || arguments[1] != false)
  {
    accessory_filter_apply();
  }
}

function visa_form_validate() {
  var res = true;
  var n = $F('card_number');
  if (n.replace(/[-\s]+/g, '').match(/^[\d]{16,}$/g) == null)
  {
    res = false;
  }
  var m = parseInt($F('card_month'), 10);
  if (res && (isNaN(m) || m <= 0 || m > 12))
  {
    res = false;
  }

  var y = parseInt($F('card_year'), 10);
  if (res && (isNaN(y) || y <= 0))
  {
    res = false;
  }

  var c = $F('card_code');
  if (res && c.replace(/[-\s]+/g, '').match(/^[\d]{3,4}$/g) == null)
  {
    res = false;
  }
  if (res) {
    $('visa_submit_enabled').show();
    $('visa_submit_disabled').hide();
  } else {
    $('visa_submit_enabled').hide();
    $('visa_submit_disabled').show();
  }
}

function qiwi_form_validate()
{
  var res = false;

  var p = $F('phone_number');
  if (p.replace(/[^\d]+/g, '').match(/^\d?9[\d]{9}$/g) == null)
  {
    res = true;
  }
  $('qiwi_phone_submit').disabled = res;
}

function clear_cart(url) {
  if (confirm('Очистить корзину?') == false) {
    return;
  }
  new Ajax.Request(url, {
    method: 'get',
    onCreate: function() {$('top_loader').show();},
    on0: function() {$('top_loader').hide();},
    onComplete: function (req) {
      $('top_loader').hide();
      $('cart_content').update(req.responseText);
    }
  });

}
function toggle_part_groups_sidebar() {
  if ($('left_frame').visible() == false)
  {
    $('right_frame').removeClassName('left_hided');
    Effect.BlindRight('left_frame');
  } else {
    $('right_frame').addClassName('left_hided');
    Effect.BlindLeft('left_frame');
  }
}

function scroll_to_group(grp_id) {
  var offsetTop = $('part_grp_' + grp_id).cumulativeOffset()[1];
  var h = $('left_frame').getDimensions().height;
  if (h <= offsetTop || (offsetTop - $('left_frame').scrollTop < 48))
  {
    $('left_frame').scrollTop = (offsetTop - 48);
  }
}
