document.getElementsByClassName = function(cl) {
    var retnode = [];
    var myclass = new RegExp('\\b'+cl+'\\b');
    var elem = this.getElementsByTagName('*');
    for (var i = 0; i < elem.length; i++) {
        var classes = elem[i].className;
        if (myclass.test(classes)) retnode.push(elem[i]);
    }
    return retnode;
};

function state(make, model)
{
    window.onload = function() {
        modelsLinks('make_' + make);
        showModels(make, 'test');
        if (model) {
            make_name = document.getElementById('make_' + make).innerHTML;
            model_name = document.getElementById('model_' + model).innerHTML;

            showTypes(model, make_name, model_name);
            modelsLinks('model_' + model);
        } else {
            document.location = '#' + make;
        }
    }
}

function showMakes(categories, html_id)
{
    var length = categories.length-1;
    var menu   = '';

    for (i=0;i<length;i=i+2) {
        var id   = categories[i];
        var name = categories[i+1];
        menu = menu + '<a name="' + id + '" /><div class="cat"><img id="' + id + '_folder" src="/media/site/widgets/cars/images/tree-folder.gif" alt="" /> <a id="make_' + id + '" class="makes" href="javascript:showModels(' + id + ');" onclick="modelsLinks(\'make_' + id + '\');">' + name + '</a><div id="' + id + '_subcats" style="display:none;" class="subcats"></div></div>';
    }

    document.getElementById(html_id).innerHTML = menu;
}

function showModels(cat_id)
{
    var subcats_div = document.getElementById(cat_id + '_subcats');
    var cat_folder  = document.getElementById(cat_id + '_folder');
    var makes_name  = document.getElementById('make_' + cat_id).innerHTML;

    if (subcats_div.style.display == 'none') {
        var subcats = getModels(cat_id);
        subcats_div.style.display = '';
        cat_folder.src = '/media/site/widgets/cars/images/tree-folder-open.gif';

        var length = subcats.length;
        var menu   = '';
        for (i=0;i<length;i++) {
            var id   = subcats[i].pk;
            var name = subcats[i].fields.name;
            var css_class = 'models';

            /*if (model == id) {
                class = 'models_active';
            }
            */
            menu = menu + '<div class="subcat"><img src="/media/site/widgets/cars/images/tree-doc.gif" alt="" /> <a href="#top" id="model_' + id + '" class="' + css_class + '" onclick="javascript:modelsLinks(\'model_' + id + '\');showTypes(' + id + ', \'' + makes_name + '\', \'' + name + '\');">' + name + '</a></div>';
        }
        subcats_div.innerHTML = menu;
    } else {
        subcats_div.style.display = 'none';
        cat_folder.src = '/media/site/widgets/cars/images/tree-folder.gif';
    }
}

function makesNotActive()
{
    var links = document.getElementsByClassName('makes_active');
    for (var i=0;i<links.length;i++) {
        links[i].className = 'makes';
    }
}

function modelsNotActive()
{
    var links = document.getElementsByClassName('models_active');
    for (var i=0;i<links.length;i++) {
        links[i].className = 'models';
    }
}

function makesLinks(link)
{
    modelsNotActive();
    makesNotActive();
    link.className = 'makes_active';
}

function modelsLinks(link_id)
{
    link = document.getElementById(link_id);

    modelsNotActive();
    makesNotActive();

    link.className = 'models_active';
}

function formatPrice(price)
{
    var price = price + ''
    var length = price.length;

    if (length > 3) {
        return price.substr(0,length-3) + ' ' + price.substr(length-3, length);
    } else {
        return price;
    }
}

function dateFormat(date)
{
    var new_date = date.split("-");
    return new_date[2] + '.' + new_date[1];
}

