﻿
// register namespace
if (!window.Eloqua) {
    window.Eloqua = {};
}

/*! Eloqua.tools */
Eloqua.tools = (function() {
	/*
	** formId - id of the form we are posting
	** url - url of the proxy (actual eloqua url is configured in the web.config
	** map - a map of the fields to be posted and the values which to post.
	*/
	function post(formId, url, config, callback) {
		var formData = $.extend({}, config.extraFields);
		mapFields(config, formData);

		$.ajax({
			type: 'POST',
			url: url,
			data: formData,
			success: callback,
			dataType: "html"
		});
	}

	function mapFields(config, formData) {
		initCart();

		for (var i in config.fieldMap) {
			var field = config.fieldMap[i];
			if (field.converter) {
				formData[field.eid] = Eloqua.tools[field.converter](field.id);
			} else if (field.id) {
				formData[field.eid] = getFieldValue(field.id);
			}
		}

		formData.ELQDataCardsID = getELQDataCardsID(formData);
		formData.Enquirydate = getEnquiryDate();
		getEnquirySourceFields(formData);
	}

	function getEnquirySourceFields(formData) {
		if (window.StudyGroup && StudyGroup.Campaign) {
			var values = StudyGroup.Campaign.values();
			formData.Enquirysourcecampaign = values.cc || "";
			formData.Enquirysourcechannel = values.ch || "";
			formData.Enquirysourcedetail = values.cid || "";
			formData.Enquirysourcetarget = values.cl || "";
		}
	}
	function getELQDataCardsID(formData) {
		return formData.Email + formData.Brand;
	}
	function getEnquiryDate() {
		var date = new Date();
		function pad(n) { return n > 9 ? n : "0" + n; }

		return pad((date.getMonth() + 1)) + "/" + pad(date.getDate()) + "/" + date.getFullYear();
	}

	function getFieldValue(id) {
		var $src = $(":input[name='" + id + "']"),
			el = $src[0];
		if (!el) {
			return "";
		}
		switch (el.tagName.toLowerCase()) {
			case "input":
			case "textarea":
				switch (el.type.toLowerCase()) {
					case "radio":
						return $(":input[name='" + id + "']:checked").val();
						break;
					case "checkbox":
						return $src.is(":checked") ? 1 : 0;
						break;
					default:
						return el.value;
				}
				break;
			case "select":
				return el.value == "" ? "" : el.options[el.selectedIndex].text;
				break;
		}
	}
	var cart = null;
	function initCart() {
		if (cart == null) {
			cart = jQuery.parseJSON($("#cart").val());
		}
	}
	function cartCourseConverter(id) {
		return getCourse(0);
	}

	function cartCentreConverter(id) {
		return getCentre(0).Name;
	}

	function cartStartDateConverter(id) {
		return getStartDate(0);
	}

	function cartConverter(id) {
		var courses = [],
			len = cart.length,
			i = 0, j = 0;
		while (i < len) {
			courses[j++] = getCourse(i) + ", " + getCentre(i).Name + ", " + getStartDate(i);
			i++;
		}
		return courses.join(";\n ") + "; \n\n" + getFieldValue(id);
	}

	function getCourse(index) {
		if (cart.length > 0) {
			return cart[index].Name;
		}
		return "";
	}
	function getCentre(index) {
		if (cart.length > 0) {
			return cart[index].Centres[cart[index].SelectedIndex];
		}
		return "";
	}
	function getStartDate(index) {
		if (cart.length > 0) {
			var centre = getCentre(index);
			return centre.StartDates[centre.SelectedIndex].Name;
		}
		return "";
	}

	function dateConverter(id) {
		// convert dd/mm/yyyy > mm/dd/yyyy
		var dmy = getFieldValue(id).split("/");
		if (dmy.length === 3) {
			return [dmy[1], dmy[0], dmy[2]].join("/");
		}
		return "";
	}

	function citizenshipConverter(id) {
		return getFieldValue(id) === "1" ? "Australian" : "";
	}
	// make some methods public
	return {
		post: post,
		dateConverter: dateConverter,
		citizenshipConverter: citizenshipConverter,
		cartCourseConverter: cartCourseConverter,
		cartCentreConverter: cartCentreConverter,
		cartStartDateConverter: cartStartDateConverter,
		cartConverter: cartConverter
	}

})();
