﻿
// JScript File
function isValidBrowser() {
    if (typeof document.body.style.maxHeight != "undefined") {
	    // IE 7, mozilla, safari, opera 9
	    return true;
    } else {
        // IE6, older browsers
        alert("Para editar datos en el Banco de Proyectos es requerido como mínimo Internet Explorer 7 o Firefox 2.");
        return false;
    }
}

function $(obj) { return document.getElementById(obj); }

ajaxWait = function () {}

ajaxWait.prototype.show = function () { $("waitPanel").style.visibility = "visible"; }

ajaxWait.prototype.hide = function () { $("waitPanel").style.visibility = "hidden"; }

/* Treeview */
treeNode = function(id, text, leaf, checkbox, loadFunction) {
	this.text = text;
	this.id = id;
	this.checkbox = checkbox;
	this.leaf = leaf;
	this.loadFunction = loadFunction;	
}

function addNode(n, nh) {
	var cn = document.createElement('div');
	cn.style.display = "block";
	cn.className = 'node';								
	cn.id = nh.id;
	
	var html = "";
	if (nh.leaf == false)	
		if(nh.loadFunction != null)
			html = '<img src="/BPS/images/plus.gif" class="nimg" alt="+" onclick="' + nh.loadFunction + '(this.parentNode.id);"/>';
		else
			html = '<img src="/BPS/images/plus.gif" class="nimg" alt="+" onclick="toggleNodeByImg(this);"/>';
	else
		html = '<img src="/BPS/images/empty.gif"/>';
					
	if (nh.checkbox==true) {
		if(nh.leaf==true) {
			if(nh.checked == true)
				html = html + '<input type="checkbox" checked="checked" alt="leaf" onclick="checkChildNodes(this.parentNode);"/>&nbsp;';
			else
				html = html + '<input type="checkbox" alt="leaf" onclick="checkChildNodes(this.parentNode);"/>&nbsp;';
		} else {
			if(nh.checked == true)
				html = html + '<input type="checkbox" checked="checked" onclick="checkChildNodes(this.parentNode);"/>&nbsp;';
			else
				html = html + '<input type="checkbox" onclick="checkChildNodes(this.parentNode);"/>&nbsp;';
		}
	}
	
	html = html + nh.text;	
	cn.innerHTML = html;
	n.appendChild(cn);
}

function addChildNode(n, nh) {
	var cn = getChildContainer(n.childNodes);				
	if (cn==null) {
		cn = document.createElement('div');
		cn.style.display = "none";
		cn.className = 'childContainer';
		n.appendChild(cn);
	}
	addNode(cn, nh);				
}

function getChildContainer(children) {				
	for (var i=0; i < children.length; i++) {					
		if (children[i].className=="childContainer") {						
			return (children[i]);
			break;
		}					
	}
	return (null);
}		

function getNodeImg(n) {
	for (var j=0; j<n.childNodes.length; j++) {
		if(n.childNodes[j].nodeName.toUpperCase() == 'IMG') {
			var img = n.childNodes[j];
			return(img);
			break;
		}							
	}
}

function toggleNodeByImg(img) {						
	var obj = img.parentNode;				
	var objChildren = getChildContainer(obj.childNodes);	
	if 	(objChildren.style.display=="none" || objChildren.style.display=="")
		objChildren.style.display="block";
	else
		objChildren.style.display="none";					
	
	if (img.alt == '+') {
		img.alt = '-';
		img.src = '/BPS/images/minus.gif';					
	} else {
		img.alt = '+';
		img.src = '/BPS/images/plus.gif';
	}
}	

function toggleNode(n) {
	var img = getNodeImg(n);
	if (img != null)
		toggleNodeByImg(img);				
}						

function setNodeImg(n, src) {
	var img = getNodeImg(n);
	if (img != null)
		img.src = src;
}

var ids = '';			
function getCheckedNodes(tv) {
	ids = ''; 				
	getCheckedNodesIds(tv); 
	
	if (ids != '') 
		ids = ids.substr(0, ids.length - 1);
	
	return(ids);
}

function getCheckedNodesIds(tv) {					
	for (var i=0; i<tv.childNodes.length; i++) {
		if(tv.childNodes[i].className == 'node') {
			var n = tv.childNodes[i];						
									
			for (var j=0; j<n.childNodes.length; j++) {
				if(n.childNodes[j].nodeName.toUpperCase() == 'INPUT') {
					var check = n.childNodes[j];								
					if (check.checked && check.alt=='leaf') {
						ids = ids + n.id + ',';
					}
				}							
			}
			getCheckedNodesIds(n);
		} else {
			if(tv.childNodes[i].className == 'childContainer') {
				getCheckedNodesIds(tv.childNodes[i]);
			}
		}
	}
}

