var hasContentErrorTextPre = "Du må fylle inn ";
var hasContentErrorTextPost = "!";
var radioSelectedErrorTextPre = "Du må velge ";
var radioSelectedErrorTextPost = "!";
var isEmailErrorTextPre = "";
var isEmailErrorTextPost = " må være en gyldig e-post";

function hasClass(ele,cls) {
	return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}

function validation () {
	this.errorTexts = new Array();
	this.errorSummary = new Array();
}

validation.prototype.getResult = function(){
	return this.result;
}

validation.prototype.resetErrors = function(){
	for (i = 0; i < this.errorTexts.length; i++){
		this.errorTexts[i].parentNode.removeChild(this.errorTexts[i]);
	}
	this.errorTexts = new Array();
	this.errorSummary = new Array();
	this.getSummary().innerHTML = "";
	this.result = true;
	this.errorPrefix = "*";
	
}

validation.prototype.hasValidate = function(){
	var elements = this.formElement.getElementsByClassName("validate");
	
	for (i = 0; i < elements.length; i++) {
		if(hasClass(elements[i],"hasContent")){
			this.hasContent(elements[i]);
		}
		else if(hasClass(elements[i],"isEmail")){
			this.isEmail(elements[i]);
		}
		else if(hasClass(elements[i],"radioSelected")){
			this.radioSelected(elements[i]);
		}
	}
}

validation.prototype.hasContent = function(element){
	if(element.value == ""){
		var nextErrorIndex = this.errorTexts.length;
		this.errorTexts[nextErrorIndex] = document.createTextNode(this.errorPrefix);
		this.errorSummary[nextErrorIndex] = this.errorPrefix + " " + hasContentErrorTextPre + element.name + hasContentErrorTextPost;
		element.parentNode.insertBefore(this.errorTexts[nextErrorIndex], element.nextSibling);
		
		this.result = false;
		this.errorPrefix += "*";
	}
	
}

validation.prototype.isEmail = function(element){
     var emailReg = "^[\\w-_\.+]*[\\w-_\.]\@([\\w]+\\.)+[\\w]+[\\w]$";
     var regex = new RegExp(emailReg);
      ;

	if(element.value == "" || !regex.test(element.value)){
		var nextErrorIndex = this.errorTexts.length;
		this.errorTexts[nextErrorIndex] = document.createTextNode(this.errorPrefix);
		this.errorSummary[nextErrorIndex] = this.errorPrefix + " " + isEmailErrorTextPre + element.name + isEmailErrorTextPost;
		element.parentNode.insertBefore(this.errorTexts[nextErrorIndex], element.nextSibling);
		
		this.result = false;
		this.errorPrefix += "*";
	}
}

validation.prototype.radioSelected = function(element){
	var elements = element.getElementsByTagName("input");
	var selected = false;
	
	for (j = 0; j < elements.length; j++) {
		if(elements[j].checked){
			selected = true;
		}
	}
	if(selected==false){
		var nextErrorIndex = this.errorTexts.length;
		this.errorTexts[nextErrorIndex] = document.createTextNode(this.errorPrefix);
		this.errorSummary[nextErrorIndex] = this.errorPrefix + " " + radioSelectedErrorTextPre + element.getAttribute("name") + radioSelectedErrorTextPost;
		element.parentNode.insertBefore(this.errorTexts[nextErrorIndex], element.nextSibling);
		
		this.result = false;
		this.errorPrefix += "*";
	}
	
}

validation.prototype.getSummary = function(){
	var elements = this.formElement.getElementsByClassName("validationSummary");
	return elements[0];
}

validation.prototype.printSummary = function(){
	var element = this.getSummary();
	
	for (i = 0; i < this.errorSummary.length; i++) {
		line = document.createTextNode(this.errorSummary[i]);
		element.appendChild(line);
		br = document.createElement("BR");
		element.appendChild(br);
	}
}

validation.prototype.init = function(element){
	this.formElement = element;
	this.resetErrors();
	//this.hasContent();
	this.hasValidate();
	this.printSummary();
}

var validation = new validation();

function validate(element){
	validation.init(element);
	return validation.getResult();
}