function showTypes(model_id, makes_name, models_name)
{
    var content     = document.getElementById('content');
    var types       = getTypes(model_id);
    var types_count = types.length;
    var types_table = '<table class="catalog" cellspacing="0" cellpadding="6" border="0"><tr class="catalog_title"><td colspan="2" class="catalog_name">Наименование</td><td class="catalog_year">Год выпуска</td><td class="catalog_count">Наличие</td><td class="catalog_date">Дата пост.</td><td colspan="2" class="catalog_price">Цена, за 1 ед.</td></tr>';
    types_table += '<tr class="catalog_title2"><td class="types_title" colspan="7">' + makes_name + ' / ' + models_name + '</td></tr>';

    for (i=0;i<types_count;i++) {
        var id   = types[i].id;
        var name = types[i].name;
        var year = types[i].year;
        var types_table = types_table + '<tr class="catalog_type"><td class="catalog_type_name" colspan="2">' + name + '</td><td class="catalog_type_year">' + year + '</td><td colspan="4">&nbsp;</td></tr>';

        var goods       = types[i].good;
        var goods_count = goods.length;
        for (f=0;f<goods_count;f++) {
            var goods_id       = goods[f].id;
            var goods_name     = goods[f].name;
            var quantity_icon_alt = new Array(
                                              '',
                                              'В резерве/требуется уточнение',
                                              'Требуется уточнение',
                                              'Нет в наличии/на заказ',
                                              'В наличии'
                                              );
            var goods_quantity = goods[f].quantity ? goods[f].quantity : '';
            var quantity_icon = goods[f].quantity_icon;
            var goods_date     = goods[f].date ? dateFormat(goods[f].date) : '';
            var goods_price    = formatPrice(goods[f].price);
            var _goods_price   = goods[f].price;
            // default quantity
            var cart_quantity  = goods[f].cart_quantity;
            var params       = goods[f].param;
            var params_count = params.length;
            var item_class = 'catalog_item';

            if (f > 0 && goods[f-1].param[0]['icon']!= params[0]['icon']) {
                var item_class = 'catalog_item2';
            }

            var types_table    = types_table + '<tr class="' + item_class + '"><td class="catalog_params">';

            for (z=0;z<params_count;z++) {
                var params_name  = params[z]['name'];
                var params_value = params[z]['value'];
                var params_icon  = params[z]['icon'];
                var params_id    = 0;

                if (params_icon) {
                    var types_table  = types_table + ' <img title="' + params_name + ': ' + params_value + '" alt="' + params_name + ': ' + params_value + '" src="/media/' + params_icon + '"> ';
                }
            }
            var goods_quantity = '<img src="/media/site/img/quantity/' + quantity_icon + '.gif" alt="' + quantity_icon_alt[quantity_icon] + '" /> ' + goods_quantity;

            var types_table = types_table + '</td><td class="catalog_item"><a class="catalog_item" onclick="windowOpen(this.href); return false" href="/catalog/item/' + goods_id + '/" title="Посмотреть информацию о товаре">' + goods_name + '</a></td><td>&nbsp;</td><td>' + goods_quantity + '</td><td class="catalog_date_item">' + goods_date + '&nbsp;</td><td>' + goods_price + ' руб.</td><td><a href="javascript:quantityWindow(' + goods_id + ',' + cart_quantity + ',' + _goods_price + ');"><img src="/media/site/img/cart.gif" width="25" height="25" border="0" alt="купить/заказать" /></a></td></tr>';
        }
    }
    var types_table = types_table + '</table>';

    //cart
    //types_table = '<div><div id="quantity_window" style="display: none;"><input type="hidden" id="cart_id"><input type="hidden" id="cart_price">Количество: <input type="text" id="cart_quantity" size="2" value="2"><input type="button" value="Добавить" onclick="javascript:add2cart()"><input type="button" value="Отмена" onclick="javascript:quantityWindowClose()"></div>' + types_table + '</div>';

    content.innerHTML = '';
    content.innerHTML = types_table;

    document.getElementById('catalog_info').style.display = '';
}