function checkChildNodes(nd) {
	var st = false;
	
	for (var j=0; j<nd.childNodes.length; j++) {
		if(nd.childNodes[j].nodeName.toUpperCase() == 'INPUT') {
			st = nd.childNodes[j].checked;						
			checkChildNodesRec(nd, st);
			break;
		}							
	}				
}
						
function checkChildNodesRec(tv, status) {
	for (var i=0; i<tv.childNodes.length; i++) {
		if(tv.childNodes[i].className == 'node') {
			var n = tv.childNodes[i];						
									
			for (var j=0; j<n.childNodes.length; j++) {
				if(n.childNodes[j].nodeName.toUpperCase() == 'INPUT') {
					var check = n.childNodes[j];
					check.checked = status;								
				}							
			}
			checkChildNodesRec(n, status);
		} else {
			if(tv.childNodes[i].className == 'childContainer') {
				checkChildNodesRec(tv.childNodes[i], status);
			}
		}
	}
}
			
function getNodeChildrenCount(n) {				
	var cc = getChildContainer(n.childNodes);
	if (cc != null)
		return(getNodeChildrenCount(cc));									
	
	var c = 0;
	for (var j=0; j<n.childNodes.length; j++) {
		if(n.childNodes[j].className == 'node')
			c++;
	}
	return(c);
}

function checkNode(n) {
    var img = getNodeImg(n);
    if (img != null)
        img.checked = true;
}

//Ejm: ss = getParentNode(getParentNode($get("UM")));
function getParentNode(n) {
    if (n.parentNode.parentNode != null)
        return n.parentNode.parentNode;
}

/**
 * DHTML date validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */
// Declaring valid date character, minimum year and maximum year
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 isNumber(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (c == ".") return true;
        if (c == "-") return true;
        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 addDaysToDate(d,dtStr){

    var unMinuto = 60 * 1000;
    var unaHora = unMinuto * 60;
    var unDia = unaHora * 24;

	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)
	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 oldDate = new Date();

    oldDate.setFullYear(year,month-1,day);
    oldDate.setTime(oldDate.getTime() + unDia * d);
    
    var dia = oldDate.getDate();
    var mes = oldDate.getMonth()+1;
    var anio = oldDate.getFullYear();
    
    if (dia<10){
        dia = "0" + dia;
    }
    if (mes<10){
        mes = "0" + mes;
    }
    
    var fechatext = "" + dia + "/" + mes + "/" + anio + ""; 
    return(fechatext);

}

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)
	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){
//		alert("El formato de fecha debe ser: dd/mm/yyyy.")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
//		alert("Por favor ingrese un mes valido.")
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
//		alert("Por favor ingrese un dia valido.")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
//		alert("Por favor ingrese un anio de 4 digitos entre " + minYear + " y " + maxYear + ".")
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
//		alert("Por favor ingrese una fecha valida.")
		return false
	}
return true
}

function validateDateField(e) {    
    var date = e.value;
    if (!isDate(date)) {
        e.style.backgroundColor = "#ECC0C0";
        e.value = '';
    } else {
        e.style.backgroundColor = "";
    }    
}
function setEditionModeDate(e) {    
    e.style.backgroundColor = "#FDF6D2";
//    if (isNumber(e.value))
//        e.value = formatCurrency(e.value);      
    e.select(); 
}

function getFecha(){
    var fecha = new Date();
    var dia = fecha.getDate();
    var mes = fecha.getMonth()+1;
    var anio = fecha.getFullYear();
    
    if (dia<10){
        dia = "0" + dia;
    }
    if (mes<10){
        mes = "0" + mes;
    }
    
    var fechatext = "" + dia + "/" + mes + "/" + anio + ""; 
//            alert(fechatext);
    
    return fechatext;
}
function getNumber(num) {
    return num.toString().replace(/\$|\,/g,'');
}

function formatCurrency(num, symbol) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
	num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
	cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
	num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	if (symbol != null)
		return (((sign)?'':'-') + '$' + num + '.' + cents);
	else
		return (((sign)?'':'-') + num + '.' + cents);
}

function formatInt(num) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
	num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
	cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
	num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	
	return (((sign)?'':'-') + num);
}

function validateIntField(e) {    
    var num = e.value;
    var valor = num.toString().replace(/\$|\,/g,'');
    if (!isInteger(valor)) {
        e.style.backgroundColor = "#ECC0C0";
        e.title = "Dato inválido. Por favor ingrese un número entero.";        
        $("tt2001").style.visibility = "visible";
    } else {
        e.value = formatInt(valor);
        e.title = "";
        e.style.backgroundColor = "#FFFFFF";
    }    
}

function setEditionModeInt(e) {    
    e.style.backgroundColor = "#FDF6D2";
    if (isInteger(e.value))
        e.value = formatInt(e.value);      
    e.select();    
}

