var isNav4 = false, isNav5 = false, isIE4 = false;
var strSeperator = '/';
var vDateType = 3; // Global value for type of date format
var vYearType = 4; //Set to 2 or 4 for number of digits in the year for Netscape
var vYearLength = 4; // Set to 4 if you want to force the user to enter 4 digits for the year before validating.
var err = 0; // Set the error code to a default of zero

if (navigator.appName == 'Netscape') {
	if (navigator.appVersion < '5') {
		isNav4 = true;
		isNav5 = false;
	} else if (navigator.appVersion > '4') {
		isNav4 = false;
		isNav5 = true;
    }
} else {
	isIE4 = true;
}

function validarData(objName) {
	var strDate;
	var strDateArray;
	var strDay;
	var strMonth;
	var strYear;
	var intday;
	var intMonth;
	var intYear;
	var booFound = false;
	var datefield = objName;
	var strSeparatorArray = new Array('-', ' ', '/', '.');
	var intElementNr;
	var strMonthArray = new Array(12);
	strMonthArray[0] = 'Jan';
	strMonthArray[1] = 'Fev';
	strMonthArray[2] = 'Mar';
	strMonthArray[3] = 'Abr';
	strMonthArray[4] = 'Mai';
	strMonthArray[5] = 'Jun';
	strMonthArray[6] = 'Jul';
	strMonthArray[7] = 'Ago';
	strMonthArray[8] = 'Set';
	strMonthArray[9] = 'Out';
	strMonthArray[10] = 'Nov';
	strMonthArray[11] = 'Dez';
	//strDate = datefield.value;
	strDate = objName;
	if (strDate.length < 1) {
		return true;
	}
	
	for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
		if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
			strDateArray = strDate.split(strSeparatorArray[intElementNr]);
			if (strDateArray.length != 3) {
				err = 1;
				return false;
			}
			else {
				strDay = strDateArray[0];
				strMonth = strDateArray[1];
				strYear = strDateArray[2];
			}
			booFound = true;
	   }
	}
	
	if (booFound == false) {
		if (strDate.length>5) {
			strDay = strDate.substr(0, 2);
			strMonth = strDate.substr(2, 2);
			strYear = strDate.substr(4);
	   }
	}
	//Adjustment for short years entered
	if (strYear.length == 2) {
		strYear = '20' + strYear;
	}
	strTemp = strDay;
	strDay = strMonth;
	strMonth = strTemp;
	intday = parseInt(strDay, 10);
	if (isNaN(intday)) {
		err = 2;
		return false;
	}
	intMonth = parseInt(strMonth, 10);
	if (isNaN(intMonth)) {
		for (i = 0;i<12;i++) {
			if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) {
				intMonth = i+1;
				strMonth = strMonthArray[i];
				i = 12;
		   }
		}
		if (isNaN(intMonth)) {
			err = 3;
			return false;
	    }
	}
	
	intYear = parseInt(strYear, 10);
	if (isNaN(intYear)) {
		err = 4;
		return false;
	}
	if (intMonth > 12 || intMonth < 1) {
		err = 5;
		return false;
	}
	if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) {
		err = 6;
		return false;
	}
	if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
		err = 7;
		return false;
	}
	if (intMonth == 2) {
		if (intday < 1) {
			err = 8;
			return false;
		}
		if (LeapYear(intYear) == true) {
			if (intday > 29)
			{
				err = 9;
				return false;
		   }
		}
		else {
			if (intday > 28) {
				err = 10;
				return false;
		    }
	   }
	}
	return true;
}
		
function LeapYear(intYear) {
	if (intYear % 100 == 0) {
		if (intYear % 400 == 0) {
			return true;
		}
	}
	else {
		if ((intYear % 4) == 0) {
			return true;
		}
	}
	return false;
}

