<!-- This script was written by Thomas Slomka [tslomka@buffalo.edu] for the purpose of checking forms on teaching web pages -->
<!-- Copyright Thomas W. Slomka 2002, all right reserved. -->
<!-- 
				
function checkForm(formData,formAction){

	//alert(formData +" , "+formAction);
	var thisAlert = "Alert:\nYou must complete the following fields:\n\n"
	var thisTest = "OK";
	var thisData = "";
	//alert(formData.elements.length);
	for(var i = 0; i < formData.elements.length; i++){
		//alert(i+": "+formData.elements[i].name + " -- " + formData.elements[i].type);
		//alert("i = " + i + " -- Type = " + formData.elements[i].type + " --Name = " + formData.elements[i].name + " -- Value = " + formData.elements[i].value + " -- Checked = " + formData.elements[i].checked);
		if(formData.elements[i].type == "select-multiple"){
			thisList = "Bad";
			listData = "";
			for(ri = 0; ri < formData.elements[i].options.length; ri++){
				if(formData.elements[i].options[ri].selected){
					//alert(formData.elements[i].options[ri].value);
					thisList = "OK";
					listData += formData.elements[i].options[ri].value + ",";
				}
			}
			//alert(thisList);
			if (thisList == "Bad"){
				if(formAction != "addMedia"){
					thisAlert += "   - " + formData.elements[i].name + "\n";
					thisTest = "Bad";
				}else{
					thisData += "none|";
				}
			}else{
				thisData += listData + "|";
			}
			//alert(thisData);
			//i++
		}else if(formData.elements[i].type == "select-one"){
			thisList = "Bad";
			listData = "";
			//alert(formData.elements[i].options[formData.elements[i].options.selectedIndex].text );
			if(formData.elements[i].options.selectedIndex == -1 || formData.elements[i].options[formData.elements[i].options.selectedIndex].value == "none"){
				if(formAction != "addMedia"){
					thisAlert += "   - " + formData.elements[i].name + "\n";
					thisTest = "Bad";
				}else{
					thisData += "none|";
				}
			}else{
				thisData += formData.elements[i].options[formData.elements[i].options.selectedIndex].value + "|";
			}
			//alert(formData.elements[i].name);
		}else if(formData.elements[i].type == "radio"){
			thisRadio = "Bad";
			radioName = formData.elements[i].name;
			r = i
			while(formData.elements[r].name == radioName){
				//alert("i = " + i + " -- " + formData.elements[i].type + " -- " + formData.elements[i].name + " -- " + formData.elements[i].value + " -- " + formData.elements[i].checked);
				//alert("radio = " + formData.elements[i].name + " -- " + formData.elements[i].checked);
				//alert((formData.elements[i].checked));
				if(formData.elements[r].checked){
					thisRadio = "OK";
					//cleanLine = getLineBreaks(formData.elements[i]);
					//thisData += lineCleaner(cleanLine) + "|";
					thisData += formData.elements[r].value + "|";
				}
				r++;
				//alert(r+") thisRadio = "+thisRadio+" -- Form action = "+formAction);
			}
			//alert(i+") thisRadio = "+thisRadio+" -- Form action = "+formAction);
			if(thisRadio == "Bad"){
				if(formAction != "addMedia"){
					thisAlert += "   - " + radioName + "\n";
					thisTest = "Bad";
				}else{
					thisData += "none|";
				}
			}
			i = r-1;
		}else if(formData.elements[i].type == "file"){
				checkFileName = "ok";
				valid_extensions = /(.jpg|.png|.gif)$/i;
				if (valid_extensions.test(formData.elements[i].value)){
					//do nothing
				}else{
					checkFileName = "not ok";
					thisAlert += "   - " + formData.elements[i].name + " image must be a .jpg, .png or .gif\n";
				}
				valid_extensions = /\!|\@|\#|\$|\%|\^|\&|\*|[[]|[]]|\-|\=|[(]|[)]|[{]|[}]|\:|\;|\'|\"|\~|\`|\/|\?|\<|\>|\,|\+|\_/;
				if (valid_extensions.test(formData.elements[i+1].value)){
					checkFileName = "not ok";
					thisAlert += "   - " + formData.elements[i+1].name + " can contain letters and numbers only\n";
				}else{
					// do nothing
				}
				if(checkFileName == "ok"){
					thisData += formData.elements[i].value + "|";
				}
		}else if(formData.elements[i].type == "checkbox"){
			thisRadio = "Bad";
			radioName = formData.elements[i].name;
			while(formData.elements[i].name == radioName){
				//alert("i = " + i + " -- " + formData.elements[i].type + " -- " + formData.elements[i].name + " -- " + formData.elements[i].value);
				//alert("checkbox = " + formData.elements[i].name + " -- " + formData.elements[i].checked);
				//alert((formData.elements[i].checked));
				if(formData.elements[i].checked){
					thisRadio = "OK";
					//cleanLine = getLineBreaks(formData.elements[i]);
					//thisData += lineCleaner(cleanLine) + "|";
					thisData += getLineBreaks(formData.elements[i]) + "_";
				}
				//alert(thisData);
				i++;
			}
			if(thisRadio == "Bad"){
				if(formAction != "addMedia"){
					thisAlert += "   - " + formData.elements[i-1].name + "\n";
					thisTest = "Bad";
				}else{
					thisData += "none|";
				}
			}else{
				thisData += "|";
			}
			i--;
		}else if(formData.elements[i].type == "textarea"){
			//alert(i+": "+formData.elements[i].name + " -- " + formData.elements[i].type+ " -- " + formData.elements[i].value);
			if(formData.elements[i].value == ""){
				if(formAction != "addMedia"){
					thisAlert += "   - " + formData.elements[i].name + "\n";
					thisTest = "Bad";
				}else{
					thisData += "none|";
				}
			}else{
				thisData += getLineBreaks(formData.elements[i]) + "|";
			}
		}else if (formData.elements[i].type != "hidden" && formData.elements[i].type != "image" && formData.elements[i].type != "checkbox" && formData.elements[i].type != "radio"){
			//alert("i = " + i + " -- " + formData.elements[i].type + " -- " + formData.elements[i].name + " -- " + formData.elements[i].value);
			if (formData.elements[i].value == ""){
				//alert(formData.elements[i].listName);
				if(formAction != "addMedia"){
					thisAlert += "   - " + formData.elements[i].name + "\n";
					thisTest = "Bad";
				}else{
					thisData += "none|";
				}
			}else{
					//cleanLine = getLineBreaks(formData.elements[i]);
					//thisData += lineCleaner(cleanLine) + "|";
					confirmMatch = /Confirm/g;
					if(formData.elements[i].accept != ""){
						if(formData.elements[i].accept == "currency"){
							theAccept = /^(\d{1,})\.(\d\d)$/;
							theReply = " (currency format: 22.22) \n";
						}
						if(formData.elements[i].accept == "numbers"){
							theAccept = /\D/;
							theReply = " (numbers only) \n";
						}
						if(formData.elements[i].accept == "numbersTwo"){
							theAccept = /^\d\d$/;
							theReply = " (2 numbers: 01 or 12) \n";
						}
						if(formData.elements[i].accept == "numbersNine"){
							theAccept = /^(([0-9]{9}))+$/;
							theReply = " (9 numbers: 12456789) \n";
						}
						if(formData.elements[i].accept == "numbersFour"){
							theAccept = /^\d\d\d\d$/;
							theReply = " (4 numbers: 0001 or 1234) \n";
						}
						if(formData.elements[i].accept == "zipcode"){
							theAccept = /^(([0-9]{5})[-]{1}[0-9]{4})+$/;
							theReply = " (format: 12345 or 12345-1234) \n";
						}
						if(formData.elements[i].accept == "phone"){
							theAccept = /^(([0-9]{1})*[- .(]*([0-9]{3})*[- .)]*[0-9]{3}[- .]*[0-9]{4})+$/;
							theReply = " (format: 1 123-123-1234 or 1 \(123\) 123-1234) \n";
						}
						if(formData.elements[i].accept == "email"){
							theAccept = /^([0-9a-zA-Z]+([_.-]?[0-9a-zA-Z]+)*@[0-9a-zA-Z]+[0-9,a-z,A-Z,.,-]*(.){1}[a-zA-Z]{2,4})+$/;
							theReply = " (format: name@server.ext) \n";
						}
						if(formData.elements[i].accept == "alpha"){
							theAccept = /^[a-zA-Z.-]+(\s[a-zA-Z.-]+)*?$/;
							theReply = " (letters only) \n";
						}
						if(formData.elements[i].accept == "alphaName"){
							theAccept = /^[a-zA-Z.-]+(\s[a-zA-Z.-]+)*?$/;
							theReply = " (letters hyphen and period only) \n";
						}
						if(formData.elements[i].accept == "alphaNum"){
							theAccept = /^[\w\d\(\)\.\-\,\?]+(\s[\w\d\(\)\.\-\,\?]+)*?$/;
							theReply = " (letters, numbers, punctuation only) \n";
						}
						//alert("form accept = "+ theAccept+ " is " + formData.elements[i].name+ ":  test accept "+ theAccept.test(formData.elements[i].value));
						if (theAccept.test(formData.elements[i].value) || formData.elements[i].value == "none"){
							if(formAction != "addMedia"){
								thisData += getLineBreaks(formData.elements[i]) + "|";
							}else{
								thisData += "none|";
							}
						}else{
							thisAlert += "   - " + formData.elements[i].name +theReply;
							thisTest = "Bad";
						}
					}else if(formData.elements[i].name.match(confirmMatch) != null){
						//alert(document.getElementById("Confirm_Email").value +" == " + document.getElementById("Email").value);
						matchFieldOne = formData.elements[i-1].name;
						matchFieldTwo = formData.elements[i].name;
						if(document.getElementById(matchFieldOne).value == document.getElementById(matchFieldTwo).value){
							thisData += getLineBreaks(formData.elements[i]) + "|";
						}else{
							if(formAction != "addMedia"){
								thisAlert += "   - " + matchFieldOne + " - must match - "+ matchFieldTwo +"\n";
								thisTest = "Bad";
							}else{
								thisData += "none|";
							}
						}
					}else if(formData.elements[i].id == "Agree"){
						if(formData.elements[i].value == "Yes I Agree"){
							thisData += getLineBreaks(formData.elements[i]) + "|";
						}else{
							if(formAction != "addMedia"){
								thisAlert += "   - " + formData.elements[i].name + " - You must enter \"Yes I Agree\"\n";
								thisTest = "Bad";
							}else{
								thisData += "none|";
							}
						}
					}else{
						thisData += getLineBreaks(formData.elements[i]) + "|";
					}
			}
		}
		//alert(thisData+ " \r\r" +thisAlert);
	}
	//alert("thisData = "+thisData);
	//alert("thisData = OK -- "+thisTest);
	if (thisTest == "OK" || formAction == "skipTest"){
		//alert("formAction = "+formAction);
		if(formAction == "fileUpload"){
			formData.submit();
		}else{
			//window.alert(thisTest);
			//alert("formAction = "+formAction);
			//alert(thisData);
			if(formAction == "addMedia"){
				formData.elements['type'].value = "addMedia";
				formData.submit();
			}else{
				if(formData.action == ""){
					//alert("send from formAction");
					formAction.elements['sendData'].value = thisData;
					//alert(formAction.elements['sendData'].value);
					formAction.submit();
				}else{
					//alert("send from formData");
					formData.submit();
				}
			}
		}
	}else{
		thisAlert = thisAlert.replace(/\_/g," ");
		window.alert(thisAlert + "\n\n\n...end");
		formData.elements['submitForm'].disabled=false;
		formData.elements['submitForm'].value="Submit";
	}	
}



