/**
* populate.js
* 
* Populates the template by retrieving a JSON data feed and using the values
* contained within to set various src,link urls,tracking and offer rotation 
* options. 
*
*/
/**
* The overall page data object.  Holds everything that comes back in the json feed.
*/
var PAGE_DATA= new Object();

/**
* The global hero offers. 1-6 in this usually.
*/
var OFFERS = new Array();
/**
* The model cards that live near the middel to bottom of the page and have an informational
* popup on mouseover.
*/
var MODEL_CARDS = new Array();
/**
* Set to true in order to enable a rotating offer background
*/
var ROTATE_OFFER_BG = false;

/* Rotation helper values for the main offer (except B1) */
var ROTATION_COUNTER = 0;
var ROTATION_STOPPED = false;
var ROTATION_PAUSED = false;

/**
* Add a DC activity tracking onclick handler to the link.
*
* @param link_id The link to add the onclick to.  Just the id no '#' or anything.
* @param tracking_type The code that will be used when the tracking is fired. 
* @param tracking_cat The second part of the trakcing code 
* @param event_type The type of event to fire on (click,mouseover,etc)
*/
function addActivityTrackingPixel(link_id,tracking_type,tracking_cat,event_type){
	$("#" + link_id).bind(event_type,function(){
		/* defined in the main template */
		changeActivityTrackerPixel(tracking_type,tracking_cat);
	});
}
/**
* Add a WT activity tracking onclick handler to the link.
*
* @param link_id The link to add the onclick to.  Just the id no '#' or anything.
* @param tracking_url The code that will be used when the tracking is fired. 
* @param tracking_title The second part of the tracking code 
* @param tracking_content_group The second part of the tracking code 
* @param event_type The type of event to fire on (click,mouseover,etc)
*/
function addWTTrackingPixel(link_id,tracking_url,tracking_title, tracking_content_group,event_type){
	$("#" + link_id).bind(event_type,function(){
		/* defined in the main template */
		trackCall(tracking_url,tracking_title, tracking_content_group);
	});	
}
/**
* Returns an array of DC tracking parts after spliting the value on 
* a ";".  
*
* If the array is less than 2 in length the array is padding with an empty string.
*/
function splitTrackingCodes(code){
	var parts = code.split(";");
	if(parts.length == 1){
		parts.push("");
	}
//	console.log("parts.length:[" + parts.length + "][" + parts[0] + "][" + parts[1] + "]");
	return parts;
}
/**
* Returns an array of WT tracking parts after spliting the value on 
* a ";".  
*
* If the array is less than 3 in length the array is padding with an empty string.
*/
function splitWTTrackingCodes(code){
	var parts = code.split(";");
	while(parts.length < 3){
		parts.push("");
	}
	//console.log("parts.length:[" + parts.length + "][" + parts[0] + "][" + parts[1] + "][" + parts[2] + "]");
	return parts;
}
/**
* Rotate the main offer.  Fades out the old one, then fades in the new one.
* The fade and rotation times are set in the index.html file that calls this js.
*/
function doOfferChange(changeTo){
	$("#offerImg_" + ROTATION_COUNTER).fadeOut(OFFER_FADE_SPEED,function(){
		$("#control_" + ROTATION_COUNTER).attr("src","img/slideshow-btn.gif");		
		if(changeTo == null){
			ROTATION_COUNTER++;	
		}else{
			ROTATION_COUNTER = changeTo;
		}

		if(ROTATION_COUNTER == OFFERS.length){
			ROTATION_COUNTER=0;
		}
		$("#offerImg_" + ROTATION_COUNTER).fadeIn(OFFER_FADE_SPEED);
		$("#control_" + ROTATION_COUNTER).attr("src","img/slideshow-btn-current.gif");		
		setTimeout(function(){
			rotationController(false);
		},OFFER_ROTATION_SPEED);
	});
}

