function NewWindow(mypage, myname, w, h, scroll) {
var winl = (screen.width - w) / 2;
var wint = (screen.height - h) / 2;
winprops = 'height='+h+',width='+w+',top='+wint+',left='+winl+',scrollbars='+scroll+',resizable'
win = window.open(mypage, myname, winprops)
if (parseInt(navigator.appVersion) >= 4) { win.window.focus(); }
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}

function sitestat(ns_l){
		ns_l+="&ns__t="+(new Date()).getTime();
		ns_pixelUrl=ns_l;
		ns_0=document.referrer;
		ns_0=(ns_0.lastIndexOf("/")==ns_0.length-1)?ns_0.substring(ns_0.lastIndexOf("/"),0):ns_0;
		if(ns_0.length>0)ns_l+="&ns_referrer="+escape(ns_0);
		if(document.images){ns_1=new Image();ns_1.src=ns_l;}else
		document.write("<img src="+ns_l+" width='1' height='1'>");
}

function isInField(fieldValue, subString) {

    index = fieldValue.indexOf(subString);

    if (index == - 1) {
        return false;
    } else {
        return true;
    }
}

function validateNumber(val, min, max) {

    if (isNaN(val)) return false;
    if (min && val < min) return false;
    if (max && val > max) return false;

    return true;
}

function dateComponents(dateStr, format) {

    var results = new Array();
    var datePat = /^(\d{1,2})(\/|-|\.)(\d{1,2})\2(\d{2}|\d{4})$/;
    var matchArray = dateStr.match(datePat);
    if (matchArray == null) {
        return null;
    }
    //check for two digit (20th century) years and prepend 19.
    matchArray[4] = (matchArray[4].length == 2) ? '19' + matchArray[4] : matchArray[4];

    // parse date into variables
    if (format.charAt(0) == "d") { //what format does the server use for dates? 
        results[0] = matchArray[1];
        results[1] = matchArray[3];
    }

    else {
        results[1] = matchArray[1];
        results[0] = matchArray[3];
    }
    results[2] = matchArray[4];
    return results;
}

function valiDate(obj, min, max, format) {

    dateBits = dateComponents(obj.value, format);
    if (dateBits == null) return false;

    //Check it is a valid date first
    day = dateBits[0];
    month = dateBits[1];
    year = dateBits[2];
    if ((month < 1 || month > 12) || (day < 1 || day > 31)) { // check month range 
        return false;
    }
    if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31) {
        return false;
    }
    if (month == 2) {

        // check for february 29th 
        var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));

        if (day > 29 || (day == 29 && ! isleap)) {
            return false;
        }
    }
    //Now check whether a range is specified and if in bounds
    var theDate = new Date(dateBits[2], parseInt(dateBits[1]) - 1, dateBits[0]);
    if (min) {
        minBits = dateComponents(min, format);
        var minDate = new Date(minBits[2], parseInt(minBits[1]) - 1, minBits[0]);

        if (minDate.getTime() > theDate.getTime()) return false;
    }
    if (max) {
        maxBits = dateComponents(max, format);
        var maxDate = new Date(maxBits[2], parseInt(maxBits[1]) - 1, maxBits[0]);

        if (theDate.getTime() > maxDate.getTime()) return false;
    }

    return true;
}

function validateEmail(obj) {

    var emailStr = obj.value;
    var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/;                              // not valid
    var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; // valid
    var reg3 = /\S\w*\/\S\w*\/\S\w*/;

    if (! reg1.test(emailStr) && reg2.test(emailStr) || reg3.test(emailStr)) {
        return true;
    } else {
        return false;
    }
}

function locateFileUpload(f) {

    for (var i = 0; i < f.elements.length; i++)
        if (f.elements[i].type == 'file') {
            return f.elements[i];
        }
}

function validateFileType(obj, fTyp) {

    dots = obj.value.split(".");
    fType = "." + dots[dots.length - 1];
    if (fTyp != null && fTyp.indexOf(fType) == - 1) return false;

    return true;
}

function validateFileLimit(obj, cur, max) {

    if (cur >= max) return false;

    return true;
}

