
var ab_jsondata = Array();
var is_adspot_generating_ajax_running = false;
var data = Array();
var start_item = 0;
var max_item = 100;
var is_adspots_list = 0;

function ab_value(id) {
  var elem = $(id);
  if (!elem) { return ''; }
  if (elem.type == 'checkbox'){
    if (elem.checked) return '1'
    else return '0'
  }
  if (!elem.options) return elem.value;
  return elem.options[elem.selectedIndex].value;
}

function is_adspot_in_hive(adspot, hive_uids) {
  if ( !hive_uids || hive_uids.toString() == '' ) return true;
  var in_selected_hive = false;
  // FIXME: this check will be unnecessary when all adspots have their 'h'
  if ( adspot['h'] ) {
    for (var i=0; i < adspot['h'].length; i++) {
      var member_in_hive = adspot['h'][i];    
      for (var j=0; j < hive_uids.length; j++) {
        var hive_uid = hive_uids[j];
        if ( member_in_hive == hive_uid ) {
          in_selected_hive = true;
          break;
        }
      }
    }
  }
  return in_selected_hive;
}

var ABDataSet = {
  debug: false,

  filter: function(widget, basic_search, for_blogs) {
    var ret = [];
    if (this.debug) { var t1 = new Date(); }
    var len = this.rows.length;
    var adformat = ab_value(widget.id+'_select_adformat').split('|')[0];
    var flash = ab_value(widget.id+'_select_adformat').split('|')[1]=='flash';
    var focus = ab_value(widget.id+'_filter_focus');
    var politics = ab_value(widget.id+'_filter_politics');
    var stars = ab_value(widget.id+'_filter_stars');
    if (this.extra_rows!=null && stars.length>0) stars = parseInt(stars); else stars=0;
    var gender = ab_value(widget.id+'_filter_sex');
    var age = ab_value(widget.id+'_filter_age');
    if (age.length>0) {
      var age_min = parseInt(age.split('-')[0]);
      var age_max = parseInt(age.split('-')[1]);
    }
    var country = ab_value(widget.id+'_filter_country');
    var ustate = ab_value(widget.id+'_filter_state');
    var city = ab_value(widget.id+'_filter_city');
    var profession = ab_value(widget.id+'_filter_profession');
    var keywords = ab_value(widget.id+'_filter_keywords').toLowerCase();
    var pageviews = ab_value(widget.id+'_filter_pageviews');
    if (pageviews.length>0) pageviews = parseInt(pageviews); else pageviews=0;
    var price = ab_value(widget.id+'_filter_price');
    if (ab_value(widget.id+'_filter_optimal_position') == '1' && !basic_search){
      var optimal_position = true;
    }
    else{
      var optimal_position = false;
    }
    var selOnly = widget.showSelectedOnly;
    //if (price.length>0) price = parseInt(price); else price=0;
    var ads = ab_value(widget.id+'_filter_n');
    if (ads.length>0) ads = parseInt(ads); else ads=0;
    var selected_hive = $('in_hive_selector') ? $F('in_hive_selector') : null;
    for(var i=0;i < len; i++) {
      var blog = this.rows[i];
      if (stars>0 && (this.extra_rows[blog.uid] == undefined || this.extra_rows[blog.uid]<stars)) {
        blog.fa = Array();
        continue;
      }
      var filtered_adspots = [];
      var sel = false;
      for(var j=0; j< blog.a.length; j++) {
        var adspot = blog.a[j];
        var rates = adspot['r'][adformat]
        if (!rates) continue;
        if (flash && rates[rates.length-1]>=0) continue;
        if (selOnly && !sel && widget.selectionList[adspot.uid]) sel=true;
        if (!sel) {
          if (ads>0 && adspot['n']>ads) continue;
          if (pageviews>0 && adspot['p'][0]>pageviews) continue;
          if (price>0 && rates[0]>price) continue;
          if (!is_adspot_in_hive(adspot, selected_hive)) continue;
          if (optimal_position && adspot['op']!=optimal_position) continue;
        }
        filtered_adspots.push(adspot);
      }
      blog.fa = filtered_adspots;
      if (!sel && !basic_search) {
        if (selOnly) continue;
        if (focus.length>0 && blog['focus'].indexOf(focus)==-1) continue;
        if (politics.length>0 && blog['politics']!=politics) continue;
        if (gender.length>0 && blog['sex']!=gender) continue;
        if (country.length>0 && blog['country']!=country) continue;
        if (ustate.length>0 && blog['state']!=ustate) continue;
        if (city.length>0 && blog['city']!=city) continue;
        if (profession.length>0 && blog['profession']!=profession) continue;
        if (age.length>0 && (blog['age'] < age_min || blog['age'] > age_max)) continue;
        if (keywords.length>0 && blog['t'].toLowerCase().indexOf(keywords)==-1 && blog['s'].toLowerCase().indexOf(keywords)==-1 && blog['u'].toLowerCase().indexOf(keywords)==-1) continue;
      }
      else{
        if (keywords.length>0 && blog['t'].toLowerCase().indexOf(keywords)==-1 && blog['s'].toLowerCase().indexOf(keywords)==-1 && blog['u'].toLowerCase().indexOf(keywords)==-1) continue;
      }
      if (for_blogs){
        ret.push(blog);
      }
      else{
        if (filtered_adspots.length>0) ret.push(blog);
      }
    }
    if (this.debug) {
      var t2= new Date();
      window.status = ('filter: '+ret.length+'/'+this.rows.length+' blogs, '+(t2-t1)+' ms');
    }
    // make sure adformat display is updated
    Element.update(widget.id+'_adformat_display',ab_value(widget.id+'_select_adformat').split('|')[0]+' '+ab_value(widget.id+'_select_adformat').split('|')[1]);
    return ret;
  },

  getObjectByUID: function(uid) {
    var len = this.rows.length;
    for(var i=0; i< len; i++) {
      var blog = this.rows[i];
      if (blog.uid == uid) return blog;
      for(var j=0; j< blog.a.length; j++) {
        if (blog.a[j].uid == uid) return blog.a[j];
      }
    }
    return null;
  },

  rows: [],
  
  downloaded_blogs: []
}

