//alert('js included');

function SubmitForm(objForm, polite) {

	if(!polite ){
		if(Validate(objForm)) {
			objForm.submit();
		} else {
			return false;
		}
	} else {

		return Validate( objForm, true );
	}
};

var XMLHttpFactories = [
	function(){ return new XMLHttpRequest() },
	function(){ return new ActiveXObject( "Msxml2.XMLHTTP")},
	function(){ return new ActiveXObject( "Msxml3.XMLHTTP")},
	function(){ return new ActiveXObject( "Microsoft.XMLHTTP")},
];
var createXMLHttpRequest = function(){
	var xmlhttp = false;
	for( var i = 0; i < XMLHttpFactories.length; i++ ){
		try {
			xmlhttp = XMLHttpFactories[i]();
		} catch( e ){
			continue;
		}
		break;
	}
	return xmlhttp;
};
function Validate(objForm, polite) {
	
	debug('Validate::' + objForm);
	
	if( polite ){
		var errObj = {};
	}
	
	var strerror = new String();
	var error = false;
	var thiserror = false;
		
		if(document.getElementById('wait')) {
                	//inhtml = "<img src='/images/wait.gif'>";
                	//document.getElementById('wait').innerHTML = inhtml;
			//document.getElementById('wait').style.visibility = "visible";
		}
	
	with(objForm) {
		
		for(i=0; i < elements.length; i++){
			debug(elements[i].name + '::CLASS::' + elements[i].className + '::VALUE::' + elements[i].value + '::ERROR::' + error);
			
			
			thiserror = false;
			
			debug(elements[i].name + '::ERROR::' + error + '::' + elements[i].className);
			
			//CHECK FOR DATETIME
			if(thiserror == false) {
				if(elements[i].className.indexOf('datetime') != -1 && document.getElementById(elements[i].name+'_year').value != '' && document.getElementById(elements[i].name+'_month').value != ''  && document.getElementById(elements[i].name+'_day').value != '') {
					debug('DATETIME::' + elements[i].name + '::' + elements[i].value);
					elements[i].value = document.getElementById(elements[i].name+'_year').value + '-' 
					+ document.getElementById(elements[i].name+'_month').value + '-' 
					+ document.getElementById(elements[i].name+'_day').value + ' ' 
					+ document.getElementById(elements[i].name+'_hour').value + ':' 
					+ document.getElementById(elements[i].name+'_minute').value + ' ' 
					+ document.getElementById(elements[i].name+'_meridian').value;
					debug(elements[i].name + '::' + elements[i].value);
				}
			}
			
			//CHECK FOR TIME
			if(thiserror == false) {
				if(elements[i].className.indexOf(' time') != -1 && document.getElementById(elements[i].name+'_hour').value != '' && document.getElementById(elements[i].name+'_minute').value != ''  && document.getElementById(elements[i].name+'_meridian').value != '') {
					debug('DATETIME::' + elements[i].name + '::' + elements[i].value);
					elements[i].value = document.getElementById(elements[i].name+'_hour').value + ':' 
					+ document.getElementById(elements[i].name+'_minute').value + ' ' 
					+ document.getElementById(elements[i].name+'_meridian').value;
					debug(elements[i].name + '::' + elements[i].value);
				}
			}
			
			//CHECK FOR DATE
			if(thiserror == false) {
//				debugger;
			/**
				if(elements[i].className.indexOf('date') != -1 && elements[i].className.indexOf('datetime') == -1) {
					debug( "the el: " + elements[i].name);
					debug(document.getElementById(elements[i].name+'_year').value);
					debug(document.getElementById(elements[i].name+'_month').value);
					debug(document.getElementById(elements[i].name+'_day').value);
					debug((document.getElementById(elements[i].name+'_year').value != '' && document.getElementById(elements[i].name+'_month').value != ''  && document.getElementById(elements[i].name+'_day').value != '') );
				}
				*/
				if(elements[i].className.indexOf('date') != -1 && elements[i].className.indexOf('datetime') == -1) {
					debug('DATE::' + elements[i].name + '::' + elements[i].value);
					if(document.getElementById(elements[i].name+'_year').value != '' && document.getElementById(elements[i].name+'_month').value != ''  && document.getElementById(elements[i].name+'_day').value != '') {
						elements[i].value = document.getElementById(elements[i].name+'_year').value + '-' 
						+ document.getElementById(elements[i].name+'_month').value + '-' 
						+ document.getElementById(elements[i].name+'_day').value;
						debug(elements[i].name + '::' + elements[i].value);
					}
				}
			}
			
			//CHECK FOR PHONE
			if(thiserror == false) {
				
				if(elements[i].className.indexOf('phone') != -1 && document.getElementById(elements[i].name+'_area').value != '' && document.getElementById(elements[i].name+'_prefix').value != ''  && document.getElementById(elements[i].name+'_suffix').value != '') {
					elements[i].value = document.getElementById(elements[i].name+'_area').value 
					+ document.getElementById(elements[i].name+'_prefix').value 
					+ document.getElementById(elements[i].name+'_suffix').value;
					debug(elements[i].name + '::' + elements[i].value);
				}
			}
			
			//CHECK FOR REQUIRED
			if(elements[i].className.indexOf('required') > -1) {
				debug('checking required::' + elements[i].name);
				
				if (elements[i].type == 'checkbox') {
					if (elements[i].checked) {
						debug("checked, ok");
					} else {
						if(!polite){
							if(elements[i].id == "terms"){
								strerror += '<li>You must accept our <strong>TERMS OF SERVICE</strong></li>';
							} else {
								strerror += '<li><strong>' + elements[i].id + '</strong> is required</li>';
							}
							
							thiserror = true;
							error = thiserror;
						} else {
							errObj[elements[i].id] = "required";
							error = true;
						}
					}
				} else {
					if(elements[i].value == '') {
						if(!polite){
							strerror += '<li><strong>' + elements[i].id + '</strong> is required</li>';
							thiserror = true;
							error = thiserror;
						} else {
							errObj[elements[i].id] = "required";
							error = true;
						}
					}
				}
			} else {
				if (elements[i].type == 'checkbox') {
					
					debug('checkbox not required: ' + elements[i].name);
				}
			}
			
			//CHECK FOR CONFIRM
			if(thiserror == false) {
				if(elements[i].className.indexOf('confirm') != -1) {
					debug('checking confirm::' + elements[i].name);
					if(elements[i].value != document.getElementById('confirm_' + elements[i].id).value) {
						if(!polite){
							strerror += '<li><strong>' + elements[i].id + 's</strong> do not match</li>';
							thiserror = true;
							error = thiserror;
							//continue;
						} else {
							errObj[elements[i].id] = "mismatch";
							error = true;
						}
					}
				}
			}
			
			//CHECK FOR FILETYPE
			if(thiserror == false) {
				if(elements[i].className.indexOf('file') != -1 && elements[i].value.length) {
					var types = elements[i].className.substring(elements[i].className.indexOf('types_')+6);
					types = types.split(' ');
					types = types[0];
					
					var ending =  elements[i].value.substring(elements[i].value.lastIndexOf('.')+1);
					ending = ending.toLowerCase();
					debug('checking file::' + types + '::' + ending);
					
					if(types.indexOf('||' + ending + '||') == -1) {
						dispTypes = types.split('||');
						dispTypes = dispTypes.join('<br/>');
						strerror += '<li><strong>' + elements[i].value.substr(elements[i].value.lastIndexOf('/')+1) 
						+ '</strong> is not a valid file type.  You can upload the following types of files:' + dispTypes + '</li>';
						//elements[i].value = '';
						thiserror = true;
						error = thiserror;
					}
				}
			}
			
			//CHECK FOR PATTERN
			if(thiserror == false) {
				if(elements[i].className.indexOf('regex_') != -1) {
					debug('checking pattern::' + elements[i].name);
					var pos = elements[i].className.indexOf('regex_');
					var regex = elements[i].className.substring(elements[i].className.indexOf('regex_'));
					pos = regex.indexOf(' ');
					if(pos > 0) {
						regex = regex.substring(0, pos);
					}
					regex = regex.substring(regex.indexOf('regex_')+6);
					eval('regex = /' + regex + '/;');
				
					if(!regex.test(elements[i].value)) {
						if(!polite){
							if( elements[i].name == "password" ){
								strerror = '<li><strong>password</strong> must consist of digits and letters and be between 5 and 12 characters long.</li>';
							} else {
								strerror += '<li><strong>' + elements[i].id + '</strong> is invalid</li>';
							}
							
							thiserror = true;
							error = thiserror;
							//continue;
						} else {
							errObj[elements[i].id] = "regex";
							error = true;
						}
					}
				}
			}
			
			//CHECK FOR UNIQUENESS
			if(thiserror == false) {
				if(elements[i].className.indexOf('unique') != -1) {
					debug('checking uniqueness::' + elements[i].name);
			  		var xhReq = createXMLHttpRequest();
					// debug('type: ' . elements['type']); 	
					debug("here");
					debug(objForm.elements['type'].value); 
					var mtype = objForm.elements['type'].value; 
			  		var x = "/services/isunique/?publickey=" + document.getElementById('publickey').value + "&output_format=json&type=" + mtype + "&field=" +elements[i].name + "&value=" + escape(elements[i].value) + "&guid=" + objForm.elements['guid'].value;
			  		
			  		debug('urlx::'+x);
			  		//return false;
			  		//window.open(x);
			  		debug(x);
			  		xhReq.open("GET",x, false);
			  		xhReq.send(null);
					debug(xhReq.responseText);
			  		eval('serverResponse = ' + xhReq.responseText);
			  		
			  		var returnVal = eval('serverResponse.' + elements[i].name);
			  		
			  		if(!returnVal) {
			  			strerror += '<li>That <strong>' + elements[i].id + '</strong> is already taken</li>';
			  			thiserror = true;
						error = thiserror;
						//continue;
 			  		}
 			  		
 			  		//strerror += '<li>That <strong>' + elements[i].id + '</strong> is already taken</li>';
			  		//thiserror = true;
					//error = thiserror;
 			 	}
			}
		}
		
	}
	

	if(error ) {

		if(!polite){
			strerror = '<p>We\'re sorry. We couldn\'t process your form for the following reasons:</p><ul>' + strerror + '</ul>';
			debug(strerror);
			if (document.getElementById("lbError")) { 	
			document.getElementById('lbError').className = 'errordiv';
			document.getElementById('lbError').innerHTML = strerror;
			} else { 
			document.getElementById('errorDiv').className = 'errordiv';
			document.getElementById('errorDiv').innerHTML = strerror;
			}
			return false;
		} else {
			return errObj;
		}
	} else {
		//objForm.submit();
		// inhtml = "<div style='position: absolute;  left: 200px; top: 200px;'><img src='/images/wait.gif'></div>";
		//inhtml = "<img src='/images/wait.gif'>";
		if(document.getElementById('wait')) {
		//document.getElementById('wait').innerHTML = inhtml;
		}
		// document.getElementById('wait').style.visibility = "visible";
		return true;
	}
	
};
