// Form Validation
// requires: prototype.js
// --------------------------------
// 8/23/2006
// photoProofPro v2.5.0
// Joe Pelosi (ilgstudio.com)
// --------------------------------
// Update: 2/6/2008
// added option to display feedback on page instead of in an alert box.



// set up array.push() function for older browsers
function Array_push() {
  var A_p = 0
  for (A_p = 0; A_p < arguments.length; A_p++) {
   this[this.length] = arguments[A_p]
   }
  return this.length
}
	
if (typeof Array.prototype.push == "undefined") {
 Array.prototype.push = Array_push
 }
 

// ######################################
	Array.prototype.inArray = function (value)
		// Returns true if the passed value is found in the
		// array.  Returns false if it is not.
		{
			var i;
			for (i=0; i < this.length; i++) {
				// Matches identical (===), not just similar (==).
				if (this[i] === value) {
					return true;
				}
			}
			return false;
		};
		
// FORM VALIDATION


var val_errors = Array();
var val_fields = Array();

function validate(formName, validationArr, useAlert){
	//alert(validationArr);
	//return false;
	//alert(validationArr)
	//alert(validationArr);
	clearMsgs();
	
	val_errors = new Array();
	val_fields = new Array();
	
	if (validationArr!=null){
		for (i=0; i<validationArr.length; i++){
			var myParts = validationArr[i].split("|");
			//alert(myParts);
		
			type = myParts[0];
			field = myParts[1];
			msgStr = myParts[2];
		
			//if ($(field)){
				switch (type){
					
					case "validDateIfNotEmpty":
					// looks for 3 fields values to create date
					// and checks if it is valid. (MM-DD-YYYY)
					// the field ids it expects are: 
					// field+"Month"; field+"Day"; field+"Year";
					
					var monthField = field+"Month";
					var dayField = field+"Day";
					var yearField = field+"Year";
					
					var m = emptyFieldCheck($F(monthField));
					var d = emptyFieldCheck($F(dayField));
					var y = emptyFieldCheck($F(yearField));
					
					var date = $F(monthField)+"/"+$F(dayField)+"/"+$F(yearField);


					if(m || d || y){
						if (!isDate(date)){
							fieldArr = Array(monthField,dayField,yearField); 
							addError(fieldArr, msgStr);	
						}
					}
					//alert('thru');
					break;
					
	/*				case "validDateIfNotEmpty":
					// expects there to be 3 date fields
					// MM,DD,YYYY
					var fields = field.split(",");
					var m = emptyFieldCheck($F(fields[0]));
					var d = emptyFieldCheck($F(fields[1]));
					var y = emptyFieldCheck($F(fields[2]));
					var date = $F(fields[0])+"/"+$F(fields[1])+"/"+$F(fields[2]);
					//alert(date);
					if(m || d || y){
						if (!isDate(date)){
							addError(fields[2], msgStr);	
						}
					}
					
					break;*/
					
					case "zero":
					
					if ($F(field) == 0 || $F(field) == "0"){
						addError(field, msgStr);
					}
					break;
					
					case "email":
					if (!isValidEmail($F(field))){
						if (trim(msgStr)==""||!msgStr||msgStr==null){
							addError(field,"A Valid Email Address");
						} else {
							addError(field, msgStr);
						}
					}
					break;
					case "emailIfNotEmpty":
					if (emptyFieldCheck($F(field))){
						if (!isValidEmail($F(field))){
							if (trim(msgStr)=="" || !msgStr || msgStr==null){
								addError(field,"A Valid Email Address");
							} else {
								addError(field, msgStr);	
							}
						}
					}
					break;
					// -------------
					case "empty":
					if (!emptyFieldCheck($F(field))){
						addError(field, msgStr);	
					}
					break;
					// -------------
					case "time":
					 if (document.forms[0].eventTime){
						if (!isValidTime(document.forms[0].eventTime.value)){
							//errors.push("A Valid time, use HH:MM");
							addError(field, "A Valid time, use HH:MM");	
						}
					}
					break;
					// -------------
					case "date":
					if ($(field) && $(field).disabled!=true){
						//alert(isDate($F(field)))
						if (!isDate($F(field))){
							addError(field, msgStr);	
						}
					
					}
					break;
					// -------------
					case "title":
					if (!emptyFieldCheck('detail', 'title')){
							addError(field,"Title is required");	
							
						}
					break;
					// -------------
					case "match":
					fArr = field.split(",");
					if (trim($F(fArr[0]))!=trim($F(fArr[1]))){
						addError(field, msgStr);
					}
					break;
					// -------------
					case "zip":
					
					if (!isZip($F(field))){
						addError(field, msgStr);
					}
					break;
					
					case "checkGroupNotNull" :
					var checked = Form.getInputs($(formName), "checkbox", element.field).findAll(function(item) 
	{ return item.checked; }).pluck("value");
					
					//alert(checked);
					
					break;
					
					case "radioGroupNotNull":
					
					if (radioGroupVal(formName, field)==null){
						addError(field, msgStr);
					}
					break;
					
					case "mriupload":
					var filename = jQuery('input:file[name=mridoc]').val().toLowerCase();
					if(filename.indexOf('.pdf')==-1 && filename.indexOf('.doc')==-1) {
						addError(field, msgStr);
					}
					break;
					
				} // end switch
			//} // end if field exists
		} // end loop
	} 


	//alert(val_fields);
	
	if (val_errors.length > 0){
		
		
		if(useAlert==null || useAlert == true){
			alertMsg = "The following required fields were incomplete:\n\n";
			for (i=0; i<val_errors.length; i++){
				alertMsg += "  - "+val_errors[i]+"\n";
			}
			alertMsg += "\nPlease correct and try again."
			
			//if (focField!=null){
				//$(focField).focus();
				//$(focField).select();
			//}
			alert (alertMsg);
		} else {
			
			
			for (i=0; i<val_errors.length; i++){
				if (feedbackTag==null){ feedbackTag="div"; }
				
				var errorMsg = "<"+feedbackTag+" class='"+feedbackClass+"'>" + val_errors[i] + "</"+feedbackTag+">";
				//alert("field: "+val_fields[i]);
				
				if (isArray(val_fields[i])){
					
					var arr = val_fields[i];
					$(arr.last()).insert({'after': errorMsg });
					arr.each(function(s) {
					  $(s).addClassName(feedbackClass);
					});
					
				} else {
					$(val_fields[i]).insert({'after': errorMsg });
					$(val_fields[i]).addClassName(feedbackClass);
				}
				
				//after
				//alertMsg += "  - "+errors[i]+"\n";
				
			}
			$(formName).scrollTo();
			
			if($(formFeedbackID)){
				$(formFeedbackID).addClassName(feedbackClass);
				$(formFeedbackID).update('There were errors with the form. Please correct them below.');
			}
			
			
		}
		
		
		
		return false;
		
		
		
	} else {
		//MM_showHideLayers('loadingMsg','','show');
		//document.detail.Button.disabled=true;
		if ($('loadingMsg')){
			showHideLayer('loadingMsg', 'show');
			if($('submitButton')){
				$('submitButton').disabled=true;
			}
		}
		return true;
		//$(formName).submit();
	}
}