/**
* Main offer rotation controller.
*/
function rotationController(first_run){
	/* if we are in a paused state then try again later */
	if(ROTATION_STOPPED){
		return;
	}
	if(ROTATION_PAUSED){
		setTimeout(function(){
			rotationController(false);
		},OFFER_ROTATION_SPEED/2);
		return;
	}
	if(first_run){
		$("#offerImg_" + ROTATION_COUNTER).fadeIn(FADE_SPEED);
		setTimeout(function(){
			rotationController(false);
		},OFFER_ROTATION_SPEED);
	}else{
		doOfferChange(null);
	}
}

/**
* Does all the loading, parsing and populating in one big monolithic go.
*/
$(document).ready(function() {
	$.ajax({type: "get",
		url: DATA_URL ,
		dataType: "json",
		success: function(data){
			
			OFFERS = data.main_offers; 
			MODEL_CARDS = data.model_cards;		
			//ROTATE_OFFER_BG = (data.rotate_background_image.toLowerCase() === "true");
			
			//STUFF
			$("#template_version").html(data.template_version);
			$("#market").html(data.market);
			//MARKET LOGO
			$("#market_logo").attr("src",data.market_logo.src);
			$("#market_logo").attr("alt",data.market_logo.alt_text);
			$("#market_logo").fadeIn(FADE_SPEED);
			//PAGE TITLE
			document.title = "MINI: " + data.market_logo.alt_text;
			//DEFAULT BACKGROUND IMAGE
			$("#mainOfferContainer").hide();
			$("#mainOfferContainer").css("backgroundImage","url(" +data.default_background_image  + ")");
			$("#mainOfferContainer").fadeIn(FADE_SPEED);
			
			///DEALERS NEAR YOU
			if(TEMPLATE_CODE == "C"){
				$("#dealersNearYou").attr("src",data.dealers_near_you.src);
				$("#dealersNearYou").attr("alt",data.dealers_near_you.alt_text);
				$("#dealersNearYou").fadeIn(FADE_SPEED);
			}

			//DEALER LINK
			$("#dealerLinkLinkUrl").attr("href",data.dealer_link.link_url);
			var dlt = splitTrackingCodes(data.dealer_link.tracking_code_1);
			addActivityTrackingPixel("dealerLinkLinkUrl",dlt[0],dlt[1],"click");
			
			var dlwt =  splitWTTrackingCodes(data.dealer_link.tracking_code_2);
			addWTTrackingPixel("dealerLinkLinkUrl",dlwt[0],dlwt[1],dlwt[2],"click");		
			$("#findDealerBtn").fadeIn(FADE_SPEED);
			
			//PUT TRACKING ON CONFIGURATOR MINI LINK
			var clt = splitTrackingCodes(data.configurator_link_tracking.tracking_code_1);
			addActivityTrackingPixel("configuratorLink",clt[0],clt[1],"click");
			var clwt =  splitWTTrackingCodes(data.configurator_link_tracking.tracking_code_2);		
			addWTTrackingPixel("configuratorLink",clwt[0],clwt[1],clwt[2],"click");		
			$("#buildMiniBtn").fadeIn(FADE_SPEED);

			//PROMO BRICK LEFT			
			var promoBrickLeft = '<div class="floatLeft">';
			
			if(data.promo_brick_left.link_url.length > 0){
				promoBrickLeft += '<a href="' + data.promo_brick_left.link_url + '" target="_blank" id="promoLeftLink">'
			}			
			//alert(data.promo_brick_left.src);
			promoBrickLeft += '<img src="' + data.promo_brick_left.src + '" width="426" height="100" alt="' + data.promo_brick_left.alt_text + '" border="0" style="display:none;" id="promoLeftImg" />'		
			if(data.promo_brick_left.link_url.length > 0){
				promoBrickLeft += '</a>';
			}	

			promoBrickLeft += '</div>';
			//alert(promoBrickLeft);
			$("#botPromoContainer").append(promoBrickLeft);
			if(data.promo_brick_left.link_url.length > 0){
				var pblt = splitTrackingCodes(data.promo_brick_left.tracking_code_1);		
				addActivityTrackingPixel("promoLeftLink",pblt[0],pblt[1],"click");
				var pbwt =  splitWTTrackingCodes(data.promo_brick_left.tracking_code_2);		
				addWTTrackingPixel("promoLeftLink",pbwt[0],pbwt[1],pbwt[2],"click");	
			}		
			$("#promoLeftImg").fadeIn(FADE_SPEED);
		
			
			//PROMO BRICK RIGHT
			var promoBrickRight = "";
			var promoBrickRight = '<div class="floatLeft">';
			
			if(data.promo_brick_right.link_url.length > 0){
				promoBrickRight += '<a href="' + data.promo_brick_right.link_url + '" target="_blank" id="promoRightLink">'
			}			
			//alert(data.promo_brick_left.src);
			promoBrickRight += '<img src="' + data.promo_brick_right.src + '" width="426" height="100" alt="' + data.promo_brick_right.alt_text + '" border="0" style="display:none;" id="promoRightImg" />'	
			if(data.promo_brick_right.link_url.length > 0){
				promoBrickRight += '</a>';
			}	

			promoBrickRight += '</div>';
			$("#botPromoContainer").append(promoBrickRight);
			if(data.promo_brick_right.link_url.length > 0){
				var pblt = splitTrackingCodes(data.promo_brick_right.tracking_code_1);	
				addActivityTrackingPixel("promoRightLink",pblt[0],pblt[1],"click");
				var pbwt =  splitWTTrackingCodes(data.promo_brick_right.tracking_code_2);		
				addWTTrackingPixel("promoRightLink",pbwt[0],pbwt[1],pbwt[2],"click");	
			}				
			$("#promoRightImg").fadeIn(FADE_SPEED);			
			
			$("#botPromoContainer").append('<div class="clearAll"></div>');
			
			/* Offers */
			var offerCounter = 0;
			$.each(OFFERS,function(i,data){
				var offer = '';				   
				if(TEMPLATE_CODE == "B1"){
					offer += '<div id="offer' + offerCounter + '">';
					if(data.link_url.length > 0){
						offer += '<a href="'+ data.link_url +'" target="_blank" id="offerLink_' + offerCounter + '">';
					}
					offer += '<img src="'+ data.src +'" width="839" height="240" alt="' +  data.alt_text + '" border="0" style="display:none;" id="offerImg_' + offerCounter + '"/>';
					if(data.link_url.length > 0){
						offer += '</a>';
					}
					offer += '</div>';
				}

				if(TEMPLATE_CODE == "C"){
					if(data.link_url.length > 0){
						offer += '<a href="'+ data.link_url +'" target="_blank" id="offerLink_' + offerCounter + '">';
					}
					offer += '<img src="'+ data.src +'" width="324" height="159" alt="' +  data.alt_text + '" border="0" style="position:relative;left:0px;right:0px;display:none;" id="offerImg_' + offerCounter + '"/>';
					if(data.link_url.length > 0){
						offer += '</a>';
					}					
					
					/* Create the control for this image */
					var imageSrc = "img/slideshow-btn-current.gif";
					if(offerCounter > 0){
						imageSrc = "img/slideshow-btn.gif";
					}
					var control = "";
					control += '<img src="' + imageSrc + '" width="13" height="20" alt="" border="0" id="control_' + offerCounter + '" style="cursor:pointer"/>';					
					$("#featuresControl").append(control);
					$("#control_" + offerCounter).click(function(event){
						ROTATION_STOPPED = true;
						doOfferChange($(this).attr("id").split("_")[1]);
					});
				}
			
				
				$("#features").append(offer);
				if(data.link_url.length > 0){
					//console.log("ADDING offer tracking...");
					var pblt = splitTrackingCodes(data.tracking_code_1);	
					addActivityTrackingPixel("offerLink_" + offerCounter,pblt[0],pblt[1],"click");
					var pbwt =  splitWTTrackingCodes(data.tracking_code_2);	
					addWTTrackingPixel("offerLink_" + offerCounter,pbwt[0],pbwt[1],pbwt[2],"click");
					
				}
		
				$("#offerImg_" + offerCounter).mouseover(function(event){
					ROTATION_PAUSED = true;
				});
				$("#offerImg_" + offerCounter).mouseout(function(event){
					ROTATION_PAUSED = false;
				});
				offerCounter++;
				
			});
			if(TEMPLATE_CODE != "B1"){
				$("#mainOfferBoxInnerBox").css(data.main_offer_position,"18px");								
			}
			rotationController(true);
			$("#mainOfferBoxInnerBox").fadeIn(OFFER_FADE_SPEED);
			
			
			var currentModelCarSlot = 0;
			
			/* 
			* Model rollovers and cards 
			*/
			$.each(MODEL_CARDS,function(i,data){		
				
				var cardModelCount = 0;
				if(data.model_1.length>0){
					cardModelCount++;
				}
				if(data.model_2.length>0){
					cardModelCount++;
				}
				if(data.model_3.length>0){
					cardModelCount++;
				}
				if(data.model_4.length>0){
					cardModelCount++;
				}
			
				var thumb = '';
				var thumb_src_image = new Image();
				thumb_src_image.src = data.thumb_src;
				$(thumb_src_image).addClass("clickabletooltip");
				$("#offScreen").append(thumb_src_image);
				
				thumb += '<div style="float:right;overflow:hidden;" height="50" class="fifty"><img src="'+ data.thumb_src +'" id="modelThumb_' + i + '" style="cursor:pointer;margin-top:-50px;display:block;"></div>';		

				$("#carMenu").append(thumb);
				
				/* Tracking for rollover */
				var crlt = splitTrackingCodes(data.tracking_code_1);
				addActivityTrackingPixel("modelThumb_" + i,crlt[0],crlt[1],"mouseover");
				var pbwt =  splitWTTrackingCodes(data.tracking_code_2);	
				addWTTrackingPixel("modelThumb_" + i,pbwt[0],pbwt[1],pbwt[2],"mouseover");	
			
				/* Add the popup card */
				var cardTop = "175";//card top is different on various templates
				if(TEMPLATE_CODE == "B1"){
					cardTop = "60";//orig:175
				}
				
				var IE6Offset = 0;
				if(TEMPLATE_CODE == "B1"){
					IE6Offset = 250;
				}
	
	/*
javascript:openConfigurator(cooper);
javascript:openConfigurator(coopers);
javascript:openConfigurator(jcwhardtop);

javascript:openConfigurator(cooperconvertible);
javascript:openConfigurator(coopersconvertible);
javascript:openConfigurator(jcwconvertible);

javascript:openConfigurator(cooperclubman);
javascript:openConfigurator(coopersclubman);
javascript:openConfigurator(jcwclubman);

javascript:openConfigurator(coopercoupe);
javascript:openConfigurator(cooperscoupe);
javascript:openConfigurator(jcwcoupe);

javascript:openConfigurator(coopercountryman);
javascript:openConfigurator(cooperscountryman);
javascript:openConfigurator(cooperscountrymanall4);

javascript:openConfigurator(jcwhardtop);
javascript:openConfigurator(jcwconvertible);
javascript:openConfigurator(jcwclubman);
javascript:openConfigurator(jcwcoupe);

	*/			
				
				var cardMap = '<map name="card_map_' + currentModelCarSlot + '">';
				if(cardModelCount == 3){
					cardMap += '<area shape="rect" coords="2,2,464,109" href="' + data.model_1 + '" alt="">';
					cardMap += '<area shape="rect" coords="2,113,464,240" href="' + data.model_2 + '" alt="">';
					cardMap += '<area shape="rect" coords="2,242,464,369" href="' + data.model_3 + '" alt="">';
				}else if(cardModelCount == 4){
					cardMap += '<area shape="rect" coords="2,2,464,86" href="' + data.model_1 + '" alt="">';
					cardMap += '<area shape="rect" coords="2,91,464,184" href="' + data.model_2 + '" alt="">';
					cardMap += '<area shape="rect" coords="2,188,464,281" href="' + data.model_3 + '" alt="">';
					cardMap += '<area shape="rect" coords="2,285,464,367" href="' + data.model_4 + '" alt="">';		
				}
				cardMap += '</map>';

        
				
				var card = '';
				card  += '<div  id="modelCard_' + i + '" style="display:none; position:absolute; top:'+ cardTop +'px;left:' + data.card_box_x + 'px; z-index:100' + i + '; _left:' +  (data.card_box_x - IE6Offset) + 'px;" class="clickabletooltip">' + cardMap + '<img src="'+ data.card_box_src +'" style="cursor:pointer;margin-top:0px;display:block;border:0px;" usemap="#card_map_' + currentModelCarSlot + '"></div>';
				currentModelCarSlot++;
				
				$("#popupCardContainer").append(card);
				
				$("#modelThumb_" + i).mouseover(function(event){
					$(".clickabletooltip").fadeOut(100);
					$(this).css("margin-top","0px");
					var id = $(this).attr("id").split("_")[1];
					/* Set map urls and the correct use map */
					$("#modelCard_" + id).fadeIn(200,function(){
						var $div = $(this);
						$div.mouseleave(function(event){
							$(this).fadeOut(200); 
						});
					}); 
				});
				$("#modelThumb_" + i).mouseout(function(event){
					$(this).css("margin-top","-50px");
					var id = $(this).attr("id").split("_")[1];
					//$("#modelCard_" + id).fadeOut(200); 
				});
			});		
			$("#carMenu").fadeIn(FADE_SPEED);
			//PUT TRACKING ON MINI LOGO
			var mlt = splitTrackingCodes(data.mini_logo_tracking.tracking_code_1);
			addActivityTrackingPixel("globalMiniLogo",mlt[0],mlt[1],"click");
			var mwt =  splitWTTrackingCodes(data.mini_logo_tracking.tracking_code_2);	
			addWTTrackingPixel("globalMiniLogo",mwt[0],mwt[1],mwt[2],"click");	
			//PUT TRACKING ON MINIUSA FOOTER LINK
			var mflt = splitTrackingCodes(data.mini_footer_link_tracking.tracking_code_1);
			addActivityTrackingPixel("miniFooterLink",mflt[0],mflt[1],"click");
			var mfwt =  splitWTTrackingCodes(data.mini_footer_link_tracking.tracking_code_2);	
			addWTTrackingPixel("miniFooterLink",mfwt[0],mfwt[1],mfwt[2],"click");				
			//PUT TRACKING ON OFFER DETAILS FOOTER LINK
			var dflt = splitTrackingCodes(data.offer_details_footer_link_tracking.tracking_code_1);
			addActivityTrackingPixel("detailsFooterLink",dflt[0],dflt[1],"click");
			var dfwt =  splitWTTrackingCodes(data.offer_details_footer_link_tracking.tracking_code_2);
			addWTTrackingPixel("detailsFooterLink",dfwt[0],dfwt[1],dfwt[2],"click");	

			var pageLoadTracking = splitTrackingCodes(data.page_load_tracking.tracking_code_1); 			
			changeActivityTrackerPixel(pageLoadTracking[0],pageLoadTracking[1]);
		},
		error : function(data){
			$("#loaderror").html("Unable to load page contents");
			$("#loaderror").show();
		}
	});	
});
function randomString(length) {
    var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split('');
    
    if (! length) {
        length = Math.floor(Math.random() * chars.length);
    }
    
    var str = '';
    for (var i = 0; i < length; i++) {
        str += chars[Math.floor(Math.random() * chars.length)];
    }
    return str + new Date().getTime();
}