function dateFormat(vDateName, vDateValue, e, dateCheck, dateType) {
	vDateType = dateType;
	if (vDateValue == '~') {
		alert('AppVersion = ' + navigator.appVersion + ' Nav. 4 Version = ' + isNav4 + ' Nav. 5 Version = ' + isNav5 + ' IE Version = ' + isIE4 + ' Year Type = ' + vYearType + ' Date Type = ' + vDateType + ' Separator = ' + strSeperator);
		vDateName.value = '';
		vDateName.focus();
		return true;
	}
	
	var isIE = navigator.appName.indexOf('Microsoft') >= 0;
    var event = isIE ? window.event : e;        
    var whichCode = isIE ? event.keyCode : event.which;

    if (!whichCode) whichCode = 0;
	
	if (vDateValue.length > 8 && isNav4) {
		if (vDateValue.indexOf('-') >= 1 || vDateValue.indexOf('/') >= 1) return true;
	}
	
	var alphaCheck = ' abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/-';
	if (alphaCheck.indexOf(vDateValue) >= 0) {
		if (isNav4) {
			vDateName.value = '';
			vDateName.focus();
			vDateName.select();
			return false;
		} else {
			vDateName.value = vDateName.value.substr(0, (vDateValue.length-1));
			return false;
		}
	}
	
	if (whichCode == 8) { //Ignore the Netscape value for backspace. IE has no value
		return false;
	} else {   	    
		var strCheck = '47,48,49,50,51,52,53,54,55,56,57,58,59,95,96,97,98,99,100,101,102,103,104,105';
		if (strCheck.indexOf(whichCode) != -1) {
			if (isNav4) {
				if ((vDateValue.length < 6 && dateCheck || vDateValue.length == 7 && dateCheck) && vDateValue.length >= 1) {
					alert('Data Invalida');
					vDateName.value = '';
					vDateName.focus();
					vDateName.select();
					return false;
				}
				
				if (vDateValue.length == 6 && dateCheck) {
					var mDay = vDateName.value.substr(2,2);
					var mMonth = vDateName.value.substr(0,2);
					var mYear = vDateName.value.substr(4,4)
					if (mYear.length == 2 && vYearType == 4) {
						var mToday = new Date();
						var checkYear = mToday.getFullYear() + 30;
						var mCheckYear = '20' + mYear;
						mYear = (mCheckYear >= checkYear ? '19' : '20') + mYear;
					}
					
					var vDateValueCheck = mMonth + strSeperator + mDay + strSeperator + mYear;
					if (!validarData(vDateValueCheck)) {
						alert('Data Invalida');
						vDateName.value = '';
						vDateName.focus();
						vDateName.select();
						return false;
					}
					return true;
					
				} else {
					if (vDateValue.length >= 8  && dateCheck) {
						if (vDateType == 1) { // mmddyyyy
							var mDay = vDateName.value.substr(2,2);
							var mMonth = vDateName.value.substr(0,2);
							var mYear = vDateName.value.substr(4,4)
							vDateName.value = mMonth + strSeperator + mDay + strSeperator + mYear;
						}
						
						if (vDateType == 2) { // yyyymmdd
							var mYear = vDateName.value.substr(0,4)
							var mMonth = vDateName.value.substr(4,2);
							var mDay = vDateName.value.substr(6,2);
							vDateName.value = mYear + strSeperator + mMonth + strSeperator + mDay;
						}
						
						if (vDateType == 3) { // ddmmyyyy
							var mMonth = vDateName.value.substr(2,2);
							var mDay = vDateName.value.substr(0,2);
							var mYear = vDateName.value.substr(4,4)
							vDateName.value = mDay + strSeperator + mMonth + strSeperator + mYear;
						}
						
						var vDateTypeTemp = vDateType;
						vDateType = 1;
						var vDateValueCheck = mMonth + strSeperator + mDay + strSeperator + mYear;
						if (!validarData(vDateValueCheck)) {
							alert('Data Invalida');
							vDateType = vDateTypeTemp;
							vDateName.value = '';
							vDateName.focus();
							vDateName.select();
							return false;
						}
						vDateType = vDateTypeTemp;
						return true;
						
					} else {
						if ((vDateValue.length < 8 && dateCheck || vDateValue.length == 9 && dateCheck) && vDateValue.length >= 1) {
							alert('Data Invalida');
							vDateName.value = '';
							vDateName.focus();
							vDateName.select();
							return false;
			         	}
			      	}
			   	}
			} else {
				if ((vDateValue.length < 8 && dateCheck || vDateValue.length == 9 && dateCheck) && vDateValue.length >= 1) {
					alert('Data Invalida');
					vDateName.value = '';
					vDateName.focus();					
					return true;
				}
				
				if (vDateValue.length >= 8 && dateCheck) {
					if (vDateType == 1) { // mm/dd/yyyy
						var mMonth = vDateName.value.substr(0,2);
						var mDay = vDateName.value.substr(3,2);
						var mYear = vDateName.value.substr(6,4)
					}
					
					if (vDateType == 2) { // yyyy/mm/dd
						var mYear = vDateName.value.substr(0,4)
						var mMonth = vDateName.value.substr(5,2);
						var mDay = vDateName.value.substr(8,2);
					}
					
					if (vDateType == 3) { // dd/mm/yyyy
						var mDay = vDateName.value.substr(0,2);
						var mMonth = vDateName.value.substr(3,2);
						var mYear = vDateName.value.substr(6,4)
					}
					
					if (vYearLength == 4 && mYear.length < 4) {
						alert('Data Invalida');
						vDateName.value = '';
						vDateName.focus();
						return true;
					}
					
					var vDateTypeTemp = vDateType;
					vDateType = 1;
					var vDateValueCheck = mMonth + strSeperator + mDay + strSeperator + mYear;
					if (mYear.length == 2 && vYearType == 4 && dateCheck) {
						var mToday = new Date();
						var checkYear = mToday.getFullYear() + 30;
						var mCheckYear = '20' + mYear;						
						mYear = (mCheckYear >= checkYear ? '19' : '20') + mYear;
						
						vDateValueCheck = mMonth + strSeperator + mDay + strSeperator + mYear;
						if (vDateTypeTemp == 1) { // mm/dd/yyyy
							vDateName.value = mMonth + strSeperator + mDay + strSeperator + mYear;
						}
						
						if (vDateTypeTemp == 3) { // dd/mm/yyyy
							vDateName.value = mDay + strSeperator + mMonth + strSeperator + mYear;
						}
					}
					
					if (!validarData(vDateValueCheck)) {
						alert('Data Invalida');
						vDateType = vDateTypeTemp;
						vDateName.value = '';
						vDateName.focus();
						return true;
					}
					
					vDateType = vDateTypeTemp;
					return true;
					
				} else {				
					if (vDateType == 1) {
						if (vDateValue.length == 2) {
							vDateName.value = vDateValue + strSeperator;
						}
						
						if (vDateValue.length == 5) {
							vDateName.value = vDateValue + strSeperator;
						}
					}
					
					if (vDateType == 2) {
						if (vDateValue.length == 4) {
							vDateName.value = vDateValue + strSeperator;
						}
						
						if (vDateValue.length == 7) {
						   vDateName.value = vDateValue + strSeperator;
						}
					}
					
					if (vDateType == 3) {
						if (vDateValue.length == 2) {
							vDateName.value = vDateValue + strSeperator;
						}
						
						if (vDateValue.length == 5) {
							vDateName.value = vDateValue + strSeperator;
						}
					}
					return true;
					
				}
			}
			
			if (vDateValue.length == 10 && dateCheck) {
				if (!validarData(vDateName)) {
					alert('Data Invalida');
					vDateName.focus();
					vDateName.select();
				}
			}
			return false;
			
		} else {
			if (isNav4) {
				vDateName.value = '';
				vDateName.focus();
				vDateName.select();
				return false;
			} else {			    
				vDateName.value = vDateName.value.substr(0, (vDateValue.length-1));				
				return false;
		    }
 		}
	}
}

