/*!
 * Ext JS Library 3.0.0
 * Copyright(c) 2006-2009 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
// Add the additional 'advanced' VTypes
Ext.apply(Ext.form.VTypes, {
    v_bsa : function(val, field) {
        return true;
    },

    v_rvdai : function(val, field) {
        return true;
    },

    debug : function(val, field) {
        var xpos = Ext.getCmp('xloc');
        var ypos = Ext.getCmp('yloc');
        var dpt = Ext.getCmp('datapt');

	if (dpt) {
	  dpt.setPosition(new Number(xpos.value), new Number(ypos.value));
	} else {
	  alert("not found. x: " + xpos.value + ", y: " + ypos.value);
	}
	//dpt.x = xpos.value;
	//dpt.y = ypos.value;
	return true;
    }
});


Ext.onReady(function(){

    Ext.QuickTips.init();

    // turn on validation errors beside the field globally
    Ext.form.Field.prototype.msgTarget = 'side';

    var bd = Ext.getBody();

    var bsaHandler = function(button, event) {
      var height = Ext.getCmp('height');
      var weight = Ext.getCmp('weight');
      var bsa = Ext.getCmp('bsa');
      if ((Ext.num(height.value, 0) > 0) &&
	  (Ext.num(weight.value, 0) > 0)) {
	//alert('button: ' + button.text + '\r\nheight: ' + height.value + '\r\nisNumber: ' + Ext.isNumber(Ext.num(height.value, 0)));
	var h = Ext.num(height.value, 0);
	var w = Ext.num(weight.value, 0);
	var val = Math.sqrt((h*w)/3600);
	bsa.setValue(val.toFixed(1));
	var rvdai = Ext.getCmp('panel_rvdai');
	if (rvdai.disabled) { 
	  rvdai.enable();
	  var rvdai_4ch = Ext.getCmp('rvda_4ch');
	  rvdai_4ch.focus();
	}
      } else {
	bsa.setValue("--");
      }
    };

    var rvdaiHandler = function(button, event) {
      var height = Ext.getCmp('height');
      var weight = Ext.getCmp('weight');
      var ch4 = Ext.num(Ext.getCmp('rvda_4ch').value, 0);
      var sax = Ext.num(Ext.getCmp('rvda_sax').value, 0);
      var lvdd = Ext.num(Ext.getCmp('lvdd').value, 0);
      var rvdd = Ext.num(Ext.getCmp('rvdd').value, 0);
      var h = Ext.num(height.value, 0);
      var w = Ext.num(weight.value, 0);
      if ((h != 0) && (w != 0) && (ch4 != 0) && (sax != 0) &&
	  (lvdd != 0) && (rvdd != 0)) {
	var bsa = Math.sqrt((h*w)/3600);
	var rvdai = ((ch4 + sax)/2) / bsa * Math.pow((rvdd/lvdd), 3);
	//alert('button: ' + button.text + '\r\nheight: ' + height.value + '\r\nweight: ' + weight.value + '\r\n' + rvdai);
	var f_rvdai = Ext.getCmp('rvdai');
	f_rvdai.setValue(rvdai.toFixed(0));

	// Graph the datapoint
        var dpt = Ext.getCmp('datapt');
	var x = new Number(73 + 184 * bsa.toFixed(1));
	var y = new Number(492 - 24 * rvdai.toFixed(0));
	if (dpt) {
	  dpt.setPosition(x, y);
	  dpt.setVisible(true);
	}
	var graph = Ext.getCmp('graph_rvdai');
	graph.expand(true);
      }
    };

    var bsa_panel = new Ext.FormPanel({
      labelWidth: 125,
      frame: true,
      buttons: [{
	text: 'Calculate BSA',
	id: 'bsacalc',
	tabIndex: '3',
	handler: bsaHandler
      }],
      buttonAlign: 'center',
      title: 'BSA',
	  bodyStyle:'padding:5px 5px 0',
	  width: 250,
      defaults: {width: 75},
      defaultType: 'numberfield',
      items:
	[{
	    fieldLabel: 'Height (cm)',
	    name: 'height',
	    id: 'height',
	    vtype: 'v_bsa',
	    tabIndex: '1',
	    minValue: 0
	 },{
	    fieldLabel: 'Weight (kg)',
	    name: 'weight',
            id: 'weight',
	    vtype: 'v_bsa',
	    tabIndex: '2',
	    minValue: 0
         }, new Ext.form.DisplayField({
            fieldLabel: 'BSA',
	    name: 'bsa',
            id: 'bsa',
  	    value: '--'
	 })
	]
    });
    bsa_panel.render('bsa_div');

    var rvdai_panel = new Ext.FormPanel({
      labelWidth: 125,
      disabled: true,
      frame: true,
      buttonAlign: 'center',
      buttons: [{
	text: 'Calculate RVDAI',
        tabIndex: '8',
	id: 'rvdcalc',
	handler: rvdaiHandler
      }],
      id: 'panel_rvdai',
      title: 'RVDAI',
	  bodyStyle:'padding:5px 5px 0',
	  width: 250,
      defaults: {width: 75},
      defaultType: 'numberfield',
      items: [{
	    fieldLabel: 'RVDA 4ch',
	    tabIndex: '4',
	    name: 'rvda_4ch',
	    id: 'rvda_4ch',
	    vtype: 'v_rvdai',
	    rvdai: 'rvdai',
	    minValue: 0
	 },{
	    fieldLabel: 'RVDA sax',
	    tabIndex: '5',
	    name: 'rvda_sax',
            id: 'rvda_sax',
	    vtype: 'v_rvdai',
	    rvdai: 'rvdai',
	    minValue: 0
         },{
	    fieldLabel: 'RVDd Mmode',
	    tabIndex: '6',
	    name: 'rvdd',
	    id: 'rvdd',
	    vtype: 'v_rvdai',
	    rvdai: 'rvdai',
	    minValue: 0
	 },{
	    fieldLabel: 'LVDd Mmode',
	    tabIndex: '7',
	    name: 'lvdd',
            id: 'lvdd',
	    vtype: 'v_rvdai',
	    rvdai: 'rvdai',
	    minValue: 0
         }, new Ext.form.DisplayField({
            fieldLabel: 'RVDAI',
	    name: 'rvdai',
            id: 'rvdai',
  	    value: '--'
	 })
      ]
    });
    rvdai_panel.render('rvdai_div');

    var rvdai_graph = new Ext.Panel({
      labelWidth: 125,
      frame: true,
      title: 'Graph:',
      collapsible: true,
      collapsed: true,
      bodyStyle:'padding:0px 0px 0',
      width: 500,
      height: 575,
      layout: 'absolute',
      id: 'graph_rvdai'
    });

    var graph = new Ext.BoxComponent({
      autoEl: {
	tag: 'img',
        src: 'graph.jpg'
      },
      x: 0,
      y: 0
    });

    var datapt = new Ext.BoxComponent({
      autoEl: {
	tag: 'img',
	src: 'redpt.jpg'
      },
      id: 'datapt',
      hidden: 'true',
      x: 73,
      y: 492
    });

    rvdai_graph.add(this, graph, 0);
    rvdai_graph.add(this, datapt, 1);
    rvdai_graph.render('graph_div');

    var debug_panel = new Ext.FormPanel({
      labelWidth: 125,
      frame: true,
      title: 'DEBUG',
	  bodyStyle:'padding:5px 5px 0',
	  width: 250,
      defaults: {width: 75},
      defaultType: 'numberfield',
      items:
	[{
	    fieldLabel: 'X Location',
	    name: 'xloc',
	    id: 'xloc',
	    vtype: 'debug',
	    minValue: 0,
  	    value: 73
	 },{
	    fieldLabel: 'Y Location',
	    name: 'yloc',
            id: 'yloc',
            vtype: 'debug',
	    minValue: 0,
  	    value: 492
         }
	]
    });
    //debug_panel.render('debug_div');

    height = Ext.getCmp('height');
    height.focus();
});
