// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

function value2huge_alert(max_value, current_value, alert_text) {
	if (parseFloat(current_value) >= parseFloat(max_value)) {
		alert(alert_text)
	}
	return
}

/*
  Funciones para activar/desactivar los campos de respuetas.
*/

function enable_questions(class_name, check_inputs_p) {
  document.getElementsByClassName(class_name).each(function(c) {
	Element.removeClassName($(c),'opt_disabled'); 
	Element.addClassName($(c),'opt_enabled'); 
	if ((check_inputs_p == null) || (check_inputs_p == true)) {	
  	  checkForDisabledInputs($(c), false);
    }
  })    
}

function disable_questions(class_name) {
  document.getElementsByClassName(class_name).each(function(c) {
	 Element.removeClassName($(c),'opt_enabled'); 
	 Element.addClassName($(c),'opt_disabled'); 
	 checkForDisabledInputs($(c), true);
  })    
}

function enable_or_disable_questions(checked, class_name) {
  (checked) ? enable_questions(class_name) : disable_questions(class_name)
}

/*
  Si pongo el disabled=false el navegador (por lo menos Firefox) no pasa los campos :-(
  En el caso de los estudios sí nos interesa que se pasen todos los campos aunque esten desabilitados
  para poder cambiar su valor después, al modificar el informe.
  Así que desde el CSS escondo los campos y los muestro cuando se elige la opción que necesita estos campos.
  Cuando se elige la opción que los desactiva, borro el contenido y deselecciono los checkbox-es.
*/
function checkForDisabledInputs(div_obj, disabled_value) {
  var do_names = '';
  var dval = (disabled_value == null) ? false : disabled_value;
  for (var j=0; j < div_obj.childNodes.length; j++) {
    var c = div_obj.childNodes[j]
    if (c.nodeType == Node.ELEMENT_NODE) {
      if (c.nodeName == 'DIV') {
        checkForDisabledInputs(c, dval);
      } else {
        if ((c.nodeName == 'INPUT') || (c.nodeName == 'TEXTAREA')) {
          // c.disabled = dval;
          if (c.disabled) {
	        if ((c.type == "checkbox") || (c.type == "radio")) {
		      c.checked = false;
	        } else {
   	          c.value = '';
            }
          } else {
	        if ((c.type == "text") || (c.nodeName == 'TEXTAREA')) { 
		      c.focus();
		    }
          }
          // alert(c.name+'.disabled = '+c.disabled);          
        }
      }
    }
  }
}

/*
  Funciones para sustituir el valor de un campo con una combinación de valores
  de otros campos.
*/

function subst_with(what, input1, input2, input_res) {
	val1 = parseFloat($(input1).value);
	val2 = parseFloat($(input2).value);
	val_res = '';
	
	if (isNaN(val1) || isNaN(val2)) {
		val_res = '';
	} else {
		switch (what) {
		  case "sum":
   		    val_res = val1+val2;
            break;
          case "substract":
 		    val_res = val1-val2;
            break;
		}
	}
	
	$(input_res).value = val_res;
}

/* Operaciones con fechas */

function get_date_from_text_input(inp) {
	d = $(inp).value.split('-');
	yr_num = parseInt(d[2]);
	mo_num = parseInt(d[1].replace(/^0/,''))-1;
	day_num = parseInt(d[0]);

	date = new Date(yr_num, mo_num, day_num);
	if ((day_num!=date.getDate()) || (mo_num!=date.getMonth()) || (yr_num!=date.getFullYear())) {
		date = '';
	}
    return date;
}

function get_date_from_select_input(select_id) {
	yr_num = parseInt($(select_id+'_year').options[$(select_id+'_year').selectedIndex].value);
	mo_num = parseInt($(select_id+'_month').options[$(select_id+'_month').selectedIndex].value)-1;
	day_num = parseInt($(select_id+'_day').options[$(select_id+'_day').selectedIndex].value);
	
	date = new Date(yr_num, mo_num, day_num);
	if ((day_num!=date.getDate()) || (mo_num!=date.getMonth()) || (yr_num!=date.getFullYear())) {
		date = ''
	}
    return date;
}

function get_date_from_ymd(yr_num, mo_num, day_num) {

	date = new Date(yr_num, mo_num, day_num);
	if ((day_num!=date.getDate()) || (mo_num!=date.getMonth()) || (yr_num!=date.getFullYear())) {
      date = null;
	}
		
	return date;
}

function subst_with_date_substract(date1, date2, input_res) {
     if ((date1 != '') && (date2 != '')) {
	  date1 = new Date(date1);
	  date2 = new Date(date2);
      delta_months = Math.floor((date1 - date2) / (4*7*24*60*60 * 1000));
  	  //alert(date1+' - '+date2+' = '+delta_weeks);

      $(input_res).value = delta_months;
    }
}

/*
 Calcula la diferencia en años desde la fecha birthday hasta today y
 pone este número como valor para el campo input_id
*/
function setAge(day_id, month_id, year_id, input_id) {
	yr_num = parseInt($(year_id).value);
	mo_num = parseInt($(month_id).options[$(month_id).selectedIndex].value)-1;
	day_num = parseInt($(day_id).options[$(day_id).selectedIndex].value);
	date1 = get_date_from_ymd(yr_num, mo_num, day_num);
	
	date2 = new Date();
	
	if (date1 != null) { 
      delta_years = Math.floor((date2 - date1) / (52*7*24*60*60 * 1000));
      if (delta_years > 0) {
        $(input_id).value = delta_years;
      }
    } else {
	  alert("La fecha de nacimiento no es válida.");
    }
}
