// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// @license: Mad4Media Javascipt License - copyright Mad4Media - Fahrettin Kutyol - All rights reserved    ++
// (re-) publishing or forking for any purpose of commercial or non-commercial use is not allowed.		   ++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

var m4jAllowSubmission = false;

function validateField(node){
	var error = false;
	var rError = false;
	var validateType = node.validateType;
	

	var el = (node.formType != "checkbox") ? node : node.parentNode;
	
	el.bubbleInfo = "";
	
	
	
	// Check Required
	if(validateType >999){
		validateType -= 1000;
		
		switch(node.formType){
			case "select":
			case "textarea":
			case "field":
				if(node.value == ""){
					rError = true;
				}
			break;
			
			case "checkbox":
				if(node.checked == ""){
					rError = true;
				}
			break;	
		}
		el.bubbleInfo = MText.required+"<br/>";
	}
	
	switch (validateType) {
	case 1:
//		if(checkRegEx(node.value, "[^A-Za-z\\s]") || rError){
		if(checkRegEx(node.value, "[^\\D\\s]") || rError){
			error = true;
			el.bubbleInfo += MText.alphabetic;
		}
		break;

	case 2:
		if(checkRegEx(node.value, "[^0-9\.]") || rError){
			error = true;
			el.bubbleInfo += MText.numeric;
		}
		break;	

	case 3:
		if(checkRegEx(node.value, "[^0-9]") || rError){
			error = true;
			el.bubbleInfo += MText.integer;
		}
		break;	

	case 4:
		var filter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;		
		if(!filter.test(node.value) && node.value.length != 0 || rError){
			error = true;
			el.bubbleInfo += MText.email;
		}
		break;	

	case 5:
		var filter = /^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$/;		
		if(!filter.test(node.value) && node.value.length != 0 || rError){
			error = true;
			el.bubbleInfo += MText.url;
		}
		break;	
		
	case 6:
		if(checkRegEx(node.value, "[^A-Za-z0-9\\s]") || rError){
			error = true;
			el.bubbleInfo += MText.alphanumeric;
		}
		break;				
	default:
		break;
	}
	
	
	if(error || rError){
		globalError = true;
		switch(node.formType){
			case "select":
				if(_Browser.IE && _Browser.IEVersion() < 8){
					el.parentNode.style.border = "1px solid " + errorColor;
				}else{
					el.style.borderColor = errorColor;
				}
			break;
		
			case "checkbox":
				el.style.border = "1px solid " + errorColor;
			break;
			
			default:
				el.style.borderColor = errorColor;
			break;
		}
		
		if(! node.errorOverHandle){
			el.errorOverHandle = dojo.connect(el,"onmouseover", showErrorTooltip);
			el.errorOutHandle = dojo.connect(el,"onmouseout", hideErrorTooltip);
			
		}
	}else{
		if(el.errorOverHandle){
			
			switch(node.formType){
				case "select":
					if(_Browser.IE && _Browser.IEVersion() < 8){
						el.parentNode.style.border = "";
					}else{
						el.style.borderColor = "";
					}
				break;
				
				case "checkbox":
					el.style.border = "";
					bubbleWrap.style.left = "-9999em";
				break;
				
				default:
					el.style.borderColor = "";
				break;
			}
						
			dojo.disconnect(el.errorOverHandle);
			dojo.disconnect(el.errorOutHandle);
			el.errorOverHandle = undefined;
			el.errorOutHandle = undefined;
			
		}
	}
	
}

function checkRegEx(value,regex){
	 var pos = value.search(regex); 
	 if(pos != -1 ) return true;
	 else return false;
}