function OnFailure(obj, lbl, msg) {

    var msgs = new Array();
    msgs["text"] = " is a required field. \n\nPlease enter a value.";
    msgs["textarea"] = " is a required field. \n\nPlease enter a value.";
    msgs["select-one"] = " is a required field. \n\nPlease select an entry.";
    msgs["select-multiple"] = " is a required field. \n\nPlease select an entry.";
    msgs["checkbox"] = " is a required field. \n\nPlease select an entry.";
    msgs["file"] = " is a required upload. \n\nPlease select a file.";
    msgs["fileType"] = " requires certain file types. \n\nPlease select a valid file type.";
    msgs["fileLimit"] = " is a limited file upload. \n\nPlease reduce number of attachment(s) first.";
    msgs["radio"] = " is a required field. \n\nPlease select an entry.";
    msgs["number"] = " is a numeric field. \n\nPlease enter a valid number";
    msgs["date"] = " is a date field. \n\nPlease enter a valid date.";
    msgs["email"] = " is an address field. \n\nPlease enter a valid e-mail address.";
    if (msg[1] || msg[2]) {     //upper/lower bound ranges have been specified
        if (msg[1] && msg[2]) { //range
            term = (msg[0] == "date") ? " (" + msg[3] + ")" : "";
            alert(lbl + msgs[msg[0]] + term + " between " + msg[1] + " and " + msg[2]);
        }

        else if (msg[1]) { //lower bound
            term = (msg[0] == "number") ? " greater than " : " (" + msg[3] + ") on or after ";
            alert(lbl + msgs[msg[0]] + term + msg[1]);
        }

        else { //upper bound
            term = (msg[0] == "number") ? " less than " : " (" + msg[3] + ") before ";
            alert(lbl + msgs[msg[0]] + term + msg[2]);
        }
    }

    else { //no range given
        alert(lbl + msgs[msg[0]]);
    }
    obj.focus();
    return false;
}

function isSomethingSelected(obj) {

    for (var r = 0; r < obj.length; r++) {
        if (obj[r].checked) return true;
    }
}

function checkDates(startObj, endObj) {

    var startDateBits = dateComponents(startObj.value, 'dd/mm');
    var endDateBits = dateComponents(endObj.value, 'dd/mm');

    var startDate = new Date(startDateBits[2], parseInt(startDateBits[1]) - 1, startDateBits[0]);
    var endDate = new Date(endDateBits[2], parseInt(endDateBits[1]) - 1, endDateBits[0]);

    if (startDate.getTime() > endDate.getTime()) {
        alert("Start Date is before the End Date");
        return false;
    }

    else {
        return true;
    }
}

function validateRequiredFields(f, a) {

    for (var i = 0; i < a.length; i++) {
        e = a[i][0];

        //checks input types: "text","select-one","select-multiple","textarea","checkbox","radio","file"

        switch (e.type) {
            case "text":
                if (trim(e.value) == "") return OnFailure(e, a[i][1], ["text"]);

                if (a[i][2]) {
                    switch (a[i][2][0]) {
                        case "number":
                            if (! validateNumber(
                                      e.value, a[i][2][1],
                                      a[i][2][2])) return OnFailure(e, a[i][1], ["number", a[i][2][1], a[i][2][2]]);

                            break

                        case "date":
                            if (! valiDate(
                                      e,
                                      a[i][2][1],
                                      a[i][2][2],
                                      a[i][2][3])) return OnFailure(e, a[i][1],
                                                                    ["date", a[i][2][1], a[i][2][2], a[i][2][3]]);

                            break

                        case "email":
                            if (! validateEmail(e)) return OnFailure(e, a[i][1], ["email"]);

                            break

                        default: break
                    }
                }

                break

            case "file":

                //make sure AT LEAST one file gets attached
                if (a[i][2][1] == 0 && trim(e.value) == "") return OnFailure(e, a[i][1], ["file"]);

                if (trim(e.value) != "") {

                    //check type of file that is being uploaded
                    if (a[i][2][0] != null
                        && validateFileType(e, a[i][2][0]) == false) return OnFailure(e, a[i][1], ["fileType"]);

                    //check that file limit has not been reached
                    if (a[i][2][2] != null
                        && validateFileLimit(e, a[i][2][1], a[i][2][2]) == false) return OnFailure(e, a[i][1],
                                                                                                   ["fileLimit"]);
                }

                break

            case "textarea":
                if (trim(e.value) == "") return OnFailure(e, a[i][1], ["textarea"]);

                break

            case "select-one":
                if (e.selectedIndex == 0) return OnFailure(e, a[i][1], ["select-one"]);

                break

            case "select-multiple":
                if (e.selectedIndex == - 1) return OnFailure(e, a[i][1], ["select-multiple"]);

                break

            default:

                //must be a checkbox or a radio group if none of above

                if (! e[0]) { //handle single item group first
                    switch (e.type) {
                        case "checkbox":
                            if (! e.checked) return OnFailure(e, a[i][1], ["checkbox"]);

                            break

                        case "radio":
                            if (! e.checked) return OnFailure(e, a[i][1], ["radio"]);

                            break

                        default: break
                    }
                }

                else { //handle multi-item groups
                    switch (e[0].type) {
                        case "checkbox":
                            if (! isSomethingSelected(e)) return OnFailure(e[0], a[i][1], ["checkbox"]);

                            break

                        case "radio":
                            if (! isSomethingSelected(e)) return OnFailure(e[0], a[i][1], ["radio"]);

                            break

                        default: break
                    }
                }

                break
        }
    }

    return true;
}

