
function isBlank(s) {
        for(var i=0; i < s.length; i++) {
                var c = s.charAt(i);
                if ((c != ' ') && (c != '\n') && (c != '\t')) return false;
        }
        return true;
}


function validateText(v) {
	var returnVal = false;

	if ((v != null) && (v!="") &&  !isBlank(v))
		returnVal = true;

	return returnVal;
}

function validateNumber(e) {
	var validChar = ["0","1","2","3","4","5","6","7","8","9","."];
	var charInList = false;
	var strValid = true;

	if ((e.value!=null) && (e.value!="")) {
		for(var i=0; ((i < e.value.length)&&(strValid)); i++) {
			charInList = false;
			if ((i==0) && (e.value.charAt(i)=="-")) {
				charInList = true;
			} else {
			 	for(var j=0; j < (validChar.length); j++) {
					if (e.value.charAt(i) == validChar[j]) {
						charInList = true;
					}
				}
			}
			strValid = (strValid && charInList);
		}

		if (!charInList) {
			alert("This is an invalid number.  Please re-input.");
			e.focus();
		}
	}
}

//this function returns the full 4 digit years to bypass platform differences in treating years
function getFullYear(year) {
	var y = year;
	if (y < 1000) y += 1900;
	return y;
}


function validateDate(e) {
	var indate=e.value;
	if (indate.indexOf("-")!=-1){
		var sdate = indate.split("-");
	} else {
		var sdate = indate.split("/");
	}

	var chkDate=new Date(Date.parse(indate));
	var cmpDate=(chkDate.getMonth()+1)+"/"+(chkDate.getDate())+"/"+(getFullYear(chkDate.getYear()));
	var indate2=(Math.abs(sdate[0]))+"/"+(Math.abs(sdate[1]))+"/"+(Math.abs(sdate[2]));
	if (indate2!=cmpDate){
		alert("You've entered an invalid date or date format.  Please use the MM/DD/YYYY format.");
		e.focus();
	} else {if (cmpDate=="NaN/NaN/NaN"){
		alert("You've entered an invalid date or date format.  Please use the MM/DD/YYYY format.");
		e.focus();
		}
	}
}


function verify(f)
{
	if (f.cancelled) return true;

	var msg = "";
        var empty_fields = "";
        var errors = "";
        for(var i=0; i < f.length; i++) {
                var e = f.elements[i];
                if ((( e.type=="text") || (e.type=="textarea") || ( e.type=="password")) && (e.required)) {
                        if (!validateText(e.value)) {
                                empty_fields += "\n\t" + e.name;
                                continue;
                        }
        
                }
        
        }



        if (!empty_fields) {
              return true;
             
	   } else {
		msg = "Submit value=" + f.btnSubmit.type + "\n";
	        msg += "Please complete the following required fields:\n\n";
	        msg += empty_fields;
	        alert(msg);
	        return false;
        }
}

function verifyAddress(f)
{
	var rc;
	rc = verify(f);
	if (!rc) return false;

	if ((validateText(f.Street.value) || validateText(f.Address2.value)) && validateText(f.Address3.value))
	{
		alert("Please specify either street address or PO Box, but not both.");
		return false;
	}

	if (validateText(f.Address2.value) && !validateText(f.Street.value))
	{
		alert("Can't have an apartment number without a Street Address!");
		return false;
	}

	if (validateText(f.Address3.value))
	{
		var pob = f.Address3.value;
		var good;
		good = /^\s*PO Box .*$/.test(pob);
		if (!good)
		{
			alert("Please enter a PO Box in the form \"PO Box xxx...\".");
			return false;
		}
	}

	var zip = f.ZIP.value;
	if (!/^\s*\d{5}\s*(-\d{4}|)$/.test(zip))
	{
		alert("Please enter a five-digit (#####) or nine-digit (#####-####) zip code.");
		return false;
	}
	
	return true;
}

//validate that password fields are complete and that new password=confirm password
function verifyUserPassword(f)
{
        var msg="";
		var oldPW;
		var newPW;
		var newPWConfirm;
		var emptyString = "";

		oldPW = f.OldPassword.value;
		newPW = f.NewPassword.value;
		newPWConfirm = f.ConfirmNewPassword.value;

		if (!validateText(oldPW)) {
			emptyString = "\n\tOld Password";
		}

		if (!validateText(newPW)) {
			emptyString += "\n\tNew Password";
		}

		if (!validateText(newPWConfirm)) {
			emptyString += "\n\tConfirm New Password";
		}

		if (emptyString=="")
		{
			if (newPW == newPWConfirm)
				return true;
			else
			{
				alert("Your new password does not match your confirm new password.");
				return false
			}
		}
		else
		{
			alert("Please complete the following required fields:"+emptyString);
			return false;
		}

}    