function Element_is_in_the_array(searchedarray,searchingelement){
    for (var array_counter=0;array_counter<searchedarray.length;array_counter++){
        if (searchedarray[array_counter] == searchingelement){
            return true;
        }
    }
    return false;
}

function renderBlog(i,blog) {
  var tbody = Array('<tr class="',(i%2?'e':'o'),'"><td colspan="4" class="f">','<div class="f1"><a href="',blog['u'],'" target="_blank">',blog['t'].escapeHTML(),'</a></div>');
  if (this.showDetails) {
    tbody.push('<div class="f2">');
    if (blog['l']) {
      var lw = '60';
      var lh = '60';
      if (blog['lh']) {
        lw = blog['lw'];
        lh = blog['lh'];
      }
	  tbody = tbody.concat(['<img src="http://web.blogads.com/cached/logo_blog_',blog['uid'],'" alt="Logo" align="left" width="',lw,'" height="',lh,'" />']);
    }
    tbody.push(blog['s'].escapeHTML());
    tbody.push('</div>');
  }
  tbody = tbody.concat(['<br clear="both"/>','<table class="adspots"><tbody>']);
  var len = blog.fa.length;
  for (var a=0; a < len; a++) {
    var adspot = blog.fa[a];
    tbody = tbody.concat(['<tr><td class="adspot_title">','<div class="f5">(',(adspot.n==0?'no':adspot.n),' ad',(adspot.n!=1?'s':''),' running)</div>','<div class="f1">',adspot['t'].escapeHTML(),'</div>']);
    if (adspot.f!=null) {
      tbody = tbody.concat(['<div class="f3">reserved through ',adspot.f,'</div>']);
    }
    var adformat = ab_value(this.id+'_select_adformat').split('|')[0];
    var termidx = $(this.id+'_select_term').selectedIndex;
    var rates = adspot.r[adformat]
    var price = rates[termidx];
    var flash = ab_value(this.id+'_select_adformat').split('|')[1] == 'flash';
    if (flash) {
      var mult = -rates[rates.length-1];
      if (mult<1) mult = 1;
      price = Math.round(price * mult);
    }
    var pv = adspot.p[termidx];
    if ((price!=0) && (pv!=0)){
      var ecpm = price/(pv/1000);
    }
    else{
      var ecpm = 0;
    }
    tbody = tbody.concat(['</td><td class="adspot_price">$',price.humanreadable(),'</td><td class="adspot_pv">',pv.humanreadable(),'</td><td class="adspot_cpm">($',ecpm.toFixed(2),')</td><td class="ckbox">','<input type="checkbox" name="',this.id,'_selections:list" value="',adspot.uid,'" onclick="return $(\'',this.id,'\').selectionChangeAt(this);" onchange="return $(\'',this.id,'\').selectionChangeAt(this);"',(!this.selectionList[adspot.uid]?'':' checked="checked"'),'/>','</td></tr>']);
  }
  tbody.push('</tbody></table></td></tr>');
  return tbody.join('');
}

