

document.write('<style type="text/css">.tabber{display:none;}<\/style>');

/*==================================================
  Set the tabber options (must do this before including tabber.js)
  ==================================================*/
var tabberOptions = {

  'cookie':"tabber", /* Name to use for the cookie */

  'onLoad': function(argsObj)
  {
    var t = argsObj.tabber;
    var i;

    /* Optional: Add the id of the tabber to the cookie name to allow
       for multiple tabber interfaces on the site.  If you have
       multiple tabber interfaces (even on different pages) I suggest
       setting a unique id on each one, to avoid having the cookie set
       the wrong tab.
    */
    if (t.id) {
      t.cookie = t.id + "_" + t.className + "_" + t.cookie;
    }

    /* If a cookie was previously set, restore the active tab */
    i = parseInt(getCookie(t.cookie));
    if (isNaN(i)) { return; }
    t.tabShow(i);
  
  },

  'onClick':function(argsObj)
  {
    var c = argsObj.tabber.cookie;
    var i = argsObj.index;
    
    setCookie(c, i);
  }
};

/*==================================================
  Cookie functions
  ==================================================*/
function setCookie(name, value, expires, path, domain, secure) {
    document.cookie= name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires.toGMTString() : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}

function getCookie(name) {
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1) {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
    } else {
        begin += 2;
    }
    var end = document.cookie.indexOf(";", begin);
    if (end == -1) {
        end = dc.length;
    }
    return unescape(dc.substring(begin + prefix.length, end));
}
function deleteCookie(name, path, domain) {
    if (getCookie(name)) {
        document.cookie = name + "=" +
            ((path) ? "; path=" + path : "") +
            ((domain) ? "; domain=" + domain : "") +
            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    }
}


