function init(){
    rand = Math.floor(Math.random() * 9);
    $('#adv-'+rand).show();
    next = rand +1;
    prev = rand - 1;
    if(next > size-1)
    {
        next = 0;
    }
    else if(prev < 0)
    {
        prev = size - 1;
    }
    $('#adv_next').attr('rel',next);
    $('#adv_prev').attr('rel',prev);
    if(getCookie(cur_page) == 'opened')
    {
        $('#info_message').show();
        $('#show_mark').hide();
    }
}

function click_adv(num){
    next = num +1;
    prev = num - 1;
    if(next > size-1)
    {
        next = 0;
    }
    else if(prev < 0)
    {
        prev = size - 1;
    }
    $('.adv_li').hide();
    $('#adv-'+num).show();
    $('#adv_next').attr('rel',next);
    $('#adv_prev').attr('rel',prev);
}

/**
 * Set preview element position by event coordinates
 * 
 * @param e | event
 * @param selector | preview selector
 * @param x_offset | preview horizontal offset
 * @param y_offset | preview vertical offset
 */
function set_preview_pos(e, selector, x_offset, y_offset)
{
    var obj = $(selector || '#preview');

    var o_x = x_offset || 20; // x preview offset 
    var o_y = y_offset || 10; // y preview offset
    var e_x = e.pageX; // event page x
    var e_y = e.pageY; // even page y
    var w_h = $(document).scrollTop() + $(window).height(); // window height + document scroll top
    var w_w = $(document).scrollLeft() + $(window).width(); // window width + document scroll left
    
    if(w_h - (e_y + o_y*2 + obj.height()) < 0)
    {
        o_y = - (o_y + obj.height());
    }
    
    if(w_w - (e_x + o_x*2 + obj.width()) < 0)
    {
        o_x = - (o_x + obj.width());
    }
    
    obj.css('top',(e_y + o_y) + 'px').css('left', (e_x + o_x) + 'px');
    return true;
} // end set_preview_pos

function setCookie (name, value, expires, path, domain, secure) {
    var expires = expires || '31536000';
    var path    = path    || '/';
    var domain  = domain  || '';
    document.cookie = name + "=" + escape(value) +
        "; expires=" +  expires +
        "; path=" + path +
        "; domain=" + domain +
        ((secure) ? "; secure" : "");
}

function getCookie(name) {
    var cookie = " " + document.cookie;
    var search = " " + name + "=";
    var setStr = null;
    var offset = 0;
    var end = 0;
    if (cookie.length > 0) {
        offset = cookie.indexOf(search);
        if (offset != -1) {
            offset += search.length;
            end = cookie.indexOf(";", offset);
            if (end == -1) {
                end = cookie.length;
            }
            setStr = unescape(cookie.substring(offset, end));
        }
    }
    return(setStr);
}

function deleteCookie(name) {
document.cookie = name + "=;path=;domain=;expires=Thu, 01-Jan-1970 00:00:01 GMT";
}