function renderHiddenAdspots() {
  var sel_keys = this.selectionList.keys();
  var unsel_keys = Array();
  var tbody = Array();
  var rows = this.getRows();
  for (var i=this.skip; i< this.skip + this.count && i < rows.length; i++) {
    for (var a=0; a < rows[i].fa.length; a++) {
      if (this.selectionList[rows[i].fa[a].uid]) {
        unsel_keys[rows[i].fa[a].uid] = true;
      }
    }
  }
  for (var i=0; i < sel_keys.length; i++) {
    if (unsel_keys[sel_keys[i]]) continue;
    tbody = tbody.concat(['<input type="hidden" name="',this.id,'_selections:list" value="',sel_keys[i],'"/>']);
  }
  return tbody.join('');
}

function renderNoBlogs() {
  return '<tr><td colspan="4" class="f">No blogs found matching your criteria</td></tr>';
}

function renderBlogHeader() {
  var data = ab_jsondata[this.id];
  var thead = ['<table class="adspots"><tbody><tr class="ab_header"><th class="adspot_title">'];
  thead = thead.concat(['<div id="',this.id,'_term_display" style="display:',(this.lockTerm?'block':'none'),'; float:left;">&nbsp;</div>','<div id="',this.id,'_adformat_selector" style="display:',(this.lockAdformat?'none':'block'),'; float:left;">Ad unit<br><select id="',this.id,'_select_adformat" name="',data['adformatcontrol'],'" onchange="$(\'',this.id,'\').runFilter()">']);
  for(var i=0; i< data['adformatnames'].length; i++) {
    thead = thead.concat(['<option value="',data['adformatnames'][i],'">',data['adformats'][data['adformatnames'][i]],'</option>']);
  }
  thead = thead.concat(['</select></div>','<div id="',this.id,'_term_selector" style="display:',this.lockTerm?'none':'block',';float:left;">Duration<br><select id="',this.id,'_select_term" name="',this.id,'_term_selector" onchange="$(\'',this.id,'\').redrawPane();$(\'',this.id,'\').refreshTotals();">']);
  for(var i=0; i< data['termnames'].length; i++) {
    thead = thead.concat(['<option value="',data['termnames'][i],'">',data['terms'][data['termnames'][i]],'</option>']);
  }
  thead = thead.concat(['</select></div>','<div id="',this.id,'_adformat_display" style="display:',(this.lockAdformat?'block':'none'),';margin-left:90px;float:left;">&nbsp;</div>','</th><th class="adspot_price">Price</th><th class="adspot_pv">~Ad views</th><th class="adspot_cpm">~CPM</th><th>Select</th></tr></tbody></table>']);
  return thead.join('');
}

function selectionChangeAt(ckbox) {
  var checkbox_aux = $(this.id+'_checkbox_aux');
  // alter selection list
  if (ckbox.checked) {
    // expand selection
    if (this.selectionList.keys().length == 0) {
      // lock down adformat
      var flash = ab_value(this.id+'_select_adformat').split('|')[1] == 'flash';
      Element.update(this.id+'_adformat_display',ab_value(this.id+'_select_adformat').split('|')[0]+' '+ab_value(this.id+'_select_adformat').split('|')[1]);
      if (!this.lockAdformat) {
        $(this.id+'_adformat_selector').style.display = 'none';
        $(this.id+'_adformat_display').style.display = 'block';
      }
    }
    var adspot = this.dataSet.getObjectByUID(ckbox.value);
    this.selectionList[ckbox.value] = adspot;
    checkbox_aux.value = '1';
  } else {
    // narrow selection
    delete this.selectionList[ckbox.value];
    if ((this.selectionList.keys().length == 0) && !this.lockAdformat) {
      // unlock adformat
      $(this.id+'_adformat_display').style.display = 'none';
      $(this.id+'_adformat_selector').style.display = 'block';
    }
    checkbox_aux.value = '0';
  }
  // refresh totals
  this.refreshTotals();

  return true;
}

