// com.nivaria.ncm.component.emailform.js, nivaria.com, 2007-05-01 cGuyomard

var EMAIL_FORM_CLASS="EmailForm";function EmailFormManager(){this.componentClass=EMAIL_FORM_CLASS;}
EmailFormManager.prototype=new AbstractComponentManager();EmailFormManager.prototype.constructor=AbstractComponentManager;EmailFormManager.prototype.toString=function(){return"EmailFormManager"};EmailFormManager.prototype.registerComponent=function registerComponent(id,props){this._nComponents.push(new EmailForm(id,props));};function EmailForm(id,props){AbstractComponent.apply(this,[id,props]);}
EmailForm._messages={};EmailForm.addMessage=function addMessage(key,msg){EmailForm._messages[key]=msg;};EmailForm.ERROR_HEADER="errorHeader";EmailForm.NON_CONFIRMED_MESSAGE="nonConfirmedMessage";EmailForm._messages[EmailForm.ERROR_HEADER]="This form contains one or several errors.\n\nPlease check the highlighted fields:";EmailForm._messages[EmailForm.NON_CONFIRMED_MESSAGE]="You have to enter the same value in both fields for eMail.";EmailForm.prototype=new AbstractComponent();EmailForm.prototype.constructor=EmailForm;EmailForm.prototype.toString=function(){return"EmailForm, id: "+this._id;};EmailForm.prototype.init=function init(){this.setDomElementById(this._id);if(!this.requireInit()){return;}
try{var forms=$jq("#"+this._id+" form");var componentId=this._id;var validate=function validate(){var validationStatus=true;$jq("#"+componentId+" .setting-missing").removeClass("setting-missing").addClass("setting-required");try{this.nElements={};var nonInputTagNameRE=/(^FIELDSET$)|(^BUTTON$)|(^OPTION$)|(^OPTGROUP$)/;for(var i=0;i<this.elements.length;i++){if(nonInputTagNameRE.test(this.elements[i].tagName.toUpperCase())){continue;}
if(!this.elements[i]){var msg="this.elements["+i+"] is null";alert(msg);throw new Error(msg);}
if(""==this.elements[i].value){continue;}
if(!this.elements[i].value){var msg="this.elements["+i+"] is null-value";alert(msg);throw new Error(msg);}
if(!this.elements[i].name){var msg="this.elements["+i+"] has no name";alert(msg);throw new Error(msg);}
var element=this.elements[i];if(/^confirm[0-9]*/.test(element.name))continue;if(!this.nElements[element.name]){this.nElements[element.name]={values:[],specs:[]};}
if(/^@.*/.test(element.value)){this.nElements[element.name].specs.push(element.value);}else{if("SELECT"==element.tagName.toUpperCase()){if(-1!=element.selectedIndex&&""!=element.options[element.selectedIndex].value){this.nElements[element.name].values.push(element.options[element.selectedIndex].value);}}else if("INPUT"==element.tagName.toUpperCase()&&/(^CHECKBOX$)|(^RADIO$)/.test(element.type.toUpperCase())){if(element.checked){this.nElements[element.name].values.push(element.value);}}else if(!/^[ \t\n\r]*$/.test(element.value)){this.nElements[element.name].values.push(element.value);}}}
$jq("#"+componentId+" [@class^=setting]").each(function(i){this.id="setting"+String(componentId)+"-"+String(i);});var missingSettingLabels={};var mailConfirmed=true;for(var name in this.nElements){var namedValues=this.nElements[name].values;var namedSpecs=this.nElements[name].specs;for(var i=0;i<namedSpecs.length;i++){var spec=namedSpecs[i];if("@required"==spec&&0==namedValues.length){validationStatus=false;var selector="#"+componentId+" *[@name="+name+"]";$jq(selector).each(function(){var node=this;if(this.type&&"HIDDEN"==this.type.toUpperCase()){while(node){if(node.className&&/setting-/.test(node.className)){if("setting-required"==node.className){node.className="setting-missing";}
break;}
node=node.parentNode;}}else{while(node){if(node.className&&/setting-/.test(node.className)){var labels=$jq("#"+node.id+" label").not(".proposedValues label");var l=(labels[0].innerText?labels[0].innerText:labels[0].textContent).replace(/(^ +)|(\*)|( +$)/,"");if(l){missingSettingLabels[l]="any";}
break;}
node=node.parentNode;}}});}
if("@confirmable"==spec){var selector="#"+componentId+" *[@name="+name+"]";$jq(selector).each(function(i){if("HIDDEN"!=this.type.toUpperCase()){var elemId=this.getAttribute("id").replace(/field/,"");var conf=document.getElementById("confirm"+elemId);if(this.value!=conf.value){mailConfirmed=false;validationStatus=false;var node=this;while(node){if(node.className&&/setting-/.test(node.className)){node.className="setting-missing";break;}
node=node.parentNode;}
node=conf;while(node){if(node.className&&/setting-/.test(node.className)){node.className="setting-missing";break;}
node=node.parentNode;}}}});}}}
var msg="";for(var label in missingSettingLabels){msg+="\n - "+label;}
if(!mailConfirmed){msg+="\n - "+EmailForm._messages[EmailForm.NON_CONFIRMED_MESSAGE];}
if(""!=msg){alert(EmailForm._messages[EmailForm.ERROR_HEADER]+msg);}}catch(exc){alert(exc.message);}
return validationStatus;};var onSubmitEventHandler=function(e){var self=null;if(e.target){self=e.target;e.stopPropagation();}else if(window.event.srcElement){self=window.event.srcElement;window.event.cancelBubble=true;}
if(!self){var msg="Error: onSubmitEventHandler, self is null";alert(msg);throw new Error(msg);}
var isValidated=null;try{isValidated=self.validate();}catch(exception){alert(exception.message);isValidated=false;}
if(!isValidated&&e.preventDefault){e.preventDefault();}
return isValidated;};forms.each(function(){var self=this;this.validate=validate;if(this.addEventListener){this.addEventListener("submit",onSubmitEventHandler,false);}else if(this.attachEvent){this.attachEvent("onsubmit",onSubmitEventHandler);}});}catch(exception){alert(exception);throw new Error(exception.toString());}
this.setInitialized(true);};application.addComponentManager(new EmailFormManager(application));