function getLineBreaks(formElement){
	//alert("formElement = " + formElement);
	browserCheck = checkBrowser();
	testIEtestOpera = browserCheck.split(",");
	tempLine = "";
	cleanWhite = formElement.value;
	newWhiteSpace = cleanWhite.replace(/^\s+/,"");
	cleanWhite = newWhiteSpace.replace(/\s+$/,"");
	newWhiteSpace = cleanWhite.replace(/\r+$/,"");
	cleanWhite = newWhiteSpace.replace(/\n+$/,"");
	newWhiteSpace = cleanWhite.replace(/\|/g,"/"); //pipes are used as a data delimiter
	if (testIEtestOpera[0] != "null" || testIEtestOpera[1] != "null"){
		//alert("clean opera");
		holdLine = newWhiteSpace.split("\r");
		tempLine = holdLine.join("\*lbn\*");
		holdLine = tempLine.split("\n");
		tempLine = "";
		tempLine = holdLine.join("\*lbn\*");
		//tempLine.replace(/\*lbr\*/g,"*lbn*");
		//tempLine.replace(/\*lbn\*+$/g,"");
	}else{	
		//alert("clean others");
		holdLine = newWhiteSpace.split("\n");
		tempLine = holdLine.join("\*lbn\*");
		//tempLine.replace(/\*lbn\*+$/g,"");
	}
	thisNumLine = tempLine.split("\*lbn\*");
	//alert(thisNumLine);
	tempLine = "";
	for(b in thisNumLine){
		//alert(thisNumLine + " -- " + (thisNumLine.length));
		if(thisNumLine[thisNumLine.length-1] == ""){
			thisNumLine.pop();
		}else{
			break;
		}
	}
	for(b in thisNumLine){
		//alert(thisNumLine + " -- " + (thisNumLine.length));
		if(thisNumLine[0] == ""){
			thisNumLine.shift();
		}else{
			break;
		}
	}
	tempLine = thisNumLine.join("\*lbn\*");
	return tempLine;
}

function checkBrowser(){
	//perform browser check
	testIE = null;
	testOpera = null;
	//alert(navigator.appName + " -- " + navigator.appCodeName + " -- " + navigator.userAgent );
	if(navigator.userAgent.match(/MSIE/) != null){
		testIE = navigator.userAgent.match(/Windows/);
		//alert(testIE +" :: " + navigator.userAgent );
	}
	if(navigator.userAgent.match(/Opera/) != null){
		testOpera = navigator.userAgent.match(/Opera/);
		//alert(testOpera +  " :: " + navigator.userAgent );
	}
	return testIE + "," + testOpera;
}

function lineCleaner(theLine){
	alert(theLine);
	Acleaned = theLine.replace(/(<(\S+)>)/g,"");
	alert(Acleaned);
	
	//Bcleaned = Acleaned.replace(/(<.*\S+>)/g,"");
	//alert(Bcleaned);
	return Bcleaned;
}
