

















(function($) {
$.ti.enquire = {

    html:   $([
				'<div id="swapableContent">',
                    '<h2><img src="/shared/resource/images/itinerary_planner/nz/text/overlay-headings/make-enquiry.png" height="28" alt="Make an enquiry" /></h2>',
                    '<p>To contact the providers from your Trip Planner directly, you can either telephone or email using the details listed here </p>',
                    '<div id="enquireTabs">',
                        '<ul>',
                            '<li><a href="#byEmail">By email</a></li>',
                            '<li><a href="#byPhone">By telephone</a></li>',
                        '</ul>',
                        '<div id="byEmail" class="tab">',
							'<p class="intro" id="emailIntro">*&nbsp;Email any of the providers you have chosen<br/>*&nbsp;Click those you wish to contact &amp; send your message<br/>*&nbsp;They will respond directly to you<br/>*&nbsp;We may not have all email details, so check the By Telephone tab for number</p>',
							'<form method="" action="" id="emailEnquiries">',
								'<div id="emailFrom">',
									'<label for="emailAddress">From:</label>',
									'<input type="text" id="emailAddress" />',
								'</div>',
								'<div id="emailTo">',
									'<h3>To:</h3>',
									'<ul id="emailToList">',
									'</ul>',
								'</div>',
								'<div id="emailEnquiryListings">',
									'<ul>',
										'<li><a href="#accommodationEnquiries">Accommodation</a></li>',
										'<li><a href="#seeAndDoEnquiries">Things to see & do</a></li>',
									'</ul>',
									'<fieldset id="emailEnquiryTabs" >',
										'<div id="accommodationEnquiries" class="tab">',
											'<p>Sorry, the accommodation items included in your Trip Planner have not supplied email contact details. Please take note of the contact telephone numbers listed here</p>',
										'</div>',
										'<div id="seeAndDoEnquiries" class="tab">',
											'<p>Sorry, the accommodation items included in your Trip Planner have not supplied email contact details. Please take note of the contact telephone numbers listed here</p>',
										'</div>',
									'</fieldset>',
								'</div>',
								'<fieldset id="emailMessage">',
									'<h3>Please type your message here</h3>',
									'<textarea id="emailText">',
										'Kind regards, ',
									'</textarea>',
									'<label for="sendCopy">',
										'<input type="checkbox" id="sendCopy" />',
										'Please send me a copy of this message',
									'</label>',
								'</fieldset>',
								'<input type="image" class="button" id="sendEnquiry" height="22" src="/shared/resource/images/itinerary_planner/nz/buttons/send-enquiry.png" alt="Send enquiry" />',
							'</form>',
                        '</div>',
                        '<div id="byPhone" class="tab">',
                            '<p id="phoneEnquiriesIntro" class="intro">The following providers can only take enquiries by telephone. Please take note of the contact telephone numbers listed here</p>',
                            '<p id="phoneEnquiriesAmount" class="intro"> The following providers can only take enquiries by telephone. Please take note of the contact telephone numbers listed here</p>',
							'<ul id="phoneEnquiries">',
								'<li id="phoneEnquiriesNone">All of the providers you have selected can be contacted directly by email  </li>',
							'</ul>',
                        '</div>',
                    '</div>',
                '</div>'
			].join('')),

    // Shown when a successful enquiry has been sent
    // TODO: Need to I18n this!
    successMessage: $(["<div id='swapableContent'>",
                       '<h2>Your enquiry has been sent</h2>',
                       "</div>"
                      ].join('')),

	phoneActivities: {},

	emailActivities: {},

    init: function() {
        // Set pop up link event
        $('#enquire').unbind('click.openEnquire')
			.bind('click.openEnquire', function(){
				$.ti.enquire.checkUserStatus();
        });
    },

	checkUserStatus: function() {
		if($.ti.tripData.trip.login) {
			$.ti.enquire.open();
		} else {
			$.ti.login.openDialogue();
			$.ti.login.afterLogin = function() {
				$.ti.popup.swapContent($.ti.enquire.html, "600px", function(){
						$.ti.enquire.createObjects();
						// Initialise overlay interactions
						$.ti.enquire.setUp();
					});
				};
		}
	},

	open: function() {
		$.ti.popup.init({
			content: $.ti.enquire.html,
			callback: $.ti.enquire.createObjects,
			width: '600px'
		});
		// Initialise overlay interactions
		$.ti.enquire.setUp();
	},

	setUp: function() {
		$('#emailSuccess').remove();

		// Submit button event
		$('#sendEnquiry').unbind('click.submitEnquiry');
		$('#sendEnquiry').bind('click.submitEnquiry', function(event) {

			event.preventDefault();
			// Remove "To" error messaging
			$.ti.enquire.removeToError();

			$.ti.validate.check('#emailEnquiries', {
				rules: {
					"emailAddress": {
						"required": "Please enter a valid email address here",
						"email": "Please enter a valid email address here"
					},

					"emailText": {
						"hasText": "Please enter a message"
					}
				},
				// Success or failure calls a function to check the "To" list - bahaviour too unique for this to make sense including it in usual validation
				success: $.ti.enquire.checkTo,
				failure: $.ti.enquire.checkTo
			});
		});

        $('#emailText').unbind('focus');
        $('#emailText').unbind('blur');


		// Create main tabs
		$.ti.enquire.setTabs(0);
		// Create email form sub tabs
		$('#emailEnquiryListings').tabs();
		// Set from email address
		$.ti.enquire.setFrom();
		// Set users name into default message in text area for email enquiry
		$.ti.enquire.setName();
		// Set the events for the "To" checkboxes
		$.ti.enquire.toEvents();
	},

	setTabs: function(tab) {
		$('#enquireTabs', $.ti.enquire.html).tabs({
			fx:{
				opacity: 'toggle',
				height: 'toggle'
			},
			selected: tab
		});
	},

	createObjects: function() {
		var activities, activity;

		// Reset activity objects
		$.ti.enquire.phoneActivities = {};
		$.ti.enquire.emailActivities = {};

		activities = {};

		if($.ti.tripData.trip.tripActivities) {
			for (activity in $.ti.tripData.trip.tripActivities.activity) {
				if($.ti.tripData.trip.tripActivities.activity.hasOwnProperty(activity)) {
					if($.ti.tripData.trip.tripActivities.activity[activity].actRowColumnDays) {
						if(!$.ti.tripData.trip.tripActivities.activity[activity].actEmail || ($.ti.tripData.trip.tripActivities.activity[activity].actEmail == '')) {
							if($.ti.tripData.trip.tripActivities.activity[activity].actTelephone){
								$.ti.utils.appendToObject($.ti.enquire.phoneActivities, $.ti.tripData.trip.tripActivities.activity[activity]);
							}
						} else {
							$.ti.utils.appendToObject($.ti.enquire.emailActivities, $.ti.tripData.trip.tripActivities.activity[activity]);
						}
					}
				}
			}
			$.ti.enquire.renderPhoneList();
			if(!$.ti.enquire.phoneActivities[0]){
				$('#phoneEnquiriesIntro').remove();
				$('#phoneEnquiriesAmount').remove();
			}
			else{
				$('#phoneEnquiriesNone').remove();
			}
			$.ti.enquire.renderEmailList();
		}
	},

	renderPhoneList: function() {
		var activity, li, activityCount;

		activityCount = $.ti.utils.objectLength($.ti.enquire.phoneActivities);

		$('#phoneCount').text = activityCount;

		if(activityCount > 0) {
			$('#phoneEnquiries').empty();

			for (activity in $.ti.enquire.phoneActivities) {
				if($.ti.enquire.phoneActivities.hasOwnProperty(activity)) {
					li = $(['<li>',
								'<h3>' + $.ti.enquire.phoneActivities[activity].actName + '</h3>',
								'<dl class="tel">',
									'<dt>Telephone: </dt>',
									'<dd>' + $.ti.enquire.phoneActivities[activity].actTelephone + '</dd>',
								'</dl>',
								'<dl class="address">',
									'<dt>Address: </dt>',
									'<dd>' + $.ti.enquire.phoneActivities[activity].actAddress + '</dd>',
								'</dl>',
							'</li>'
						].join(''));
					$('#phoneEnquiries').append(li);
				}
			}
			// Update company count span
			$('#companyCount').text(activityCount);
		}
	},

	renderEmailList: function() {

		var activity, accomLabel, activityLabel, accomBag, activityBag;

		accomBag = $('<div></div>');
		activityBag = $('<div></div>');


		function createItem(name) {
			return  $(['<label for="activity-' + $.ti.enquire.emailActivities[activity].actProductId + '">',
						'<input id="activity-' + $.ti.enquire.emailActivities[activity].actProductId
							+ '" type="checkbox" name="' + name
							+ '" title="'+$.ti.enquire.emailActivities[activity].actEmail
							+ '" />',
						$.ti.enquire.emailActivities[activity].actName,
					'</label>'
					].join(''));
		}

		function addToTab(bag, target) {
			if($('label', bag).length > 0) {
				$(target).empty()
					.append(bag);
			}
		}

		for(activity in $.ti.enquire.emailActivities) {
			if($.ti.enquire.emailActivities.hasOwnProperty(activity)) {
				if($.ti.enquire.emailActivities[activity].actCategory.match(/Accommodation/)) {
					accomLabel = createItem("accommodation");
					$(accomBag).append(accomLabel);
				} else {
					activityLabel = createItem("activities");
					$(activityBag).append(activityLabel);
				}
			}
		}

		addToTab(accomBag, '#accommodationEnquiries');
		addToTab(activityBag, '#seeAndDoEnquiries');

	},

	// Insert users email address into from field
	setFrom: function() {
		// Email address is stored as "username" in trip object
		$('#emailAddress').val($.ti.tripData.trip.login.username);
	},

	toEvents: function() {
		$('input', '#emailEnquiryTabs').live('click', function(event){
			$.ti.enquire.setTo(event);
			$.ti.enquire.removeToError();
		});
	},

	setTo: function(event) {
		if(event.target.checked) {
			$('#emailToList').append($('<li id="to' + event.target.id
				+'" title="'+event.target.title
				+'">' + $(event.target.parentNode).text() + '</li>').hide());
			$('#to' + event.target.id).fadeIn(500);
		} else {
			$('#to' + event.target.id).fadeOut(500, function(){
				$('#to' + event.target.id).remove();
			});
		}

	},

	checkTo: function(success) {
		var recipients = $('li', '#emailToList').length;
		if(recipients === 0) {
			$.ti.enquire.addToError();
		} else {
			if(!success.find('.error').length) {
				$.ti.enquire.submit();
			}
		}
	},

	addToError: function() {
		var message = $('<p id="toError" class="error">Please select who you would like to receive your enquiry</p>').hide();

		// Insert the message
		$('#emailToList').before(message);
		$(message).fadeIn(500);

		// Highlight the checkbox container
		$('#emailEnquiryTabs').animate({
			"background-color": "#b90c08"
		}, 500);
	},

	removeToError: function() {
		$('#toError').remove();
		$('#emailEnquiryTabs').animate({
			"background-color": "#ffffff"
		}, 500);
	},

	setName: function() {
		if(!$('#emailText', this.html).text().match($.ti.tripData.trip.login.firstname + ' ' + $.ti.tripData.trip.login.lastname)) {
			$('#emailText', this.html).append('\n\n'+$.ti.tripData.trip.login.firstname + ' ' + $.ti.tripData.trip.login.lastname);
		}
	},

	submit: function() {
		// Get From address
		$.ti.enquire.getFrom();
		// Add email ids to a trip node
		$.ti.enquire.getEmailIds();
		// Get message
		$.ti.enquire.getMessage();
		// Check if user requires copy
		$.ti.enquire.sendUserCopy();

        var names = $.ti.enquire.getHotelNames();
        var emails= $.ti.enquire.getEmails();
        var l = names.length;
        var loc = document.location.pathname;

        // TODO: REMOVE
        /*var dcsMultiTrack = function(urlN, url, titleN, title) {
            console.log('dcs url: ' + url);
            console.log('dcs title: ' + title);
        };*/

        var safeName	= null;
        var	emailDomain = null;
        var domain		= null
        for (var i = 0; i < l; ++i)
        {
            safeName = $.ti.makeSafeOnclickStr(names[i]);
            emailDomain = emails[i].split("@");
            if (emailDomain.length >= 2)
            	domain	= emailDomain[1];
            else
            	domain	= "null";

//			dcsMultiTrack ('DCS.dcsuri',
//				loc + '/' + safeName  + '/send_enquiry_3rd_party_referral',
//				'WT.ti',
//				safeName + ' -  Send Enquiry 3rd Party Referral'
//			);
            dcsMultiTrack (
				'DCS.dcsuri',					loc + 'trip_planner/enquiry_made',
            	'WT.ti',						'Trip Planner - Enquiry Made',
            	'WT.cg_n',						section,
            	'WT.cg_s',						subSection,
            	'DCSext.trip_planner_action',	'enquiry_made',
            	'DCSext.enquiry_to_3rd_party',	emails[i]			// domain
            	);
        }

		// Submit trip data
		$.ti.ajax.postData('/nz/trip/?tripId=' + $.ti.tripData.trip.id, $.ti.tripData, $.ti.enquire.success);
	},

	success: function(data) {
		var message = $('<p class="intro success" id="emailSuccess">Thank you, your message has been submitted</p>').hide();
		$('#emailIntro').after(message);
		$(message).slideDown(500);
		$.ti.panel.saveTripAndPromos(data, $.ti.panel.useTripData);

        // Transition to a success dialog...
        $.ti.popup.swapContent($.ti.enquire.successMessage, '360px', function() { });
	},

	// Get the from address of the user if different to default
	getFrom: function() {
		if($('#emailFrom').val() !== $('#emailFrom').defaultValue) {
			$.ti.tripData.trip.fromEmail = $('#emailFrom').val();
		}
	},

	// Get email activity ids from the "to" list and append to trip object
	getEmailIds: function() {
		var ids = "";

		$('li', '#emailToList').each(function() {
			// Return only the original activity id from the extended string id in the list
			ids += this.id.substring(11) +', ';
		});
		$.ti.tripData.trip.enquiryIDs = ids;
	},

    getHotelNames: function() {
        var names = [];
        $('li', '#emailToList').each(function() {
            names.push($(this).text());
        });

        return names;
    },

    getEmails: function() {
        var emails = [];
        $('li', '#emailToList').each(function() {
            emails.push(this.title);
        });

        return emails;
    },

	// Get body of email message and append to trip objec
	getMessage: function() {
		$.ti.tripData.trip.emailMessage = $('#emailText').val();
	},

	sendUserCopy: function() {
		$.ti.tripData.trip.ccUser = $('#sendCopy').is(':checked');
	}

};
})(jQuery);
