// File signup.js
function muSignup(){
	var validated = false;
	checkEmail('emailup');
	checkPassword('passup1');
        comparePasswords('passup1','passup2');
	checkNickName('nickname');
	checkCity('city');
	checkLanguages('languages2');
	if(!ErrorHandler.hasError()){
		//validated = true;
		$('gsACT').submit();
	}else{
		ErrorHandler.displayErrors();
	}
	//return validated;
}

function showError (message,notify) {
	ErrorHandler.addError(message,null);
	ErrorHandler.displayErrors('1',notify);
}

function checkEmail(emailField){
	var emailPat = /^(\".*\"|[A-Za-z]\w*)@(\[\d{1,3}(\.\d{1,3}){3}]|[A-Za-z]\w*(\.[A-Za-z]\w*)+)$/;
	var emailElement = $(emailField);
	if(!emailElement){
		ErrorHandler.addError('Script error, emailfield ['+emailField+'] is missing ?',null);
		return false;
	}
	if(emailElement.value == ''){
		ErrorHandler.addError('e-mail address is empty',emailElement);
		return false;
	}
	var matchArray = emailElement.value.match(emailPat);
	if (matchArray == null) {
		ErrorHandler.addError('The e-mail address is incorrect',emailElement);
		return false;
	}
	return true;
}

function checkPassword(passwordField){
	var passwordElement = $(passwordField);
	if(!passwordElement){
		ErrorHandler.addError('Script error, passwordfield ['+passwordField+'] is missing ?',null);
		return false;
	}
	if(passwordElement.value == ''){
		ErrorHandler.addError('Password is empty',passwordElement);
		return false;
	}
	if(passwordElement.value.length < 6){
		ErrorHandler.addError('Minimum password-length is 6 characters',passwordElement);
		return false;
	}
}

function comparePasswords(passwordField1,passwordField2){
    var pass1Element = $(passwordField1);
    var pass2Element = $(passwordField2);
    if(!pass1Element || !pass2Element){
        ErrorHandler.addError('Script error, passwordFields ['+passwordField1+','+passwordField2+'] are missing ?',null);
        return false;
    }
    if(pass1Element.value != pass2Element.value){
        ErrorHandler.addError('Passwords do not match',pass2Element);
        return false;
    }
    return true;
}


function checkNickName(nickNameField){
	var nickNameElement = $(nickNameField);
	if(!nickNameElement){
		ErrorHandler.addError('Script error, nickname-field ['+nickNameField+'] is missing ?',null);
		return false;
	}
	if(nickNameElement.value == ''){
		ErrorHandler.addError('Nickname is empty, provide a nickname of at least 2 characters',nickNameElement);
		return false;
	}
	if(nickNameElement.value.length < 2){
		ErrorHandler.addError('Nickname is too short, minimum length is 2 characters',nickNameElement);
		return false;
	}

	var validNickPat = /[^0-9a-zA-Z_:\-\.]/g;
	var matchArray = nickNameElement.value.match(validNickPat);
	if(matchArray){

		ErrorHandler.addError('Invalid characters ('+matchArray+') in your nickname ',nickNameElement);
		return false;
	}
}

function checkCity(cityField){
	var cityElement = $(cityField);
	if(!cityElement){
		ErroHandler.addError('Script error, city-field is missing ?',null);
		return false;
	}
	if(cityElement.value == ''){
		ErrorHandler.addError('City is empty',cityField);
		return false;
	}
}

function checkLanguages(languageField){
	var langElement = $(languageField);
	if(!langElement){
		ErrorHandler.addError('Script error, language-field ['+languageField+'] is missing ?',null);
		return false;
	}
	if(langElement.options.length <= 0){
		ErrorHandler.addError('No languages selected, select at least 1 language',langElement);
		return false;
	}
}

// Anonymous function ErrorHandler for Singleton implementation
var ErrorHandler = new function(){
    this.messages = new Array();
    this.pointers = new Array();
    this.numErrors= 0;
    this.defaultID= 'errorDisplay';
    this.alertHeader = '<h3>Some errors occured:</h3>\n\n';
    this.alertFooter = '\nPls correct them before you submit the registrationform<div style="text-align:center;padding:5px;"><button onclick="ErrorHandler.closeDisplay(this)" type="button">Close</button></div>';
    this.Message  = '';
    this.hiddenElements 	= new Array();
    this.hiddenElementsStyle 	= new Array();
    // For observer object
    this.observerSubjectId = false;

    this.addError = function(msg,el){
        this.messages[this.messages.length] = msg;
        this.pointers[this.pointers.length] = el;
        this.numErrors += 1;
    }

    this.displayErrors = function(nofooter,notify){
        if(this.numErrors > 0){
            this.Message = '<ul>';
            for(i=0;i<this.numErrors;i++){
                this.Message += '<li>'+this.messages[i]+'\n</li>';
            }
            this.Message += '</ul>';
	    var errorDisplay = document.createElement('div');
	    errorDisplay.id = this.defaultID;
	    errorDisplay.className = 'errorMessage';
		if (nofooter == '1') {
			this.alertFooter = '\n<div style="text-align:center;padding:5px;"><button onclick="ErrorHandler.closeDisplay(this)" type="button">Close</button></div>';
		}
		if (notify == 1) {
			this.alertHeader = '<h3 style="color:#A7D316">Notify:</h3>\n\n';
		}
	    errorDisplay.innerHTML = this.alertHeader + this.Message + this.alertFooter;
		if (notify == 1) {
			errorDisplay.style.backgroundImage = 'url(http://www.mappedup.com/embed/icon_notify_medium.gif)';
			errorDisplay.style.border = '1px solid #A7D316';
			errorDisplay.style.backgroundRepeat = 'no-repeat';
			errorDisplay.style.backgroundPosition = '5px 5px';
			errorDisplay.style.color = '#A7D316';
		}
	    this.hideElements();
	    document.body.appendChild(errorDisplay);
        }
        this.resetErrors();
    }

    this.hasError = function(){
        return (this.numErrors > 0);
    }

    this.setHeader = function(head){
        this.alertHeader = head;
    }

    this.setFooter = function(foot){
        this.alertFooter = foot;
    }

    this.resetErrors = function(){
        this.messages = new Array();
        this.pointers = new Array();
        this.Message  = '';
        this.numErrors= 0;
    }

    this.markPointer = function(el){

    }

    this.resetPointer= function(el){

    }

    this.closeDisplay=function(el){
	$(this.defaultID).parentNode.removeChild($(this.defaultID));
	if(this.hiddenElements.length > 0){
		for(sl=0;sl<this.hiddenElements.length;sl++){
			if(this.hiddenElements[sl].tagName){

				this.hiddenElements[sl].style.visibility= 'visible';
			}
		}
		this.hiddenElements = new Array();
	}
    }

    this.hideElements = function(){
    	// Only for IE
    	if(!window.ActiveXObject){
    		return false;
    	}
		var selects = document.getElementsByTagName('select');
		if(selects.length > 0){
			for(sl=0;sl < selects.length; sl++){
				if(selects[sl].style.visibility != 'hidden'){
					this.hiddenElements[this.hiddenElements.length] = selects[sl];
					selects[sl].style.visibility = 'hidden';
				}
			}
		}
    }
}