var decimalSeparator = ".";
var minusSign = "-";
function invalidHostName(displayName, string)                { return "The host name in " + displayName + " apears to be invalid."; }
function moreDecimals(displayName, decimalPlaces, string)    { return displayName + " must contain " + decimalPlaces + " decimal places."; }
function negativeSignNotFirst(displayName, string)           { return displayName + " can only contain a negative sign in the first position."; }
function noAlpha(displayName, string)                        { return displayName + " can only contain numbers."; }
function noAtSymbol(displayName, string)                     { return displayName + " must contain an '@' symbol."; }
function noAtSymbolAtEnd(displayName, string)                { return displayName + " cannot have the '@' symbol as the last character."; }
function noAtSymbolAtStart(displayName, string)              { return displayName + " cannot have the '@' symbol as the first character."; }
function noInvalidCharacters(displayName, string)            { return displayName + " contains one or more invalid characters."; }
function notBetween(displayName, minValue, maxValue, string) { return displayName + " must be between " + minValue + " and " + maxValue + "."; }
function notCreditCard(displayName, string)                  { return displayName + " is not a valid credit card number."; }
function notDate(displayName, mask, string)                  { return displayName + " must contain a valid date in the format " + mask + "."; }
function notEqual(displayName, string1, string2)             { return displayName + " does not match."; }
function notExactLength(displayName, maxLength, string)      { return displayName + " must contain " + maxLength + " characters."; }
function notFormat(displayName, mask, numberMask, lowerMask, upperMask, alphaMask, anyMask, ddMask, mmMask, yyMask, hhMask, miMask, ssMask, msMask, ddPos, mmPos, yyPos, hhPos, miPos, ssPos, msPos, string, errorPos) {
errorMessage = "Format mismatch at character " + errorPos + " in " + displayName + ",\n\n which must be in the format " + mask + "\n\n";
errorMessage += "where\n";
errorMessage += (mask.indexOf(numberMask) != -1 ? " " + numberMask  + " means 0-9\n" : "");
errorMessage += (mask.indexOf(lowerMask) != -1  ? " " + lowerMask   + " means a-z (lower case) only\n" : "");
errorMessage += (mask.indexOf(upperMask) != -1  ? " " + upperMask   + " means A-Z (UPPER case) only\n" : "");
errorMessage += (mask.indexOf(alphaMask) != -1  ? " " + alphaMask   + " means a-z or A-Z\n" : "");
errorMessage += (mask.indexOf(anyMask) != -1    ? " " + anyMask     + " means any character\n" : "");
errorMessage += (ddPos != -1                    ? " " + ddMask      + " means day portion of a date\n" : "");
errorMessage += (mmPos != -1                    ? " " + mmMask      + " means month portion of a date\n" : "");
errorMessage += (yyPos != -1                    ? " " + yyMask      + " means year portion of a date\n" : "");
errorMessage += (hhPos != -1                    ? " " + hhMask      + " means hours portion of a time\n" : "");
errorMessage += (miPos != -1                    ? " " + miMask      + " means minutes portion of a time\n" : "");
errorMessage += (ssPos != -1                    ? " " + ssMask      + " means seconds portion of a time\n" : "");
errorMessage += (msPos != -1                    ? " " + msMask      + " means milliseconds portion of a time\n" : "");
errorMessage += "Any other character is required in the position indicated.";
return errorMessage;
}
function notLength(displayName, minLength, maxLength, string){ return displayName + " must be contain between " + minLength + " and " + maxLength + " characters."; }
function notSelected(displayName)                            { return "A value for " + displayName + " must be selected."; }
function notTime(displayName, mask, string)                  { return displayName + " must contain a valid time in the format " + mask + "."; }
function notValid(displayName, string)                       { return "'" + string + "' is not a valid value for " + displayName + "."; }
function noValue(displayName, string)                        { return displayName + " cannot be blank."; }
function tooBig(displayName, maxValue, string)               { return displayName + " must be less than " + maxValue + "."; }
function tooLong(displayName, maxLength, string)             { return displayName + " must be no more than " + maxLength + " characters."; }
function tooManyAtSymbols(displayName, string)               { return displayName + " contains too many '@' symbols."; }
function tooManyDecimalPoints(displayName, string)           { return displayName + " can only contain one decimal point."; }
function tooShort(displayName, minLength, string)            { return displayName + " must have at least " + minLength + " characters."; }
function tooSmall(displayName, minValue, string)             { return displayName + " must be more than " + minValue + "."; }
var useAlert = true;
function isArray(element) {
return (typeof element == "object" && typeof element.type == "undefined" && element.length > 0);
}
function isBetween(element, displayName, minValue, maxValue, mandatory) {
var valid = true;
if (element != null) {
if (isArray(element)) {
var i;
for (i = 0; valid && i < element.length; i ++) {
valid = valid && isBetween(element[i], displayName, minValue, maxValue, mandatory);
}
}
else {
var string = element.value + "";
if (mandatory) {
valid = isMandatory(element, displayName);
}
if (valid && !isBlank(string)) {
if (minValue != null && maxValue != null) {
if (string < minValue || string > maxValue) {
valid = false;
showError(notBetween(displayName, minValue, maxValue, string), element);
}
}
else {
if (minValue != null) {
if (string < minValue) {
valid = false;
showError(tooSmall(displayName, minValue, string), element);
}
}
else {
if (maxValue != null) {
if (string > maxValue) {
valid = false;
showError(tooBig(displayName, maxValue, string), element);
}
}
}
}
}
}
}
return valid;
}
function isBlank(value) {
var string = value + "";
if (string.length == 0 || string == "$$null$$") {
return true;
}
else {
return false;
}
}
function isChecked(element, displayName) {
if (element != null) {
var valid = false;
if (isArray(element)) {
var i;
for (i = 0; i < element.length; i++) {
if (element[i].checked) {
valid = true;
break;
}
}
}
else {
valid = element.checked;
}
if (valid == false) {
showError(notSelected(displayName), element[0]);
}
return valid;
}
else {
return true;
}
}
function isCreditCard(element, displayName, mandatory) {
var valid = true;
if (element != null) {
if (isArray(element)) {
var i;
for (i = 0; valid && i < element.length; i ++) {
valid = valid && isCreditCard(element[i], displayName, mandatory);
}
}
else {
var string = element.value + "";
if (mandatory) {
valid = isMandatory(element, displayName);
}
if (valid && !isBlank(string)) {
var i;
var digit;
var sum = 0;
var mul = 1;
var l = string.length;
var tproduct;
if (l > 19) {
valid = false;
showError(tooLong(displayName, 19, string), element);
}
else {
for (i = 0; i < l; i ++) {
digit = string.substring(l-i-1, l-i);
if (digit < "0" || digit > "9") {
valid = false;
showError(noAlpha(displayName, string), element);
break;
}
else {
tproduct = parseInt(digit ,10) * mul;
if (tproduct >= 10) {
sum += (tproduct % 10) + 1;
}
else {
sum += tproduct;
}
if (mul == 1) {
mul++;
}
else {
mul--;
}
}
}
if (valid) {
if ((sum % 10) != 0) {
valid = false;
showError(notCreditCard(displayName, string), element);
}
}
}
}
}
}
return valid;
}
function isDecimal(element, displayName, decimalPlaces, mandatory) {
var valid = true;
if (element != null) {
if (isArray(element)) {
var i;
for (i = 0; valid && i < element.length; i ++) {
valid = valid && isDecimal(element[i], displayName, decimalPlaces, mandatory);
}
}
else {
var string = element.value + "";
if (mandatory) {
valid = isMandatory(element, displayName);
}
if (valid && !isBlank(string)) {
var i;
var character;
var decimal;
decimal = 0;
if (valid) {
for (i = 0; i < string.length; i ++) {
character = string.charAt(i);
if (character < "0" || character > "9") {
if (character == minusSign) {
if (i != 0) {
valid = false;
showError(negativeSignNotFirst(displayName, string), element);
break;
}
}
else if (character == decimalSeparator) {
decimal ++;
if (decimal > 1) {
valid = false;
showError(tooManyDecimalPoints(displayName, string), element);
break;
}
}
else {
valid = false;
showError(noAlpha(displayName, string), element);
break;
}
}
}
}
if (valid && decimalPlaces != null) {
decimal = string.indexOf(decimalSeparator);
if ((decimal == -1 && decimalPlaces > 0) || (decimal != -1 && decimalPlaces == 0) || (decimalPlaces > 0 && ((string.length - decimalPlaces - 1) != decimal))) {
valid = false;
showError(moreDecimals(displayName, decimalPlaces, string), element);
}
}
}
}
}
return valid;
}
function isEmailAddress(element, displayName, mandatory) {
var valid = true;
if (element != null) {
if (isArray(element)) {
var i;
for (i = 0; valid && i < element.length; i ++) {
valid = valid && isEmailAddress(element[i], displayName, mandatory);
}
}
else {
var string = element.value + "";
if (mandatory) {
valid = isMandatory(element, displayName);
}
if (valid && !isBlank(string)) {
var atPos = -1;
var dotPos = -1;
var i;
var character;
var invalidChars = " /:,;";
for (i = 0; i < invalidChars.length; i ++) {
character = invalidChars.charAt(i);
if (string.indexOf(character) != -1) {
valid = false;
showError(noInvalidCharacters(displayName, string), element);
break;
}
}
if (valid) {
atPos = string.indexOf("@");
if (atPos == -1) {
valid = false;
showError(noAtSymbol(displayName, string), element);
}
else {
if (string.indexOf("@", (atPos + 1)) != -1) {
valid = false;
showError(tooManyAtSymbols(displayName, string), element);
}
else if (atPos == 0) {
valid = false;
showError(noAtSymbolAtStart(displayName, string), element);
}
else if (atPos == (string.length - 1)) {
valid = false;
showError(noAtSymbolAtEnd(displayName, string), element);
}
else {
dotPos = string.indexOf(".", atPos);
if (dotPos == -1 || dotPos == (atPos + 1) || string.charAt(string.length - 1) == ".") {
valid = false;
showError(invalidHostName(displayName, string), element);
}
}
}
}
}
}
}
return valid;
}
function isEqual(element, displayName, comparisonElement) {
var valid = true;
if (element != null && comparisonElement != null) {
var string1;
var string2;
if (isArray(element)) {
var i;
for (i = 0; valid && i < element.length; i ++) {
string1 = element[i].value + "";
string2 = comparisonElement.value + "";
valid = (string1 == string2);
}
}
else {
string1 = element.value + "";
string2 = comparisonElement.value + "";
valid = (string1 == string2);
}
if (!valid) {
showError(notEqual(displayName, string1, string2), element);
}
}
return valid;
}
function isFormat(element, displayName, formatMask, mandatory, numberMask, alphaMask, upperMask, lowerMask, anyMask, ddMask, mmMask, yyMask, hhMask, miMask, ssMask, msMask) {
var i = -1;
var valid = true;
var invalidDate = false;
var invalidTime = false;
if (element != null) {
if (isArray(element)) {
var i;
for (i = 0; valid && i < element.length; i ++) {
valid = valid && isFormat(element[i], displayName, formatMask, mandatory, numberMask, alphaMask, upperMask, lowerMask, anyMask, ddMask, mmMask, yyMask, hhMask, miMask, ssMask, msMask);
}
}
else {
var mask = formatMask + "";
var string = element.value + "";
if (mandatory) {
valid = isMandatory(element, displayName);
}
if (numberMask == null) numberMask  = "9";
if (alphaMask == null)  alphaMask   = "@";
if (upperMask == null)  upperMask   = "A";
if (lowerMask == null)  lowerMask   = "a";
if (anyMask == null)    anyMask     = "*";
if (ddMask == null)     ddMask      = "d";
if (mmMask == null)     mmMask      = "m";
if (yyMask == null)     yyMask      = "y";
if (hhMask == null)     hhMask      = "H";
if (miMask == null)     miMask      = "M";
if (ssMask == null)     ssMask      = "S";
if (msMask == null)     msMask      = "s";
var ddPos = mask.indexOf(ddMask);
var mmPos = mask.indexOf(mmMask);
var yyPos = mask.indexOf(yyMask);
var hhPos = mask.indexOf(hhMask);
var miPos = mask.indexOf(miMask);
var ssPos = mask.indexOf(ssMask);
var msPos = mask.indexOf(msMask);
if (valid && !isBlank(string)) {
var characterString;
var characterMask;
var errorMessage;
valid = isLength(element, displayName, mask.length, mask.length, true);
if (valid) {
for (i = 0; i < string.length; i ++) {
characterString = string.charAt(i);
characterMask = mask.charAt(i);
if (characterMask == numberMask || characterMask == ddMask || characterMask == mmMask || characterMask == yyMask || characterMask == hhMask || characterMask == miMask || characterMask == ssMask || characterMask == msMask) {
if (characterString < "0" || characterString > "9") {
valid = false;
break;
}
continue;
}
else if (characterMask == alphaMask) {
if ((characterString < "a" || characterString > "z") && (characterString < "A" || characterString > "Z")) {
valid = false;
break;
}
continue;
}
else if (characterMask == lowerMask) {
if (characterString < "a" || characterString > "z") {
valid = false;
break;
}
continue;
}
else if (characterMask == upperMask) {
if (characterString < "A" || characterString > "Z") {
valid = false;
break;
}
continue;
}
else if (characterMask != anyMask && characterString != characterMask) {
valid = false;
break;
}
}
if (valid && (ddPos > -1 || mmPos > -1 || yyPos > -1)) {
var dd = string.substring(ddPos,mask.lastIndexOf(ddMask) + 1) - 0;
var mm = string.substring(mmPos,mask.lastIndexOf(mmMask) + 1) - 0;
var yy = string.substring(yyPos,mask.lastIndexOf(yyMask) + 1) - 0;
if (dd < 1 || dd > 31 || mm < 1 || mm > 12) {
invalidDate = true;
valid = false;
}
else {
if ((mm == 4 || mm == 6 || mm == 9 || mm == 11) && dd > 30) {
invalidDate = true;
valid = false;
}
else {
if (mm == 2) {
if (yy < 100) {
if (yy > 50) {
yy = 1900 + yy;
}
else {
yy = 2000 + yy;
}
}
var leapYear = yy % 4;
if (leapYear == 0 && (yy % 100 == 0) && (yy % 400 != 0)) {
leapYear = 1;
}
if ((leapYear == 0 && dd > 29) || (leapYear != 0 && dd > 28)) {
invalidDate = true;
valid = false;
}
}
}
}
}
if (valid && hhPos > -1) {
var hh = string.substring(hhPos,mask.lastIndexOf(hhMask) + 1) - 0;
if (hh < 0 || hh > 23) {
invalidTime = true;
valid = false;
}
}
if (valid && miPos > -1) {
var mi = string.substring(miPos,mask.lastIndexOf(miMask) + 1) - 0;
if (mi < 0 || mi > 59) {
invalidTime = true;
valid = false;
}
}
if (valid && ssPos > -1) {
var ss = string.substring(ssPos,mask.lastIndexOf(ssMask) + 1) - 0;
if (ss < 0 || ss > 59) {
invalidTime = true;
valid = false;
}
}
if (valid && miPos > -1) {
var mi = string.substring(miPos,mask.lastIndexOf(miMask) + 1) - 0;
if (mi < 0 || mi > 999) {
invalidTime = true;
valid = false;
}
}
}
}
if (valid == false) {
if (invalidDate == true) {
showError(notDate(displayName, formatMask, string), element);
}
else if (invalidTime == true) {
showError(notTime(displayName, formatMask, string), element);
}
else {
showError(notFormat(displayName, formatMask, numberMask, lowerMask, upperMask, alphaMask, anyMask, ddMask, mmMask, yyMask, hhMask, miMask, ssMask, msMask, ddPos, mmPos, yyPos, hhPos, miPos, ssPos, msPos, string, i + 1), element);
}
}
}
}
return valid;
}
function isInt(element, displayName, mandatory) {
var valid = true;
if (element != null) {
if (isArray(element)) {
var i;
for (i = 0; valid && i < element.length; i ++) {
valid = valid && isInt(element[i], displayName, mandatory);
}
}
else {
var string = element.value + "";
if (mandatory) {
valid = isMandatory(element, displayName);
}
if (valid && !isBlank(string)) {
var i;
var character;
for (i = 0; i < string.length; i ++) {
character = string.charAt(i);
if (character < "0" || character > "9") {
if (character == minusSign) {
if (i != 0) {
valid = false;
showError(negativeSignNotFirst(displayName, string), element);
break;
}
}
else {
valid = false;
showError(noAlpha(displayName, string), element);
break;
}
}
}
}
}
}
return valid;
}
function isLength(element, displayName, minLength, maxLength, mandatory) {
var valid = true;
if (element != null) {
if (isArray(element)) {
var i;
for (i = 0; valid && i < element.length; i ++) {
valid = valid && isLength(element[i], displayName, minLength, maxLength, mandatory);
}
}
else {
var string = element.value + "";
if (mandatory) {
valid = isMandatory(element, displayName);
}
if (valid && !isBlank(string)) {
if (minLength != null && maxLength != null) {
if (string.length < minLength || string.length > maxLength) {
valid = false;
if (minLength == maxLength) {
showError(notExactLength(displayName, maxLength, string), element);
}
else {
showError(notLength(displayName, minLength, maxLength, string), element);
}
}
}
else {
if (minLength != null) {
if (string.length < minLength) {
valid = false;
showError(tooShort(displayName, minLength, string), element);
}
}
else {
if (maxLength != null) {
if (string.length > maxLength) {
valid = false;
showError(tooLong(displayName, maxLength, string), element);
}
}
}
}
}
}
}
return valid;
}
function isMandatory(element, displayName) {
var valid = true;
if (element != null) {
if (isArray(element)) {
var a;
var i;
var isMandatoryFunction;
isMandatoryFunction = "isMandatory(element[i], displayName";
for (a = 2; a < isMandatory.arguments.length; a ++) {
isManadatoryFunction += ", isMandatory.arguments[" + a + "]";
}
isMandatoryFunction += ");";
for (i = 0; valid && i < element.length; i ++) {
valid = valid && eval(isMandatoryFunction);
}
}
else {
var dependantElement;
var dependantElements;
var e;
var finished = false;
var i;
var reallyMandatory;
var string = element.value + "";
if (isMandatory.arguments.length <= 2) {
reallyMandatory = true;
}
else {
reallyMandatory = !isMandatory.arguments[2];
for (i = 3; i < isMandatory.arguments.length && !finished; i ++) {
if (isArray(isMandatory.arguments[i])) {
dependantElements = isMandatory.arguments[i]
}
else {
dependantElements = new Array();
dependantElements[0] = isMandatory.arguments[i]
}
for (e = 0; e < dependantElements.length && !finished; e ++) {
dependantElement = dependantElements[e];
if (dependantElement.type == 'checkbox' || dependantElement.type =='radio') {
if (dependantElement.checked) {
reallyMandatory = !reallyMandatory;
finished = true;
}
}
else if (dependantElement.type == 'select-one' || dependantElement.type =='select-multiple') {
if (dependantElement.selectedIndex == -1) {
reallyMandatory = !reallyMandatory;
finished = true;
}
}
else {
if (!(dependantElement.value == null || isBlank(dependantElement.value))) {
reallyMandatory = !reallyMandatory;
finished = true;
}
}
}
}
}
if (reallyMandatory) {
if (isBlank(string)) {
valid = false;
showError(noValue(displayName, string), element);
}
}
}
}
return valid;
}
function isNumber(element, displayName, mandatory) {
var valid = true;
if (element != null) {
if (isArray(element)) {
var i;
for (i = 0; valid && i < element.length; i ++) {
valid = valid && isNumber(element[i], displayName, mandatory);
}
}
else {
var string = element.value + "";
if (mandatory) {
valid = isMandatory(element, displayName);
}
if (valid && !isBlank(string)) {
var i;
var character;
var decimal = 0;
for (i = 0; i < string.length; i ++) {
character = string.charAt(i);
if (character < "0" || character > "9") {
if (character == minusSign) {
if (i != 0) {
valid = false;
showError(negativeSignNotFirst(displayName, string), element);
break;
}
}
else if (character == decimalSeparator) {
decimal ++;
if (decimal > 1) {
valid = false;
showError(tooManyDecimalPoints(displayName, string), element);
break;
}
}
else {
valid = false;
showError(noAlpha(displayName, string), element);
break;
}
}
}
}
}
}
return valid;
}
function isSelected(element, displayName) {
if (element != null) {
var valid;
var ignoreIndex = -1;
if (isSelected.arguments.length == 3) {
ignoreIndex = isSelected.arguments[2];
}
if (isArray(element)) {
var i;
valid = true;
for (i = 0; valid && i < element.length; i ++) {
valid = valid && isSelected(element[i], displayName, ignoreIndex);
}
}
else {
var i;
valid = false;
for (i = 0; i < element.options.length; i++) {
if (i != ignoreIndex) {
if (element.options[i].selected) {
valid = true;
break;
}
}
}
if (valid == false) {
showError(notSelected(displayName), element);
}
}
return valid;
}
else {
return true;
}
}
function isValid(element, displayName, caseSensitive, mandatory) {
var valid = true;
if (element != null) {
if (isArray(element)) {
var a;
var i;
var isValidFunction;
isValidFunction = "isValid(element[i], displayName, caseSensitive, mandatory";
for (a = 4; a < isValid.arguments.length; a ++) {
isValidFunction += ", isValid.arguments[" + a + "]";
}
isValidFunction += ");";
for (i = 0; valid && i < element.length; i ++) {
valid = valid && eval(isValidFunction);
}
}
else {
var string = element.value + "";
if (mandatory) {
valid = isMandatory(element, displayName);
}
if (valid && !isBlank(string)) {
var value;
var i;
valid = false;
for (i = 4; i < isValid.arguments.length; i ++) {
value = isValid.arguments[i] + "";
if ((string == value) || (caseSensitive == false && string.toLowerCase() == value.toLowerCase())) {
valid = true;
break;
}
}
if (valid == false) {
showError(notValid(displayName, string), element);
}
}
}
}
return valid;
}
function showError(message, returnFocusTo) {
if (useAlert) {
alert(message);
if (returnFocusTo != null) {
returnFocusTo.focus();
if (returnFocusTo.type == "text" || returnFocusTo.type == "textarea" || returnFocusTo.type == "password") {
returnFocusTo.select();
}
}
}
else {
document.write(message);
}
}
var BASE_HREF = "http://www.warp.com.au/";var DAYS = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];var MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", ""];var COMMON_YEAR_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var DAYS_HEADER = new String();
var LEAP_YEAR_DAYS = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var TODAY = new Date();
var TODAY_DAY = TODAY.getDate();
var TODAY_MONTH = TODAY.getMonth();
var TODAY_YEAR = TODAY.getFullYear();
if ((typeof DAYS) == "undefined") DAYS = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
if ((typeof MONTHS) == "undefined") MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
DAYS_HEADER += "<tr>";
for (var d = 0; d < 7; d ++) {
DAYS_HEADER += "<th>" + DAYS[d] + "</th>";
}
DAYS_HEADER += "</tr>";
function CalendarPeriod(p_month, p_year) {
this.month = new Number(p_month);
this.name = MONTHS[this.month];
this.year = new Number(p_year);
this.getDaysInMonth = CalendarPeriod_days;
this.getLastPeriod = CalendarPeriod_last;
this.getNextPeriod = CalendarPeriod_next;
function CalendarPeriod_days() {
if ((this.year % 4) == 0) {
if ((this.year % 100) == 0 && (this.year % 400) != 0) {
return COMMON_YEAR_DAYS[this.month];
}
else {
return LEAP_YEAR_DAYS[this.month];
}
}
else {
return COMMON_YEAR_DAYS[this.month];
}
}
function CalendarPeriod_last() {
if (this.month == 0) {
return new CalendarPeriod(11, this.year - 1);
}
else {
return new CalendarPeriod(this.month - 1, this.year);
}
}
function CalendarPeriod_next() {
if (this.month == 11) {
return new CalendarPeriod(0, this.year + 1);
}
else {
return new CalendarPeriod(this.month + 1, this.year);
}
}
}
function Calendar(element, calWindow, month, year, format, styleSheet, yrFrom, yrTo) {
this.period = new CalendarPeriod(month, year);
this.calendarWindow = calWindow;
this.dateFormat = format;
this.returnToElement = element;
this.calendarStyleSheet = styleSheet;
this.yrFrom = yrFrom;
this.yrTo = yrTo;
this.formatDate = Calendar_formatDate;
this.formatDay = Calendar_formatDay;
this.getCellClass = Calendar_getDayCellClass;
this.makeBuildCalendarCall = Calendar_makeBuildCalendarCall;
this.makeReturnAnchor = Calendar_makeReturnAnchor;
this.show = Calendar_show;
function Calendar_formatDate(day) {
var outDate = new String(this.dateFormat);
if (outDate.indexOf("dd") != -1) {
outDate = stringReplace(outDate, "dd", makeTwoDigitString(day));
}
else if (outDate.indexOf("d") != -1) {
outDate = stringReplace(outDate, "d", makeTwoDigitString(day));
}
if (outDate.indexOf("mm") != -1) {
outDate = stringReplace(outDate, "mm", makeTwoDigitString(this.period.month + 1));
}
else if (outDate.indexOf("m") != -1) {
outDate = stringReplace(outDate, "m", makeTwoDigitString(this.period.month + 1));
}
else if (outDate.indexOf("MM") != -1) {
outDate = stringReplace(outDate, "MM", makeTwoDigitString(this.period.month + 1));
}
else if (outDate.indexOf("M") != -1) {
outDate = stringReplace(outDate, "M", makeTwoDigitString(this.period.month + 1));
}
if (outDate.indexOf("yyyy") != -1) {
outDate = stringReplace(outDate, "yyyy", this.period.year);
}
else if (outDate.indexOf("yy") != -1) {
var yearString = "" + this.period.year;
outDate = stringReplace(outDate, "yy", yearString.substring(2,4));
}
return outDate;
}
function Calendar_formatDay(day) {
if (day == TODAY_DAY && this.period.month == TODAY_MONTH && this.period.year == TODAY_YEAR) {
return "<span class=today>" + day + "</span>";
}
else {
return day;
}
}
function Calendar_getDayCellClass(weekDay) {
if (weekDay == 0 || weekDay == 6) {
return " class=weekend";
}
else {
return " class=weekday";
}
}
function Calendar_makeBuildCalendarCall(month, year) {
var outString = new String();
var m = (month == null) ? "\"" + this.month + "\"" : "" + month;
var y = (year == null) ? "\"" + this.year + "\"" : "" + year;
outString += "window.opener.buildCalendar(self";
outString += ", \"" + this.returnToElement + "\"";
outString += ", " + m;
outString += ", " + y;
outString += ", \"" + this.dateFormat + "\"";
outString += ", \"" + this.calendarStyleSheet + "\"";
outString += ", " + this.yrFrom;
outString += ", " + this.yrTo;
outString += ")";
return outString;
}
function Calendar_makeReturnAnchor(currentDay) {
var outString = new String();
outString += "<a href='#' onClick=\"self.opener.document.";
outString += this.returnToElement;
outString += ".value='";
outString += this.formatDate(currentDay);
outString += "';";
outString += "if(self.opener.document.";
outString += this.returnToElement;
outString += ".onchange)self.opener.document.";
outString += this.returnToElement;
outString += ".onchange();";
outString += "window.close();\"";
outString += ">";
outString += this.formatDay(currentDay);
outString += "</a>";
return outString;
}
function Calendar_show() {
var buffer = new String();
var currentDate = new Date(this.period.year, this.period.month, 1);
var currentDay=1;
var firstDay=currentDate.getDay();
var last = this.period.getLastPeriod();
var next = this.period.getNextPeriod();
var lastDay=this.period.getDaysInMonth();
var lastMonth=this.period.getLastPeriod().getDaysInMonth() - firstDay + 1;
var onLastDay=0;
buffer += "<html>";
buffer += "<head>";
buffer += "<title>" + MONTHS[this.period.month] + " " + this.period.year + "</title>";
buffer += "<base href=\"" + BASE_HREF + "\" />";
buffer += "<link rel=\"StyleSheet\" type=\"text/css\" href=\"" + this.calendarStyleSheet + "\">";
buffer += "</head>";
buffer += "<body>";
buffer += "<form>";
buffer += "<table class='navTable'><tr>";
buffer += "<td nowrap valign='top' align='left'>";
buffer += "<a class='navArrow' href='javascript:" + this.makeBuildCalendarCall("\"" + this.period.month + "\"", "\"" + (this.period.year - 1) + "\"") + "' title='" + MONTHS[this.period.month] + " " + (this.period.year - 1)  + "'>&lt;&lt;</a>";
buffer += "</td>";
buffer += "<td nowrap valign='top' align='left'>";
buffer += "<a class='navArrow' href='javascript:" + this.makeBuildCalendarCall("\"" + last.month + "\"", "\"" + last.year + "\"") + "' title='" + MONTHS[last.month] + " " + last.year + "'>&lt;</a>";
buffer += "</td>";
buffer += "<td nowrap valign='top' align='center'>";
buffer += "<select onchange='" + this.makeBuildCalendarCall('this.selectedIndex', "\"" + this.period.year + "\"") + "'>";
for (var m = 0; m < 12; m ++) {
buffer += "<option value='" + m + "'";
if (m == this.period.month) {
buffer += " selected";
}
buffer += ">" + MONTHS[m];
}
buffer += "</select>";
buffer += "<select onchange='" + this.makeBuildCalendarCall("\"" + this.period.month + "\"", "this.options[this.selectedIndex].value") + "'>";
for (var y = this.yrFrom; y <= this.yrTo; y ++) {
buffer += "<option value='" + y + "'";
if (y == this.period.year) {
buffer += " selected";
}
buffer += ">" + y;
}
buffer += "</select>";
buffer += "</td>";
buffer += "<td nowrap valign='top' align='right'>";
buffer += "<a class='navArrow' href='javascript:" + this.makeBuildCalendarCall("\"" + next.month + "\"", "\"" + next.year + "\"") + "' title='" + MONTHS[next.month] + " " + next.year + "'>&gt;</a>";
buffer += "</td>";
buffer += "<td nowrap valign='top' align='right'>";  	buffer += "<a class='navArrow' href='javascript:" + this.makeBuildCalendarCall("\"" + this.period.month + "\"", "\"" + (this.period.year + 1) + "\"") + "' title='" + MONTHS[this.period.month] + " " + (this.period.year + 1) + "'>&gt;&gt;</a>";
buffer += "</td>";
buffer += "</tr></table>";
buffer += "<table class='calendarTable'>";
buffer += DAYS_HEADER;
buffer += "<tr>";
for (var i = 0; i < firstDay; i ++) {
buffer += "<td" + this.getCellClass(i) + ">" + (lastMonth ++) + "</td>";
}
for (var j = firstDay; j < 7; j ++) {
buffer += "<td" + this.getCellClass(j) + ">" + this.makeReturnAnchor(currentDay) + "</td>";
currentDay = currentDay + 1;
}
buffer += "</tr>";
for (var k = 2; k < 7; k ++) {
buffer += "<tr>";
var j;
for (j = 0; j < 7; j ++) {
buffer += "<td" + this.getCellClass(j) + ">" + this.makeReturnAnchor(currentDay) + "</td>";
currentDay = currentDay + 1;
if (currentDay > lastDay) {
onLastDay = 1;
break;
}
}
if (j == 6) {
buffer += "</tr>";
}
if (onLastDay == 1) {
break;
}
}
for (var m = 1; m < (7 - j); m ++) {
buffer += "<td" + this.getCellClass(j+m) + ">" + m + "</td>";
}
buffer += "</table>";
buffer += "<div class='todayButtonDiv'>";
buffer += "<input type='button' value='Today' onclick='" + this.makeBuildCalendarCall("\"" + TODAY_MONTH + "\"", "\"" + TODAY_YEAR + "\"") + "' />";
buffer += "</div>";
buffer += "</form>";
buffer += "</body></html>";
this.calendarWindow.document.open();
this.calendarWindow.document.write(buffer);
this.calendarWindow.document.close();
}
}
function buildCalendar(calWindow, element, month, year, format, styleSheet, yrFrom, yrTo) {
var cal = new Calendar(element, calWindow, month, year, format, styleSheet, yrFrom, yrTo);
cal.show();
calWindow.focus();
}
function displayCalendar() {
var element;
var month;
var year;
var format;
var styleSheet;
var windowWidth;
var windowHeight;
var windowTop;
var windowLeft;
var yrFrom;
var yrTo;
element = arguments[0];
month = (arguments[1] == null || arguments[1] == "") ? new String(TODAY_MONTH) : arguments[1];
year = (arguments[2] == null || arguments[2] == "") ? new String(TODAY_YEAR) : arguments[2];
format = (arguments[3] == null || arguments[3] == "") ? "yyyy-mm-dd" : arguments[3];
styleSheet = (arguments[4] == null || arguments[4] == "") ? "InputDate.css" : arguments[4];
windowWidth = (arguments[5] == null || arguments[5] == "") ? 190 : arguments[5];
windowHeight = (arguments[6] == null || arguments[6] == "") ? 230 : arguments[6];
windowTop = (arguments[7] == null || arguments[7] == "") ? 200 : arguments[7];
windowLeft = (arguments[8] == null || arguments[8] == "") ? 230 : arguments[8];
yrFrom = (arguments[9] == null || arguments[9] == "") ? new String(parseInt(year) - 2) : arguments[9];
yrTo = (arguments[10] == null || arguments[10] == "") ? new String(parseInt(year) + 9) : arguments[10];
if (parseInt(yrFrom) > parseInt(year)) {
yrFrom = year;
}
if (parseInt(yrTo) < parseInt(year)) {
yrTo = year;
}
var cal = window.open("", "Calendar", "width=" + windowWidth +",height=" + windowHeight + ",status=no,resizable=no,top=" + windowTop + ",left=" + windowLeft);
cal.opener = self;
buildCalendar(cal, element, month, year, format, styleSheet, yrFrom, yrTo);
}
function makeTwoDigitString(numValue) {
if (numValue < 10) {
return("0" + numValue);
}
else {
return numValue;
}
}
function stringReplace(inString, find, replaceWith) {
if (!inString) {
return "";
}
if (inString.indexOf(find) != -1) {
t = inString.split(find);
return (t.join(replaceWith));
}
else {
return inString;
}
}
