<!--

function arrayFromForm(form, arrayName) { 
	 
	var retval = new Array(); 
	for(var i=0; i < form.elements.length; i++) { 
		var el = form.elements[i]; 
		if ( el.name == arrayName  ) { 
			retval.push(parseInt(el.value)); 
		} 
	} 
	return retval; 
}


function checkMySum(form, arrayname ,theSum) {
	 
	var addends =  arrayFromForm(form,arrayname);
	var computedSum=0;
	adding = '';
	for (i=0; i< addends.length; i++) {
		if (adding != '') adding += ' + ';
		adding += addends[i];
	    computedSum += parseInt(addends[i]);    	
	}
	//alert ("c=" + computedSum + "and target = ". parseInt(theSum));
	if (computedSum == parseInt(theSum))
	   return true;
	else {
	   alert(adding + "  does not add up to " +  computedSum);
	   return false;   
    }
}

function changeColor(th) {
	//'resets' the background-color to white
	th.style.background = "white";
	return 1;
}


function valsmatch(a,b,str) {
  if(a.value != b.value) {
     alert(str);
     return 0;
  }
  return 1;
}

function validate(formref)  {
     
	var str = "";
	var myelements = formref.getElementsByTagName('input');
	var badradio=null;
    var radioNames = new Array();
	// loop through all input myelements in form
	for (var i = 0; i < myelements.length; i++) {
        //if (myelements.item(i).name == "cartstring") alert("Checking cartstring") 
		// check if element has a pattern
		var pattern = myelements.item(i).getAttribute('pattern');
		var req = myelements.item(i).getAttribute('required');
		var value = myelements.item(i).value;
		if (pattern != null) {
			var value = myelements.item(i).value;
			// validate the value of this element, using its defined pattern
			var offendingChar = value.match(pattern);

			// if an invalid character is found or the element was left emtpy
			if(offendingChar != null ) {

				// add up all error messages
				str += myelements.item(i).name + ": " + myelements.item(i).getAttribute('errorMsg') + "\n" +
				"Found this illegal value: '" + offendingChar + "' \n";

				// notify user by changing background color, in this case to red
				myelements.item(i).style.background = "red";
			}

		}
		//check if item is required
		if (req != null && value.length == 0 && myelements.item(i).type != "radio") {
			custom = myelements.item(i).getAttribute('errorMsg');
			if (custom) {
				str += custom + "\n";
			} else {
			    str += myelements.item(i).name + " is required." + "\n";
			}
			myelements.item(i).style.background = "red";
		}
        
		//suck in names of all required radios for later
		if (myelements.item(i).type == "radio" && req != null) {
			//alert (myelements.item(i).name); 
			found = 0;
			var b;
			b=myelements.item(i).name;
			for (var j=0; j< radioNames.length; j++ ) {
				if (radioNames[j] == b) {
					found=1;
				}
			} 
			if (found == 0) { 
				radioNames[radioNames.length] = b;
			}
		
		}

        //handle min & max vals
		var min_reqs = myelements.item(i).getAttribute('min_reqs');
		var max_reqs = myelements.item(i).getAttribute('max_reqs');
		if (min_reqs != null && max_reqs != null) {
			min_reqs -=0;
			max_reqs -=0;
			var val  =  myelements.item(i).value-0;
			//alert("val=" + val + " min_reqs = " + min_reqs + " max_reqs = " + max_reqs);
			if (val  < min_reqs || val  > max_reqs) {
				str += myelements.item(i).getAttribute('errorMsg') + '\n';
				// notify user by changing background color, in this case to red
				myelements.item(i).style.background = "red";
			}
		}
	}
	
	var selects = formref.getElementsByTagName('select');
	for (var i = 0; i < selects.length; i++) {
		var req = selects.item(i).getAttribute('required');
	    if (req != null && (selects.item(i).selectedIndex == 0 || selects.item(i).selectedIndex == -1)) {
			str += selects.item(i).name + " is required." + "\n";
			selects.item(i).style.background = "red";
		}	
	}
	
	for (var i = 0; i < radioNames.length; i++) {
		var val = valbutton(formref,radioNames[i]);
		if (val != 'OK') {
			badradio = 1;
		}		 	 
	}
	
	if (badradio != null) {
		str += "You must select one of these events." + "\n";
	}
	
	if (str != "") {
		// do not submit the form
		alert("ERROR ALERT!!\n" +str);
		return false;
	} else {
		// form values are valid; submit
		return true;
	}
}