var feedbackTag;
var feedbackClass;
var formFeedbackID;


function clearMsgs(){
	
	// remove main feedback
	if ($(formFeedbackID)){
		$(formFeedbackID).removeClassName(feedbackClass);
		$(formFeedbackID).removeClassName('success');
		$(formFeedbackID).update('');
	}
	
	// remove field messages
	$$(feedbackTag+'.'+feedbackClass).each(function(s) {
		s.remove();
	});
	
	
	// remove field element error classes
	$$('input.error').each(function(s) {
		s.removeClassName(feedbackClass);							
	});
	
	$$('textarea.error').each(function(s) {
		s.removeClassName(feedbackClass);							
	});
	
	$$('select.error').each(function(s) {
		s.removeClassName(feedbackClass);							
	});
	
	
}


function addError(field, msg){
	val_errors.push(msg);
	val_fields.push(field);
	//alert(val_fields);
}
	
	

function isArray(obj) {

    return obj.constructor == Array;

}

function isValidEmail(email){
	//var email = document.forms[0].email.value; 

	var objRegExp  = /(^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$)/i;

	  if(objRegExp.test(email)){
		return true;
	  } else {
		//alert("Please enter a valid email address.");
		return false;
	  }

}
function emptyFieldCheck(val){
	if(trim(val) == '' || val == ' ' || val == null){ 
		return false;
	} else {
		return true;
	}
}	

