var oMyAlertOptions = new Object(); var fSetAlertOptions = function(oOptions){ oMyAlertOptions.iAlertWidth = (oOptions && oOptions.width) || 200; oMyAlertOptions.bAlertAll = (oOptions && oOptions.displayAll) || false; oMyAlertOptions.bAlertOnBlur = (oOptions && oOptions.bAlertOnBlur) || false; oMyAlertOptions.iAlertAutoHide = (oOptions && oOptions.iAlertAutoHide) || false; oMyAlertOptions.fOnBeginValid = (oOptions && oOptions.fOnBeginValid) || null; oMyAlertOptions.fOnValidShow = (oOptions && oOptions.fOnValidShow) || null; oMyAlertOptions.fOnErrorShow = (oOptions && oOptions.fOnErrorShow) || null; oMyAlertOptions.fOnErrorHide = (oOptions && oOptions.fOnErrorHide) || null; oMyAlertOptions.fOnSubmitForm = (oOptions && oOptions.fOnSubmitForm) || null; } fSetAlertOptions(); var fValiderAlert = new Class({ initialize: function(sXmlName, sSubmitButtonId, oOptions){ var oThis = this; var oSubmitButton = $(sSubmitButtonId); if (!oSubmitButton) { return false; } // this.id = sSubmitButtonId+"AlertBox"; this.form = $(oSubmitButton.form); this.oSubmitButton = oSubmitButton; this.iAlertWidth = (oOptions && oOptions.width) || oMyAlertOptions.iAlertWidth; this.bAlertAll = (oOptions && oOptions.displayAll) || oMyAlertOptions.bAlertAll; this.bAlertOnBlur = (oOptions && oOptions.bAlertOnBlur) || oMyAlertOptions.bAlertOnBlur; this.iAlertAutoHide = (oOptions && oOptions.iAlertAutoHide) || oMyAlertOptions.iAlertAutoHide; this.fOnBeginValid = (oOptions && oOptions.fOnBeginValid) || oMyAlertOptions.fOnBeginValid; this.fOnValidShow = (oOptions && oOptions.fOnValidShow) || oMyAlertOptions.fOnValidShow; this.fOnErrorShow = (oOptions && oOptions.fOnErrorShow) || oMyAlertOptions.fOnErrorShow; this.fOnErrorHide = (oOptions && oOptions.fOnErrorHide) || oMyAlertOptions.fOnErrorHide; this.fOnSubmitForm = (oOptions && oOptions.fOnSubmitForm) || oMyAlertOptions.fOnSubmitForm; this.oInputError = null; this.oFirstInputError = null; this.iWaitTimeout = null; new fLoadXML(sXmlName, function(xml, oXMLObject){ oThis.oAlertXML = oXMLObject["form"][0].field; oThis.fInitForm(); }); }, fInitForm: function() { var oThis = this; // Create alert box HTML elements var oBackgDiv = new Element("div").setProperties({id: oThis.id}).addClass("alertClassBox").setStyle("width", oThis.iAlertWidth+"px").injectInside($$("body")[0]); var oCloseImg = new Element("a").setProperties({ id: oThis.id+"Close", href: "javascript:void(0);" }).addClass("closeImage").injectInside(oBackgDiv); oCloseImg.addEvent("click", function(){ clearTimeout(oThis.iWaitTimeout); oThis.hide(); }); var oContDiv = new Element("p").setProperties({ id: oThis.id+"Cont" }).injectInside(oBackgDiv); if (window.ie) { var oIframeDiv = new Element("iframe").setProperties({ id: oThis.id+"Iframe" }).setStyles({ width: oThis.alertStyle && oThis.alertStyle.width ? oThis.alertStyle.width : "120px", filter: "progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)" }).addClass("alertClassIframe").injectInside($$("body")[0]); } // // Init Form Element with behaviours for (var iInc = 0; iInc < oThis.oAlertXML.length; iInc++) { var oInputCtrl = $(oThis.oAlertXML[iInc].name[0].data); if (oInputCtrl) { for (var iIncElem = 0; iIncElem < oThis.form.elements.length; iIncElem++) { var oThisInput = oThis.form.elements[iIncElem]; if (oThisInput.name == oInputCtrl.name) { if (typeof(oThis.oAlertXML[iInc].popup) != "undefined" && oThis.oAlertXML[iInc].popup[0].data == "true") { oThisInput.popup = true; } // restrict input if (typeof(oThis.oAlertXML[iInc].restrict) != "undefined") { oThisInput.restrict = this.oAlertXML[iInc].restrict[0].data.replace("{number}","0-9").replace("number","[0-9]"); oThisInput.addEvent("keypress", function(event){ var eEvent = new Event(event); var iCode = eEvent.code; var bCode = ( iCode == null || iCode == 0 || iCode == 8 || iCode == 9 || iCode == 13 || iCode == 27 || iCode == 35|| iCode == 36 || iCode == 37 || iCode == 39 || iCode == 46); var sKey = eEvent.key; var oRegExp = new RegExp(this.restrict); if (!sKey.test(oRegExp) && !bCode) { eEvent.stop(); } }); } // has initialized value. if (typeof(oThis.oAlertXML[iInc].init) != "undefined") { oThisInput.init = oThis.oAlertXML[iInc].init[0].data.toString().trim(); oThisInput.value = oThisInput.init; oThisInput.addEvent("focus", function(event){ if (this.value.trim() == this.init){ this.value = ""; } }); oThisInput.addEvent("blur", function(event){ if (this.value.trim() == ""){ this.value = this.init; } }); } // $(oThisInput).addEvents({ "keyup": function(){ oThis.hide(); }, "click": function(){ oThis.hide(); }, "blur" : function() { if (oThis.bAlertOnBlur == true) { setTimeout(function(){ oThis.fValidForm(); }, 50); } } }); } // end if oInputCtrl.name } // end for } // end if oInputCtrl } // end for // oThis.oSubmitButton.onclick = function(event) { new Event(event).stop(); // if (oThis.fOnBeginValid) { oThis.fOnBeginValid(oThis.form); } // if (oThis.fValidForm()) { if (oThis.fOnSubmitForm) { oThis.fOnSubmitForm(oThis.form); } else { //alert(oThis.form); oThis.form.submit(); } } }; }, fShowAlert: function(sElementId, sWarning, bExt) { var oThis = this; var oInput = $(sElementId); // Callback function if (oThis.fOnErrorShow) { oThis.fOnErrorShow(oInput, sWarning); } oThis.oInputError = oInput; // // if (oThis.bAlertAll && !bExt) { return; } $(oThis.id+"Cont").setHTML(sWarning); var iShowTop = oInput.popup ? window.getScrollTop()+(window.getHeight()-$(oThis.id).getCoordinates().height)/2 : $(sElementId).getPosition().y+$(sElementId).getCoordinates().height; var iShowLeft = oInput.popup ? (window.getWidth()-$(oThis.id).getCoordinates().width)/2 : $(sElementId).getPosition().x; // $(oThis.id).setStyles({ top: iShowTop+"px", left: iShowLeft+"px" }).setOpacity(1); if (window.ie) { $(oThis.id+"Iframe").setStyles({ visibility: "visible", top: iShowTop+"px", left: iShowLeft+"px", width: $(oThis.id).getCoordinates().width, height: $(oThis.id).getCoordinates().height }) } // clearTimeout(oThis.iWaitTimeout); if (oThis.iAlertAutoHide != false) { oThis.iWaitTimeout = setTimeout(function() { oThis.hide(); }, oThis.iAlertAutoHide); } // oInput.focus(); }, hide: function() { var oThis = this; if (oThis.oInputError == null) { return; } // if ($(oThis.id)) $(oThis.id).setStyles({visibility: "hidden"}); if (window.ie) { $(oThis.id+"Iframe").setStyles({visibility: "hidden"}); } // Callback function if (oThis.fOnErrorHide) { oThis.fOnErrorHide(oThis.oInputError); } // oThis.oInputError = null; }, fValidForm: function() { var oThis = this; var aValidArray = new Array(); for (var iInc = 0; iInc < oThis.oAlertXML.length; iInc++) { var oInputCtrl = $(oThis.oAlertXML[iInc].name[0].data); if (oInputCtrl) { for (var iIncElem = 0; iIncElem < oThis.form.elements.length; iIncElem++) { var oThisInput = oThis.form.elements[iIncElem]; if (oThisInput.name == oInputCtrl.name) { aValidArray.push({ control: oThisInput, type: oThis.oAlertXML[iInc].type[0].data, alert: oThis.oAlertXML[iInc].alert[0].data }); } } } } // var bIsValid = true; for (iInc = 0; iInc < aValidArray.length; iInc++) { if (fnIsVisible(aValidArray[iInc].control) && !oThis.fCheckForm(aValidArray[iInc].control, aValidArray[iInc].type)) { if (bIsValid == true) { oThis.oFirstInputError = aValidArray[iInc].control; } oThis.fShowAlert(aValidArray[iInc].control, aValidArray[iInc].alert); bIsValid = false; iInc = aValidArray.length; return false; } else if (oThis.fOnValidShow) { oThis.fOnValidShow(aValidArray[iInc].control); } } return true; // }, fCheckForm: function(sElementId, sCondition) { var oFormElement = $(sElementId); var form = oFormElement.form; if (typeof(oFormElement.init) != "undefined" && oFormElement.value.trim() == oFormElement.init && sCondition.indexOf("required") !== -1 && fnGetQuote(sCondition, "[", "]") == "") { return false; } var bCheckConditionsIndex= fnCheckConditionIndexOf({sCondition:sCondition, sElementId:sElementId}) var bCheckConditions= fnCheckConditions({sCondition:sCondition, sElementId:sElementId}) var bCheckBoth=bCheckConditionsIndex+bCheckConditions==1 ? false : true return bCheckBoth; } }); var fnCheckConditions=function(oOptions){ sCondition=(oOptions && oOptions.sCondition) || null; sElementId=oOptions.sElementId var oFormElement = $(sElementId); var form = oFormElement.form; switch(sCondition){ case "check": if (oFormElement.type == "checkbox") { return (oFormElement.checked); } if (oFormElement.type == "radio") { var sRadioGroup = form[oFormElement.name]; if (sRadioGroup && !sRadioGroup.length) { return sRadioGroup.checked; } var bRadioChecked = false; $A(sRadioGroup).each(function(oRadioInput){ if (oRadioInput.checked) { bRadioChecked = true; } }); return bRadioChecked; } return true; break; case "image": return fnIsImage(oFormElement.value); break; case "[image]": if (fnIsBlank(oFormElement.value) || oFormElement.value == oFormElement.init) { return true; } return fnIsImage(oFormElement.value); break; case "phone": return fnIsPhone(oFormElement.value); break; case "none": return true; break; default: return true; break; } } var fnCheckConditionIndexOf=function(oOptions){ //sIndexOfString = (oOptions && oOptions.sIndexOfString) || null; sCondition=(oOptions && oOptions.sCondition) || null; sElementId=oOptions.sElementId var oFormElement = $(sElementId); if (sCondition.indexOf("=") !== -1 && sCondition.indexOf(">") == -1 && sCondition.indexOf("<") == -1 && sCondition.indexOf("EVAL") == -1) { return (oFormElement.value == $(sCondition.replace("=","")).value); } if (sCondition.indexOf("required") !== -1) { if (fnGetQuote(sCondition, "[", "]") != "") { var aInputs = fnGetQuote(sCondition, "[", "]").split(","); var bIsEntered = false; aInputs.each(function(el){ if (!fnIsBlank($(el).value) && $(el).value != $(el).init) { bIsEntered = true; } }); return bIsEntered; } else { return (oFormElement.value.trim().length >= Math.max(Number(fnGetQuote(sCondition, "(", ")")), 1)); } } if (sCondition.indexOf("future") !== -1) { var sConditionQuote = fnGetQuote(sCondition, "(", ")").toString(); var aConditions = sConditionQuote.split(","); if (aConditions.length == 0) { return false; } var sCond0 = aConditions[0]; var sCond1 = aConditions[1]; var oCond1 = $(sCond1); var sCond2 = aConditions[2]; if (sCond2 && sCond2 == "false" && fnIsBlank(oFormElement.value)) { return true; } if (!fnIsDate(sCond0, oFormElement.value) || (sCond1 && oCond1 && !fnIsDate(sCond0, oCond1.value))) { return false; } if (sCond1 && oCond1) { return (fnCompareDate(sCond0, oFormElement.value, oCond1.value) == -1); } else { return (fnCompareDate(sCond0, oFormElement.value) == -1); } } if (sCondition.indexOf("EVAL") !== -1) { return eval(fnGetQuote(sCondition, "[", "]")); } if (sCondition.indexOf("email") !== -1) { if (sCondition == "[email]" && (fnIsBlank(oFormElement.value) || oFormElement.value == oFormElement.init)) { return true; } var bIsEmailOK = true; var aEmailArray = oFormElement.value.split(";"); $A(aEmailArray).each(function(sEmail){ if (!fnIsEmail(sEmail.trim())) { bIsEmailOK = false; } }); return bIsEmailOK; } if (sCondition.indexOf("date") !== -1) { return fnIsDate(fnGetQuote(sCondition, "(", ")"), oFormElement.value); } if (sCondition.indexOf(">") !== -1) { if (sCondition.indexOf(">=") !== -1) { return (oFormElement.value >= $(sCondition.replace(">=","")).value); } else { return (oFormElement.value > $(sCondition.replace(">","")).value); } } if (sCondition.indexOf("<") !== -1) { if (sCondition.indexOf("<=") !== -1) { return (oFormElement.value <= $(sCondition.replace("<=","")).value); } else { return (oFormElement.value < $(sCondition.replace(">","")).value); } } if (sCondition.indexOf("max") !== -1 || sCondition.indexOf("min") !== -1) { var bMax=true, bMin=true; if(sCondition.indexOf("max") !== -1) bMax=Number(oFormElement.value) <= fnGetQuoteNumber(sCondition, "max"); if(sCondition.indexOf("min") !== -1) bMin =Number(oFormElement.value) >= fnGetQuoteNumber(sCondition, "min"); if(bMax==false || bMin==false) return false; } if (sCondition.indexOf("select") !== -1) { var refSelect = $(fnGetQuote(sCondition, "[", "]")); if (refSelect) { if (refSelect.selectedIndex != 0) { return (oFormElement.selectedIndex !== 0); } else { return true; } } else { return (oFormElement.selectedIndex !== 0); } } return true; } /////////Define all format checking functions var fnGetQuote=function (sString, sStart, sEnd) { return sString.substring(sString.indexOf(sStart)+sStart.length, sString.indexOf(sEnd)); } var fnGetQuoteNumber=function (sString, sStart) { var oRegExp = new RegExp(sStart+":[0-9]+"); var sStrResult=sString.match(oRegExp) var oRegExp = new RegExp("[0-9]+"); var sStrResult2=sStrResult[0].match(oRegExp) return(Number(sStrResult2)); } // var fnIsEmail=function (sString){ var oRegExp = new RegExp("^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]{2,4}$"); return (sString.search(oRegExp) != -1); } // var fnIsImage=function (sString){ var oRegExp = new RegExp("\\.(png|gif|bmp|jpg|jpeg|jpe)$", "i"); return (sString.search(oRegExp) != -1); } // var fnIsPhone=function (sString) { var oRegExp = new RegExp("^[ .0-9]{3,}$"); return (sString.search(oRegExp) != -1); } // var fnIsDate=function (format, sString) { var oRegExp = new RegExp("[.\/-]"); var aSplitedString = sString.split(oRegExp); if (aSplitedString.length != 3) { return false; } var y = Number(p[format.indexOf("y")]); var m = Number(p[format.indexOf("m")]); var d = Number(p[format.indexOf("d")]); var oDate = new Date(y, m-1, d); return (y == oDate.getFullYear() && m == oDate.getMonth()+1 && d == oDate.getDate()); } // var fnCompareDate=function fnCompareDate(format, oDate1, oDate2){ var oRegExp = new RegExp("[.\/-]"); var aDate1 = oDate1.split(oRegExp); var y1 = Number(aDate1[format.indexOf("y")]); var m1 = Number(aDate1[format.indexOf("m")]); var iDate1 = Number(aDate1[format.indexOf("d")]); if (oDate2) { var aDate2 = oDate2.split(s); var y2 = Number(aDate2[format.indexOf("y")]); var m2 = Number(aDate2[format.indexOf("m")]); var iDate2 = Number(aDate2[format.indexOf("d")]); } else { var oDate2 = new Date(); var y2 = oDate2.getFullYear(); var m2 = oDate2.getMonth()+1; var iDate2 = oDate2.getDate(); } // if (y2 > y1) { return 1; } else if (y2 < y1) { return -1; } else { if (m2 > m1) { return 1; } else if (m2 < m1) { return -1; } else { if (iDate2 > iDate1) { return 1; } else if (iDate2 < iDate1) { return -1; } else { return 0; } } } } // var fnIsBlank=function fnIsBlank(sString) { return (sString.trim() == ""); } // var fnIsVisible = function(el){ var oObject = $(el).getParent(); while (oObject && oObject.getStyle) { if (oObject.getStyle("display") == "none" || oObject.getStyle("visibility") == "hidden") { return false; } oObject = oObject.getParent(); } return true; }