// resultRecord.js: dynamically update lower half of main screen
// Copyright (c) 2009, Archivista GmbH, m. allan noah

// global pointer to self if caller wants to use it
var GRR = '';

var ResultRecord = Class.create({

  // our functions
  initialize: function(element,table,url,tab) {

    this.element = element;
    this.table = table;
    this.url = url;
    this.tab = tab;

    if(!this.element || !this.table || !this.url.length || !this.tab.length)
      return;

    // we parse our id, and use it to find other pieces
    this.tabs = $(this.element.id+'Tabs');
    this.left = $(this.element.id+'DetailScroll');
    this.right = $(this.element.id+'Image');

    if(!this.tabs || !this.left || !this.right)
      return;

    // reset scroll offset
    this.left.scrollLeft = 0;
    this.left.scrollTop = 0;

    // add handler to the tabs
    var tabs = this.tabs.getElementsByTagName("a");
    for(var i=0; i<tabs.length; i++){
    if(tabs[i].id == 'EditTab')
        tabs[i].onclick = this.makeActiveTab.bind(this,tabs[i].id,'extactions','select_action','');
      else
        tabs[i].onclick = this.makeActiveTab.bind(this,tabs[i].id,'','','');
    }

    // changed by setDoc
    this.index = '';
    this.doc   = '';
    this.page  = '';
  },

  setDoc: function(index,doc,page){

    this.index = index;
    this.doc = doc;
    this.page = page;

    // use AJAX call to get JSON struct of rows
    var params = {
      go_result_record:1,
      result_index:index,
      result_doc:doc,
      result_page:page
    };
   
    new Ajax.Request(this.url,
      {
        method:'post',
        parameters: params,
        requestHeaders: {Accept: 'application/json'},
        onSuccess: this.setDocSuccess.bind(this),
        onFailure: this.setDocFailure.bind(this)
      }
    );

    return this.setImage();
  },

  setImage: function(){
    var obj = $('noteImage');
    if(!obj) return;

    var wrap = obj.parentNode.parentNode;
    if(!wrap) return;
    // flaming hack- IE6 gives wrong size
    // for newly displayed divs. use content div instead
    if(wrap.id == 'avimage')
      wrap = $('Content');
    if(!wrap) return;

    // allow editing if user is in edit mode on page view
    var edit = 0;
    if(GRT.view == 'Page' && GRT.tab == 'EditTab'){
      edit = 1;
    }

    // dont zoom if user is on main view
    var zoom = GRT.zoom;
    if(GRT.view == 'Main'){
      zoom = 0;
    }

    obj.onload = initNotes.bind(
      this,this.url,this.doc,this.page,edit,GRT.rotate,zoom
    );

    var mode = 0; // decide if we want to load full/reduced image copy
    if(GRT.view == 'Page'){
		  mode = 1;
		}
		if (this.doc>0) {
      obj.src = this.url + "?go_image_" + this.doc + '_' + this.page + '_'
        + wrap.offsetWidth + '_' + wrap.offsetHeight + '__' + mode + '_'
        + GRT.rotate + '_' + zoom;
		} else {
		  // is only a dummy button_pixel.gif image, do not load it
		}
    return true;
  },

  // callback used by ajax onSuccess
  setDocSuccess: function(transport){
    //alert(transport.responseText);
    try{
      var json = transport.responseText.evalJSON();
    }
    catch(err){
      //alert(err);
      return false;
    }

    // setup the 'view' table
    for (var name in json){
      if(name == 'Treffer') continue; // an array
      var obj = $('Detail_view_' + name);
      if(!obj) continue;
      obj.innerHTML = json[name];
    }

    // show/hide Treffer row (fulltext search hits)
    var obj = $('Detail_view_Treffer_row');
    if(obj && !json['Treffer'].length){
      obj.style.display='none';
    }
    else if(obj){
      obj.style.display='';
    }

    // draw Treffer contents
    var obj = $('Detail_view_Treffer');
    if(obj){
      obj.innerHTML='';
      for(i=0; i<json['Treffer'].length; i++){
        var link = document.createElement('a');
        link.onclick=this.table.setDoc.bind(this.table,this.index,this.doc,json['Treffer'][i]);
        link.appendChild(document.createTextNode(json['Treffer'][i]));
        link.setAttribute('href','#');
        link.style.marginRight='6px';
        link.style.padding='2px';
        if(this.page == json['Treffer'][i]){
          link.style.background = '#efefef';
          link.style.border = '1px solid #aaaaaa';
        }
        obj.appendChild(link);
				if ((i % 15)==0 && i>0) {
				  var br = document.createElement('br')
					obj.appendChild(br);
				}
      }
    }

    // user does not have edit rights
    // move off tab, and hide it
    if(!json.edit){
      var tab = $("EditTab");
      if(tab.className == "Active"){
        this.makeActiveTab("ViewTab",'','','');
      }
      tab.style.display='none';
    }

    // user does have edit rights
    // show tab, and fill in details
    else{

      var tab = $("EditTab");
      tab.style.display='inline';

      for (var name in json){
        var obj = $('Detail_edit_' + name);
        if(!obj) continue;
  
        if(obj.tagName == 'SELECT'){
          obj.selectedIndex = 0;
          for (i = 0; i < obj.options.length; i++) {
            if(obj.options[i].value == json[name]){
              obj.selectedIndex = i;
              break;
            }
          }
        }
    
        else if(obj.tagName == 'INPUT' && obj.getAttribute("type") == 'checkbox'){
          obj.checked = json[name];
        }
  
        else if(obj.tagName == 'INPUT' && obj.getAttribute("type") == 'text'){
          obj.value = json[name];
        }
    
        else if(obj.tagName == 'TEXTAREA'){
          //obj.value = json[name].replace(/<br>/g,'\r\n');
          obj.value = json[name];
        }
  
        else {
          obj.innerHTML = json[name];
        }
      }
    }

    return;
  },

  // callback used by ajax onFailure
  setDocFailure: function(transport){
    return false;
  },

  // used to switch between view/search/edit tabs
  makeActiveTab: function(id,extid,extsel,selval){

    var obj = $(id);
    if(!obj) return;

    this.tab = id;

    // remove dotted outline
    obj.blur();
  
    // use AJAX call to update session on server
    new Ajax.Request(this.url,
      {
        method:'post',
        parameters: {
          go_result_tab:1,
          result_tab:id
        }
      }
    );

    // make colored bar
    var wrap = $('RecordDetailScroll');
    if(!wrap) return false;
    //alert(wrap.className);
    wrap.className = id.replace(/Tab$/,'');
    //wrap.setAttribute('class', id.replace(/Tab$/,''));
    //wrap.setAttribute('className', id.replace(/Tab$/,''));
    //alert(wrap.className);
  
    // find table
    wrap = $(id + 'le');
    if(!wrap) return false;
  
    makeActive(obj);
    makeVisible(wrap);
  
    if(this.table)
      this.table.makeActiveTab(this.tab,extid,extsel,selval);

    return false;
  },

  getHeight: function(){
    return this.element.offsetHeight;
  },

  setHeight: function(height){
    var delta = height - this.element.offsetHeight;

    if(this.left.offsetHeight + delta < 0)
      delta = this.left.offsetHeight * -1;
    if(this.right.offsetHeight + delta < 0)
      delta = this.right.offsetHeight * -1;

    this.left.style.height = this.left.offsetHeight + delta + 'px';
    this.right.style.height = this.right.offsetHeight + delta + 'px';
    this.setImage();
    return this.element.offsetHeight;
  }
  
});