function validateNumberField(e) {    
    var num = e.value;
    var valor = num.toString().replace(/\$|\,/g,'');
    if (!isNumber(valor)) {
        e.style.backgroundColor = "#ECC0C0";
//        e.title = "false";
//        e.title = "Dato inválido. Por favor ingrese un número.";        
//        $("tt2001").style.visibility = "visible";
    } else {
        e.value = formatCurrency(valor);
//        e.title = "true";
        //e.style.backgroundColor = "#FFFFFF";
        e.style.backgroundColor = "";
    }    
}

//function validateNumberField(field)
//     {
//          var check = true;
//          var value = field.value; //get characters
//          //check that all characters are digits, ., -, or ""
//          for(var i=0;i < field.value.length; ++i)
//          {
//               var new_key = value.charAt(i); //cycle through characters
//               if(((new_key < "0") || (new_key > "9")) && 
//                    !(new_key == ""))
//               {
//                    check = false;
//                    break;
//               }
//          }
//          //apply appropriate colour based on value
//          if(!check)
//          {
//               field.style.backgroundColor = "red";
//          }
//          else
//          {
//               field.style.backgroundColor = "";
//          }
//     }

function setEditionModeNumber(e) {    
    e.style.backgroundColor = "#FDF6D2";
    if (isNumber(e.value))
        e.value = formatCurrency(e.value);      
    e.select(); 
}

//manejo de Combos y Listboxes
function clearList(list) {
	var lst = $(list);

	var i;
    for(i=lst.options.length-1;i>=0;i--)
    {
        lst.remove(i);
    }
}

function setCboValue(objName, theValue) {    
	var cbo = $(objName);
    
	for (var i=0; i < cbo.options.length; i++) {
		if (cbo.options[i].value == theValue) {			
			cbo.selectedIndex = i;			
			return;
		}					
	}
}

function setCboText(objName, theText) {
	var cbo = $(objName);
	
	for (var i=0; i < cbo.options.length; i++) {
		if (cbo.options[i].text == theText) {
			cbo.selectedIndex = i;
			return;
		}					
	}
}

function getCboValue(objName) {
	var cbo = $(objName);	
	
	if (cbo.options.length == 0)
		return("");
	else
		return(cbo.options[cbo.selectedIndex].value);
}

function getCboText(objName) {
	var cbo = $(objName);	
	
	if (cbo.options.length == 0)
		return("");
	else
		return(cbo.options[cbo.selectedIndex].text);
}

function addListItem(listName, value, text) {
	var lst = $(listName);

	var myEle = document.createElement("option") ;    
    myEle.setAttribute('value', value);    
    var txt = document.createTextNode(text);
    myEle.appendChild(txt)
    
    lst.appendChild(myEle)
}

function setRadio(radioFld, val) {
  // set 'radioFld' button with value == val and return 'true' (if not disabled!)
  for (var i=0; i<radioFld.length; i++)
    if (radioFld[i].value == val)
      if (!radioFld[i].disabled) {
        radioFld[i].checked = true;
        return true;
        }
  return false;
}

function getRadio(radioFld) {
  // return value of selected 'radioFld' button
  var st = "";
  for (var i=0; i<radioFld.length; i++)
    if (radioFld[i].checked) {
      st = radioFld[i].value;
      break;
      }
  return st;
}
  
function Left(str, n){
	if (n <= 0)
	    return "";
	else if (n > String(str).length)
	    return str;
	else
	    return String(str).substring(0,n);
}

function Right(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}

function getCurrentDate() {
	var dt = new Date();
	var y  = dt.getYear();
	var m = dt.getMonth();
	var d = dt.getDate();

	return Right("00" + d, 2) + "/" + Right("00" + m, 2) + "/" + y; 
}

function rand(inferior,superior){
	numPosibilidades = superior - inferior + 1;
	aleat = Math.random() * numPosibilidades;
	aleat = Math.floor(aleat);
	return parseInt(inferior) + aleat;
}

function showViewStateLength() {
    var vs = document.getElementById('__VIEWSTATE');
    var ph = document.getElementById('ViewStatePlaceHolder');
    if (vs.value.length > 0)
    {
        ph.innerHTML = 'ViewState Length: ' + (vs.value.length/1024).toPrecision(4) + ' KB';
    }
    else
    {
        ph.innerHTML = 'ViewState Length: 0 KB';
    }
}

/*toggle the toolbar*/
function togToolbar(toolId, DivId)
{
    var myDiv = document.getElementById(DivId);
    if(myDiv!=null){
	var tools = myDiv.getElementsByTagName("input");
	
	for (i=0; i<tools.length; i++)
		if (tools[i].id != toolId)
			tools[i].className = "button";
		else
			tools[i].className = "pressed";
	}
}

function setEditionMode(e) {
    e.style.backgroundColor = "#FDF6D2";
    e.select();
}
function setBlurMode(e) {
    e.style.backgroundColor = "";
    e.select();
}
