/**
 * iTracker.js
 *
 * Handles the dynamic tracking of any javascript events or ajax calls.
 *
 * @author Chris Willmott <chris.willmott@gforces.co.uk>
 * @copyright G-Forces Web Management Ltd 2009
 * @see /classes/Util/ITracker.php
 * @see /templates/iTracker.html
 * @see /www/ajax.php
 */

/**
 * Sends a request to intellitracker to log dynamic events.
 * @param {String} itAction
 */
function itEvent( itAction, itParams ) {


	if ( typeof itAutoCarDetailId != 'undefined' || typeof itNewCarDetailId != 'undefined' ) {

		// Set vars
		if ( typeof itAutoCarDetailId != 'undefined' ) {
			// Used Cars
			var vehicleId = itAutoCarDetailId;
			var ajaxType = 'itGetVehicleDetails';
		} else {
			// New Cars
			var vehicleId = itNewCarDetailId;
			var ajaxType = 'itGetNewVehicleDetails';
		}

		// Gather vehicle information
		if ( isFinite( vehicleId ) ) {
			var target = baseHref +'ajax.php';
			var params = 'type=' + ajaxType + '&vehicleId=' + vehicleId;
			var getVehicleDetails = new Ajax.Request(target, {
				method: 'post',
				parameters: params,
				onSuccess: function( request ){
					// Evaluate JSON
					var script = 'var vehicle = ' + request.responseText;
					eval( script );

					// Encode PQRY
					/** @todo iterate instead */
					var pqry = encodeURIComponent(
						'bodyStyle='		+ vehicle.bodyStyle + '&' +
							'fuelType='			+ vehicle.fuelType + '&' +
							'marque='			+ vehicle.marque + '&' +
							'model='			+ vehicle.model + '&' +
							'price='			+ vehicle.price + '&' +
							'reg='				+ vehicle.reg + '&' +
							'transmission='		+ vehicle.transmission + '&' +
							'leadDestination='	+ vehicle.leadDestination + '&' +
							'siteArea='	        + vehicle.siteArea + '&' +
							'vehicleId='		+ vehicleId
					);

					// Track with intellitracker
					itTrack( pqry, itAction, itParams );
				}
				// No onFailure, simply ignore failures
			});
		}

	} else if ((typeof itCmsPageContentId != 'undefined') && (itCmsPageContentId != '')) {
		// Gather page information

		if ( isFinite( itCmsPageContentId ) ) {

			// AJAX
			var target = baseHref +'ajax.php';
			var params = 'type=itGetPageDetails&itCmsPageContentId='+itCmsPageContentId;
			var getPageDetails = new Ajax.Request(target, {
				method: 'post',
				parameters: params,
				onSuccess: function( request ){
					// Evaluate JSON
					var script = 'var page = ' + request.responseText;
					eval( script );

					// Encode PQRY
					/** @todo iterate instead */
					var pqry = encodeURIComponent(
						'pageTitle=' + page.title + '&' +
							'siteArea='	 + page.siteArea
					);

					// Track with intellitracker
					itTrack( pqry, itAction, itParams );

				}
			});

		}

	} else {
		// No car detail or page detail, just call the itTrack
		// This is more of a failsafe and will never normally be fired

		// Defaults
		var pqry = {
			siteArea : 'GROUP',
			medium   : 'web'
		};

		// Extract siteArea, medium and device (if available) from page pqry
		var pqryFromPage = unescape( window.pqry ).toQueryParams();
		if ( typeof pqryFromPage.siteArea != 'undefined' ) {
			pqry.siteArea = pqryFromPage.siteArea;
		}
		if ( typeof pqryFromPage.medium != 'undefined' ) {
			pqry.medium = pqryFromPage.medium;
		}
		if ( typeof pqryFromPage.device != 'undefined' ) {
			pqry.device = pqryFromPage.device;
		}

		itTrack( escape( Object.toQueryString( pqry ) ), itAction, itParams );


	}

}

/**
 * Get the tracking image from intellitracker
 * @param {string} pqry
 * @param {string} itAction
 * @param {object} itParams
 */
function itTrack( pqry, itAction, itParams ) {

	// Add the action
	pqry += encodeURIComponent( '&action=' + itAction );

	// Add any additonal parameters
	if ( itParams != null ) {
		for ( var key in itParams ) {
			if ( itParams.hasOwnProperty( key ) ) {
				pqry += encodeURIComponent( '&' + key + '=' + itParams[key] );
			}
		}
	}

	// Encode Virtual URI
	var virtualUri = encodeURIComponent( baseHref + 'clickEvent' );

	// Get tracking image from intellitracker
	var rand = Math.ceil( Math.random() * 1000000 );

	var iTrack = new Image();
	iTrack.src	= 'http://www.intelli-direct.com/cr/?'
		+ itAccountId
		+ '&'
		+ rand
		+ '&%20&'
		+ pqry
		+ '&iREGQry&iSale&0&0&0&0&0&0&%20&1500&'
		+ virtualUri
		+ '&2';

}

/**
 * Generate GUID
 * The GUID needs to be re-generated on each click to prevent duplicates
 */
function itGenerateGuid(){

	var target = baseHref + 'ajax.php';
	var params = 'type=itGenerateGuid';
	var generateGuid = new Ajax.Request(target, {
		method: 'post',
		asynchronous: false,
		parameters: params
	});

	return generateGuid.transport.responseText;

}

