/** * Taf Class * * Tell-a-friend * * @author Daniel Arsenault */ function Taf() { /* Object Constructor */ this.dummy = null; }; Taf.showForm = function() { // Check if the form already exist var divTaf = YAHOO.util.Dom.get('taf_box'); if(typeof(divTaf) == 'object') { Taf.createForm(); divTaf = YAHOO.util.Dom.get('taf_box'); } var columnn = document.getElementById("column"); var nom = document.getElementById("taf_name"); divTaf.style.display = "block"; YAHOO.util.Dom.addClass(columnn,"taf"); nom.focus(); YAHOO.util.Event.removeListener(YAHOO.util.Dom.get('taf'), 'click'); YAHOO.util.Event.addListener(YAHOO.util.Dom.get('taf'), 'click', Taf.hideForm); }; Taf.hideForm = function() { Taf.enableForm(); Taf.hideMessages(); var divTaf = YAHOO.util.Dom.get('taf_box'); var columnn = document.getElementById("column"); var nom = document.getElementById("taf_name"); divTaf.style.display = "none"; removeClass(columnn,"taf"); YAHOO.util.Event.removeListener(YAHOO.util.Dom.get('taf'), 'click'); YAHOO.util.Event.addListener(YAHOO.util.Dom.get('taf'), 'click', Taf.showForm); YAHOO.util.Dom.get('taf_form').reset(); }; Taf.createForm = function() { var divTafBox = document.createElement('div'); divTafBox.setAttribute('id', 'taf_box'); // Close Button var pClose = document.createElement('p'); YAHOO.util.Dom.addClass(pClose, 'close'); var aClose = document.createElement('a'); aClose.setAttribute('href', 'javascript:void(0)'); YAHOO.util.Event.addListener(aClose, 'click', Taf.hideForm); var closeText = document.createTextNode(TXT_CLOSE); aClose.appendChild(closeText); pClose.appendChild(aClose); divTafBox.appendChild(pClose); // Caption var hCaption = document.createElement('h4'); var captionText = document.createTextNode(TXT_SEND_TO_FRIEND); hCaption.appendChild(captionText); divTafBox.appendChild(hCaption); // Required var pRequired = document.createElement('p'); YAHOO.util.Dom.addClass(pRequired, 'required'); var requiredText = document.createTextNode(TXT_REQUIRED_FIELD); pRequired.appendChild(requiredText); divTafBox.appendChild(pRequired); // Form var fTafForm = document.createElement('form'); fTafForm.setAttribute('id', 'taf_form'); fTafForm.setAttribute('action', ''); fTafForm.setAttribute('method', 'post'); var fieldSet = document.createElement('fieldset'); fieldSet.setAttribute('id', 'tafFieldSet'); fTafForm.appendChild(fieldSet); // Form / From Name var divFromName = document.createElement('div'); divFromName.setAttribute('id', 'tafFromName'); var lblFromName = document.createElement('label'); lblFromName.setAttribute('for', 'taf_name'); var fromNameText = document.createTextNode(TXT_YOUR_NAME); lblFromName.appendChild(fromNameText); var iFromName = document.createElement('input'); iFromName.setAttribute('type', 'text'); iFromName.setAttribute('id', 'taf_name'); iFromName.setAttribute('name', 'fromName'); divFromName.appendChild(lblFromName); divFromName.appendChild(iFromName); fieldSet.appendChild(divFromName); // Form / From Email var divFromEmail = document.createElement('div'); divFromEmail.setAttribute('id', 'tafFromEmail'); var lblFromEmail = document.createElement('label'); lblFromEmail.setAttribute('for', 'taf_mail'); var fromEmailText = document.createTextNode(TXT_YOUR_EMAIL); lblFromEmail.appendChild(fromEmailText); var iFromEmail = document.createElement('input'); iFromEmail.setAttribute('type', 'text'); iFromEmail.setAttribute('id', 'taf_mail'); iFromEmail.setAttribute('name', 'fromEmail'); divFromEmail.appendChild(lblFromEmail); divFromEmail.appendChild(iFromEmail); fieldSet.appendChild(divFromEmail); // Form / To Name var divToName = document.createElement('div'); divToName.setAttribute('id', 'tafToName'); var lblToName = document.createElement('label'); lblToName.setAttribute('for', 'taf_name2'); var toNameText = document.createTextNode(TXT_FRIEND_NAME); lblToName.appendChild(toNameText); var iToName = document.createElement('input'); iToName.setAttribute('type', 'text'); iToName.setAttribute('id', 'taf_name2'); iToName.setAttribute('name', 'toName'); divToName.appendChild(lblToName); divToName.appendChild(iToName); fieldSet.appendChild(divToName); // Form / To Email var divToEmail = document.createElement('div'); divToEmail.setAttribute('id', 'tafToEmail'); var lblToEmail = document.createElement('label'); lblToEmail.setAttribute('for', 'taf_mail2'); var toEmailText = document.createTextNode(TXT_FRIEND_EMAIL); lblToEmail.appendChild(toEmailText); var iToEmail = document.createElement('input'); iToEmail.setAttribute('type', 'text'); iToEmail.setAttribute('id', 'taf_mail2'); iToEmail.setAttribute('name', 'toEmail'); divToEmail.appendChild(lblToEmail); divToEmail.appendChild(iToEmail); fieldSet.appendChild(divToEmail); // Form Message var divMessage = document.createElement('div'); divMessage.setAttribute('id', 'tafMessage'); var lblMessage = document.createElement('label'); lblMessage.setAttribute('for', 'taf_message'); var messageText = document.createTextNode(TXT_MESSAGE); lblMessage.appendChild(messageText); var iMessage = document.createElement('textarea'); iMessage.setAttribute('id', 'taf_message'); iMessage.setAttribute('rows', '5'); iMessage.setAttribute('rows', '25'); iMessage.setAttribute('name', 'message'); divMessage.appendChild(lblMessage); divMessage.appendChild(iMessage); // Form Page Title var iPageTitle = document.createElement('input'); iPageTitle.setAttribute('type', 'hidden'); iPageTitle.setAttribute('id', 'taf_page_title'); iPageTitle.setAttribute('name', 'tafPageTitle'); iPageTitle.setAttribute('value', tafPageTitle); // Form Page Link var iPageLink = document.createElement('input'); iPageLink.setAttribute('type', 'hidden'); iPageLink.setAttribute('id', 'taf_page_link'); iPageLink.setAttribute('name', 'tafPageLink'); iPageLink.setAttribute('value', tafPageLink); // Form Page Language var iPageLang = document.createElement('input'); iPageLang.setAttribute('type', 'hidden'); iPageLang.setAttribute('id', 'taf_page_lang'); iPageLang.setAttribute('name', 'tafPageLang'); iPageLang.setAttribute('value', tafLanguage); fieldSet.appendChild(divMessage); fieldSet.appendChild(iPageTitle); fieldSet.appendChild(iPageLink); // Div Buttons var divButtons = document.createElement('div'); divButtons.setAttribute('id', 'buttons'); // Div Buttons / Send var pSend = document.createElement('p'); YAHOO.util.Dom.addClass(pSend, 'bt_send'); var aSend = document.createElement('a'); aSend.setAttribute('href','javascript:void(0);'); aSend.setAttribute('title', TXT_SEND_MESSAGE); aSend.setAttribute('id','tafSendButton'); YAHOO.util.Event.addListener(aSend, 'click', Taf.send); var sendText = document.createTextNode(TXT_SEND); aSend.appendChild(sendText); pSend.appendChild(aSend); divButtons.appendChild(pSend); // Div Buttons / Cancel var pCancel = document.createElement('p'); YAHOO.util.Dom.addClass(pCancel, 'btn_cancel'); pCancel.setAttribute('id', 'cancel'); var aCancel = document.createElement('a'); aCancel.setAttribute('href','javascript:void(0);'); aCancel.setAttribute('id','tafCancelButton'); YAHOO.util.Event.addListener(aCancel, 'click', Taf.hideForm); var cancelText = document.createTextNode(TXT_CANCEL); aCancel.appendChild(cancelText); pCancel.appendChild(aCancel); divButtons.appendChild(pCancel); fTafForm.appendChild(divButtons); // Popups var divPopup = document.createElement('div'); divPopup.setAttribute('id', 'tafPopupContainer'); YAHOO.util.Dom.addClass(divPopup, 'popup'); // Popups / Wait var pWait = document.createElement('p'); pWait.setAttribute('id', 'waitMsg'); YAHOO.util.Dom.addClass(pWait, 'waiting'); var waitText = document.createTextNode(TXT_WAIT); pWait.appendChild(waitText); divPopup.appendChild(pWait); // Popups / Done var pDone = document.createElement('p'); pDone.setAttribute('id', 'doneMsg'); YAHOO.util.Dom.addClass(pDone, 'over'); var doneText = document.createTextNode(TXT_DONE); pDone.appendChild(doneText); var aOk = document.createElement('a'); aOk.setAttribute('href', 'javascript:void(0);'); YAHOO.util.Event.addListener(aOk, 'click', Taf.hideForm); var okText = document.createTextNode('OK'); aOk.appendChild(okText); pDone.appendChild(aOk); divPopup.appendChild(pDone); fTafForm.appendChild(divPopup); divTafBox.appendChild(fTafForm); var divOptions = YAHOO.util.Dom.get('options'); divOptions.parentNode.insertBefore(divTafBox, divOptions); }; //////////////////////////////////////////////////////////////////////////////// /* AJAX */ // {{{ Constants Taf.ERROR_SEND_MAIL = parseInt('00000001', 2); Taf.ERROR_SENDER_NAME = parseInt('00000010', 2); Taf.ERROR_SENDER_EMAIL = parseInt('00000100', 2); Taf.ERROR_RECIP_NAME = parseInt('00001000', 2); Taf.ERROR_RECIP_EMAIL = parseInt('00010000', 2); Taf.ERROR_MESSAGE = parseInt('00100000', 2); Taf.RFC2822_PATTERN = new RegExp(/(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/); Taf.waitClass = { filter: 'alpha(opacity=30)', moz_opacity: '0.30', opacity: '0.30' } Taf.noWaitClass = { filter: 'alpha(opacity=100)', moz_opacity: '1.00', opacity: '1.00' } // {{{ Static Methods Taf.send = function() { Taf.disableForm(); Taf.showWaitMsg(); // Set Page Title (IE seems to miss them from time to time) var iPageTitle = YAHOO.util.Dom.get('taf_page_title'); iPageTitle.setAttribute('value', tafPageTitle); // Form Page Link (IE seems to miss them from time to time) var iPageLink = YAHOO.util.Dom.get('taf_page_link'); iPageLink.setAttribute('value', tafPageLink); /* Setting Form */ var tafForm = YAHOO.util.Dom.get('taf_form'); YAHOO.util.Connect.setForm(tafForm); /* Validate Form */ var sFormData = YAHOO.util.Connect._sFormData.toString(); var formError = Taf.validateForm(sFormData); Taf.showError(formError); if(formError == 0) { /* Process form */ YAHOO.util.Connect.asyncRequest('POST', '/services/taf.php', Taf.callback); } else { Taf.enableForm(); Taf.hideMessages(); } }; Taf.showWaitMsg = function() { YAHOO.util.Dom.get('doneMsg').style.display = 'none'; YAHOO.util.Dom.get('waitMsg').style.display = 'block'; YAHOO.util.Dom.get('tafPopupContainer').style.display = 'block'; } Taf.showDoneMsg = function() { YAHOO.util.Dom.get('waitMsg').style.display = 'none'; YAHOO.util.Dom.get('doneMsg').style.display = 'block'; YAHOO.util.Dom.get('tafPopupContainer').style.display = 'block'; }; Taf.hideMessages = function() { YAHOO.util.Dom.get('waitMsg').style.display = 'none'; YAHOO.util.Dom.get('doneMsg').style.display = 'none'; YAHOO.util.Dom.get('tafPopupContainer').style.display = 'none'; }; Taf.disableForm = function() { var tafForm = YAHOO.util.Dom.get('taf_form'); var tafFieldSet = YAHOO.util.Dom.get('tafFieldSet'); var tafSendButton = YAHOO.util.Dom.get('tafSendButton'); var tafCancelButton = YAHOO.util.Dom.get('tafCancelButton'); var tafCancel = YAHOO.util.Dom.get('cancel'); var waitMsg = YAHOO.util.Dom.get('waitMsg'); // disable send button //tafSendButton.setAttribute('href', ''); YAHOO.util.Event.removeListener(tafSendButton, 'click'); // disable cancel button //tafCancelButton.setAttribute('href', ''); YAHOO.util.Event.removeListener(tafCancelButton, 'click'); YAHOO.util.Dom.setStyle(tafFieldSet, 'fliter', Taf.waitClass.filter); // Grey form YAHOO.util.Dom.setStyle(tafFieldSet, '-moz-opacity', Taf.waitClass.moz_opacity); // Grey form YAHOO.util.Dom.setStyle(tafFieldSet, 'opacity', Taf.waitClass.opacity); // Grey form YAHOO.util.Dom.setStyle(tafSendButton, 'fliter', Taf.waitClass.filter); // Grey send button YAHOO.util.Dom.setStyle(tafSendButton, '-moz-opacity', Taf.waitClass.moz_opacity); // Grey send button YAHOO.util.Dom.setStyle(tafSendButton, 'opacity', Taf.waitClass.opacity); // Grey send button YAHOO.util.Dom.setStyle(tafCancel, 'fliter', Taf.waitClass.filter); // Grey cancel button YAHOO.util.Dom.setStyle(tafCancel, '-moz-opacity', Taf.waitClass.moz_opacity); // Grey cancel button YAHOO.util.Dom.setStyle(tafCancel, 'opacity', Taf.waitClass.opacity); // Grey cancel button }; Taf.enableForm = function() { var tafForm = YAHOO.util.Dom.get('taf_form'); var tafFieldSet = YAHOO.util.Dom.get('tafFieldSet'); var tafSendButton = YAHOO.util.Dom.get('tafSendButton'); var tafCancelButton = YAHOO.util.Dom.get('tafCancelButton'); var tafCancel = YAHOO.util.Dom.get('cancel'); var waitMsg = YAHOO.util.Dom.get('waitMsg'); YAHOO.util.Dom.setStyle(tafFieldSet, 'fliter', Taf.noWaitClass.filter); YAHOO.util.Dom.setStyle(tafFieldSet, '-moz-opacity', Taf.noWaitClass.moz_opacity); YAHOO.util.Dom.setStyle(tafFieldSet, 'opacity', Taf.noWaitClass.opacity); YAHOO.util.Dom.setStyle(tafSendButton, 'fliter', Taf.noWaitClass.filter); YAHOO.util.Dom.setStyle(tafSendButton, '-moz-opacity', Taf.noWaitClass.moz_opacity); YAHOO.util.Dom.setStyle(tafSendButton, 'opacity', Taf.noWaitClass.opacity); YAHOO.util.Dom.setStyle(tafCancel, 'fliter', Taf.noWaitClass.filter); YAHOO.util.Dom.setStyle(tafCancel, '-moz-opacity', Taf.noWaitClass.moz_opacity); YAHOO.util.Dom.setStyle(tafCancel, 'opacity', Taf.noWaitClass.opacity); // disable send button tafSendButton.setAttribute('href', 'javascript:void(0);'); YAHOO.util.Event.addListener(tafSendButton, 'click', Taf.send); // disable cancel button tafCancelButton.setAttribute('href', 'javascript:void(0);'); YAHOO.util.Event.addListener(tafCancelButton, 'click', Taf.hideForm); }; Taf.validateForm = function(sFormData) { var errorCode = 0; var oFormData = new Object(); var aFormData = sFormData.split('&'); for(var i = 0 ; i < aFormData.length ; i++) { var keyValue = aFormData[i].split('='); var key = keyValue[0]; var value = escape(unescape(keyValue[1]).replace(/^[\s\u3000]+|[\s\u3000]+$/g, '')); oFormData[key] = value; } if(false == oFormData['fromName'] || '' == oFormData['fromName'] || undefined == oFormData['fromName']) { errorCode |= Taf.ERROR_SENDER_NAME; } if(false == oFormData['fromEmail'] || '' == oFormData['fromEmail'] || undefined == oFormData['fromEmail'] || !oFormData['fromEmail'].match(Taf.RFC2822_PATTERN)) { errorCode |= Taf.ERROR_SENDER_EMAIL; } if(false == oFormData['toName'] || '' == oFormData['toName'] || undefined == oFormData['toName']) { errorCode |= Taf.ERROR_RECIP_NAME; } if(false == oFormData['toEmail'] || '' == oFormData['toEmail'] || undefined == oFormData['toEmail'] || !oFormData['toEmail'].match(Taf.RFC2822_PATTERN)) { errorCode |= Taf.ERROR_RECIP_EMAIL; } return errorCode; }; Taf.showResult = function(errorResponse) { errorCode = { sendMail: new Boolean(errorResponse & Taf.ERROR_SEND_MAIL), fromName: new Boolean(errorResponse & Taf.ERROR_SENDER_NAME), fromEmail: new Boolean(errorResponse & Taf.ERROR_SENDER_EMAIL), toName: new Boolean(errorResponse & Taf.ERROR_RECIP_NAME), toEmail: new Boolean(errorResponse & Taf.ERROR_RECIP_EMAIL), message: new Boolean(errorResponse & Taf.ERROR_MESSAGE) }; Taf.hideMessages(); // Update Mail Error if(0 !== errorResponse && (true == errorCode.sendMail || isNaN(errorResponse))) { alert(TXT_UNKNOWN_ERROR); Taf.enableForm(); } if(0 === errorResponse) { Taf.showDoneMsg(); YAHOO.util.Dom.get('taf_form').reset(); } }; Taf.showError = function(errorResponse) { errorCode = { sendMail: new Boolean(errorResponse & Taf.ERROR_SEND_MAIL), fromName: new Boolean(errorResponse & Taf.ERROR_SENDER_NAME), fromEmail: new Boolean(errorResponse & Taf.ERROR_SENDER_EMAIL), toName: new Boolean(errorResponse & Taf.ERROR_RECIP_NAME), toEmail: new Boolean(errorResponse & Taf.ERROR_RECIP_EMAIL), message: new Boolean(errorResponse & Taf.ERROR_MESSAGE) }; // Update From Name Error var divFromName = YAHOO.util.Dom.get('tafFromName'); YAHOO.util.Dom.removeClass(divFromName, 'error'); if(true == errorCode.fromName) { YAHOO.util.Dom.addClass(divFromName, 'error'); } // Update From Email Error var divFromEmail = YAHOO.util.Dom.get('tafFromEmail'); YAHOO.util.Dom.removeClass(divFromEmail, 'error'); if(true == errorCode.fromEmail) { YAHOO.util.Dom.addClass(divFromEmail, 'error'); } // Update To Name Error var divToName = YAHOO.util.Dom.get('tafToName'); YAHOO.util.Dom.removeClass(divToName, 'error'); if(true == errorCode.toName) { YAHOO.util.Dom.addClass(divToName, 'error'); } // Update To Email Error var divToEmail = YAHOO.util.Dom.get('tafToEmail'); YAHOO.util.Dom.removeClass(divToEmail, 'error'); if(true == errorCode.toEmail) { YAHOO.util.Dom.addClass(divToEmail, 'error'); } // Update Message Error var divMessage = YAHOO.util.Dom.get('tafMessage'); YAHOO.util.Dom.removeClass(divMessage, 'error'); if(true == errorCode.message) { YAHOO.util.Dom.addClass(divMessage, 'error'); } }; Taf.callbackSuccess = function(o) { /* Process successful communication result */ var errorResponse = parseInt(o.responseText); Taf.showError(errorResponse); Taf.showResult(errorResponse); }; Taf.callbackFailure = function(o) { alert(/* Process communication failure */); Taf.enableForm(); }; Taf.callback = { failure: Taf.callbackFailure, success: Taf.callbackSuccess, arguments: [] }; Taf.init = function() { var tafButton = YAHOO.util.Dom.get('taf'); YAHOO.util.Event.purgeElement(tafButton, 'click'); YAHOO.util.Event.addListener(tafButton, 'click', Taf.showForm); };