// TO DO: - make sure e-mail address does not contain spaces

includeJS('/assets/js/jquery/jquery.js');
includeJS('/assets/js/jquery/jtip/jtip.js');

function includeJS(jsFile){
	document.write('<script type="text/javascript" src="' + jsFile + '"></script>');
}

function validate(form){
	//var aErrors = $(".errorMsg");
	//alert("num previous errors:" + aErrors.length);	
	$(".errorMsg").remove();
	$(":input").removeClass('errorField');	
	
	var stReturn = validateForm(form);
	if (stReturn.success == false){
		var aErrors = stReturn.errors;
		for (var fieldname in stReturn.errors){
			var fieldErrors = stReturn.errors[fieldname];
			for (var i=0; i < fieldErrors.length; i++){
				//alert(fieldErrors[i]);
				var errMsg = fieldErrors[i];
				var field = document.getElementById(fieldname);
				var errorImg=document.createElement('img');
				var errorSpan=document.createElement('span');
				errorImg.src = "/assets/images/error.gif";
				errorSpan.className = "errorMsg";
				
				// need to either remove the span if it already exists, or rewrite the text node so you don't get duplicates when form is submitted multiple times
				
				errorSpan.appendChild(errorImg);
				errorSpan.appendChild(document.createTextNode(" " + errMsg));
				//field.parentNode.appendChild(errorImg); 
				field.parentNode.appendChild(errorSpan);
				field.className = "errorField";				
			}
		}	
		return false;
	}	
	
	return true;
}

function getDisplayName(fieldname, stCurrField){
	var displayname = fieldname;
	if(stCurrField["displayname"] != undefined){
		displayname = stCurrField["displayname"];
	}
	return displayname;
}

function validateForm(form){
	var stReturn = new Object();
	stReturn.success = true;
	stReturn.errors = new Object();

	for(var fieldname in objValRules){		
		if(form[fieldname] != undefined){
			var data = form[fieldname].value;
			var stCurrField = objValRules[fieldname];
			var displayname = getDisplayName(fieldname, stCurrField);
			var datatype = "string";
			var aErrors = new Array();
			
			if(stCurrField['req'] != undefined && datatype != 'age'){
				if(stCurrField['req'] == 'true' && data == ''){
					if(stCurrField['errmsg'] == undefined){
						error = "The field '" + displayname + "' cannot be left blank.";
					}else{
						error = stCurrField['errmsg'];
					}
					aErrors.push(error);
					
				}
			}else if(stCurrField['datatype'] != undefined){
				datatype = stCurrField.datatype;
				var stValid = validateDataType(displayname, datatype, data);
				if(stValid.success == false){
					aErrors.push(stValid.error);					
				}
			}else{
			
				if(stCurrField['min'] != undefined || stCurrField['max'] != undefined){
					if(stCurrField['min'] != undefined && stCurrField['max'] != undefined){
						var type = "range";				
					}else if(stCurrField['max'] != undefined){
						var type = "max";
					}else{
						var type = "min";
					}
					var minmaxerror="";
					
					switch(datatype){
						case 'number':
							switch(datatype){
								case 'range':	
									if(data < stCurrField['min'] || data > stCurrField['max']){
										minmaxerror = "The value of field '" + displayname + "' must be between " + stCurrField.min + " and " + stCurrField.max + ".";
									}
									break;
								case 'max':
									if(data > stCurrField['max']){
										minmaxerror = "The value of field '" + displayname + "' must be no more than " + stCurrField.max + ".";
									}
									break;
								case 'min':
									if(data < stCurrField['min']){
										minmaxerror = "The value of field '" + displayname + "' must be at least " + stCurrField.max + ".";
									}			
									break;
							}								
							break;
						case 'date':
							if(form['day'] != undefined){
								var strDate = form['day'].value + "-" + form['month'].value + "-" + form['year'].value;			
							}else{
								var strDate = form[stCurrField.dayfield].value + "-" + form[stCurrField.monthfield].value + "-" + form[stCurrField.yearfield].value;
							}
							break;
						case 'age':			
							if(form['dob'] != undefined){
								var strDate = form['dob'].value + "-" + form['mob'].value + "-" + form['yob'].value;			
							}else{
								var strDate = form[stCurrField.dayfield].value + "-" + form[stCurrField.monthfield].value + "-" + form[stCurrField.yearfield].value;
							}
							break;
					}
					if(minmaxerror != ''){
						aErrors.push(minmaxerror);					
					}
				}
			}
				
			if(stCurrField['match'] != undefined){
				var fieldtomatch = stCurrField['match'];
				var datamatch = form[fieldtomatch];
				if(datamatch != '' && data != datamatch){ 
					error = "The field '" + displayname + "' must match the value of field '" + fieldtomatch + "'";
					aErrors.push(error);
				}
			}
			
			if(stCurrField['pattern'] != undefined){
				var pattern = stCurrField['pattern'];
				if(datamatch != '' && data != datamatch){ 
					error = "The field '" + displayname + "' must match the value of field '" + fieldtomatch + "'";
					aErrors.push(error);
				}
			}
		}
		
		if(aErrors.length){
			stReturn.errors[fieldname] = aErrors;
			stReturn.success = false;
		}
	}	

	return stReturn;
}

function validateDataType(fieldName, fieldtype, fielddata){
	var stReturn = new Object();
	stReturn.success = true;
	
	switch(fieldtype){
		case 'email':			
			break;
		case 'date':			
			break;
		case 'uszip':			
			break;
	}
	if(stReturn['error'] != undefined){
		stReturn.success = false;
	}

 	return stReturn;
}

function listfindnocase(list,value,delimiters) {	
	if(!delimiters){var delimiters=',';}	
	list = list.toUpperCase();	
	value = value.toUpperCase();
	_TempListSplitArray = list.split(delimiters);
	FoundIdx = 0;	
	for(var i=0;i<_TempListSplitArray.length;i++){
		if(_TempListSplitArray[i]==value){
			FoundIdx= i+1;
			break;
		}
	}
	return FoundIdx;
}