function showSearch(model_id, makes_name, models_name)
{
    var content     = document.getElementById('content');
    var query       = document.getElementById('search_query').value;

    var makes       = doSearch(query);

    var types_table = '<table class="catalog" cellspacing="0" cellpadding="6" border="0"><tr class="catalog_title"><td colspan="2" class="catalog_name">Наименование</td><td class="catalog_year">Год выпуска</td><td class="catalog_count">Наличие</td><td class="catalog_date">Дата пост.</td><td colspan="2" class="catalog_price">Цена, за 1 ед.</td></tr>';

    for (var make in makes) {
        if (make == 'toJSONString') {
            continue;
        }

        var types       = makes[make];
        var types_count = types.length;

        types_table += '<tr class="catalog_title2"><td class="types_title" colspan="7"><a href="/?mk=' + makes[make][0]['make_id'] + '&md=' + makes[make][0]['model_id'] + '">' + make + '</td></tr>';

    for (var i=0;i<types_count;i++) {
        var id   = types[i].id;
        var name = types[i].name;
        var year = types[i].year;
        var types_table = types_table + '<tr class="catalog_type"><td class="catalog_type_name" colspan="2">' + name + '</td><td class="catalog_type_year">' + year + '</td><td colspan="4">&nbsp;</td></tr>';

        var goods       = types[i].good;
        var goods_count = goods.length;
        for (f=0;f<goods_count;f++) {
            var goods_id       = goods[f].id;
            var goods_name     = goods[f].name;
            var quantity_icon_alt = new Array(
                                              '',
                                              'В резерве/требуется уточнение',
                                              'Требуется уточнение',
                                              'Нет в наличии/на заказ',
                                              'В наличии'
                                              );
            var goods_quantity = goods[f].quantity ? goods[f].quantity : '';
            var quantity_icon = goods[f].quantity_icon;
            var goods_date     = goods[f].date ? dateFormat(goods[f].date) : '';
            var goods_price    = formatPrice(goods[f].price);
            var _goods_price   = goods[f].price;
            // default quantity
            var cart_quantity  = goods[f].cart_quantity;
            var params       = goods[f].param;
            var params_count = params.length;
            var item_class = 'catalog_item';

            if (f > 0 && goods[f-1].param[0]['icon']!= params[0]['icon']) {
                var item_class = 'catalog_item2';
            }

            var types_table    = types_table + '<tr class="' + item_class + '"><td class="catalog_params">';

            for (z=0;z<params_count;z++) {
                var params_name  = params[z]['name'];
                var params_value = params[z]['value'];
                var params_icon  = params[z]['icon'];
                var params_id    = 0;

                if (params_icon) {
                    var types_table  = types_table + ' <img title="' + params_name + ': ' + params_value + '" alt="' + params_name + ': ' + params_value + '" src="/media/' + params_icon + '"> ';
                }
            }
            var goods_quantity = '<img src="/media/site/img/quantity/' + quantity_icon + '.gif" alt="' + quantity_icon_alt[quantity_icon] + '" /> ' + goods_quantity;

            var types_table = types_table + '</td><td class="catalog_item"><a class="catalog_item" onclick="windowOpen(this.href); return false" href="/catalog/item/' + goods_id + '/" title="Посмотреть информацию о товаре">' + goods_name + '</a></td><td>&nbsp;</td><td>' + goods_quantity + '</td><td class="catalog_date_item">' + goods_date + '&nbsp;</td><td>' + goods_price + ' руб.</td><td><a href="javascript:quantityWindow(' + goods_id + ',' + cart_quantity + ',' + _goods_price + ');"><img src="/media/site/img/cart.gif" width="25" height="25" border="0" alt="купить/заказать" /></a></td></tr>';
        }
    }

    }
    var types_table = types_table + '</table>';

    content.innerHTML = '';
    content.innerHTML = types_table;
}

function getModels(make_id)
{
    var oXmlHttp = zXmlHttp.createRequest();
    oXmlHttp.open("GET", "/cars/models/?make_id=" + make_id, false);
    /*
    oXmlHttp.onreadystatechange = function() {
        if (oXmlHttp.readyState == 4) {
            alert(oXmlHttp.responseText);
        }
    }
    */
    oXmlHttp.send(null);

    if (oXmlHttp.status == 200) {
        return oXmlHttp.responseText.parseJSON();
    }

    return false;
}

function getTypes(model_id)
{
    var oXmlHttp = zXmlHttp.createRequest();
    oXmlHttp.open("GET", "/catalog/goods/?model_id=" + model_id, false);
    oXmlHttp.send(null);

    if (oXmlHttp.status == 200) {
        return oXmlHttp.responseText.parseJSON();
    }

    return false;
}

function doSearch(query)
{
    var oXmlHttp = zXmlHttp.createRequest();
    oXmlHttp.open("GET", "/catalog/search/?q=" + query, false);
    oXmlHttp.send(null);

    if (oXmlHttp.status == 200) {
        return oXmlHttp.responseText.parseJSON();
    }

    return false;
}