function setchkbox(comp) {
    var objChkBox = comp;
    objChkBox.checked = true;
}

function resize() {
    var i = 2;
    
    window.moveTo((-1 * i), (-1 * i));
    
    if (document.all) {
        top.window.resizeTo(screen.availWidth + i, screen.availHeight + i);
    } else if (document.layers || document.getElementById) {
        if (top.window.outerHeight < screen.availHeight || top.window.outerWidth < screen.availWidth) {
            top.window.outerHeight = screen.availHeight + i;
            top.window.outerWidth = screen.availWidth + i;
        }
    }
    
    resizeHeightIFrame();
}

function resizeHeightIFrame() {
    var myHeight = 0;
    if (typeof(window.innerWidth) == 'number') {
        //Non-IE
        myHeight = window.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) {
        //IE 6+ in 'standards compliant mode'
        myHeight = document.documentElement.clientHeight;
    } else if (document.body && document.body.clientHeight) {
        //IE 4 compatible
        myHeight = document.body.clientHeight;
    }
    
    if (myHeight != 0) {
        document.getElementById('idMainFrame').height = myHeight;
    }
    
}


function imprimir(obj) {
    obj.style.visibility = 'hidden';
    window.print();
    obj.style.visibility = 'visible';
}

var _IE = 0; //INTERNET EXPLORER
var _FF = 1; //FIRE FOX
var _OP = 2; //OPERA
var _NS = 3; //NETSCAPE

function getNavigator() {
    var navegador = navigator.appName;
    
    if (navegador.indexOf('Microsoft') > -1) {
        return _IE;
    }
    
    return _FF;
}

function focoMenu(obj) {
    if (obj.className == 'menu') {
        obj.className = 'menuOver';
    } else {
        obj.className = 'menu';
    }          
}