function errorHandler(e, f, l) {

    alert("Error\nFile: " + f + "\nLine: " + l + "\nError:" + e);
    return true;
}

function doDelete() {
    if (confirm('Are you sure you want to delete this document?')) {
        location.search = "?DeleteDocument";
    }
}

function trim(aStr) {
    return aStr.replace(/^\s{1,}/, "").replace(/\s{1,}$/, "")
}

function isDate(str) {

    if (str.length != 10) {
        return false
    }
    for (j = 0; j < str.length; j++) {
        if ((j == 2) || (j == 5)) {
            if (str.charAt(j) != "/") {
                return false
            }
        }

        else {
            if ((str.charAt(j) < "0") || (str.charAt(j) > "9")) {
                return false
            }
        }
    }
    var day = str.charAt(0) == "0" ? parseInt(str.substring(1, 2)) : parseInt(str.substring(0, 2));
    var month = str.charAt(3) == "0" ? parseInt(str.substring(4, 5)) : parseInt(str.substring(3, 5));
    var begin = str.charAt(6) == "0" ? (str.charAt(7) == "0" ? (str.charAt(8) == "0" ? 9 : 8) : 7) : 6;
    var year = parseInt(str.substring(begin, 10));
    if (day == 0) {
        return false
    }
    if (month == 0 || month > 12) {
        return false
    }
    if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
        if (day > 31) {
            return false
        }
    }

    else {
        if (month == 4 || month == 6 || month == 9 || month == 11) {
            if (day > 30) {
                return false
            }
        }

        else {
            if (year % 4 != 0) {
                if (day > 28) {
                    return false
                }
            }

            else {
                if (day > 29) {
                    return false
                }
            }
        }
    }

    return true;
}

function myDateDialog() {
    var retDay;
    var retMonth;
    var retYear;
}

function openDatePickerDialog(wnd, field, dateFormat) {

    myDateDialog.retDay = "";
    myDateDialog.retMonth = "";
    myDateDialog.retYear = "";

    var pathname = window.location.pathname;
    var dlgURL = pathname.substring(0, (pathname.lastIndexOf(".nsf") + 5)) + 'dlgDatePicker?OpenForm';

    if (wnd.showModalDialog(dlgURL, myDateDialog, "dialogHeight:380px;dialogWidth:280px;center") == true) {
        field.value
            = dateFormat.replace(
                  /yyyy/, myDateDialog.retYear).replace(/mm/, myDateDialog.retMonth).replace(/dd/, myDateDialog.retDay);
    } else {
        return;
    }
}

function doSubmit(f, v) {
    if (v) {
        var a = new Array();
        a[a.length] = [f.option, 'Award title'];
        a[a.length] = [f.name, 'Name'];
        a[a.length] = [f.company, 'Company name'];
        a[a.length] = [f.email, 'Email address', ['email']];

        if (validateRequiredFields(f, a)) {
            return true;
        } else {
            return false;
        }
    } else {
        return true;
    }
}

function doContactUsSubmit(f, v) {
    if (v) {
        var a = new Array();
        a[a.length] = [f.name, 'Full name'];
        a[a.length] = [f.email, 'Email address', ['email']];
        a[a.length] = [f.subject, 'Subject'];
        a[a.length] = [f.comments, 'Message'];

        if (validateRequiredFields(f, a)) {
            return true;
        } else {
            return false;
        }
    } else {
        return true;
    }
}