var MAIL_FRIEND_FORM_PREFIX = 'emailfriend_';
var MAIL_FRIEND_CONTAINER_PREFIX = 'emailfriend_container_';

function initMailFriendGroup(servletPath, siteId, locale, pageId, groupId, SSID, pos, msgMode, layerId, prefill, userData) {
	Event.observe(window, 'load', function() {
		// onclick for send button
		$$('#'+MAIL_FRIEND_CONTAINER_PREFIX+groupId+' .btn_send').each(function(item){
			Event.observe(item, 'click', function(event) {
				event.preventDefault();
				mailFriendPerAjax(servletPath, siteId, locale, pageId, groupId, SSID, pos, msgMode, layerId, prefill, userData);
			});
		});
		
		resetMailGroupContents(groupId, prefill, userData);
		
		$$('#emailfriend_success_'+groupId+'ButtonOk').each(function(item){
			Event.observe(item, 'click', function(event) {
				if(item.up('.emailfriend_success'))
					item.up('.emailfriend_success').hide();
					resetMailGroupContents(groupId, prefill, userData);
			});
		});
		if (layerId != null && layerId != '') {
			var layerObj = window[layerId];
			if (layerObj) {
				layerObj.oldFunc = layerObj.ShowLayer;
				layerObj.ShowLayer = function() {
						resetMailGroupContents(groupId, prefill, userData);
						fireCMConversionEventTag(MAIL_FRIEND_FORM_PREFIX+groupId, '1');
						layerObj.oldFunc();
				};
			}
		}
	});
}

/* Fires a coremetrics conversion event, if the event id has been added as an hidden input field.
 * Maybe it can be transfered to global-utils later.
 */
function fireCMConversionEventTag(formName, actionType) {
	var cmConvEventId = null;
	var cmConvCat = null;
	Form.getInputs($(formName), 'hidden').each(function(item) {
		if (item.name=='cm_convev_id') {
			cmConvEventId = $F(item);
		} else if (item.name=='cm_convev_cat') {
			cmConvCat = $F(item);
		}
	});
	if (cmConvEventId != null && cmConvEventId != '') {
		try {
			cmCreateConversionEventTag(cmConvEventId, actionType, cmConvCat);
		} catch (err) { 
			if(typeof(console) !== 'undefined' && console != null) { console.error(err); }
		}
	}
}

function mailFriendPerAjax(servletPath, siteId, locale, pageId, groupId, SSID, pos, msgMode, layerId, prefill, userData) {
	var url = servletPath+'/servlet/AjaxActionServlet?';
	url += 'siteid='+siteId;
	url += '&locale='+locale;
	url += '&pageId='+pageId;
	url += '&ssid='+SSID;
	url += '&pos='+pos;
	url += '&action=mailFriend';

	url = addFormElementsToUrl(url, MAIL_FRIEND_FORM_PREFIX+groupId);

	showAjaxWaitingScreen('emailfriend_waiting_'+groupId);
	new Ajax.Request(url, {
		method: 'post',
		onComplete: function() {
			hideAjaxWaitingScreen('emailfriend_waiting_'+groupId);
		},
		onSuccess: function(response) {
			clearDAVEErrors($(MAIL_FRIEND_CONTAINER_PREFIX+groupId));
			mailFriendPerAjaxComplete(siteId, locale, groupId, response, msgMode, layerId, prefill, userData, servletPath);
		}
	});

}

function mailFriendPerAjaxComplete(siteId, locale, groupId, response, msgMode, layerId, prefill, userData, servletPath) {
	var xmlDoc = response.responseXML;
	if(xmlDoc) {
		var elem = xmlDoc.firstChild;
		if(elem) {
			var code = elem.getAttribute("code");
			if (code != '0') {
				var errors = elem.getElementsByTagName('Errors');
				var errorClass = (errors && errors.length > 0 ) ? errors[0].getAttribute('Class') : null;
				if (errorClass &&  errorClass=='-1') {
					var error = errors[0].getElementsByTagName('Error');
					var errCode = (error && error.length > 0) ? error[0].getAttribute('Code') : null;
					var msg = 'A technical error occured.';
					if (errCode) msg += ' Code: '+errCode;
					alert(msg);
				} else {
					showDaveError($(MAIL_FRIEND_CONTAINER_PREFIX+groupId), elem, true, $(MAIL_FRIEND_FORM_PREFIX+groupId), true);
					if(document.getElementById('captcha_Img')) {
						document.getElementById('captcha_Img').src= servletPath + '/servlet/captchaServlet?siteid=' + siteId + '&locale=' + locale + '&;x=' + Math.random()*5;
					}
				}
			} else {
				if(msgMode  == 'inline') {
					htmlElementOpen('emailfriend_'+groupId+'_success');
					var timer = setTimeout("Effect.Fade('emailfriend_"+groupId+"_success', { duration: 2.0 });", 6000);
				} else {
					// if the group is already shown in a layer, close it before showing the success message in a new one
					// also fire the cm conversion event tag, if configured
					if (layerId != null && layerId != '') {
						fireCMConversionEventTag(MAIL_FRIEND_FORM_PREFIX+groupId, '2');
						var layerObj = window[layerId];
						if (layerObj) {
							layerObj.HideLayer();
						}
					}
					showSimpleModalDialog('emailfriend_success_'+groupId);
				}
				resetMailGroupContents(groupId, prefill, userData, servletPath, siteId, locale);
			}
		}
	}
}

function resetMailGroupContents(groupId, prefill, userData, servletPath, siteId, locale) {
	var formElem = $(MAIL_FRIEND_FORM_PREFIX+groupId);
	// reset the form
	Form.reset(formElem);
	// remove all error messages
	var groupDiv = $('emailfriend_container_'+groupId);
	if(groupDiv.down('.errors'))
		groupDiv.down('.errors').remove();
	// remove the error css classes
	formElem.select('fieldset.error').each(function(elem) {
		elem.removeClassName('error');
	});
	
	if (servletPath && siteId && locale) {
		if(document.getElementById('captcha_Img')) {
			document.getElementById('captcha_Img').src= servletPath + '/servlet/captchaServlet?siteid=' + siteId + '&locale=' + locale + '&;x=' + Math.random()*5;
		}
	}
	
	// prefill form fields with values from the logged in user
	if(prefill && userData) {
		prefillByLoggedInUser(prefill, userData);
	}
}


