// Form and Form Validation Functions
function resizeObj(objId,origW,origH,minW,minH,maxW,maxH,w,h){
	var taObj = document.getElementById(objId);
	if(w != null){
		var tmpWidth = parseInt(taObj.style.width,10);
		if(isNaN(tmpWidth))		tmpWidth = origW;
		if((tmpWidth + w <= maxW) && (tmpWidth + w >= minW))	tmpWidth += w;	
		taObj.style.width = tmpWidth.toString() + "px";
	}			
	if(h != null){
		var tmpHeight = parseInt(taObj.style.height,10);
		if(isNaN(tmpHeight))	tmpHeight = origH;
		if((tmpHeight + h <= maxH) && (tmpHeight + h >= minH))	tmpHeight += h;	
		taObj.style.height = tmpHeight.toString() + "px";	
	}
}
function restrictTo(formItem,e,mode){
	if (window.event){
	   key = window.event.keyCode;
	}else if (e){
	   key = e.which;
	}
		keyChar = String.fromCharCode(key);
		validChar = false;
		switch(mode){
			case "numeric":
				if( ("0123456789").indexOf(keyChar) > -1 )	return true;
				else return false;
			break;
			case "alpha":
				if( ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").indexOf(keyChar) > -1 )	return true;
				else return false;			
			case "float":
				if( ("0123456789.").indexOf(keyChar) > -1 )	return true;
				else return false;
			break;
			case "alphanumeric":
				if( ("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").indexOf(keyChar) > -1 )	return true;
				else return false;	
			break;
			default:
			//the user is sending a custom character string to be allowed
				if( mode.indexOf(keyChar) > -1 )	return true;
				else return false;		
			break;
		}	
}
function formValidation(formObj,validationRulesObj){
	//alert(validationRulesObj.innerHTML);
	var msgString 	= "";
	var aryRules 	= validationRulesObj.innerHTML.split(';');
	var isValid 	= true;
	for(var formObjIdx=0;formObjIdx<formObj.length;formObjIdx++){
		//loop through each field on the form from the top down
		//look to match the id's of the object on the form and the rule
		for(var ruleIdx=0;ruleIdx<aryRules.length;++ruleIdx){
			//each rule object pair should be of the form OBJECT:RULE or OBJECTS:RULES, if not dont process it
			if(aryRules[ruleIdx].split(':').length == 2){
				var aryObjects 	= aryRules[ruleIdx].split(':')[0].split(',');
				var aryObjRules	= aryRules[ruleIdx].split(':')[1].split(',');
				//loop through all of the objects
				for(var objIdx = 0;objIdx<aryObjects.length;++objIdx){
					var objContent = "";
					var obj =  document.getElementById(aryObjects[objIdx]);
					//loop through all rules specified for that object
					for(var objRuleIdx=0;objRuleIdx<aryObjRules.length;++objRuleIdx){
						if(formObj[formObjIdx].id == obj.id){
							switch(aryObjRules[objRuleIdx].toLowerCase()){
								case "not-blank":
									if( obj.value.split(' ').join('') == "" || obj.value == null){	
										msgString 	+= document.getElementById('label-' + obj.id).title + " cannot be blank.\n";
										if(isValid)	obj.focus();
										isValid 	= false;
									}
									break;
								case "email":
									var tmpEmail = obj.value.split(' ').join('');
									if(tmpEmail.length < 6 || tmpEmail.indexOf('@') < 1 || tmpEmail.indexOf('.') < 0 || tmpEmail.indexOf('@.') > 0 ){	
										msgString 	+= document.getElementById('label-' + obj.id).title + " must be a valid email address.\n";
										if(isValid)	obj.focus();
										isValid 	= false;
									}							
									break;
								case "numeric":
									var tmpNumber = obj.value.split(' ').join('');
									if(isNaN(tmpNumber) || tmpNumber == "" || tmpNumber == null){	
										msgString 	+= document.getElementById('label-' + obj.id).title + " must be a number.\n";
										if(isValid)	obj.focus();
										isValid 	= false;
									}										
									break;
								case "alphanumeric":
									var tmpString = obj.value.split(' ').join('');
									if(!isNaN(tmpString)){	
										msgString 	+= document.getElementById('label-' + obj.id).title + " must be only letters and numbers.\n";
										if(isValid)	obj.focus();
										isValid 	= false;
									}									
									break;
								case "no-code":
									var tmpString = obj.value;
									//ive made code tags to look like this:  starttag:endtag,starttag2:endtag2
									var strCodeTags = "<%:%>,<?:?>,<?php:?>,<script:/script>,<object:/object>,<embed:/embed>";
									var aryCodeTags = strCodeTags.split(',');
									for(var tagIdx=0;tagIdx<aryCodeTags.length;++tagIdx){
										var aryTags = aryCodeTags[tagIdx].split(':');
										if(aryTags.length == 2){
											var openingTag = aryTags[0];
											var closingTag = aryTags[1];
											//while we still can find an occurence of a starting Tag or ending tag, keep stripping code
											while(tmpString.indexOf(openingTag) > -1 || tmpString.indexOf(closingTag) > -1){
												var nextOpeningTagPos =  tmpString.indexOf(openingTag);
												var nextClosingTagPos =  tmpString.indexOf(closingTag);
												tmpString = tmpString.replace(tmpString.substring(nextOpeningTagPos,nextClosingTagPos + closingTag.length),'');
												isValid 	= false;
											}
										}
									}
									if(tmpString != obj.value){
										msgString 	+= document.getElementById('label-' + obj.id).title + " cannot contain code...Removing Code.\n";
										obj.value = tmpString;
									}
									break;
							}//end switch
						}//end if(formObj[formObjIdx].id == obj.id){
					}//end for(var objRuleIdx=0;objRuleIdx<aryObjRules.length;++objRuleIdx){
				}//end for(var objIdx = 0;objIdx<aryObjects.length;++objIdx){
			}//end if(aryRules[ruleIdx].split(':').length == 2){
		}//end for(var ruleIdx=0;ruleIdx<aryRules.length;++ruleIdx){
	}//end for(var formObjIdx=0;formObjIdx<formObj.length;formObjIdx++){
	
	if(!isValid){
		alert(msgString);
		return false;
	}else{
		return true;
	}
}