var Genesys = {
  openChooser: function(a) {
    chooser = new Selector('div.chooser').findElements(a.parentNode.parentNode).first();
    chooser.opener = a;
    Element.hide(a);
    new Effect.Grow(chooser, { duration: .5 });
    return false;
  },
  closeChooser: function(a) {
    var chooser = a.parentNode;
    new Effect.Puff(chooser, { duration: .5, afterFinish: function() { Element.show(chooser.opener); } });
    return false;
  },
  updateChooser: function(el) { 
    var anc = el.parentNode.parentNode.parentNode;
    anc.findFirst = function(tag) { return new Selector(tag).findElements(this).first() };
    var text = anc.findFirst("span");
    var hidden = anc.findFirst('input[type=hidden]');
    var dropdown = anc.findFirst('select');
    var textInput = anc.findFirst('input[type=text]');
    ii = $A(dropdown.options).map(function(o) { return o.selected ? o.text : null }).compact(); 
    if(/\w/.test(textInput.value)) ii.push(textInput.value.replace(/\|/g, ''));  
    text.innerHTML = ii.join(", ");
    hidden.value = ii.join("|");
  },
  
  computeAge: function() {
    var dp = $A(this.parentNode.getElementsByTagName("select")).map($F).reject(function(n) { return typeof(n) != "string" || isNaN(n) || !n; });
  
    if(dp.length == 3) {
      var d = new Date(dp[2], dp[1] - 1, dp[0]);
      var now = new Date();
      var age = now.getFullYear() - d.getFullYear();
      if(!(now.getMonth() > d.getMonth() || (now.getMonth() == d.getMonth() && now.getDate() >= d.getDate()))) age--;
    } else age = "???";
    new Selector(".age").findElements(this.parentNode.parentNode).first().innerHTML = age;
  },
  
  patchAges: function(f) {
    $$(".age").each(function(n) {
      $A(n.parentNode.parentNode.getElementsByTagName("select")).each(function(s) {
        s.onchange = Genesys.computeAge;
      });
    });
  },
  
  checkPara: function(field) {
    return /^\d{4}$/.test(field.value) && (p = field.value.split("").map(function(n) { return parseInt(n); }))[3] >= (p[0] + p[1]);
  },
  
  nemaspChanged: function(f) {
    form = f.form;
    form.elements['spermiocitogramma[nemasp_totali]'].value = 
      parseFloat(form.elements['spermiocitogramma[volume]'].value) *
      parseFloat(form.elements['spermiocitogramma[nemasp_ml]'].value) || "";
  },
  
  updateSpermMorphGfx: function(ctx) {
    this.updateSpermGfx(ctx);
  },
  updateSpermMotilGfx: function(ctx) {
    this.updateSpermGfx(ctx);
  },
  
  colorSchemes: {},
  colorScheme: function(which) {

    if(this.colorSchemes[which]) return this.colorSchemes[which];

    var colors;
    switch(which) {
      case 'forma':
        colors = ['green', 'red']; break;
      case 'motil':
        colors = ['green','blue', 'orange','purple', 'red', 'white']; break;
      default:
        return this.colorSchemes[which] = Plotkit.colorScheme();
    }
   
    return this.colorSchemes[which] =  $A(colors).map(function(c) {
      return MochiKit.Color.Color[c + "Color"]();
    });   
  },
  updateSpermGfx: function(ctx) {
    var options = {
       "IECanvasHTC": "/plotkit/iecanvas.htc",
       "padding": {left: 0, right: 0, top: 10, bottom: 30},
       "drawYAxis": false
    };
    var labelSel = new Selector("label");
    
    (ctx ? new Selector("canvas").findElements(this.findElement(ctx, "fieldset", "parentNode")) : $$('canvas')).each(
    function(canvas) {
     
      options.xTicks = [];
      var total = 0;
      var error = false;
      var emptyField = null;
      var fillMe = -1;
      
      var data = new Selector('input[type=text]').findElements(canvas.parentNode.parentNode).map(function(t, idx) {
        var n = parseFloat(t.value)
        if(isNaN(n)) {
          fillMe = emptyField ? -1 : idx;
          emptyField = t;
          n = 0;
        }
        total += n;
        if(total > 100) {
          error = true;
          throw $break;
        }
        var label = t.parentNode.tagName.toLowerCase() == "label" ? t.parentNode : labelSel.findElements(t.parentNode).first();
          label = label.innerHTML.stripTags().strip().replace(/%|ipo /g, "");
        options.xTicks.push({ v: idx, label: label });
        return [idx, n];
      });
      
      if(fillMe > -1 && data.length > 1) {
        emptyField.value = data[fillMe][1] = 100 - total;
        total = 100;
      }
      if(canvas._plotter) canvas._plotter.clear();
      
      if(total == 0) throw $continue;
      
      if(total != 100 && data.length > 1 && !emptyField) error = true;
      
      if(error) {
        Element.addClassName(canvas.parentNode.parentNode, "error");
        throw $continue;
      }
      Element.removeClassName(canvas.parentNode.parentNode, "error");
      if(data.length == 1) {
        
        data.push([1, 100 - total]);
        options.xTicks.push( { v: 1, label: "Patolog." });
        
        options.colorScheme = Genesys.colorScheme('forma');
      } else {
        options.colorScheme = Genesys.colorScheme('motil');
        if(total < 100) {
          options.xTicks.push({v: 6, label: 'Altro'});
          data.push([6, 100 - total]);
        }
      }

      var layout = new PlotKit.Layout("pie", options);
      layout.addDataset("spermiogramma", data);
      layout.evaluate();
      
      var plotter = new PlotKit.SweetCanvasRenderer(canvas, layout, options);
      
      plotter.render();
      canvas._plotter = plotter;
    });
  },
  findElement: function(origin, name, method) {
    var el = origin[method];
    while(el && ((!el.tagName) || el.tagName.toLowerCase() != name)) el = el[method];
    return el;
  },
  changeInput: function(input, value) {
    if(input.value == value) return;
    input.value = value;
    if(typeof(input.onchange) == "function") input.onchange({ target: input });
  },
  
  prepareRowHandlers: function() {
    $$('td.clearRow').each(function(td) {
      td.innerHTML = td.innerHTML + 
        '<a href="#" onclick="Genesys.clearRow(this); return false;" title="Pulisci riga"><img alt="x" src="/images/icn-delete.png?1157727353"></a>';
      td.removeClassName("clearRow");
    });
    $$('td.copyToNextRow').each(function(td) {
      td.innerHTML = td.innerHTML + 
        '<a href="#" onclick="Genesys.copyToNextRow(this); return false;" title="Copia alla riga successiva"><img alt="v" src="/images/arrow_down.gif?1161099797"></a>';
      td.removeClassName("copyToNextRow");
    });
  },
  copyToNextRow: function(origin) {
    var tr = this.findElement(origin, "tr", "parentNode");
    if(!tr) return;
    var target = this.findElement(tr, "tr", "nextSibling");
    if(!target) return;
    var tds = tr.getElementsByTagName("td");
    var targetTDs = target.getElementsByTagName("td");
    if(tds.length != targetTDs.length) return;
    var inpSel = new Selector("input");
    for(var j = 2; j < tds.length; j++) {
      inputs = inpSel.findElements(tds[j]);
      inpSel.findElements(targetTDs[j]).each(function(input, k) {
        this.changeInput(input, inputs[k].value);
      }.bind(this));
    }
  },
  clearRow: function(origin) {
    var tr = this.findElement(origin, "tr", "parentNode");
    if(!tr) return;
    var tds = tr.getElementsByTagName("td");
    for(var j = tds.length; j-- > 2;) {
      $A(tds[j].getElementsByTagName("input")).each(function(input) {
        this.changeInput(input, "");
      }.bind(this));
    };
  },
  ovocitiChanged: function(form) {
    var checkboxSel = new Selector("input[type=checkbox]");
    new Selector('tr').findElements($(form)).each(function(row) {
      var cbx = checkboxSel.findElements(row);
      if(!cbx[3]) throw $continue;
      if(!cbx[0].checked) { // inseminato
        cbx[1].checked = false; // fecondato
        //cbx[1].disabled = true;
      } else cbx[1].disabled = false;
      $R(2, cbx.length -1).each(cbx[1].checked ? function(n) {
        cbx[n].disabled = false;
      } : function(n) {
        cbx[n].checked = false;
        //cbx[n].disabled = true;
      }); 
    });
  },
  
  showGfx: function(url) {
    var img =  $('stats_image');
    if(!img.onload) img.onload = function() { Element.show(this); Element.hide('stats_teaser'); }
    if(img.src != url) {
       Element.hide(img);
       Element.show('stats_teaser');
    }
    img.src = url;
    //Element.show(img);
  },
  
  editAnnotazione: function(handle, id) {
    handle = $(handle);
    var container = $(handle).up('.annotazione').down('pre');
    var text = container.innerHTML.replace(/<br.*?>/g, "\n").stripTags();
    var ta = document.createElement("textarea");
    ta.name = 'paziente[annoedits][' + id + ']';
    ta.value = text;
    var parent = container.parentNode;
    parent.insertBefore(ta, container);
    parent.removeChild(container);
    handle.hide();
  },
  
  showParaHelp: function(ref) {
    var help = $('para-help');
    Position.prepare();
    pref = Position.page(ref);
    if(help.parentNode != document.body) {
      document.body.appendChild(help);
    }
    help.style.top = pref[1] + "px";
    if(!help.visible()) {
      new Effect.Appear(help, { duration: .5 });
    }
  }
}

