//--------------------------------------------------
// OPEN WINDOW
//--------------------------------------------------

function OpenWindow(url, width, height) {
	
	var d = new Date();
	var title = d.getTime();
	var attributeString = "";
	if (width != 0) {
		attributeString = "width=" + width;
	}
	if (height != 0) {
		if (attributeString != "") { attributeString += ", "; }
		attributeString += "height=" + height;
	}
	attributeString += ", menubar=yes, location=yes, toolbar=yes, directories=yes, scrollbars=yes, resizable=yes";

	window.open(url, title, attributeString);
	
}

//--------------------------------------------------
// OPEN WINDOW ADVANCED
//--------------------------------------------------

function OpenWindowAdvanced(url, title, width, height, menubar, locationbar, toolbar, directories, scrollbars, resizable) {
	
	var attributeString	= "";
	var attributeArray	=	Array(Array("width", width)
								, Array("height", height)
								, Array("menubar", menubar)
								, Array("locationbar", locationbar)
								, Array("toolbar", toolbar)
								, Array("directories", directories)
								, Array("scrollbars", scrollbars)
								, Array("resizable", resizable)
							);
	
	for (var i=0; i<attributeArray.length; i++) {
		if (attributeArray[i][1] != 0) {
			if (attributeString != "") {
				attributeString += ", ";
			}
			attributeString += attributeArray[i][0] + "=" + attributeArray[i][1];
		}
	}

	window.open(url, title, attributeString);
	
}

//--------------------------------------------------
// SET REQUIRED FIELD COLORS
//--------------------------------------------------

function SetRequiredColors(fieldName) {

	var fieldText = fieldName + "Label";
	if (document.getElementById(fieldName).value == "") {
		document.getElementById(fieldText).className = "invalid";
	} else {
		document.getElementById(fieldText).className = "valid";
	}
	
}

//------------------------------------
// IS NUMERIC
//------------------------------------
function IsNumeric(variable) {
	
	var validChars	= "0123456789";
	var isNumber	= true;
	var character;
	for (i=0; i<variable.length && isNumber == true; i++) { 
		character = variable.charAt(i); 
		if (validChars.indexOf(character) == -1) {
			isNumber = false;
		}
	}
	
	return isNumber;
	
}

//------------------------------------
// IS DECIMAL
//------------------------------------
function IsDecimal(variable) {
	
	var validChars	= "0123456789.";
	var isValid	= true;
	var decimalUsed	= false;
	var character;
	for (i=0; i<variable.length && isValid == true; i++) { 
		character = variable.charAt(i); 
		if (validChars.indexOf(character) == -1) {
			isValid = false;
		}
		if ((character == ".") && (decimalUsed == true)) {
			isValid = false;
		} else if ((character == ".") && (decimalUsed == false)) {
			decimalUsed	= true;
		} 
	}
	
	return isValid;
	
}

//------------------------------------
// CHECK LEAP YEAR
//------------------------------------

function IsLeapYear(yr) {
	
	if (yr % 4 != 0) {
	 	return false;
	} else if (yr % 400 == 0) {
		return true;
	} else if (yr % 100 == 0) {
		return false;
	} else {
		return true;
	}
	
}

//------------------------------------
// VERIFY DATE
//------------------------------------

function VerifyDate(testDate) {
	
	var entryDateArray	= testDate.split("-");
	if (entryDateArray.length == 3) {
		var entryDateYear	= entryDateArray[0];
		var entryDateMonth	= entryDateArray[1];
		var entryDateDay	= entryDateArray[2];
	} else {
		alert("Invalid date: " + testDate);
		return false;	
	}

	var isValid = true;
	var validYear = true;
	var validMonth = true;
	var validDay = true;
	
	// CHECK YEAR
	if ((!IsNumeric(entryDateYear)) || (3000 < entryDateYear) || (entryDateYear < 1900)) {
		alert("Invalid year: " + entryDateYear);
		isValid = false;
		validYear = false;
	}
	
	// CHECK MONTH
	if (validYear == true) {
		if ((!IsNumeric(entryDateMonth)) || (12 < entryDateMonth) || (entryDateMonth < 1)) {
			alert("Invalid month: " + entryDateMonth);
			isValid = false;
			validMonth = false;
		}
	}
	
	// CHECK DAY
	if (validYear == true && validMonth == true) {
		if (!IsNumeric(entryDateDay)) {
			alert("Invalid day: " + entryDateDay);
			isValid = false;
			validDay = false;
		}
		if (validDay == true) {
			if (entryDateMonth == 4 || entryDateMonth == 6 || entryDateMonth == 9 || entryDateMonth == 11) {
				if ((30 < entryDateDay) || (entryDateDay < 1)) {
					alert("Invalid day: " + entryDateDay);
					isValid = false;
				}
			} else if (entryDateMonth == 2) {
				if (IsLeapYear(entryDateYear)) {
					if ((29 < entryDateDay) || (entryDateDay < 1)) {
						alert("Invalid day: " + entryDateDay);
						isValid = false;
					}
				} else {
					if ((28 < entryDateDay) || (entryDateDay < 1)) {
						alert("Invalid day: " + entryDateDay);
						isValid = false;
					}
				}
			} else {
				if ((31 < entryDateDay) || (entryDateDay < 1)) {
					alert("Invalid day: " + entryDateDay);
					isValid = false;
				}
			}
		}
	}
	
	return isValid;
	
}

//------------------------------------
// VERIFY TIME
//------------------------------------

function VerifyTime(testTime) {
	
	var entryTimeArray		= testTime.split(":");
	if (entryTimeArray.length == 3) {
		var entryTimeHours		= entryTimeArray[0];
		var entryTimeMinutes	= entryTimeArray[1];
		var entryTimeSeconds	= entryTimeArray[2];
	} else {
		alert("Invalid time: " + testTime);
		return false;
	}

	var isValid = true;
	var validHour = true;
	var validMinute = true;
	var validSecond = true;
	
	// CHECK HOUR
	if ((!IsNumeric(entryTimeHours)) || (23 < entryTimeHours) || (entryTimeHours < 0)) {
		alert("Invalid hour: " + entryTimeHours);
		isValid = false;
		validHour = false;
	}
	
	// CHECK MINUTE
	if (validHour == true) {
		if ((!IsNumeric(entryTimeMinutes)) || (59 < entryTimeMinutes) || (entryTimeMinutes < 0)) {
			alert("Invalid minute: " + entryTimeMinutes);
			isValid = false;
			validMinute = false;
		}
	}
	
	// CHECK SECOND
	if (validHour == true && validMinute == true) {
		if ((!IsNumeric(entryTimeSeconds)) || (59 < entryTimeSeconds) || (entryTimeSeconds < 0)) {
			alert("Invalid second: " + entryTimeSeconds);
			isValid = false;
			validSecond = false;
		}
	}
	
	return isValid;
	
}

//------------------------------------
// VERIFY DATETIME
//------------------------------------

function VerifyDateTime(testString) {

	var isValid = true;
	var dateTimeArray = testString.split(" ");
	if (dateTimeArray.length > 1) {
		if (!VerifyDate(dateTimeArray[0])) {
			isValid = false;
		}
		if (!VerifyTime(dateTimeArray[1])) {
			isValid = false;
		}
	} else {
		if (!VerifyDate(testString)) {
			isValid = false;
		}
	}
	
	return isValid;

}