/******************************************************************************************/
/* MijnID regfrom visualisation script
/*
 * NOTE: this script is specific for the MijnID.nl portal. Websites integrating
 * with MijnID should use the script in mijnidformassets/mijnidformjs/mijnid-gui.js
 *
 *
/* JS Library dependency: Yui Core (yahoo-dom-event.js), Yui Animation (animation-min.js)
/* MijnID validation JS dependency: (mijnid-validate.js)
/******************************************************************************************/

/* Global YAHOO library shortcut variables */

var Dom = YAHOO.util.Dom;
var Event = YAHOO.util.Event;

/* Setting global namespace */

YAHOO.namespace("mijnID");

YAHOO.mijnID.regForm = {

	settings : {
		cssMainErrorId			: "myIDerror",
		cssMainErrorActiveClass         : "active",
		cssErrorClass			: "myIDhasError",
		cssErrorBoxClass		: "myIDtip",
		cssErrorMsgClass		: "tipText",
		cssFocusClass			: "focus",
		animateError			: true
	},

	mijnIDValidator : new MijnIDValidator(),

	init: function(obj) {

		// add listeners
		for(var i=0; i<obj.fields.length; i++) {
			Event.addListener(obj.fields[i], "blur", this.validateField,{refObj: this, valMethod:obj.settings[i], fieldId:obj.fields[i]});
			Event.addListener(obj.fields[i], "focus", this.focusField,{refObj: this, helpText:obj.settings[i].helpText});

			// set helptexts (if not set in original HTML)
			var refField = Dom.get(obj.fields[i]);
			if(refField) {
				var helpTextNode = Dom.getElementsByClassName("tipText", "div", refField.parentNode)[0];
				// only set text if not present in HTML already
				if(this.trim(helpTextNode.innerHTML).length == 0) {
					helpTextNode.innerHTML = obj.settings[i].helpText;
				}
			}
		}

		//Event.addListener("myIDSubmit", "click", function(e){Event.preventDefault(e)});
		//Event.addListener("myIDSubmit", "click", this.validateAllFields,{refObj: this, formObj:obj});

	},

	focusField : function(e,obj) {
		// set focus class on selected formrow & remove error class & set helpText
		Dom.removeClass(this.parentNode, obj.refObj.settings.cssErrorClass);
		Dom.addClass(this.parentNode, obj.refObj.settings.cssFocusClass);

		var errorMsgObj = Dom.getElementsByClassName(obj.refObj.settings.cssErrorMsgClass, "div", this.parentNode)[0];
		errorMsgObj.innerHTML = obj.helpText;

	},

	validateField: function(e,valObj) {
		var valRepsonse;
		var testValue = Dom.get(valObj.fieldId).value;

		switch(valObj.valMethod.type) {
			case "username":

			valRepsonse = valObj.refObj.mijnIDValidator.validateUsername(testValue);
			// check serverside if clientside validation passed & ajaxcheck is set
			if(valObj.valMethod.ajaxCheck && valRepsonse.isValid) {
				// get new validation
				valObj.refObj.mijnIDValidator.ajaxValidateUsername(testValue,valObj);
				return;
			}
			break;

			case "email":
			valRepsonse = valObj.refObj.mijnIDValidator.validateEmailAddress(testValue);
			// check serverside if clientside validation passed & ajaxcheck is set
			if(valObj.valMethod.ajaxCheck && valRepsonse.isValid) {
				// get new validation
				valObj.refObj.mijnIDValidator.ajaxValidateEmailAddress(testValue,valObj);
				return;
			}
			break;

			case "password":
			valRepsonse = valObj.refObj.mijnIDValidator.validatePassword(testValue);
			break;

			case "equal":
			if(valObj.fieldId == "myIDemailCheck") {
				var fieldType = "E-mailadressen";
			} else if(valObj.fieldId == "myIDpasswordCheck") {
				var fieldType = "Wachtwoorden"
			}
			else {
				var fieldType = "Items";
			}
			valRepsonse = valObj.refObj.mijnIDValidator.isEqual(Dom.get(valObj.valMethod.matchId).value,testValue,fieldType);
			break;
		};

		// draw validation response
		return valObj.refObj.drawError({rawResponse:valRepsonse,field:Dom.get(valObj.fieldId),helpText:valObj.valMethod.helpText});

	},

	validateAllFields : function(e,obj) {
		var validForm = true;
		for(var i=0; i<obj.formObj.fields.length; i++) {
			if(!obj.refObj.validateField(e,{refObj: obj.refObj, valMethod:obj.formObj.settings[i],fieldId:obj.formObj.fields[i]})) {
				// toggle main error box
				Dom.addClass(obj.refObj.settings.cssMainErrorId, obj.refObj.settings.cssMainErrorActiveClass);
				validForm = false;
			}
		}
		if (validForm) { this.form.submit(); }
	},

	drawError: function(valRepsonseObject) {

		var errorMsgObj = Dom.getElementsByClassName(this.settings.cssErrorMsgClass, "div", valRepsonseObject.field.parentNode)[0];

		if(valRepsonseObject.rawResponse.isValid) {
			// remove error classes & focus class
			Dom.removeClass(valRepsonseObject.field.parentNode, this.settings.cssErrorClass);
			Dom.removeClass(valRepsonseObject.field.parentNode, this.settings.cssFocusClass);

			// reset original helpText
			var errorMessage = valRepsonseObject.helpText;
			var rv = true;
		}
		else {
			// add error classes
			Dom.addClass(valRepsonseObject.field.parentNode, this.settings.cssErrorClass);

			// set error response
			var errorMessage = valRepsonseObject.rawResponse.errorMessage;
			var rv = false;
		}

		// set error message
		if(errorMsgObj) {
			if(this.settings.animateError) {
				Dom.setStyle(errorMsgObj, "opacity", "0");
				var fadeAnim = new YAHOO.util.Anim(errorMsgObj, {opacity: { to:1 }}, 15, YAHOO.util.Easing.easeOut);
				fadeAnim.useSeconds = false;
				fadeAnim.animate();
			}
			errorMsgObj.innerHTML = errorMessage;
		}

		// return value
		return rv;
	},

	trim: function(value) {
	  if(!value || value.length == 0) {
		return "";
	  }
	  else {
		value = value.replace(/^\s+/,'');
		value = value.replace(/\s+$/,'');
		return value;
	  }
	}
}

var initMijnIDForm = function() {
    // init myIDForm if present in DOM
    if(Dom.get("myIDmodule")) {

        YAHOO.mijnID.regForm.init({
            fields : [
            "myIDusername",
            "myIDpassword",
            "myIDpasswordCheck",
            "myIDemail",
            "myIDemailCheck"
            ],
            settings : [
            {
                type:"username",
                helpText:"Kies een gebruikersnaam",
                ajaxCheck:false,
                ajaxCheckUrl:'checkUserNameAvailable.do'
            },

            {
                type:"password",
                helpText:"Voer hier uw wachtwoord in."
            },

            {
                type:"equal",
                helpText:"Voer hier nogmaals uw wachtwoord in",
                matchId:"myIDpassword"
            },

            {
                type:"email",
                helpText:"Voer hier uw e-mailadres in"
                //ajaxCheck:true,
                //ajaxCheckUrl:publicationUrl+'emailCheckMijnId.do'
                },

                {
                type:"equal",
                helpText:"Voer hier nogmaals uw e-mailadres in",
                matchId: "myIDemail"
            }
            ]
        }
        );
    }
}

Event.addListener(window, "load", initMijnIDForm);