$ = function(id) {
    return document.getElementById(id);
}

function getElementsByClassName(strClass, strTag, objContElm) {
  strTag = strTag || "*";
  objContElm = objContElm || document;
  var objColl = objContElm.getElementsByTagName(strTag);
  if (!objColl.length &&  strTag == "*" &&  objContElm.all) objColl = objContElm.all;
  var arr = new Array();
  var delim = strClass.indexOf('|') != -1  ? '|' : ' ';
  var arrClass = strClass.split(delim);
  for (var i = 0, j = objColl.length; i < j; i++) {
    var arrObjClass = objColl[i].className.split(' ');
    if (delim == ' ' && arrClass.length > arrObjClass.length) continue;
    var c = 0;
    comparisonLoop:
    for (var k = 0, l = arrObjClass.length; k < l; k++) {
      for (var m = 0, n = arrClass.length; m < n; m++) {
        if (arrClass[m] == arrObjClass[k]) c++;
        if (( delim == '|' && c == 1) || (delim == ' ' && c == arrClass.length)) {
          arr.push(objColl[i]);
          break comparisonLoop;
        }
      }
    }
  }
  return arr;
}

function addCart(url, id) {
    url += '&id=' + parseInt(id);
    var rbuttons = getElementsByClassName("r" + id, 'input');
    if (rbuttons.length > 1) { //then it's a radio-buttons collection
        var price_is_ok = false;
        for (i in rbuttons) {
            if (rbuttons[i].checked === true) {
                price_is_ok = true;
                url += "&price=" + rbuttons[i].value.toString();
                break;
            } else
                price_is_ok = false;

        }
    } else { //then there's only one price and the element is an <input type="hidden" />
        var price_is_ok = true;
        url += "&price=" + rbuttons[0].value.toString();
    }
    if (price_is_ok) { //price is selected
        var req = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
        req.onreadystatechange = function() {
            switch (req.readyState) {
                case 1: case 2: case 3:
                    $('lo').innerHTML = '<span class="lo-txt">Обновление корзины...</span>';
                break;
                case 4:
                       $('cart-goods').innerHTML = req.responseText;
                    $('lo').innerHTML = '';
                break;
            }
        }
        req.open("GET", url, true);
        req.setRequestHeader("Content-type", "application/x-www-form-urlencoded, charset=utf-8");
        req.setRequestHeader("Connection", "close");
        req.send(null);
    } else
        alert('Скажи "НЕТ!" халяве - не забудь выбрать цену! (-:');
}

function cartAction(url, act, id, el, price) {
    var req = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    req.onreadystatechange = function() {
        switch (req.readyState) {
            case 1: case 2: case 3:
                $('lo').innerHTML = '<span class="lo-txt">Обновление корзины...</span>';
            break;
            case 4:
                if (act == 'plus') {
                    $('number-' + id + '-' + price).innerHTML = parseInt($('number-' + id + '-' + price).innerHTML) + 1;
                    $('info').innerHTML = req.responseText;
                } else {
                    if (req.responseText.match(/none/)) {
                        showHide('plist-content');
                        $('cart-goods').innerHTML = '<div id="info"><div class="cart-empty"></div><br /><b>Корзина пуста</b></div>';
                    } else {
                        if (act == 'minus') {
                            if (parseInt($('number-' + id + '-' + price).innerHTML) - 1 > 0) {
                                $('number-' + id + '-' + price).innerHTML = parseInt($('number-' + id + '-' + price).innerHTML) - 1;
                                $('info').innerHTML = req.responseText;
                            } else {
                                 $('tr-' + id + '-' + price).parentNode.removeChild($('tr-' + id + '-' + price));
                                 $('info').innerHTML = req.responseText;
                            }
                        } else if (act == 'delete') {
                            $('tr-' + id + '-' + price).parentNode.removeChild($('tr-' + id + '-' + price));
                            $('info').innerHTML = req.responseText;
                        }
                    }
                }
                $('lo').innerHTML = '';
            break;
        }
    }
        url += '&type=' + act;
        req.open("GET", url, true);
        req.setRequestHeader("Content-type", "application/x-www-form-urlencoded, charset=utf-8");
        req.setRequestHeader("Connection", "close");
        req.send(null);
}

