/********************************************************************************* * SugarCRM Community Edition is a customer relationship management program developed by * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc. * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU Affero General Public License version 3 as published by the * Free Software Foundation with the addition of the following permission added * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more * details. * * You should have received a copy of the GNU Affero General Public License along with * this program; if not, see http://www.gnu.org/licenses or write to the Free * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. * * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "Powered by * SugarCRM" logo. If the display of the logo is not reasonably feasible for * technical reasons, the Appropriate Legal Notices must display the words * "Powered by SugarCRM". ********************************************************************************/ (function() { //Do not double define if (SUGAR.EmailAddressWidget) return; var Dom = YAHOO.util.Dom; SUGAR.EmailAddressWidget = function(module) { if (!SUGAR.EmailAddressWidget.count[module]) SUGAR.EmailAddressWidget.count[module] = 0; this.count = SUGAR.EmailAddressWidget.count[module]; SUGAR.EmailAddressWidget.count[module]++; this.module = module; this.id = this.module + this.count; if (document.getElementById(module+'_email_widget_id')) document.getElementById(module+'_email_widget_id').value = this.id; SUGAR.EmailAddressWidget.instances[this.id] = this; } SUGAR.EmailAddressWidget.instances = {}; SUGAR.EmailAddressWidget.count = {}; SUGAR.EmailAddressWidget.prototype = { emailTemplate : '' + '' + ' ' + '' + '' + '' + '' + '', numberEmailAddresses : 0, replyToFlagObject : new Object(), verifying : false, enterPressed : false, tabPressed : false, emailView:"", emailIsRequired: false, tabIndex: -1, prefillEmailAddresses: function(tableId, o){ for (i = 0; i < o.length; i++) { o[i].email_address = o[i].email_address.replace(''', "'"); this.addEmailAddress(tableId, o[i].email_address, o[i].primary_address, o[i].reply_to_address, o[i].opt_out, o[i].invalid_email); } }, retrieveEmailAddress: function (event) { var callbackFunction = function success(data) { var vals = YAHOO.lang.JSON.parse(data.responseText); var target = vals.target; event = this.getEvent(event); if(vals.email) { var email = vals.email; if(email != '' && /\d+$/.test(target)) { var matches = target.match(/\d+$/); var targetNumber = matches[0]; var optOutEl = Dom.get(this.id + 'emailAddressOptOutFlag' + targetNumber); if(optOutEl) { optOutEl.checked = email['opt_out'] == 1 ? true : false; } var invalidEl = Dom.get(this.id + 'emailAddressInvalidFlag' + targetNumber); if(invalidEl) { invalidEl.checked = email['invalid_email'] == 1 ? true : false; } } } //Set the verified flag to true var index = /[a-z]*\d?emailAddress(\d+)/i.exec(target)[1]; var verifyElementFlag = Dom.get(this.id + 'emailAddressVerifiedFlag' + index); if(verifyElementFlag.parentNode.childNodes.length > 1) { verifyElementFlag.parentNode.removeChild(verifyElementFlag.parentNode.lastChild); } var verifiedTextNode = document.createElement('span'); verifiedTextNode.innerHTML = ''; verifyElementFlag.parentNode.appendChild(verifiedTextNode); verifyElementFlag.value = "true"; this.verifyElementValue = Dom.get(this.id +'emailAddressVerifiedValue' + index); this.verifyElementValue.value = Dom.get(this.id +'emailAddress' + index).value; this.verifying = false; // If Enter key or Save button was pressed then we proceed to attempt a form submission var savePressed = false; if(event) { var elm = document.activeElement || event.explicitOriginalTarget; if(typeof elm.type != 'undefined' && !(/_email_widget_add/.test(elm.id.toLowerCase())) && /submit|button/.test(elm.type.toLowerCase())) { savePressed = true; } } if(savePressed || this.enterPressed) { setTimeout("SUGAR.EmailAddressWidget.instances." + this.id + ".forceSubmit()", 2100); } else if(this.tabPressed) { Dom.get(this.id + 'emailAddressPrimaryFlag' + index).focus(); } } var event = this.getEvent(event); var targetEl = this.getEventElement(event); var index = /[a-z]*\d?emailAddress(\d+)/i.exec(targetEl.id)[1]; var verifyElementFlag = Dom.get(this.id + 'emailAddressVerifiedFlag' + index); this.verifyElementValue = Dom.get(this.id + 'emailAddressVerifiedValue' + index); verifyElementFlag.value = (trim(targetEl.value) == '' || targetEl.value == this.verifyElementValue.value) ? "true" : "false" //Remove the span element if it is present if(verifyElementFlag.parentNode.childNodes.length > 1) { verifyElementFlag.parentNode.removeChild(verifyElementFlag.parentNode.lastChild); } if(/emailAddress\d+$/.test(targetEl.id) && isValidEmail(targetEl.value) && !this.verifying && verifyElementFlag.value == "false") { verifiedTextNode = document.createElement('span'); verifyElementFlag.parentNode.appendChild(verifiedTextNode); verifiedTextNode.innerHTML = SUGAR.language.get('app_strings', 'LBL_VERIFY_EMAIL_ADDRESS'); this.verifying = true; var cObj = YAHOO.util.Connect.asyncRequest( 'GET', 'index.php?module=Contacts&action=RetrieveEmail&target=' + targetEl.id + '&email=' + targetEl.value, {success: callbackFunction, failure: callbackFunction, scope: this} ); } }, handleKeyDown: function (event) { var e = this.getEvent(event); var eL = this.getEventElement(e); if ((kc = e["keyCode"])) { this.enterPressed = (kc == 13) ? true : false; this.tabPressed = (kc == 9) ? true : false; if(this.enterPressed || this.tabPressed) { this.retrieveEmailAddress(e); if (this.enterPressed); this.freezeEvent(e); } } }, //handleKeyDown() getEvent :function (event) { return (event ? event : window.event); },//getEvent getEventElement : function (e) { return (e.srcElement ? e.srcElement: (e.target ? e.target : e.currentTarget)); },//getEventElement freezeEvent : function (e) { if (e.preventDefault) e.preventDefault(); e.returnValue = false; e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); return false; },//freezeEvent addEmailAddress : function (tableId, address, primaryFlag, replyToFlag, optOutFlag, invalidFlag) { if (this.addInProgress) return; this.addInProgress = true; if (!address) address = ""; var insertInto = Dom.get(tableId); var parentObj = insertInto.parentNode; var newContent = document.createElement("input"); var nav = new String(navigator.appVersion); var newContentPrimaryFlag; if(YAHOO.env.ua.ie){ newContentPrimaryFlag = document.createElement(""); }else{ newContentPrimaryFlag = document.createElement("input"); } var newContentReplyToFlag = document.createElement("input"); var newContentOptOutFlag = document.createElement("input"); var newContentInvalidFlag = document.createElement("input"); var newContentVerifiedFlag = document.createElement("input"); var newContentVerifiedValue = document.createElement("input"); var removeButton = document.createElement("img"); var tbody = document.createElement("tbody"); var tr = document.createElement("tr"); var td1 = document.createElement("td"); var td2 = document.createElement("td"); var td3 = document.createElement("td"); var td4 = document.createElement("td"); var td5 = document.createElement("td"); var td6 = document.createElement("td"); var td7 = document.createElement("td"); var td8 = document.createElement("td"); // set input field attributes newContent.setAttribute("type", "text"); newContent.setAttribute("name", this.id + "emailAddress" + this.numberEmailAddresses); newContent.setAttribute("id", this.id + "emailAddress" + this.numberEmailAddresses); newContent.setAttribute("tabindex", this.tabIndex); newContent.setAttribute("size", "30"); if(address != '') { newContent.setAttribute("value", address); } // remove button removeButton.setAttribute("id", this.id + "removeButton" + this.numberEmailAddresses); removeButton.setAttribute("class", "id-ff-remove"); removeButton.setAttribute("name", this.numberEmailAddresses); removeButton.eaw = this; removeButton.setAttribute("src", "index.php?entryPoint=getImage&themeName="+SUGAR.themes.theme_name+"&imageName=id-ff-remove.png"); removeButton.onclick = function(){this.eaw.removeEmailAddress(this.name);}; // set primary flag newContentPrimaryFlag.setAttribute("type", "radio"); newContentPrimaryFlag.setAttribute("name", this.id + "emailAddressPrimaryFlag"); newContentPrimaryFlag.setAttribute("id", this.id + "emailAddressPrimaryFlag" + this.numberEmailAddresses); newContentPrimaryFlag.setAttribute("value", this.id + "emailAddress" + this.numberEmailAddresses); newContentPrimaryFlag.setAttribute("enabled", "true"); // set reply-to flag newContentReplyToFlag.setAttribute("type", "radio"); newContentReplyToFlag.setAttribute("name", this.id + "emailAddressReplyToFlag"); newContentReplyToFlag.setAttribute("id", this.id + "emailAddressReplyToFlag" + this.numberEmailAddresses); newContentReplyToFlag.setAttribute("value", this.id + "emailAddress" + this.numberEmailAddresses); newContentReplyToFlag.setAttribute("enabled", "true"); newContentReplyToFlag.eaw = this; newContentReplyToFlag['onclick']= function() { var form = document.forms[this.eaw.emailView]; if (!form) { form = document.forms['editContactForm']; } var nav = new String(navigator.appVersion); if(nav.match(/MSIE/gim)) { for(i=0; iinput into the DOM parentObj.insertBefore(Dom.get('targetBody'), insertInto); // CL Fix for 17651 (added OR condition check to see if this is the first email added) if(primaryFlag == '1' || (this.numberEmailAddresses == 0)) { newContentPrimaryFlag.setAttribute("checked", 'true'); } if(replyToFlag == '1') { newContentReplyToFlag.setAttribute("checked", "true"); } if (replyToFlag == '1') { this.replyToFlagObject[newContentReplyToFlag.id] = true; } else { this.replyToFlagObject[newContentReplyToFlag.id] = false; } if(optOutFlag == '1') { newContentOptOutFlag.setAttribute("checked", 'true'); } if(invalidFlag == '1') { newContentInvalidFlag.setAttribute("checked", "true"); } newContent.eaw = this; newContent.onblur = function(e){this.eaw.retrieveEmailAddress(e)}; newContent.onkeydown = function(e){this.eaw.handleKeyDown(e)}; if (YAHOO.env.ua.ie) { // IE doesn't bubble up "change" events through the DOM. So we need to find events that are looking at our parent and manually push them down to here var emailcontainer = Dom.getAncestorByTagName(insertInto,'span'); var listeners = YAHOO.util.Event.getListeners(emailcontainer); if (typeof listeners != 'undefined' && listeners instanceof Array) { for (var i=0; i