var curRow = 1;
var countRows = 5;
var countNums = 50;
var countExtra = 50;
var blankRows = [];
var lotteryId = 1;
var ticketLine = '';

function selectLotto(){
    $('#sellotto').toggle();
}

function blankReady(lottery, rows, count, extracount, line){
    lotteryId = lottery;
    curRow = 1;
    countRows = rows;
    countNums = count;
    countExtra = extracount;
    ticketLine = line;
    blankRows = [];
    for (var i = 1;i <= countRows; i ++){
        blankRows[i] = [];
    }
    $('.ticket_row').click(function(){
        if ($(this).attr('id') != 'active3') activateRow(this);
    });
    numsReady();
}

function numsReady(){
    $('#tedit .cell1').click(function(){
        if ($(this).attr('id') != 'active') setNumber(this);
        else resetNumber(this);
    });
}

function activateRow(row){
    $('.ticket_row').removeAttr('id');
    $(row).attr('id', 'active3');
    setFreeCell();
    curRow = countRows - $(row).nextAll('.ticket_row').length;
    // load selected
    var count = countNums;
    if ($('#active3').hasClass('extra')) count = countExtra;
    $('#tedit .cell1').remove();
    for (var i = 1;i <= count;i ++){
        $('#tedit #edit').before('<div class="cell1">'+i+'</div>');
    }
    $('#tedit .cell1').removeAttr('id');
    $(blankRows[curRow]).each(function(){
        $('#tedit .cell1').eq(this-1).attr('id', 'active');
    });
    numsReady();
}

function setFreeCell(){
    $('.cell2').removeAttr('id');
    $('#tedit #arrow').css('left', 0);
    $('#active3').find('.cell2:empty:first').attr('id', 'active2');
    var pos = $('.ticket_row #active2').position();
    if (pos != null) $('#tedit #arrow').css('left', pos.left);
}

function setNumber(cell){
    if ($('.ticket_row #active2').length == 0){
        alert('Строка уже заполнена! Чтобы освободить место, снимите выделение в верхнем поле со списком чисел.');
        return false;
    }
    $(cell).attr('id', 'active');
    blankRows[curRow].push($(cell).html());
    $('.ticket_row #active2').html($(cell).html());
    if (blankRows[curRow].length == $('#active3 .cell2').length && $('#active3').nextAll('.ticket_row').length != 0) activateRow($('#active3').nextAll('.ticket_row:first'));  
    else setFreeCell();
}

function resetNumber(cell){
    $(cell).removeAttr('id');
    var tmpAr = [];
    $(blankRows[curRow]).each(function(){
        if (this != $(cell).html()) tmpAr.push(parseInt(this));
    });
    blankRows[curRow] = tmpAr;
    $('#active3 .cell2').each(function(index){
        if (tmpAr[index] == undefined) $(this).html('');
        else $(this).html(tmpAr[index]);
    });
    setFreeCell();
}

function autoFill(prefill){
    var count;
    var randnum;
    var isrand = true;
    var i = 0;
    if (prefill instanceof Array) isrand = false;
        $('.ticket_row').each(function(index){
            while (blankRows[index+1].length != $(this).find('.cell2').length){
                count = countNums;
                if ($(this).hasClass('extra')) count = countExtra;
                do {
                    if (isrand) randnum = getRandomInt(1, count);
                    else {
                        randnum = prefill[i];
                        i ++;
                    }
                } while (inArray(randnum, blankRows[index+1]));
                blankRows[index+1].push(randnum);
                $(this).find('.cell2:empty:first').html(randnum);
            }
        });
    activateRow($('.ticket_row').last());
}

// использование Math.round() даст неравномерное распределение!
function getRandomInt(min, max){
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

function inArray(needle, haystack){
    var found = false;
    var key;
    for (key in haystack) {
        if (haystack[key] == needle) {
            found = true;
            break;
        }
    }
    return found;
}

function saveTicket(link, pay){
    var userparams = {};
    var key1, key2, tmp;
    for (key1 in blankRows){
        tmp = {};
        for (key2 in blankRows[key1]){
            tmp[key2] = blankRows[key1][key2];
        }
        userparams[key1] = tmp;
    }
    if (pay == 1) userparams.pay = 1; else userparams.pay = 0;
    userparams.lottery_id = lotteryId;
    userparams.totalrows = countRows;
    userparams.ticketname = $('#ticketname').val();
    if ($('#ticketid').val() != undefined) userparams.id = $('#ticketid').val();
    ajaxRequest(link.href.substring(link.href.indexOf('#')+1), userparams);
}

function showPayconfirm(el, id, price){
    $('#payconfirm').remove();
    $('div.innerticket').show();
    $(el).closest('div.innerticket').hide();
    $(el).closest('div.ticket').append('<div id="payconfirm"><div class="redline"><a href="#" onclick="cancelPayconfirm();return false">Нет, это я случайно нажал!</a></div>'+
                '<div class="greenline" id="ie7"><h3><a href="#/ticket/pay/'+id+'/">Да.</a></h3></div>'+
                '<div class="warning">'+
                    '<h3 style="margin-bottom: 5px;">'+price+'$</h3>'+
                    'будут списаны с вашего счета.<br /><br />'+
                    '<h3>Продолжить?</h3>'+
                '</div></div>');
}

function cancelPayconfirm(){
    $('#payconfirm').remove();
    $('div.innerticket').show();
}

function incRow(){
    var totalprice = parseFloat($('#lineprice').text());
    if (ticketLine.indexOf('extra') > 0){
        if (countRows >= 10){
            alert('Больше некуда');
            return false;
        }
        countRows += 2;
        blankRows[countRows-1] = [];
        totalprice = totalprice / 2;
    } else if (countRows >= 5){
                alert('Больше некуда');
                return false;
            } else countRows ++;
    blankRows[countRows] = [];
    totalprice = totalprice * countRows;
    $('#tedit #balance').html(totalprice + '$');
    $('.ticket_row:last').next().after(ticketLine);
    $('.ticket_row').click(function(){
        if ($(this).attr('id') != 'active3') activateRow(this);
    });
    numsReady();
}

function decRow(){
    var totalprice = parseFloat($('#lineprice').text());
    if (ticketLine.indexOf('extra') > 0){
        if (countRows <=2){
            alert('Меньше некуда');
            return false;
        }
        countRows -= 2; 
        totalprice = totalprice / 2;
        $('.ticket_row:last').prev().remove();
    } else if (countRows <= 1){
                alert('Меньше некуда');
                return false;
            } else countRows --;
    $('.ticket_row:last').next().remove();
    $('.ticket_row:last').remove();
    totalprice = totalprice * countRows;
    $('#tedit #balance').html(totalprice + '$');
    var tmpRows = blankRows;
    blankRows = [];
    for (var i = 1;i <= countRows; i ++){
        blankRows[i] = tmpRows[i];
    }
    
}