function order(url) {
    $('product').className = 'product';
    var req = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    req.onreadystatechange = function() {
        switch (req.readyState) {
            case 1: case 2: case 3:
                $('lo').innerHTML = '<span class="lo-txt">Обработка данных...</span>';
            break;
            case 4:
                $('product').innerHTML = req.responseText;
                $('lo').innerHTML = '';
            break;
        }
    }
        req.open("GET", url, true);
        req.setRequestHeader("Content-type", "application/x-www-form-urlencoded, charset=utf-8");
        req.setRequestHeader("Connection", "close");
        req.send(null);
}

function emptyCart(url) {
    var req = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    req.onreadystatechange = function() {
        switch (req.readyState) {
            case 1: case 2: case 3:
                $('lo').innerHTML = '<span class="lo-txt">Очистка корзины...</span>';
            break;
            case 4:
                $('cart-goods').innerHTML = req.responseText;
                $('product').innerHTML = '';
                $('lo').innerHTML = '';
            break;
        }
    }
        req.open("GET", url, true);
        req.setRequestHeader("Content-type", "application/x-www-form-urlencoded, charset=utf-8");
        req.setRequestHeader("Connection", "close");
        req.send(null);
}

function showHide(id) {
    if ($(id).style.display == 'block') {
        $(id).style.display = 'none';
    } else {
        $(id).style.display = 'block';
    }
}

function checkEmail(val, url) {
    if (/^\w+[-_\.]*\w+@\w+-?\w+\.[a-z]{2,4}$/.test(val)) {
		url += '?email=' + val;
		var req = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
	    req.onreadystatechange = function() {
			switch (req.readyState) {
            case 1: case 2: case 3:
                $('lo').innerHTML = '<span class="lo-txt">Проверка e-mail...</span>';
            break;
				case 4:
                    if (!req.responseText.match(/зарегистрирован/)) {
					    $('chk-email').innerHTML = req.responseText;
        			} else
                        $('chk-email').innerHTML = 'Такой email уже зарегистрирован';
                    $('lo').innerHTML = '';
				break;
			}
	    }
	        req.open("GET", url, true);
	        req.setRequestHeader("Content-type", "application/x-www-form-urlencoded, charset=utf-8");
	        req.setRequestHeader("Connection", "close");
	        req.send(null);
    } else
        $('chk-email').innerHTML = 'Проверьте правильность email';
}

function calculateDelivery(val) {
   if (parseInt(val)) {
	   $('delivery').innerHTML = ' + ' + val + ' р.';
	   $('whole_amount_block').innerHTML = '<b>' + (parseInt($('whole_amount').value) + parseInt(val)) + ' р.</b>';
	   
   }
}

function getList(id, url) {
	url += "?id=" + id;
    var req = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    req.onreadystatechange = function() {
        switch (req.readyState) {
            case 1: case 2: case 3:
                $('lo').innerHTML = '<span class="lo-txt">Загрузка элементов...</span>';
            break;
            case 4:
				if (req.responseText) {
	    		    var data = eval("(" + req.responseText + ")"); var j = 0;
	     			for (i = 0; i < data.categories.length; i++) {
	    			    $('subcategory_select').options[j] = new Option(data.categories[i].name, data.categories[i].id, false, false);
						j++;
	    			}
    			}
                $('lo').innerHTML = '';
            break;
        }
    }
    req.open("GET", url, true);
    req.setRequestHeader("Content-type", "application/x-www-form-urlencoded, charset=utf-8");
    req.setRequestHeader("Connection", "close");
    req.send(null);
    
}