function valbutton(formref,thisbtn) {
	rad = document.getElementsByName(thisbtn);   //?
	myOption = -1;
	for (i=rad.length-1; i > -1; i--) {
		if (rad[i].checked) {
			myOption = i;
		}
	}
	if (myOption == -1) {
		return "bad";
	} else {
		return "OK";
	}
}


function collectOptions(elid)
{
	var sel = document.getElementById(elid);
    var ops = sel.getElementsByTagName('option');
    var values = new Array();
    for(var i = 0; i < ops.length; i++)
    {
	    if(ops.item(i).selected)
	    {
		    values[values.length] = ops.item(i).value;
	    }
    }
    return values;
}

//Cookie, browserSupportsCookies, browserSupportsAjax,  ActiveXEnabledOrUnnecessary from Xajax WIKI
    // Cookie handling 
    var Cookie =
    {
        read: function (name)
        {
            var arrCookies = document.cookie.split ('; ');
            for (var i=0; i<arrCookies.length; i++)
            {
                var arrCookie = arrCookies[i].split ('=');
                
                if (arrCookie[0] == name)
                {
                    return decodeURIComponent (arrCookie[1]);
                }
            }
            return false;
        },
    
        write: function (name, value, expires, path)
        {
            if (expires)
            {
                var date = new Date ();
                date.setTime (date.getTime () + (((((expires * 24) * 60) * 60) * 1000)));
                expires = '; expires=' + date.toGMTString ();
            }
            else expires = '';
    
            if (!path) path = '/';
    
            document.cookie = name+'='+encodeURIComponent (value)+expires+'; path='+path;
        },
    
        remove: function (name)
        {
            this.write (name, '', -1);
        }
    }
    
    // Detects if can set a cookie in the browser
    function browserSupportsCookies()
    {
        Cookie.write('cookiesEnabled', 1);
        var boolCookiesEnabled = Cookie.read('cookiesEnabled');
        Cookie.remove('cookiesEnabled');
        if (boolCookiesEnabled != 1)
        {
            return false;
        }
        return true;
    }
    
    // Detects if the browser supports Ajax 
    function browserSupportsAjax()
    {
        if (typeof XMLHttpRequest == "undefined" && typeof ActiveXObject == "undefined" && window.createRequest == "undefined")
        {
            return false;
        }
        return true
    }
    
    // Detects if the browser can use ActiveX if necessary
    function ActiveXEnabledOrUnnecessary ()
    {
        if (typeof ActiveXObject != "undefined")
        {
            var xhr = null;
            try{
                xhr=new ActiveXObject("Msxml2.XMLHTTP");
            }catch (e){
                try{
                    xhr=new ActiveXObject("Microsoft.XMLHTTP");
                }catch (e2){
                    try{
                        xhr=new ActiveXObject("Msxml2.XMLHTTP.4.0");
                    }catch (e3){
                        xhr=null;
                    }
                }
            }
            if (xhr == null)
            {
                return false
            }
        }
        
        return true;
    }
    
    function checkSum(theArray,theSum)
    {
    	var sum=0;
    	for (var i=0; i <  theArray.length; i++) {
    		sum += theArray[i];
    	}
    	if (sum != theSum) {
    	  return false;
    	} else {  
          return true;		
    	}
    }
    
    //add trim fcns to String to auto trim trailing spaces BEFORE failing serverside on
    //and being dropped on account of them
    String.prototype.trim = function() {
	    return this.replace(/^\s+|\s+$/g,"");
    }
    
    String.prototype.ltrim = function() {
	    return this.replace(/^\s+/,"");
    }
    
    String.prototype.rtrim = function() {
	    return this.replace(/\s+$/,"");
    }
    
    // this function determines whether the event is the equivalent of the microsoft 
    // mouseleave or mouseenter events. 
    // I put it here because validate is pretty much included in everything.  
    function isMouseLeaveOrEnter(e, handler) { 
    	if (e.type != 'mouseout' && e.type != 'mouseover') 
    	    return false; 
    	var reltg = e.relatedTarget ? e.relatedTarget : e.type == 'mouseout' ? e.toElement : e.fromElement; 
    	while (reltg && reltg != handler) 
    	    reltg = reltg.parentNode; 
        return (reltg != handler);
    }
//-->