//before submit, check that at least one text field is completed
function validateCompleteAtLeastOneField(f)
{
        var msg;
		var SomeFieldsCompleted = false;

        for(var i=0; i < f.length; i++)
		{
			var e = f.elements[i];
			if ((( e.type=="text") || (e.type=="textarea")))
			{
				if (validateText(e.value))
				{
					SomeFieldsCompleted = true;
					continue;
				}
			}      
		}
        
		if (SomeFieldsCompleted)
		{
			return true;
		}
		else
		{
	        msg = "Please complete at least one of the fields to proceed."
	        alert(msg);
	        return false;
        }
}    


function openWindow(url, windowName, winWidth, winHeight, scrollable, resizable, menus) {
//        pop = window.open (url, windowName, 'width=' + winWidth + ',height=' + winHeight +',scrollbars=' + scrollable + ',resizable=' + resizable + ',toolbar=yes,location=yes,directories=no,status=no,menubar=yes,left=25,top=25,screenX=25,screenY=25')
        pop = window.open (url, windowName, 'width=' + winWidth + ',height=' + winHeight +',scrollbars=' + scrollable + ',resizable=' + resizable + ',toolbar=' + menus + ',location=no,directories=no,status=yes,menubar=' + menus + ',left=25,top=25,screenX=25,screenY=25')
		pop.focus()
}

function hideObject(objName)
{
	document.getElementById(objName).style.visibility = "hidden"
}

function showObject(objName)
{
	document.getElementById(objName).style.visibility = ""
}

function toggleObjectVisibility(objName, show)
{
	if (show)
	{
		hideObject(objName);
	}
	else
	{
		showObject(objName);
	}
}

function renderReportSelectionDate(isHidden)
{
	var text1 = "";
	var text2 = "";

	if (isHidden)
	{
		//this is the text to appear after field is hidden
		text1 = "From 1-July through the end of ";
		text2 = " ";
	}
	else
	{
		//this is the text to appear after field is unhidden
		text1 = "From the first of ";
		text2 = " through the end of ";
	}

	changeInnerText("div_FiscMoText1", text1);
	changeInnerText("div_FiscMoText2", text2);
	toggleObjectVisibility("div_EndFiscMo", isHidden)
}

function changeInnerText(objName, newText)
{
	document.getElementById(objName).innerText = newText;
}

function changeFinanceReportDateFilterComboBox()
{
	var v = document.getElementById("FinanceReportID").value;
	if (v=="20")  //transaction detail report
	{
		renderReportSelectionDate(false);
	}
	else
	{
		renderReportSelectionDate(true);
	}
	if ((v=="11") || (v=="16"))  //12-month R&E views
	{
		setDateRangeState(true);
	}
	else
	{
		setDateRangeState(false);
	}
}

function changeFinanceReportDateFilterCheckbox()
{
	var itemChecked = document.getElementById("ViewTransactionDetail").checked;
	var obj1 = document.getElementById("ViewAnnual");
	obj1.disabled = itemChecked;
	renderReportSelectionDate(!itemChecked);
}

function changeCheckboxStatus(formName, state)
{
	var obj = document.getElementById(formName);
	var iCount = obj.elements.length;

	for (i=0;i<iCount;i++)
	{
		if (obj.elements[i].type=='checkbox')
		{
			obj.elements[i].checked = state;
		}
	}
}


function changeFinanceReportShowEntireFiscalYear()
{
	var itemChecked = document.getElementById("ViewAnnual").checked;
	var obj1 = document.getElementById("ViewTransactionDetail");

	//disable objs if ViewAnnual is checked
	obj1.disabled = itemChecked;
	setDateRangeState(itemChecked);
}

function setDateRangeState(itemChecked)
{
	var obj2 = document.getElementById("FiscMo");
	var obj3 = document.getElementById("EndFiscMo");

	obj2.disabled = itemChecked;
	obj3.disabled = itemChecked;
}


function popupBulletins(url) 
{
	// Won't work on Netscape!!!
	var maxX = screen.width
	var maxY = screen.height

	var x = (maxX - 300) / 2
	var y = (maxY - 300) / 2

	var features = 'toolbar=0, '
	 + 'scrollbars=1, '
	 + 'location=0, '
	 + 'statusbar=0, '
	 + 'menubar=0, '
	 + 'resizable=0, '
	 + 'width=300, '
	 + 'height=300, '
	 + 'left=' + x
	 + ', top=' + y

	bulletinWindow = window.open(url, "bulletinWindow", features)
}