function refreshTotals() {
  var num = this.selectionList.keys().length;
  Element.update(this.id+'_infoNumAdspots',num.toString());
  var pvs = 0;
  var price = 0;
  var adformat = ab_value(this.id+'_select_adformat').split('|')[0];
  var flash = ab_value(this.id+'_select_adformat').split('|')[1] == 'flash';
  var termidx = $(this.id+'_select_term').selectedIndex;
  var adspots = this.selectionList.values();
  for(var i=0; i< num; i++) {
    if (adspots[i].r[adformat]) {
      var rates = adspots[i].r[adformat];
      var aprice = rates[termidx];
      if (flash) {
        var mult = -rates[rates.length-1];
        if (mult<1) mult=1;
        aprice = Math.round(aprice * mult);
      }
      price += aprice;
      pvs += adspots[i].p[termidx];
    }
  }
  Element.update(this.id+'_infoTotalPvs',pvs.humanreadable());
  Element.update(this.id+'_infoTotalPrice',price.humanreadable());
}

function ab_unselect_adspots(field) {
  if (!confirm('You are about to clear all selections. Are you sure?')) return false;
  var ws = $(field);
  ws.selectionList = $H({});
  ws.redrawPane();
  if (!ws.lockAdformat) {
    // unlock adformat
    $(field+'_adformat_display').style.display = 'none';
    $(field+'_adformat_selector').style.display = 'block';
  }
  ws.refreshTotals();
  return false;
}

function ab_toggle_advanced(field) {
  var adiv = $(field+'_advanced_filters');
  adiv.style.display = (adiv.style.display=='block'?'none':'block');
  return false;
}

function ab_reset_advanced(field) {
  var filters = $$('div#'+field+'_advanced_filters select');
  for(var i=0;i < filters.length; i++) {
    filters[i].selectedIndex = 0;
  }
  filters = $$('div#'+field+'_advanced_filters input');
  for(var i=0;i < filters.length; i++) {
    filters[i].value = '';
  }
  return false;
}

function ab_advancedFilter(field,advanced_filter_close){
  if (advanced_filter_close=='1'){
    ab_toggle_advanced(field);
    $(field).runFilter();
    return false;
  }
  else if (advanced_filter_close=='0'){
    $(field).runFilterNonOptimal();
  }
  else {
    $(field).runFilter();
  }
}

function ab_toggleShowSelected(field) {
  var ws = $(field);
  ws.showSelectedOnly = !ws.showSelectedOnly;
  Element.update(field+"_showSelectedButton", !ws.showSelectedOnly ? 'Show only selected blogs' : 'Show all blogs');
  $(field).runFilter();
  return false;
}

function ab_toggleShowDetails(field) {
  var ws = $(field);
  ws.showDetails = !ws.showDetails;
  Element.update(field+"_showDetailsButton", ws.showDetails ? 'Hide blog details' : 'Show blog details');
  $(field).redrawPane();
  return false;
}

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

