
function do_work_tab(tabname, p, x, workid)
{
    var max_other_rows=10;
    var mymax=-1;

    var id=tabname+'_bp_'+p+'_'+workid;
    var bp = document.getElementById(id);
    if (bp) 
        { 
        if (x.best)
            {
            bp.innerHTML = x.best.price.fancy;
            }
        else
            {
            bp.innerHTML = "";
            }
        }
    id=tabname+'_bv_'+p+'_'+workid;
    var bv = document.getElementById(id);
    if (bv) 
        {
        if (x.best)
            { bv.innerHTML = x.best.vendor.fancy }
        else
            { bv.innerHTML = ""; }
        }

    if (!bp)
        { return; }

    /* Overwrite with new prices */
    for (var opx in x.other_prices)
        {
        if (opx >= max_other_rows)
            { break; }

        var opt=x.other_prices[opx];
        var ovt=x.other_vendors[opx];
        
        if (opx > mymax)
            {
            mymax = opx;
            }
        
        var id=tabname+'_op_'+workid+'_'+p+'_row'+opx;
        var op = document.getElementById(id);
        op.innerHTML = opt;
        
        id=tabname+'_ov_'+workid+'_'+p+'_row'+opx;
        var ov = document.getElementById(id);
        ov.innerHTML = ovt;
        
        }
    /*}*/
    
    /* blank out any old ones */
    for (var opx=x.other_prices.length; opx < max_other_rows; opx++)
        {
        /*
          if (p=="kindle" || p=="bbeb" || p=="multiformat" || p == "bn")
          { continue; }
        */
        var id=tabname+'_op_'+workid+'_'+p+'_row'+opx;
        var op = document.getElementById(id);
        op.innerHTML = "";
        
        id=tabname+'_ov_'+workid+'_'+p+'_row'+opx;
        var ov = document.getElementById(id);
        ov.innerHTML = "";
        }


}

/* vendors */

function do_searches(data) 
{
    var docname='searched_'+data.workid;
    var doc=document.getElementById(docname);
    if (doc && doc.innerHTML != data.vendors.searched)
        {
        //     dojo.fadeOut({node: docname, duration: 1000}).play();
        doc.innerHTML=data.vendors.searched;
        //        dojo.fadeIn({node: docname, duration: 1000}).play();
        }

    doc=document.getElementById('searching_'+data.workid);
    if (doc) {
    doc.innerHTML=data.vendors.searching;
    
    if (data.vendors.searching == "")
        {
        doc=document.getElementById('searching_title_'+data.workid);
        doc.style.display="none";
        }
    }
}

/*
function do_best_prices(data) 
{
var bindings = new Array("kindle", "epub", "ade", "pdf", "microsoft", 
                         "mobipocket", "palm", "bbeb", "pbook", "bn", "abook");
for (var i in bindings)
    {
    var binding=bindings[i];

    var thisprice=data.prices[binding];

    if (!thisprice)
        { continue; }

    var bp_id="bp_"+binding+"_"+data.masterworkid;
    var bv_id="bv_"+binding+"_"+data.masterworkid;
    var tr_id="tr_"+binding+"_"+data.masterworkid;

    var bp=document.getElementById(bp_id);
    var bv=document.getElementById(bv_id);
    var tr=document.getElementById(tr_id);

    if (bp)
        {
        if (!thisprice.best)
            {bp.innerHTML = ""; }
        else
            {bp.innerHTML = thisprice.best.price.plain;}
        }

    if (bv)
        {
        if (!thisprice.best)
            {bv.innerHTML = ""; }
        else
            {bv.innerHTML = thisprice.best.vendor.plain;}
        }
    if (tr)
        {
        if (thisprice.best)
            {tr.style.display = ""; }
        }
    }
}
*/

