String.prototype.isAlpha=function(){return(this>='a'&&this<='z\uffff')||(this>='A'&&this<='Z\uffff');}//'z\uffff' guarantees that the <= test will work with a string like 'zz'
String.prototype.isDigit=function(){return(this>='0'&&this<='9');}
String.prototype.left=function(l){return(this.slice(0,l));}
String.prototype.right=function(l){return(this.slice(-l));}
//dt.format(f) returns a string
Date.prototype.format=function(f){var y=this.getYear(),m=this.getMonth()+1,dt=this.getDate(),s=(f=='-')?'-':'/',re=/(\D)(\d)(\d)$/;y=(y<99)?(y+2000):y;return (m+s+dt+s+y).replace(re,s);}
Doc=document;
Doc.getById=function(s){if(this.getElementById){return this.getElementById(s);}else if(this.all){return this.all[s];}else if(this.layers){return this.layers[s];}}
Evnt=function(e){if(e){return e}else{if(window.event){return this=window.event}}}
Evnt.srce=function(){var evsrc;if(this.target){evsrc=(this.target.nodeType == 3)?this.target.parentNode:this.target}else{evsrc=this.srcElement};return evsrc}//This Evnt object not tested .. see Favorites/JavaScript ASP HTML/CSS-DHTML/ObjectDetection

function xmlhttpPost(strURL, strSubmit, strResultFunc) {
        var xmlHttpReq = false;
        // Mozilla/Safari
        if (window.XMLHttpRequest) {
                xmlHttpReq = new XMLHttpRequest();
                xmlHttpReq.overrideMimeType('text/xml');
        }
        // IE
        else if (window.ActiveXObject) {
                xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlHttpReq.open('POST', strURL, true);
        xmlHttpReq.setRequestHeader('Content-Type', 
		     'application/x-www-form-urlencoded');
        xmlHttpReq.onreadystatechange = function() {
                if (xmlHttpReq.readyState == 4) {
                        eval(strResultFunc + '(xmlHttpReq.responseText;);');
                }
        }
        xmlHttpReq.send(strSubmit);
}
function formData2QueryString(docForm) { //Incomplete ... needs some work and testing.
        var strSubmit       = '';
        var formElem;
        var strLastElemName = '';
        for (i = 0; i < docForm.elements.length; i++) {
                formElem = docForm.elements[i];
                switch (formElem.type) {
                        // Text, select, hidden, password, textarea elements
                        case 'text':
                        case 'select-one':
                        case 'hidden':
                        case 'password':
                        case 'textarea':
                                strSubmit += formElem.name + 
                                '=' + escape(formElem.value) + '&'
                        //missing case else ?
                        break;  //code from Matthew Eerisse up to here (remainder is mine ... not tested, incomplete)
                                //I think the above is wrong: Should set blnbadType if case no match then alert at end of loop
                                //should loop until complete construction of strSubmit
                }
                if (blnbadType){alert("can't handle elmttype:"+formElem.type+", elmt:"+formElem.name+" Frm:"+docForm.name)}
        }
        return strSubmit
}