var ab_jsondata = Array();
var field_name = '';

function ab_humanreadable(num){
    var str = num.toString();
    var nd = str.length%3;
    var ret = str.substr(0,nd);
    for(var frst = nd;frst<str.length;frst+=3) {
      ret += (ret.length?',':'')+str.substr(frst,3);
    }
    return ret;
}

function ab_progress(field,label,percent) {
    if (label=='') {
        $(field+'_progress').style.visibility = 'hidden';
        $(field+'_progress_bar').style.width = '0px';
    } else {
        if (percent!=null) $(field+'_progress_bar').style.width = percent.toString()+'%';
        if (label!=null) {
	    Element.update(field+'_progress_label',label);
            $(field+'_progress').style.visibility = 'visible';
	}
    }
}

function mb_toggleDetails(field) {
    var btn = $(field+'_toggleDetailsButton');
    var toggled = btn.value.substr(0,4) == 'Show';
    btn.value = btn.value.replace(toggled?'Show':'Hide',toggled?'Hide':'Show');
    $$('#'+field+'_tabwidget div.f2').each(function (item) { item.style.display = toggled?'block':'none'; });
}

function mb_toggleSelectedChange(field) {
    var btn = $(field+'_toggleSelectedButton');
    var ctrl = $(field+'_SelectedStatus');
    var selected = ctrl.value=='all';
    ctrl.value = selected?'selected':'all';
    btn.value = btn.value.replace(selected?'only selected':'all',selected?'all':'only selected');
    $(field+'_nomatch_row').style.display = (selected && $(field+'_infoNumItems').innerHTML=='0')?'block':'none';
    $$('#'+field+'_tabwidget input').each( function(item) { item.parentNode.parentNode.style.display = (!selected || item.checked)?'block':'none'; });

}

function mb_updateRowsAndTotal(field, rowUpdate) {
    var num = 0;
    var totalPrice = 0;
    var totalPvs = 0;
    var termidx = $(ab_jsondata[field]['termcontrol']).selectedIndex;
    var adformatctrl = $(ab_jsondata[field]['adformatcontrol']);
    var adformat = adformatctrl.options[adformatctrl.selectedIndex].value.split('|')[0];
    var flashctrl = $(ab_jsondata[field]['adformatcontrol']);
    var ad_media_type = flashctrl.options[flashctrl.selectedIndex].value.split('|')[1];
    $$('#'+field+'_tabwidget input').each( function(item) {
        var price = ab_jsondata[field]['networks'][item.value].r[adformat][ad_media_type][termidx];
        var pvs = ab_jsondata[field]['networks'][item.value].p[termidx];
        if (rowUpdate) {
            item.parentNode.parentNode.cells[1].innerHTML = '$'+price.toString();
            item.parentNode.parentNode.cells[2].innerHTML = ab_humanreadable(pvs);
        }
        if (item.checked) {
            num++;
            totalPvs += pvs;
            totalPrice += price;
        }
    })

    Element.update(field+'_infoNumItems',num.toString());
    Element.update(field+'_infoTotalPrice',totalPrice.toString());
    Element.update(field+'_infoTotalPvs',ab_humanreadable(totalPvs));
}

function mb_selectionChange(field,widget) {
    mb_updateRowsAndTotal(field,false);
}

function mb_termChange(field) {
    mb_updateRowsAndTotal(field,true);
}

function mb_adformatChange(field) {
    mb_updateRowsAndTotal(field,true);
    //FIXME: hide networks that don't support given adformat
}

function runFilter(field) {
    var keyword = $(field+'_filter_keywords').value.toLowerCase();
    var one_network = Object();
    var hive_title = '';
    
    $$('#'+field+'_tabwidget input').each( function(item) {
      Element.hide(item.parentNode.parentNode);
    })
    var counter = 0;
    for (var i in ab_jsondata[field]['networks']){
        one_network = ab_jsondata[field]['networks'][i];
        counter++;
        hive_title = one_network.t;
        if ((hive_title!=undefined) && (hive_title.toLowerCase().indexOf(keyword)>-1)){
            
            Element.show($(one_network.uid));
        }
    }
    return false;
}

function KeypressChecking(evt) {
    var keycode;
    if (window.event) keycode = window.event.keyCode;
    else if (evt) keycode = evt.which;
    
    runFilter(field_name);
}

function KeypressChecking_enter(evt) {
    var keycode;

    if (window.event) keycode = window.event.keyCode;
    else if (evt) keycode = evt.which;
    
    if (keycode==13){
      runFilter(field_name);
      return false;
    }
    return true;
}

function mb_processAJAXResults(field,data) {
    var len = data.length;
    var termidx = $(ab_jsondata[field]['termcontrol']).selectedIndex;
    var adformatctrl = $(ab_jsondata[field]['adformatcontrol']);
    var adformat = adformatctrl.options[adformatctrl.selectedIndex].value.split('|')[0];
    var flashctrl = $(ab_jsondata[field]['adformatcontrol']);
    var ad_media_type = flashctrl.options[flashctrl.selectedIndex].value.split('|')[1];
    newrows = '';
    ab_jsondata[field]['networks'] = Array();
    for(var i=0;i<len;i++) {
        var item = data[i];
        if(item.r[adformat]==undefined) continue;
        newrows += '<tr class="'+(i%2?'e':'o')+' s" id="'+item.uid+'"><td class="f"><div style="overflow:hidden; width:100%"><div class="f1">'+item.t.escapeHTML()+' ('+item.n.toString()+')</div><div class="f2" style="display:none">'+item.d+'</div><div class="f4"><a href="/adspotgroups/'+item.id+'/ba_mininetwork_view" target="_blank">Check out this hive</a></div></div></td>';
        newrows += '<td>$'+item.r[adformat][ad_media_type][termidx].toString()+'</td>';
        newrows += '<td>'+ab_humanreadable(item.p[termidx])+'</td>';
        checked = !ab_jsondata[field]['selected'][item.uid]?false:true;
        newrows += '<td><input type="checkbox" name="'+field+'_selections:list" value="'+item.uid+'" onclick="mb_selectionChange(\''+field+'\',this);"'+(checked?' checked="checked"':'')+'/></td></tr>\n';
        ab_jsondata[field]['networks'][item.uid] = item;
    }
    new Insertion.Before(field+'_nomatch_row',newrows);
    $(field+'_nomatch_row').style.display = (len==0)?'block':'none';

}

function mb_initPage(field) {
    var params = '';
    field_name = field;
    if (ab_jsondata[field]["pv_limit"]!='') { params += (params==''?'':'&') + 'pv_limit='+ab_jsondata[field]["pv_limit"]; }
    // download data
    ab_progress(field,'Downloading data...',0);
    Form.Element.disable(field+'_filter_keywords');
    new Ajax.Request(ab_jsondata[field]['datasource'], {
        method: 'get',
        parameters: params,
        onSuccess: function(resp, jsonObj) {
            var data = eval(resp.responseText);
            ab_progress(field,'',0);
            mb_processAJAXResults(field,data.response);
            Form.Element.enable(field+'_filter_keywords');
        },
        onFailure: function() {
            alert('An error happened during fetching data from remote server.\n Please try again later.');
            ab_progress(field,'',0);
        },
        onLoading: function() { ab_progress(field,null,25); },
        onLoaded: function() { ab_progress(field,null,50); },
        onInteractive: function() { ab_progress(field,null,75); },
        onComplete: function() { ab_progress(field,'',0); }
    });
}
