var msg;
var userAction;
var intRE = new RegExp('^[0-9]+$');
var floatRE = new RegExp('^[0-9]+\.[0-9]+$');
var moneyRE = new RegExp('^[0-9]+\.[0-9]{1,2}$');
var dateRE = new RegExp('^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$');

function setUserAction(val) {
	userAction = val;
}

function isListSelected(fieldObj, fieldLbl) {
	if (userAction != 'SAVE' && fieldObj.selectedIndex == 0) {
		if (fieldLbl != '') {
			msg += fieldLbl + ' must be selected';
			fieldObj.focus();
		}
		return false;
	}
	return true;
}

function isRadioSelected(fieldObj, fieldLbl) {
//	alert(fieldObj.length);
	if (userAction == 'SAVE') {
		return true;
	}
	
	for (i = 0; i < fieldObj.length; i++) {
		if (fieldObj[i].checked) {
			return true;
		}
	}
	
	if (fieldLbl != '') {
		msg += fieldLbl + ' must be selected';
		fieldObj[0].focus();
	}
	return false;
}

function checkReqdField(fieldObj, fieldLbl) {
	if (userAction != 'SAVE' && trim(fieldObj.value) == '') {
		if (fieldLbl != '') {
			msg += fieldLbl + ' is required';
			fieldObj.select();
			fieldObj.focus();
		}
		return false;
	}
	return true;
}

function checkEquality(obj1, obj2, lbl1, lbl2) {
	if (obj1.value != obj2.value) {
		if (lbl1 != '' && lbl2 != '') {
			msg += lbl1 + ' and ' + lbl2 + ' must match';
			obj2.select();
			obj2.focus();
		}
		return false;
	}
	return true;
}

function isValidInt(fieldObj, fieldLbl) {
    var val = trim(fieldObj.value);
    if (val == '' || val.match(intRE)) {
        return true;
    } else {
		if (fieldLbl != '') {
	        msg += fieldLbl + ' should be a number without decimals';
    	    fieldObj.select();
			fieldObj.focus();
		}
        return false;
    }
}

function isNumber(fieldObj, len, fieldLbl) {
    var val = trim(fieldObj.value);
    if (val == '' || val.match(intRE)) {
		if (val != '' && len > 0) {
			if (fieldObj.value.length() == len) {
		        return true;
			} else {
				msg += fieldLbl + ' should be a ' + len + ' digit number';
				fieldObj.select();
				fieldObj.focus();
				return false;
			}
		}
		return true;
    } else {
		if (fieldLbl != '') {
	        msg += fieldLbl + ' should be a ' + len + ' digit number';
    	    fieldObj.select();
			fieldObj.focus();
		}
        return false;
    }
}

function isValidFloat(fieldObj, fieldLbl) {
    var val = trim(fieldObj.value);
    if (val == '' || val.match(intRE) || val.match(floatRE)) {
        return true;
    } else {
		if (fieldLbl != '') {
	        msg += fieldLbl + ' should be a number with / without decimals';
    	    fieldObj.select();
			fieldObj.focus();
		}
        return false;
    }
}

function isValidMoney(fieldObj, fieldLbl) {
    var val = trim(fieldObj.value);
    if (val == '' || val.match(intRE) || val.match(moneyRE)) {
        return true;
    } else {
		if (fieldLbl != '') {
			msg += fieldLbl + ' should be a number without decimals or with max 2 decimals';
			fieldObj.select();
			fieldObj.focus();
		}
        return false;
    }
}

function isValidFutureDate(fieldObj, fieldLbl) {
	if (isValidDate(fieldObj, fieldLbl)) {
		//check for future validation
		var parts = fieldObj.value.split('/');
		var dt = new Date(parts[2], parts[1]-1, parts[0]);
		if (dt - new Date() > 0) {
			return true;
		} else {
			if (fieldLbl != '') {
				msg += fieldLbl + ' must be a future date';
				fieldObj.select();
				fieldObj.focus();
			}
			return false;
		}
	}
	return false;
}

function isValidDate(fieldObj, fieldLbl) {
    var val = trim(fieldObj.value);
    if (val == '') {
        return true;
    }

	var showMsg = fieldLbl == 'Memo Submission Dates (Actual) - MFDP';
	
    var isValidFormat = val.match(dateRE);
    if (isValidFormat) {
        var dateParts = val.split('/');
		var mn = eval(dateParts[0]);
        var dt = eval(dateParts[1]);
        var yr = eval(dateParts[2]);
		
        isValidFormat = isValidFormat && yr >= 2000;
        isValidFormat = isValidFormat && (mn >= 1 && mn <= 12);

        if (isValidFormat) {
            var minDt = 1;
            var maxDt;
            if (mn == 1 || mn == 3 || mn == 5 || mn == 7 || mn == 8 || mn == 10 || mn == 12) {
                maxDt = 31;
            } else if (mn == 4 || mn == 6 || mn == 9 || mn == 11) {
                maxDt = 30;
            } else if (mn == 2) {
                maxDt = yr % 4 == 0 ? 29 : 28;
            }
            isValidFormat = isValidFormat && (dt >= minDt && dt <= maxDt);
        }
    }
    
    if (isValidFormat) {
        return true;
    } else {
		if (fieldLbl != '') {
			msg += fieldLbl + ' should be a valid date in MM/DD/YYYY format';
			fieldObj.select();
			fieldObj.focus();
		}
        return false;
    }
}

//Utility functions
function getObj(id) {
	return document.getElementById(id);
}

function trim(str) {
    return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}