var globalError = false;
var m4jForm = dojo.byId("m4jForm");
m4jForm.onsubmit = function(){
	
	if(m4jAllowSubmission){
		return true;
	}
		
	globalError = false;
	var items = new Array();
	var inputs = m4jForm.getElementsByTagName("INPUT");
	var textAreas = m4jForm.getElementsByTagName("TEXTAREA");
	
	for(t=0; t < inputs.length; t++){
		var alt = Number(inputs[t].alt);
		if(alt > 0) {
			if(inputs[t].type == "checkbox"){
				inputs[t].formType = "checkbox";	
			}else {
				inputs[t].formType = "field";
			}
			inputs[t].validateType = alt;
			items.push(inputs[t]);
			inputs[t].errorChangeHandle = dojo.connect(inputs[t],"onchange", function(){
				validateField(this);
			});
		}
	}
	for(t=0; t < textAreas.length; t++){
		var lang = Number(textAreas[t].lang);
		if(lang > 0) {
			textAreas[t].formType = "textarea";
			textAreas[t].validateType = lang;
			items.push(textAreas[t]);
			textAreas[t].errorChangeHandle = dojo.connect(textAreas[t],"onchange", function(){
				validateField(this);
			});
		}
	}
	
	for(t=0; t < items.length; t++){
		validateField(items[t]);
	}
	
	// Non field / area required queries
	var selects = m4jForm.getElementsByTagName("SELECT");
	for(t=0; t < selects.length; t++){
		var lang = Number(selects[t].lang);
		if(lang > 0) {
			selects[t].formType = "select";
			selects[t].validateType = lang;
			items.push(selects[t]);
			selects[t].errorChangeHandle = dojo.connect(selects[t],"onchange", function(){
				bubbleWrap.style.left = "-9999em";
				validateField(this);
			});
			validateField(selects[t]);
		}
	}
	
	var radioWrap = dojo.query("div.m4jRadioWrap, div.m4jCheckboxWrap");
	radioWrap.forEach(function(wrap){
		m4jEvalWrap(wrap);			
	});
	
	
	
	// Cancel if error
	if(globalError) {
		alert(MText.errorPrompt);
		return false;
	}else {
		return true;
	}
}

function m4jChecker(wrap){
	var checked = false;
	var radioButtons = wrap.getElementsByTagName("INPUT");
	for(t=0; t < radioButtons.length; t++){
		if(!radioButtons[t].wrap){
			radioButtons[t].wrap = wrap;
			radioButtons[t].errorChangeHandle = dojo.connect(radioButtons[t],"onclick", function(){
				m4jEvalWrap(this.wrap);
			});
		}
		if(radioButtons[t].checked != ""){
			checked = true;
		}
	}
	return checked;	
}


function m4jEvalWrap(wrap){
	var lang = Number(wrap.lang);
	if(lang > 999 ){
		var check = m4jChecker(wrap);
		if(! check){
			wrap.style.border = "1px solid " + errorColor ;
			wrap.bubbleInfo = MText.required+"<br/>";
			if(! wrap.errorOverHandle){
				wrap.errorOverHandle = dojo.connect(wrap,"onmouseover", showErrorTooltip);
				wrap.errorOutHandle = dojo.connect(wrap,"onmouseout", hideErrorTooltip);
				globalError = true;
			}
		}else{
			wrap.style.border = "";
			wrap.bubbleInfo = "";
			if(wrap.errorOverHandle){
				dojo.disconnect(wrap.errorOverHandle);
				dojo.disconnect(wrap.errorOutHandle);
				wrap.errorOverHandle = undefined;
				wrap.errorOutHandle = undefined;
				bubbleWrap.style.left = "-9999em";
			}
		}
	}
	
}



var showErrorTooltip = function(e){
	var bW = bubbleWrap;
	dojo.byId("bubble_tooltip_content").innerHTML = this.bubbleInfo;
	
	var myBounds = _ViewportOffset(this,true);
	var docScroll = _docScroll(this);
	myBounds.t += docScroll.top;
	myBounds.l += docScroll.left;
	var bwDim = _Dimensions(bW);
	var top = myBounds.t - bwDim.height +5; 
	var left = (myBounds.l+myBounds.w)-140;
	
	bW.style.top = top + "px";
	bW.style.left = left + "px";
}

var hideErrorTooltip = function(e){
	bubbleWrap.style.left = "-9999em";
}

function m4jEvalReset(){
	var forms = dojo.query("input,select,textarea",m4jForm);
	forms.forEach(function(node){
		if(node.errorOverHandle){
			dojo.disconnect(node.errorOverHandle);
			dojo.disconnect(node.errorOutHandle);
			node.errorOverHandle = undefined;
			node.errorOutHandle = undefined;
			bubbleWrap.style.left = "-9999em";
			switch(node.formType){
				case "select":
					if(_Browser.IE && _Browser.IEVersion() < 8){
						node.parentNode.style.border = "";
					}else{
						node.style.borderColor = "green";
					}
				break;
				
				case "checkbox":
					node.style.border = "";
					bubbleWrap.style.left = "-9999em";
				break;
				
				default:
					node.style.borderColor = "";
				break;
			}
			
			node.bubbleInfo = "";
		}
		if(node.wrap){
			if(node.formType == "select" && (_Browser.IE && _Browser.IEVersion() >= 8) ) return;
			node.wrap.style.border = "";
			if(node.wrap.errorOverHandle){
				dojo.disconnect(node.wrap.errorOverHandle);
				dojo.disconnect(node.wrap.errorOutHandle);
				node.wrap.errorOverHandle = undefined;
				node.wrap.errorOutHandle = undefined;
			}
		}
	});
}