function ab_processAJAXResults(field,data) {
  var xdata = Array();
  var bref = Array();
  for (var i=0;i < data.length; i++) {
    var row = data[i];
    if(row==undefined) continue;
    if (!row['b']) {
       xdata.push(row);
       xdata[xdata.length-1].a = Array();
       bref[row['uid']] = xdata.length-1;

    } else {
      xdata[bref[row['b']]].a.push(row);
    }
  }
  var ws = $(field);
  ws.dataSet.rows = xdata;

  // set preselected adspot uids
  var adseldiv = $(field + "_sel_adspots");

  try {
    var adsel = (adseldiv.innerText!=undefined)?adseldiv.innerText.split(','):adseldiv.textContent.split(',');
    for(var i=0;i< adsel.length; i++) {
      var as = ws.dataSet.getObjectByUID(adsel[i]);
      if (as!=null) ws.selectionList[adsel[i]]= as;
    }
    if (!ws.lockAdformat && (ws.selectionList.keys().length>0)) {
      // lock down adformat
      Element.update(ws.id+'_adformat_display',ab_value(ws.id+'_select_adformat').split('|')[0]+' '+ab_value(ws.id+'_select_adformat').split('|')[1]);
      $(ws.id+'_adformat_selector').style.display = 'none';
      $(ws.id+'_adformat_display').style.display = 'block';
    }
  } catch(e) { }
//  ws.refreshTotals();

  var mininetworks_ad_buy_1 = this.query.indexOf("mininetworks_ad_buy_1") != -1;
  var oriEmptyRow = ws.renderEmptyRow;
  if (mininetworks_ad_buy_1) {
      ws.renderEmptyRow = '<tr><td colspan="4" class="f"></td></tr>'; // temporary so that the list appears empty after first phase
  }
  ws.runFilter_for_blogs();
  if (mininetworks_ad_buy_1) {
      ws.renderEmptyRow = oriEmptyRow;
  }
}

function adspot_processAJAXResults(field) {
  var ws = $(field);
  var blog_index_array = new Array();
  for (var j=0; j<ws.dataSet.rows.length;j++){
    blog_index_array[ws.dataSet.rows[j]['uid']] = j;
  }
  var index = 0;
  for (var i=0;i < data.length; i++) {
    var row = data[i];
    if(row==undefined) continue;
    index = blog_index_array[row['b']];
    ws.dataSet.rows[index].a.push(row);
  }
  
  // set preselected adspot uids
  var adseldiv = $(field + "_sel_adspots");

  try {
    var adsel = (adseldiv.innerText!=undefined)?adseldiv.innerText.split(','):adseldiv.textContent.split(',');
    for(var i=0;i< adsel.length; i++) {
      var as = ws.dataSet.getObjectByUID(adsel[i]);
      if (as!=null) ws.selectionList[adsel[i]]= as;
    }
    if (!ws.lockAdformat && (ws.selectionList.keys().length>0)) {
      // lock down adformat
      Element.update(ws.id+'_adformat_display',ab_value(ws.id+'_select_adformat').split('|')[0]+' '+ab_value(ws.id+'_select_adformat').split('|')[1]);
      $(ws.id+'_adformat_selector').style.display = 'none';
      $(ws.id+'_adformat_display').style.display = 'block';
    }
  } catch(e) { }

  ws.refreshTotals();

  ws.runFilter();

  if ($(field+'_filter_pageviews')) { Form.Element.enable(field+'_filter_pageviews'); }
  if ($(field+'_filter_price')) { Form.Element.enable(field+'_filter_price'); }
  if ($(field+'_filter_n')) { Form.Element.enable(field+'_filter_n'); }
  if ($(field+'_filter_optimal_position')) { Form.Element.enable(field+'_filter_optimal_position'); }

  if ($(field+'_select_term')) { Form.Element.enable(field+'_select_term'); }
  if ($(field+'_select_adformat')) { Form.Element.enable(field+'_select_adformat'); }
}

function ab_get_in_hive_options(hives_data) {
  var hive_dropdown_options = Array();
  hive_dropdown_options.push('<option value="">Any</option>');
    for (var i = 0; i < hives_data.length; i++) {
	var row = hives_data[i];
	var hive_title = row['t'];
	// hive titles can be very long
	// take the first 4 words only
	var hive_abbr_title = get_n_words(hive_title, 4);
	// hive_abbr_title = hive_title;
	hive_dropdown_options.push('<option value="' + row['uid'] + '">' + hive_abbr_title + '</option>');
    }
    return hive_dropdown_options.join('');
}