function set_summ(summ)
{
    var summ = summ || total;
    if(parseInt(summ) >= 0)
    {
        $('#display_data').html(number_format(summ,' '));
    }
    else
    {
        $('#display_data').html('ERROR');
    }
    if(total == 0 && chosen.html()=='<tbody></tbody>')
    {
        $('.order_button, #chosen_block').hide();
    }
    else
    {
        $('.order_button, #chosen_block').show();
        if(total == 0)
        {
            $('.order_button, #count_again').addClass('opac40 disabled');
        }
        else
        {
            $('.order_button, #count_again').removeClass('opac40 disabled')
        }
    }
}
function process_element(el,state)
{ 
    var el = $(el);
    var state = state || null;
    if(null !== state)
    {
        state = (state == 'true');
    }
    var total1 = total;
    var is_hidden = false;
    var el_price = parseInt(el.attr('price')) || 0;
    switch (el.attr('type')){
        case 'radio':
            var radio_group = $('input:radio[group=' + el.attr('group') + ']');
            var current = $(radio_group).filter('[used=true]') || null;
            if(current.attr('type') != null)
            {
                current.attr('used','false');
                if(false === state)
                {
                    current.attr('checked',false);
                }
                if(!chosen.find('[group='+el.attr('group')+']').hasClass('nonactive'))
                {
                    var current_price = parseInt(current.attr('price')) || 0;
                    total -= current_price;
                }
                calc_dependencies(current);
            }
            if(null === state || state)
            {
                el.attr('used','true');
                el.attr('checked',true);
                total += el_price;
                add_chosen_radio(el.attr('id'),el.attr('group'),el.attr('description'),el_price,el.attr('disabled'));
                calc_dependencies(el);
            }
            else
            {
            	delete_chosen(el.attr('id'));
            }
            break;
            
        case 'checkbox':
            if(state === null)
            {
            	calc_dependencies(el);
            }
            var checked = el.attr('checked') || false;
            if(null === state)
            {
                if(checked)
                {
                    total += el_price;
                    add_chosen_checkbox(el.attr('id'),el.attr('description'),el.attr('price'));
                }
                else
                {
                    total -= el_price;
                    is_hidden = delete_chosen(el.attr('id'));
                }
            }
            else if (checked != state)
            {
                el.attr('checked',state);
                if(state)
                {
                    total += el_price;
                    add_chosen_checkbox(el.attr('id'),el.attr('description'),el.attr('price'));
                }
                else
                {
                    total -= el_price;
                    is_hidden = delete_chosen(el.attr('id'));
                }
            }
            break;
            
        case 'text':
            if(false === state)
            {
                el.val('');
            }
            else if(state === null)
            {
            	calc_dependencies(el);
            }
            var el_value = parseInt(el.val(),10) || 0;
            var el_item_price = parseInt(el.attr('item_price')) || 0;
            var el_prev_value = parseInt(el.attr('prev_value')) || 0;
            if(el_value != el_prev_value)
            {
                if(0 < el_prev_value)
                {
                    total -= (el_price + el_item_price * el_prev_value);
                }
                if(0 < el_value)
                {
                    el_summ = el_price + el_item_price * el_value;
                    total += el_summ;
                    el.attr('summ',el_summ);
                }
                else
                {
                    el.attr('summ',0);
                    el_summ = 0;
                }
                el.attr('prev_value',el_value);
            }
            chosen_row = chosen.find('[item='+el.attr('id')+']');
            is_hidden = (chosen_row.hasClass('nonactive') && chosen_row.length != 0);
            if(typeof(el_summ) != 'undefined')
            {
                add_chosen_text(el.attr('id'),el.attr('description'),el_value,el_summ);
            }
            break;
            default:
            return;
    }
    if(is_hidden)
    {
        total = total1;
    }
    set_summ();
}

function calc_dependencies(field)
{
    var flag = false;
    var type = $(field).attr('type');
    switch(type)
    {
        case 'radio':
        case 'checkbox':
            flag = $(field).attr('checked');
            break;
            
        case 'text':
            flag = (parseInt($(field).val()) > 0);
            break;
    }
    var leading = $(field).attr('lead') || null;
    var depending = $(field).attr('depend') || null;
    if(leading !== null && leading.length > 0 && !flag)
    {
        leading = leading.split(',')
        for(i in leading)
        {
            el = $('#' + leading[i]); 
            process_element(el, 'false')
        }
    }
    if(depending !== null && depending.length > 0 && flag)
    {
        depending = depending.split(',')
        for(i in depending)
        {
            el = $('#' + depending[i]);
            process_element(el, 'true')
        }
    }
}

function calc_dependencies_chosen(field)
{
    var flag = chosen.find('[item='+field+']').hasClass('nonactive');
    var leading = $('#'+field).attr('lead') || null;
    var depending = $('#'+field).attr('depend') || null;
    if(leading !== null && leading.length > 0 && flag)
    {
        leading = leading.split(',');
        for(i in leading)
        {
            chosen_item = chosen.find('[item='+leading[i]+']');
            if(!chosen_item.hasClass('nonactive') && chosen_item.length != 0)
            {
                chosen.find('[item='+leading[i]+']').addClass('nonactive').children('td').addClass('opac40');
                total -= parseInt(chosen_item.find('[class=eye]').attr('price'));
            }
        }
        set_summ();
    }
    if(depending !== null && depending.length > 0 && !flag)
    {
        depending = depending.split(',');
        for(i in depending)
        {
            chosen_item = chosen.find('[item='+depending[i]+']');
            if(chosen_item.hasClass('nonactive') && chosen_item.length != 0)
            {
                chosen_item.removeAttr('class').children('td').removeClass('opac40'); 
                total += parseInt(chosen_item.find('[class=eye]').attr('price'));
            }
        }
        set_summ();
    }
}

