var divHolder = null;

function errorDescription(error) {
	switch(error) {
		case "int":
		return "Skal være et tal";
		break;
		case "required":
		return "Skal udfyldes";
		break;
		case "phone":
		return "Skal være et telefonnr.";
		break;
		case "email":
		return "Skal være en gyldig emailadresse";
		break;
	}
}

function validateForm(formElm, appendTo) {
	var validatedFields = Array();
	var errors = Array();
	var _return = true;

	if(!appendTo) appendTo = formElm;
	
	if(divHolder) divHolder.parentNode.removeChild(divHolder);

	var inputElms = formElm.getElementsByTagName("input");
	var selectElms = formElm.getElementsByTagName("select");
	var textareaElms = formElm.getElementsByTagName("textarea");
	
	var formElms = Array();
	for(var i=0;i<inputElms.length;i++) {
		formElms[formElms.length] = inputElms[i];
	}
	for(var i=0;i<textareaElms.length;i++) {
		formElms[formElms.length] = textareaElms[i];
	}
				
	for(var i=0; i<formElms.length; i++) {
		arClass = getClassNames(formElms[i]);
		validatedFields[i] = Array();
		validatedFields[i]["type"] = Array();
		if(in_array("required", arClass)) {
			if(!is_required(formElms[i])) {
				validatedFields[i]["valid"] = false;
				validatedFields[i]["type"][validatedFields[i]["type"].length] = "required";
			} else { 
				validatedFields[i]["valid"] = true;
			}				
		}
		if(in_array("email", arClass)) {
			if(!is_email(formElms[i])) {
				validatedFields[i]["valid"] = false;
				validatedFields[i]["type"][validatedFields[i]["type"].length] = "email";
			} else { 
				validatedFields[i]["valid"] = true;
			}
		}
		if(in_array("phone", arClass)) {
			if(!is_phone(formElms[i])) {
				validatedFields[i]["valid"] = false;
				validatedFields[i]["type"][validatedFields[i]["type"].length] = "phone";
			} else {
				validatedFields[i]["valid"] = true;
			}
		}
		if(in_array("int", arClass)) {
			if(!is_int(formElms[i])) {
				validatedFields[i]["valid"] = false;
				validatedFields[i]["type"][validatedFields[i]["type"].length] = "int";
			} else {
				validatedFields[i]["valid"] = true;
			}
		}
	}

	for(var i=0; i<validatedFields.length; i++) {
		if(validatedFields[i]["valid"] == false) {
			_return = false;
			errors[i] = Array();
			errors[i]["name"] = findLabel(formElm, formElms[i]);
			errors[i]["msg"] = Array();
			for(var id in validatedFields[i]["type"]) {
				errors[i]["msg"][errors[i]["msg"].length] = errorDescription(validatedFields[i]["type"][id]);
			}
		}
	}

	if(_return == false) {
		divHolder = document.createElement("div");
		divHolder.id = "validateAlert";
		divHolder.innerHTML = "<h4>Du bedes udfylde følgende felter korrekt</h4>";
		var newUlBase = document.createElement("ul");
		for(var id in errors) {
			var newLiBase = document.createElement("li");
			newLiBase.innerHTML += errors[id]["name"]
			var placeHolder = errors[id]["msg"];
			if(placeHolder && placeHolder.length > 0) {
				var newUlSub = document.createElement("ul");
				for(var i in placeHolder) {
					var newLiSub = document.createElement("li");
					newLiSub.innerHTML +=placeHolder[i];
					newUlSub.appendChild(newLiSub);
				}
				newLiBase.appendChild(newUlSub);
			}
			newUlBase.appendChild(newLiBase);
		}
		divHolder.appendChild(newUlBase);
		appendTo.appendChild(divHolder);
	}

	return _return;
}

function getClassNames(elm) {
	return elm.className.split(' ');
}

function findLabel(container, forElm) {
	var labels = document.getElementsByTagName("label");
	for(var i=0; i<labels.length; i++) {
		var labelElm = (document.getElementById(labels[i].htmlFor)) ? document.getElementById(labels[i].htmlFor) : false ;
		if(labelElm == forElm) {
			return labels[i].innerHTML;
			break;
		}
	}
	alert(forElm);
	return forElm.name;
}

function in_array(needle, haystack) {
	for(var i=0; i<haystack.length; i++) {
		if(haystack[i] == needle)  {
			return true;
			break;
		}
	}
	return false;
}

function is_required(elm) {
	if(elm.value.length > 0) return true;
	return false;
}

function is_email(elm) {
	var email=/^[A-Za-z0-9]+([_\.-][A-Za-z0-9]+)*@[A-Za-z0-9]+([_\.-][A-Za-z0-9]+)*\.([A-Za-z]){2,4}$/i;
	return(email.test(elm.value));
}

function is_phone(elm) {
	var iValue = elm.value-0;
	if(!isNaN(iValue) && elm.value.length >= 8) return true;
	return false;
}

function is_int(elm) {
	var value = elm.value-0;
	if(isNaN(value)) return true;
	return false;
}

function isArray(obj) {
	if(!obj)
		return false;
	if (obj.constructor.toString().indexOf("Array") == -1)
		return false;
	else
		return true;
}