function ab_fill_hive_selector() {
  var hive_dropdown_options = $('in_hive_selector').options;
  if ( 1 == hive_dropdown_options.length  ) {
      $('in_hive_selector').disable();
      new Ajax.Request('ba_mininetworksfolder_data_json', {
	  method: 'get',
	  parameters: 'pv_limit=top',
	  onSuccess: function(resp, jsonObj) {
	      var data = eval(resp.responseText); //FIXME: this.evalResponse();
	      var hive_options = ab_get_in_hive_options(data.response);
              var hive_selector_html = [];
              hive_selector_html.push('<select id="in_hive_selector" name="in_hive" multiple="multiple" size="6">');
              hive_selector_html.push(hive_options);
              hive_selector_html.push('</select>');
              Element.update('in_hive_selector_container', hive_selector_html.join(''));
	      $('in_hive_selector').enable();
	  },
	  onFailure: function() {
	      alert('An error happened during fetching data from remote server.\n Please try again later.');
	  }
      });
  }
}

function ab_initPage(field,bShowSelectedOnly,bShowDetails,bLockTerm,bLockAdformat) {

  var myData = new Object;

  var seladspots = ($(field + "_sel_adspots").innerText!=undefined)?$(field + "_sel_adspots").innerText.split(','):$(field + "_sel_adspots").textContent.split(',');
  if (seladspots.length>0) is_adspots_list=1;

  Object.extend(myData,ABDataSet);
  myData.rows = Array();
  myData.downloaded_blogs = Array();
  myData.extra_rows = null;
  var ws = $(field);
  Object.extend(ws,ABWidget);
  ws.renderRow = renderBlog;
  ws.renderEmptyRow = renderNoBlogs;
  ws.renderHeader = renderBlogHeader;
  ws.renderHiddenSelection = renderHiddenAdspots;
  ws.dataSet = myData;

  ws.showSelectedOnly = bShowSelectedOnly || false;
  ws.showDetails = bShowDetails || false;
  ws.lockTerm = bLockTerm || false;
  ws.lockAdformat = bLockAdformat || false;

  ws.selectionList = $H({});
  ws.selectionChangeAt = selectionChangeAt;
  ws.refreshTotals = refreshTotals;

  ws.initialize();
  
  // initialise term and adformat selectors
  var term = ($(field + "_sel_term").innerText!=undefined)?$(field + "_sel_term").innerText:$(field + "_sel_term").textContent;
  var term_selector = $(field + "_select_term");
  var termidx = 0;
  if (term_selector.options) {
    for(termidx=term_selector.options.length-1;termidx >= 0;termidx--) {
      if (term_selector.options[termidx].value == term) break;
    }
    term_selector.selectedIndex = termidx;
  }
  // update static term display
  Element.update(field + '_term_display', ab_jsondata[field]['terms'][term]);

  var adformat = ($(field + "_sel_adformat").innerText!=undefined)?$(field + "_sel_adformat").innerText:$(field + "_sel_adformat").textContent;
  // setting the value of the image/flash dropdown
  var image_type = ($(field + "_sel_image_type").innerText!=undefined)?$(field + "_sel_image_type").innerText:$(field + "_sel_image_type").textContent;
  if (image_type=='image'){
    image_type='jpg/gif';
  }
  var adformat_selector = $(field + "_select_adformat");
  if (adformat_selector.options) {
    for(var i=0;i< adformat_selector.options.length;i++) {
      if ((adformat_selector.options[i].value.split('|')[0] == adformat) && (adformat_selector.options[i].value.split('|')[1] == image_type)) {
        adformat_selector.selectedIndex = i;
        break;
      }
    }
  }

  // update static adformat display
  Element.update(field + '_adformat_display', adformat + ' ' + image_type);

  // download data
  var params = '';
  if (ab_jsondata[field]["lto"]!='no') { params += (params==''?'':'&') + 'lto='+ab_jsondata[field]["lto"]; }
  if (!ab_jsondata[field]["suppress_inactive"]) { params += (params==''?'':'&') + 'suppress_inactive=0'; }
  if (ab_jsondata[field]["pv_limit"]!='') { params += (params==''?'':'&') + 'pv_limit='+ab_jsondata[field]["pv_limit"]; }
  if (ab_jsondata[field]["page_type"]!='') { params += (params==''?'':'&') + 'page_type='+ab_jsondata[field]["page_type"]; }
  params += (params==''?'':'&') + 'only_blogs=1';

  var headers = [];
  if (ab_jsondata[field]['suppress_browser_cache']!=0) {
    headers = [ "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" ];
  }
  if ($(field+'_filter_pageviews')) { Form.Element.disable(field+'_filter_pageviews'); }
  if ($(field+'_filter_price')) { Form.Element.disable(field+'_filter_price'); }
  if ($(field+'_filter_n')) { Form.Element.disable(field+'_filter_n'); }
  if ($(field+'_filter_optimal_position')) { Form.Element.disable(field+'_filter_optimal_position'); }

  if ($(field+'_select_term')) { Form.Element.disable(field+'_select_term'); }
  if ($(field+'_select_adformat')) { Form.Element.disable(field+'_select_adformat'); }

  ab_progress(field,'Downloading data...',0);
  is_adspot_generating_ajax_running = true;
  new Ajax.Request(ab_jsondata[field]["datasource"], {
    method: 'get',
    parameters: params,
    requestHeaders: headers,
    onSuccess: function(resp, jsonObj) {
      is_adspot_generating_ajax_running = false;
      var data = eval(resp.responseText); //FIXME: this.evalResponse();
      ab_processAJAXResults(field,data.response);
      if (is_adspots_list!=1) ab_progress(field,'',0);
    },
    onFailure: function() {
      ab_progress(field,'',0);
      is_adspot_generating_ajax_running = false;
      alert('An error happened during fetching data from remote server.\n Please try again later.');
    },
    onLoading: function() { ab_progress(field,null,25); },
    onLoaded: function() { ab_progress(field,null,50); },
    onInteractive: function() { ab_progress(field,null,75); },
    onComplete: function() { if (is_adspots_list!=1) ab_progress(field,'',0); }
  });
  
  adspot_rendering(field);
                   
  if (!(ab_jsondata[field]["datasource2"]==undefined) && ab_jsondata[field]["datasource2"]!='') {
   new Ajax.Request(ab_jsondata[field]["datasource2"], {
    method: 'get',
    requestHeaders: headers,
    onSuccess: function(resp, jsonObj) {
      var data = eval(resp.responseText);
      var ws = $(field);
      ws.dataSet.extra_rows = $H(data);
    },
    onFailure: function() {
      alert('An error happened during fetching additional data from remote server.\n Please try again later.');
    }
   });
  }
    if ( $('in_hive_selector') ) {
	Event.observe('in_hive_selector', 'click', ab_fill_hive_selector);
    }
}