function do_best_prices_by_device(data) 
{
var devices = new Array("kindle", "pc", "mac", "sony", "nook", 
                        "palm", "iphone", "blackberry", "android", 
                        "book", "audio");

for (var i in devices)
    {
    var device=devices[i];

    var thisprice=data.prices_by_device[device];

    if (!thisprice)
        { continue; }

    var bp_id="bp_best"+device+"_"+data.masterworkid;
    var bv_id="bv_best"+device+"_"+data.masterworkid;
    var bf_id="bf_best"+device+"_"+data.masterworkid;
    var cmt_id="cmt_best"+device+"_"+data.masterworkid;
    var trf_id="trf_best"+device+"_"+data.masterworkid;

    var bp=document.getElementById(bp_id);
    var bv=document.getElementById(bv_id);
    var bf=document.getElementById(bf_id);
    var cmt=document.getElementById(cmt_id);
    var trf=document.getElementById(trf_id);

    if (bp)
        {
        if (!thisprice.price)
            {bp.innerHTML = ""; }
        else
            {bp.innerHTML = thisprice.price;}
        }

    if (bv)
        {
        if (!thisprice.vendor)
            {bv.innerHTML = ""; }
        else
            {bv.innerHTML = thisprice.link;}
        }
    if (bf)
        {
        if (!thisprice.format)
            {bf.innerHTML = ""; }
        else
            {bf.innerHTML = thisprice.format;}
        }
    if (cmt)
        {
        if (!thisprice.comment)
            {cmt.innerHTML = ""; }
        else
            {cmt.innerHTML = thisprice.comment;}
        }
    if (trf)
        {
        if (thisprice.price)
            {trf.style.display = ""; }
        }
    }
}

function updatePricesCB(data, ioArgs)
{
/*debugger;*/
var max_other_rows=10;
var max_others=0;

do_searches(data);
/*do_best_prices(data);*/
do_best_prices_by_device(data);

/* do tabs */
var tabnames=new Array("pc","mac","sony","nook","iphone","blackberry","palm","book","audio","kindle");
for (var p in data.prices)
    {
    if (data.prices[p] == null)
        continue;

    /* store max_others */
    var num_others=data.prices[p].other_prices.length;
    if (num_others > max_others)
        { max_others = num_others; }

    /* */
    var x=data.prices[p];
    if (x) 
        {
        for (var tn in tabnames)
            { 
            do_work_tab(tabnames[tn], p, x, data.masterworkid); 
            }
        }
    }

    /* and remove from view unused rows */
    for (var tn=0; tn < tabnames.length; tn++)
        {
        var tabname=tabnames[tn];
        for (var i=0; i<max_other_rows; i++)
            {
            var id=tabname+'_other_'+data.masterworkid+'_row'+i;
            var row=document.getElementById(id);
            if (!row)
                { continue; }
            var has_content=false;
            for (var j=0; j < row.cells.length; j++)
                {
                var col=row.cells[j];
                if (col.innerHTML != "")
                    {
                    has_content=true;
                    break;
                    }
                }

            /*            if (i < max_others)*/
            if (has_content)
                {
                row.style.display='table-row';
                } 
            else 
                {
                row.style.display='none';
                }
            }
        }

/* do it again if still searching*/

if (data.vendors.searching == "")
    { return; }

var weighting ;
if (data.count < 5) 
    {
    weighting = 2; // every other second 
    } 
else if (data.count < 10) 
    {
    weighting = 10; // then every 10 seconds
    } 
else if (data.count < 20) 
    {
    weighting = 60; // then every minute
    } 
else 
    {
    weighting = 3600; // then every hour
    }

// could use started to bail out after given time, if wanted

var call = "updatePrices(" + data.masterworkid + ",'" + data.sincewhen + "','" + data.started + "','" + data.count + "')";
var timeout = weighting * 1000; // in seconds
setTimeout(call, timeout);
}

function errCB(data,ioArgs) 
{
if (data.message=="bad http response code:0")
    {
    // probably user is trying to change page
    return;
    }
}

function updatePrices(workid, sincewhen, started, count){

$.post('/work/'+workid+'/prices/', 
       {'sincewhen': sincewhen,
           'started': started,
           'count': count},
       updatePricesCB, "json");
}

/* eof */