/**
 * DHTML date validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */
// Declaring valid date character, minimum year and maximum year
var dtCh= "/";
//var minYear=1900;
//var maxYear=2100;

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function isZip(s) 
{
 
     // Check for correct zip code
     reZip = new RegExp(/(^\d{5}$)|(^\d{5}-\d{4}$)/);
 
     if (!reZip.test(s)) {
          //alert("Zip Code Is Not Valid");
          return false;
     }
 
return true;
}
function isDate(dtStr){
	//alert(dtStr);
	if (!emptyFieldCheck(dtStr)){
		return false;		
	}
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strMonth=dtStr.substring(0,pos1)
	var strDay=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	//alert("hello");
	if (pos1==-1 || pos2==-1){
		//alert("The date format should be : mm/dd/yyyy")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		//alert("Please enter a valid month")
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		///alert("Please enter a valid day")
		return false
	}
	if (strYear.length != 4 || year==0){
		//strYear.length != 4 || year==0 || year<minYear || year>maxYear
		//alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		//alert("Please enter a valid date")
		return false
	}
return true
}

function trim(str){
   return str.replace(/^\s*|\s*$/g,"");
}

function radioGroupVal(el, radioGroup) {
/**
* Returns the value of the selected radio button in the radio group, null if
* none are selected, and false if the button group doesn't exist
*
* @param {radio Object} or {radio id} el
* OR
* @param {form Object} or {form id} el
* @param {radio group name} radioGroup
*/
	if($(el).type && $(el).type.toLowerCase() == 'radio') {
		var radioGroup = $(el).name;
		var el = $(el).form;
	} else if ($(el).tagName.toLowerCase() != 'form') {
		return false;
	}

	var checked = $(el).getInputs('radio', radioGroup).find(
		function(re) {return re.checked;}
	);
	return (checked) ? $F(checked) : null;
}

function validateSurvey(formName){
	var total = $F('totalQuestions');
	var paramStr = '';
	for (i=0; i<total; i++){
		var thisField = 'surveyChoice_'+i;	
		var radVal = radioGroupVal(formName, thisField);
		if (radVal == null){
			alert ("Please answer all "+total+" survey questions");
			return false;
		} else {
			paramStr += "&surveyChoice_"+i+"="+radVal;
		}
	}
	
	var requestOptions = {
	method : 'post',
	parameters : "action=castVote"+paramStr+
		"&surveyID=" + $F('surveyID') +
		"&totalQuestions=" + $F('totalQuestions'),
	
	onComplete: surveyComplete
  };
		//alert (requestOptions.parameters)	  
	new Ajax.Request('/int/phpinc/process_survey_ajax.php', requestOptions);
	return false;
	
}

function surveyComplete(originalRequest){
	//alert(originalRequest.responseText);
	eval("var response = ("+originalRequest.responseText+")");
	var theform = "spuSurvey_"+response.id;
	
	if(response.success==1){
	// show thank you	
	
		var msg = "<div class='sideSurveySuccess'><b>Thank you for your input.</b><br>";
		 msg += "Watch  for the results in an upcoming issue of our eNewsletter!</div><br />";
		 msg += "<div class='link'><a href='/newsletter.php'>Sign up to receive our biweekly eNewsletter here</a></div>";
		//$('surveyContent').update('thank you');
		$('surveyQuestions').update(msg);
		$('surveyResponse').update('');
		//puSurvey_.$surveyID
		
	
	} else {
	// show no vote	
		//$('surveyContent').update('error');
		$('surveyResponse').update('You have already voted.');
	}
	
	
	//alert("?course="+$F('cid')+"&section=evaluation");
	//document.location.href = "?course="+$F('cid')+"&section=assessment";	
	//alert(pagePath);
}
