function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MM_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
    if (val) { nm=val.name; if ((val=val.value)!="") {
      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
        if (p<1 || p==(val.length-1)) errors+='- '+nm+' debe contener una dirección válida.\n';
      } else if (test!='R') {
        if (isNaN(val)) errors+='- '+nm+' debe contener un número.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (val<min || max<val) errors+='- '+nm+' debe contener un número entre '+min+' y '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' es obligatorio.\n'; }
  } if (errors) alert('Se han producido los siguientes errores :\n'+errors);
  document.MM_returnValue = (errors == '');
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_openBrWindow(theURL,winName,features) { //v2.1
  var features_array=features.split(",");
  var width=0,height=0;
  for(i=0;i<features_array.length;i++)
    if ((features_array[i].indexOf("width")!=-1) || (features_array[i].indexOf("height")!=-1))
      eval(features_array[i]);
  features = features + ",left=" + ((screen.width - width) / 2) + ",top=" + ((screen.height - height) / 2);
  window.open(theURL,winName,features);
}

////////////////////////////////////////////////////////////////
var dtCh= "/";
var minYear=1900;
var maxYear=2100;

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function _isDate(dtStr){
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strDay=dtStr.substring(0,pos1)
	var strMonth=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	var result = "";
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		result += "El formato debe ser : dd/mm/aaaa\n";
	} else if (strMonth.length<1 || month<1 || month>12){
		result += "Por favor introduzca un més válido\n";
	} else if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		result += "Por favor introduzca un día válido\n";
	} else if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		result += "Por favor introduzca un año válido entre "+minYear+" y "+maxYear+"\n";
	} else if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		result += "Por favor introduzca una fecha válida\n";
	}
    return result;
}

function _isPast(dtStr)
{
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strDay=dtStr.substring(0,pos1)
	var strMonth=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	var result = "";
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
    var currentDate = new Date();
  	var fecha = new Date(year,month-1,day);
    return (currentDate.getTime() > fecha.getTime());
}

function checkDate(field)
{
  val = MM_findObj(field,'');
  if ((val) && (val.value != ""))
    return (_isDate(val.value));
  else
    return(""); 	         
}

function checkPastDate(field)
{
  val = MM_findObj(field,'');
  if ((val) && (val.value != ""))
  { 
    if (_isPast(val.value))  
	  return("El campo "+val.name+" no puede contener una fecha en pasado.");
  }
  return("");
}
///////////////////////////////////////////////

function openVF(page,width, height, name)
{ 
  windowprops="width="+width+",height="+height+",left=" + ((screen.width - width) / 2) + ",top=" + ((screen.height - height) / 2) + ",scrollbars=0";
  w = window.open(page,name,windowprops);
  if (w != null)  
    w.focus();  
}

function format_number(pnumber,decimals)
{ 
  if (isNaN(pnumber)) { return 0}; 
  if (pnumber=='') { return 0}; 
  
  var IsNegative=(parseInt(pnumber)<0);
  if(IsNegative)pnumber=-pnumber;

  var snum = new String(pnumber); 
  var sec = snum.split('.'); 
  var whole = parseInt(sec[0]); 
  var result = ''; 
  if(sec.length > 1){ 
    var dec = new String(sec[1]); 
    dec = parseInt(dec)/Math.pow(10,parseInt(dec.length-decimals-1));
	Math.round(dec);
	dec = parseInt(dec)/10;
	
	if(IsNegative)
	{
	  var x = 0-dec;
      x = Math.round(x);
	  dec = - x;
	}
	else
	{
      dec = Math.round(dec);
	}

	/*
	 * If the number was rounded up from 9 to 10, and it was for 1 'decimal'
	 * then we need to add 1 to the 'whole' and set the dec to 0.
	 */
	if(decimals==1 && dec==10)
	{
	  whole+=1;
	  dec="0";
	}

    dec = String(whole) + "." + String(dec); 
    var dot = dec.indexOf('.'); 
    if(dot == -1){ 
      dec += '.'; 
      dot = dec.indexOf('.'); 
    }
	var l=parseInt(dot)+parseInt(decimals);
    while(dec.length <= l) { dec += '0'; } 
    result = dec; 
  } else{ 
    var dot; 
    var dec = new String(whole); 
    dec += '.'; 
    dot = dec.indexOf('.'); 
	var l=parseInt(dot)+parseInt(decimals);
    while(dec.length <= l) { dec += '0'; } 
    result = dec; 
  } 
  if(IsNegative)result="-"+result;
  return result; 
} 

function toInt(field)
{
  if ((field) && (field.value))
  {
    aux = parseInt(field.value);
    if(isNaN(aux))
      return 0
    else
      return aux;
  }
  else
    return 0;
}

function calculatePercentaje(dataName,percentajeName,doc)
{ 
  total = 0;
  i = 0;
  while(field = MM_findObj(dataName+'['+(i++)+']'))
    total += toInt(field);
  i = 0;
  while(field = MM_findObj(dataName+'['+i+']'))
  {
    field2 = MM_findObj(percentajeName+'['+i+']');
	if (field2)  
      field2.value = format_number((toInt(field) * 100) / total,1);
    i++;
  }
}

function lookup_incidencias(field)
{  
  if ((field) && (field.value != ""))
    MM_openBrWindow('lookup_incidencia.php?'+field.name+'='+field.value,'lookup_incidencias','resizable=yes,width=320,height=200');
  else
    alert("Debe introducir un valor.");
}