function add_chosen_checkbox(id_it,desc_it,price_it)
{
    chosen.append('<tr item="'+id_it+'"><td class="desc_it">'+desc_it+'</td><td class="price_it"><a href="#" title="Скрыть" class="eye" price="'+price_it+
    '"></a></td><td class="price_it"><a href="#" class="delete" title="Удалить" price="'+price_it+'"></a></td></tr>');
    calc_dependencies_chosen(id_it);
}

function delete_chosen(id_it)
{
    hide = chosen.find('[item='+id_it+']').hasClass('nonactive');
    chosen.find('[item='+id_it+']').remove();
    return hide;
}

function add_chosen_radio(id_it,gr_it,desc_it,price_it,is_dis)
{
    var radio_it = chosen.find('[group='+gr_it+']');
    if(radio_it.length == 0)
    {
    	var add_radio = '<tr item="'+id_it+'" group="'+gr_it+'"><td class="desc_it">'+desc_it+'</td><td class="price_it"><a href="#" title="Скрыть" class="eye" price="'+price_it+'"';
    	if(is_dis)
    	{
    		add_radio += ' style="display:none;">&nbsp;</a></td>';
    	}
    	else
    	{
    		add_radio += '>&nbsp;</a></td><td class="price_it"><a href="#" class="delete" title="Удалить" price="'+price_it+'"></a></td>';
    	}
    	add_radio += '</tr>';
        chosen.append(add_radio);
        calc_dependencies_chosen(id_it);
    }
    else
    {
        if(radio_it.hasClass('nonactive'))
        {
            radio_it.removeAttr('class').children('td').removeClass('opac40');
        }
        radio_it.attr('item',id_it);
        radio_it.find('[class=desc_it]').text(desc_it);
        radio_it.find('[class=eye]').attr('price',price_it);
    }
}

function add_chosen_text(id_it,desc_it,value_it,price_it)
{
    var text_it = chosen.find('[item='+id_it+']');
    if(text_it.length == 0 && value_it != 0)
    {
        chosen.append('<tr item="'+id_it+'"><td class="desc_it">'+desc_it+':&nbsp;<span class="value_it">'+value_it+'</span></td><td class="price_it"><a href="#" title="Скрыть" class="eye" price="'+price_it+
        '">&nbsp;</a></td><td class="price_it"><a href="#" title="Удалить" class="delete" price="'+price_it+'">&nbsp;</a></td></tr>');
        calc_dependencies_chosen(id_it);
    }
    else
    {
        if(value_it != 0)
        {
            text_it.find('[class=value_it]').text(value_it);
            text_it.find('[class=eye]').attr('price',price_it);
            text_it.find('[class=delete]').attr('price',price_it);
        }
        else
        {
            calc_dependencies_chosen(id_it);
            delete_chosen(id_it);
        }
    }
}

function updateTips(t, type) {
    var type = type || 'error';
    tips.text(t)
        .show();

    if('ok' == type)
    {
        tips.addClass('ok');
    }
    else
    {
        tips
            .removeClass('ok')
            .addClass('ui-state-highlight');
    }
    setTimeout(function() {
        tips.removeClass('ui-state-highlight', 1500);
    }, 500);
}

function checkLength(o,n,min,max) {

    if ( o.val().length > max || o.val().length < min ) {
        o.addClass('ui-state-error');
        updateTips("Длина поля '" + n + "' должна быть от "+min+" до "+max+" символов.");
        return false;
    } else {
        return true;
    }
}

function checkRegexp(o,regexp,n) {
    if ( !( regexp.test( o.val() ) ) ) {
        o.addClass('ui-state-error');
        updateTips(n);
        return false;
    } else {
        return true;
    }
}

function number_format(aq,spacer) {
    var integer = (aq).toString();
    for (i = integer.length - 3; i > 0; i -= 3)
     integer = integer.substring (0 , i) + spacer + integer.substring (i);
    return integer;
}
