
var wsTipafriendCaptchaInitialized = false;
var wsTipafriendError = false;

// Find out if jQuery and jQueryUI are installed:
if (typeof(jQuery)=="function") {
	if (typeof(jQuery().dialog)!="function") {
		alert("ws_tipafriend error: jQuery is present, but jQueryUI is not ('dialog' is missing). Please install jQueryUI, and try again.");
		wsTipafriendError = true;
	}
} else {
	alert("ws_tipafriend error: no jQuery is present.\n\nPlease install jQuery and jQueryUI (including 'dialog'), then try again.");
	wsTipafriendError = true;
};



// Initialize function
try {
	
	if (wsTipafriendError) {
		document.getElementById("tipafriend_link").style.display = "none";
	} else {
	
		jQuery(document).ready(function(){
			
			var tipafriendButtons = {};
			
			jQuery("#tipafriend_dialog").dialog({
				autoOpen: false,
				modal: true,
				resizable: false,
				width: 500,
				minHeight: 300,
				buttons: tipafriendButtons
			});
		
			jQuery("#tipafriend_link").click(function() {
				if (!wsTipafriendCaptchaInitialized) {
					// Load CAPTCHA before showing form. It's a synchronous request, this is.
					
					var senddata = {};
					senddata[tipafriend.settings.vWrap + "[mode]"] = "getcaptcha";
					
					var url = tipafriend.settings.requestURL;
					
					jQuery("#tipafriend_f_captcha, #tipafriend_captcha_reloadlink").hide();
					
					jQuery.ajax({
						async : true,
						url : url,
						type : 'POST',
						dataType : 'json',
						data : senddata,
						success : function(res) {
							if (typeof(res)=="object") {
								if (res.use == "yes") {
									jQuery("#tipafriend_captcha_reloadlink").html(res.cantread).show();
									jQuery("#tipafriend_f_captcha").show();
									jQuery("#tipafriend_captcha_placeholder").html(res.image);
								} else {
									jQuery("tr.tipafriend_captchaRow").remove();
								};
							};
						}
					});
					wsTipafriendCaptchaInitialized = true;
				};
				jQuery("#tipafriend_dialog").dialog("open");
			});
			
			jQuery("#tipafriend_form").find("input, textarea, button")
				.hover(
					function(){ 
						jQuery(this).addClass("ui-state-hover"); 
					},
					function(){ 
						jQuery(this).removeClass("ui-state-hover"); 
					})
				.focus(function(){
					jQuery(this).addClass("ui-state-active"); 
				})
				.blur(function(){
					jQuery(this).removeClass("ui-state-active");
				})
			;
		});
	}
} catch (e) {};

var tipafriend = {

	settings : {
		requestURL : "",
		vWrap : "",
		tipURL : "",
		msg : {
			tipSent : "",
			done : ""
		},
		errorMsg : {
			recipientName : "",
			yourName : "",
			mailError : "",
			serverError : "",
			communicationError : ""
		}
	},
	
	close : function(ref) {
		jQuery(ref).dialog("close");
		jQuery("#tipafriend_msg, #tipafriend_error").hide();
		jQuery("input[id^='tipafriend_f_']").removeClass("ui-state-error");
	},
		
	error : function(msg) {
		jQuery("#tipafriend_error_msg").html(msg);
		jQuery("#tipafriend_error").fadeIn(200);
	},
	
	send : function() {
		jQuery("#tipafriend_error").fadeOut(50);
		jQuery("#tipafriend_msg").hide();
		jQuery("input[id^='tipafriend_f_']").removeClass("ui-state-error");
		
		var senderName, senderMail;
		
		// From jquery.validate.js (by joern), contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
		var mailval = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i;
		
		// If the sender name/mail fields exist, we need to find out if they
		// have been filled out correctly.
		var senderNameField = jQuery("#tipafriend_f_sendername");
		if (senderNameField.length) {
			senderName = senderNameField.val();
			if (senderName == "") {
				jQuery("#tipafriend_f_sendername").addClass("ui-state-error");
				this.error(this.settings.errorMsg.yourName);
				return false;
			};
		};
		
		// Check sender e-mail address
		var senderMailField = jQuery("#tipafriend_f_sendermail");
		if (senderMailField.length) {
			senderMail = senderMailField.val();
			if (!mailval.test(senderMail)) {
				jQuery("#tipafriend_f_sendermail").addClass("ui-state-error");
				var emsg = this.settings.errorMsg.mailError;
				this.error(emsg.replace("%s", senderMail));
				return false;
			};
		};
		
		// Get CAPTCHA value, if the field exists
		var captcha = "";
		var captchaField = jQuery("#tipafriend_f_captcha");
		if (captchaField.length) {
			captcha = captchaField.val();
			if (captcha == "") {
				// We assume the field can't be empty. That would just be weird.
				captchaField.addClass("ui-state-error");
			};
		};
		
		var recipientName = jQuery("#tipafriend_f_recipientname").val();
		var recipientMail = jQuery("#tipafriend_f_recipientmail").val();
		var comment = jQuery("#tipafriend_f_comment").val();
		

		// Check the recipient name
		if (recipientName == "") {
			jQuery("#tipafriend_f_recipientname").addClass("ui-state-error");
			this.error(this.settings.errorMsg.recipientName);
			return false;
		};

		// Check recipient e-mail address
		if (!mailval.test(recipientMail)) {
			jQuery("#tipafriend_f_recipientmail").addClass("ui-state-error");
			var emsg = this.settings.errorMsg.mailError;
			this.error(emsg.replace("%s", recipientMail));
			return false;
		};
		
		// Set up an object for the POST data.
		var senddata = {};
		senddata[this.settings.vWrap + "[mode]"] = "sendtip";
		senddata[this.settings.vWrap + "[sendername]"] = senderName;
		senddata[this.settings.vWrap + "[sendermail]"] = senderMail;
		senddata[this.settings.vWrap + "[recipientname]"] = recipientName;
		senddata[this.settings.vWrap + "[recipientmail]"] = recipientMail;
		senddata[this.settings.vWrap + "[comment]"] = comment;
		senddata[this.settings.vWrap + "[captcha]"] = captcha;
		senddata[this.settings.vWrap + "[tipurl]"] = this.settings.tipURL;
		
		// Set up a parent placeholder for use inside the .ajax-block below
		var par = this;
			
		jQuery.ajax({
			error: function() { par.error(par.settings.errorMsg.communicationError); },
			success: function(jsonReturn) {
				var result = jsonReturn.result;
				var eMsg = jsonReturn.lastError;
				if (result == "1") {
					var smsg = par.settings.msg.tipSent;
					jQuery("#tipafriend_msg_msg").html(smsg.replace("%s", recipientMail));
					jQuery("tr.tipafriend_captchaRow").remove();
					jQuery("#tipafriend_msg").show();
					jQuery("input[id^='tipafriend_f_recipient']").val("");
				} else {
					par.error(par.settings.errorMsg.serverError + "<br/><br>" + eMsg);
					// Simulate click on the CAPTCHA link
					jQuery(".tx-srfreecap-pi2-cant-read a:first").click();
				}
			},
			url: par.settings.requestURL,
			data: senddata,
			type: "POST",
			dataType: "json",
			timeout: 10000
		});
	}
}