var _lastIdMenu = '';
var _alturaMenu = 20;
var _larguraItemMenu = 150;

function formatarMenu(w) {
    _larguraItemMenu = w;
    
    for (var i = 1; true; i++) {
        var el = getElement('menu0' + i);
        if (!el) break;
        el.style.width = w + 'px';
    }
}

function showMenuById(idMenu) {
    showMenu(getElement(idMenu));
}
  
function showMenu(elMenu) {
    if (_lastIdMenu != '') {
        var last = _lastIdMenu;
            _lastIdMenu = '';              
            showMenuById(last);
    }
          
    if (!elMenu) {
        _lastIdMenu = '';
        return;
    }
           
    var idMenu = elMenu.id;
    var idItens = 'itens-' + idMenu;
    var elItens = getElement(idItens);
      
    if (!elItens) {
        _lastIdMenu = '';
        focoMenu(elMenu);
        return;        
    }
    
    focoMenu(elItens);     
              
    var status = elItens.style.visibility;          
          
    if (status == 'hidden') {
        var elMainMenu = elMenu.parentNode.parentNode.parentNode.parentNode;             
        var top = extractNumber(elMainMenu.style.top);
        var left = extractNumber(elMainMenu.style.left);              
              
        var width = _larguraItemMenu;     
        var x = parseInt(idMenu.substring(idMenu.length - 1)) - 1;  
        var i = (x * 2);// + 1;              
        
        elItens.style.top = (top + _alturaMenu) + 'px';              
        elItens.style.left = (left + (x * width) + i) + 'px';
        
        var elTableItens = getNavigator() == _IE ? elItens.firstChild : elItens.childNodes[1];
        var rows = elTableItens.rows;        
        var len = rows.length;

        for (var i = 0; i < len; i++) {
            var itemMenu = rows[i].cells[0];
            if (!itemMenu) continue;
            itemMenu.style.width = _larguraItemMenu + 'px';
        }
        
        elMenu.className = 'menuOver';
        status = 'visible';
    } else {
        elMenu.className = 'menu';
        status = 'hidden';
    }
          
    _lastIdMenu = idMenu;
    
    elItens.style.visibility = status;
}

function clearItensMenu(idMenu) {
   getElement(idMenu).onmouseover = function() {};
}

function getElement(id) {
    return document.getElementById(id);
}

function extractNumber(n) {
    var result = 'NaN'
    if (!n) return result;
          
    var nn = n.toLowerCase()
    var p = nn.indexOf('px');          
          
    if (p < 0) return result;  
                  
    result = nn.substring(0, p);
    return parseInt(result);          
}

function moveToCenter(obj) {
    var objWidth = extractNumber(obj.style.width) / 2;
    var middleScreen = screen.availWidth / 2;    
    var left = middleScreen - objWidth;
    
    obj.style.left = left + 'px';
}

function trim(str) {
    return str ? str.replace(/^\s+|\s+$/g, '') : '';
}

function replaceAll(string, token, newtoken) {
	while (string.indexOf(token) != -1) {
 		string = string.replace(token, newtoken);
	}
	return string;
}

_strFloatValue = '';
function verifyFractionDigits(value, withDot) {
    if (value == '') return true;
    
    var number = new Number(value);
    var strValue = number.toString();
	var p = strValue.lastIndexOf('.');
	var len = strValue.length;
	
	if (p > -1 && p < (len - (withDot ? 2 : 3))) {
	    return false;
	}
	
	return true;
}

function limitFractionDigits(textObj, event) {
    if (!textObj || textObj.value == '') return;
    
    var val = prepareFloat(textObj.value);
    
    if (!verifyFractionDigits(val, true)) {
        var e = event ? event : window.event;    

        if (getNavigator() == _IE) {
            event.returnValue = false;
        } else { 
        
            /* delete = 0
               backspace = 8
               enter = 13 */ 
        
            var key = event.which
            if (key == 0 || key == 8 || key == 13) {
                return;
            }
        
            event.preventDefault();
            event.stopPropagation();
        }
    }
}

function prepareFloat(stringNumber) {
	var stringNumberNew = trim(replaceAll(stringNumber, ',', '.'));	
	var p = stringNumberNew.lastIndexOf('.');
	
	var result = '';
	for (var i = 0; i < stringNumberNew.length; i++) {			
		var ch = stringNumberNew.charAt(i);
		if (ch == '.' && i != p) continue;
		result += ch;
	}
	
	return parseFloat(result);
}