function adspot_rendering(field){
  if (!is_adspot_generating_ajax_running){
    var headers = [];
    if (ab_jsondata[field]['suppress_browser_cache']!=0) {
      headers = [ "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" ];
    }
    var params = '';
    if (ab_jsondata[field]["lto"]!='no') { params += (params==''?'':'&') + 'lto='+ab_jsondata[field]["lto"]; }
    if (!ab_jsondata[field]["suppress_inactive"]) { params += (params==''?'':'&') + 'suppress_inactive=0'; }
    if (ab_jsondata[field]["pv_limit"]!='') { params += (params==''?'':'&') + 'pv_limit='+ab_jsondata[field]["pv_limit"]; }
    if (ab_jsondata[field]["page_type"]!='') { params += (params==''?'':'&') + 'page_type='+ab_jsondata[field]["page_type"]; }
    params += (params==''?'':'&') + 'only_adspots=1';
  
    new Ajax.Request(ab_jsondata[field]["datasource"], {
        method: 'get',
        parameters: params,
        requestHeaders: headers,
        onSuccess: function(resp, jsonObj) {
          is_adspot_generating_ajax_running = false;
          var data2 = eval(resp.responseText); //FIXME: this.evalResponse();
          data = data2.response;
          adspot_processAJAXResults(field);
          if (is_adspots_list==1) ab_progress(field,'',0);
        },
        onFailure: function() {
          is_adspot_generating_ajax_running = false;
          alert('The adspot data isn\'t available');
        },
        onComplete: function() { if (is_adspots_list==1) ab_progress(field,'',0); }
      });
  }
  else{
    setTimeout ( 'adspot_rendering("' + field + '")', 200 );
  }
}
