/*
 * AJAX - Toyota Glossary
 * By Agus Daud
 * Hothouse 2007
 * Last Modified 14 September 2007
 * Write base on Jquery 1.2 and JTip
 */
 
//on page load (as soon as its ready) call GlossaryTips_init

//Delay function Tooltips
function Tooltips (options) {
	if ( "undefined" != typeof Tooltips._instantiated) {
		return (Tooltips._instantiated);	
	}
	if ( "undefined" == typeof options) {
		options = {};	
	}
	this.delay = ("undefined" == typeof options.delay) ? 250 : options.delay;
	this.timeout = new Object();
	
	Tooltips._instantiated = this;
};

//Special for GCT
function GlossaryTips_init() {
	
	selectChanged(1);
	selectChanged(2);
	selectChanged(3);
	
	GlossaryTips_initGlobal();
	
}

function GlossaryTips_initGlobal() {
	var tooltip = new Tooltips();
	
	$("a.jTipx")
	.hover(function(e){
		
		if (!this.href.split('#')[1]) return;
		
		var popupid = this.id+'_popup';
		
		if (tooltip.timeout['#'+popupid]) {
			clearTimeout(tooltip.timeout['#'+popupid]);
			tooltip.timeout['#'+popupid] = null;
		}
		
		linkId = this.id;
		var de = document.documentElement;
		var w = self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
		var hasArea = w - getAbsoluteLeft(linkId);
		var clickElementy = getAbsoluteTop(linkId) - 225; //set y position
		var arrowOffset = getElementWidth(linkId) - 153;
		var clickElementx = getAbsoluteLeft(linkId) + arrowOffset; //set x position
		//var clickElementx = getAbsoluteLeft(linkId); //set x position
		
		$('.glossary_popup').remove();
		
		//Create Popup skeleton
		var html = '<div id="'+popupid+'"class="glossary_popup">';
		html +='<div class="JTContainer">';
		html += '</div>';
		html += '</div>';
		
		$('body').prepend(html);
		
		//Put back into default mode
		//$('.JTContainer').removeClass('alter');
		//alert(clickElementx);
		
		var spaceToBody = getAbsoluteLeft("container_header");
		
		//Get the white space betweeen window and body 
		staticX  = clickElementx-spaceToBody;
		
		//alert(staticX);
		
		if (staticX > 300) {
			$('.JTContainer').addClass('alter');
			
			staticX = staticX - 332;
			
			//Set max x position so it doesn't go out of scope
			if (staticX > 215) {
				staticX = 215;
			}
			
			//alert(staticX );
			
		} else {
			//Do nothing because it's default mode		
		}
		
		$('#'+popupid).css({position: 'absolute', left: (staticX+spaceToBody)+"px", top: clickElementy+"px"});
		$('#'+popupid).show( 'fast' );
		
		var XMLurl = '/toyota/main/actions/getArticleXML/0,,'+this.href.split('#')[1]+',.xml';
		//var XMLurl = '/toyota/focus-vehicles/xml/aurion-glossary-'+this.href.split('#')[1]+'.xml'; //test
		var HTMLurl = this.href;
		
		timer();
		
		$.ajax({   			
				type: "GET",
				url: XMLurl,
				cache: false,
				async: true,
				timeout: 30000,
				error: function (data,error,extra) {
					/*alert('Error: '+error);
					if (error == 'timeout') {
						var html = 'Connection to server has timed out, please try again later.';
						$('#'+popupid + ' .JTContainer').html(html);	
					}*/
				},
				beforeSend: function() {
					var html = '<div id="JTLoader">&nbsp;</div>';
					$('#'+popupid + ' .JTContainer').html(html);
				},
				success: function(data,status) {
										
					$(data).find('glossary').each(function() {
						
						var $glossary = $(this);
						
						html = '<div class="header">';
						html += '<h3>'+$glossary.find('title').eq(0).text()+'</h3>';
						html += '</div>';
						html += '<div class="summary">';
						
						if (!$glossary.find('medium').attr('url') && $glossary.find('video_id').text().length == 0){
							html += '<div class="glossary_text long">';
						} else if($glossary.find('video_id').text().length > 0){
							var vidParams = $glossary.find('video_id').eq(0).text();
							vidParams = vidParams.replace(/&#95;/g,"_");
							vidParams = vidParams.replace(/&#59;/g,";");
								
							html += '<div class="glossary-popup-media">';
							html += '<div id="glossary-popup-video">';
	            html += '</div>';
							html += '</div>';
							html += '<div class="glossary_text">';
						}	else {
							html += '<div class="glossary_image">';
							html += '<img src="'+$glossary.find('medium').attr('url')+'" />';
							html += '</div>';
							html += '<div class="glossary_text">';
						}
							
						if ($glossary.find('summary').text()) {
							
							var summary = $glossary.find('summary').text();
							
							summary = summary .replace(/&#60;/g,"<");
							summary = summary .replace(/&#62;/g,">");
							summary = summary .replace(/&#61;/g,"=");
							summary = summary .replace(/&#34;/g,"'");
							summary = summary .replace(/&#47;/g,"/");
							summary = summary .replace(/&#33;/g,"!");
							summary = summary .replace(/&#45;/g,"-");
							
							html += summary + '<br/><br/>';
							html += '<p><a class="arrow-double-grey" href="'+HTMLurl+'">Find out more</a></p>';
							
						} else {
							
							var definition = $glossary.find('definition').text();
							
							definition = definition.replace(/&#60;/g,"<");
							definition = definition.replace(/&#62;/g,">");
							definition = definition.replace(/&#61;/g,"=");
							definition = definition.replace(/&#34;/g,"'");
							definition = definition.replace(/&#47;/g,"/");
							definition = definition.replace(/&#33;/g,"!");
							definition = definition.replace(/&#45;/g,"-");
							
							html += definition + '<br/><br/>';	
						}
						
						if ($glossary.find('link').attr('url')) {
							html += '<p><a class="arrow-double-grey" href="'+$glossary.find('link').attr('url')+'">'+$glossary.find('link').attr('title')+'</a></p>';
						}
						
						html += '</div>';
						html += '</div>';
						
						$('#'+popupid + ' .JTContainer').html(html);
						
						//if video then call flash
						if($glossary.find('video_id').text().length > 0){
							displayGlossaryVid(vidParams);
						}
						
					});
				}
		});

				
	}, function(){
		
		var popupid = this.id+'_popup';
		
		tooltip.timeout['#'+popupid] = setTimeout (function() {
			$('#'+popupid).remove();
		}, tooltip.delay);
				

	})
	.click(function(){
		
		var popupid = this.id+'_popup';
		
		$('#'+popupid + ' .JTContainer').hide();
	});
   
   
   function timer() {
	   $(".glossary_popup")
	   .hover(function () {
			
			var tipId = "#" + $(this).attr("id");
			if (tooltip.timeout[tipId]) {
				clearTimeout(tooltip.timeout[tipId]);
				tooltip.timeout[tipId] = null;
			}
		}, function () {
			
			// Restart hide timeout
			var tipId = "#" + $(this).attr("id");
			tooltip.timeout[tipId] = setTimeout( function() {
				$(tipId).remove();											  
			}, tooltip.delay );
		});
   }
}

function displayGlossaryVid(vidParams){
		
	var glossaryFlashPlayer = null;
	
	// New Vehicles Hub or old
	var isOldVehicle;
	if ( typeof(vehicleSection) == 'undefined') {
    isOldVehicle = true;
	}else{
		isOldVehicle = false;
	}
	
	var vidIds = vidParams.split(';');
	var feedId = vidIds[0];
	var directId = vidIds[1];
	var pageLocation = vidIds[2];
		
	if(isOldVehicle){
		tpSetCommManagerID("communicationwidget", true);
		tpRegisterID("playerwidget");
		glossaryFlashPlayer = new SWFObject("/toyota/main/flash/glossary/swf/toyotaTvPlayer.swf", "playerwidget", "246", "177", "9.0.0.0");
		glossaryFlashPlayer.addParam("scale", "noscale");
		glossaryFlashPlayer.addParam("salign", "tl");
		glossaryFlashPlayer.addParam("menu", "true");
		glossaryFlashPlayer.addParam("bgcolor", "#202930");
		glossaryFlashPlayer.addParam("allowFullScreen", "true");
		glossaryFlashPlayer.addParam("allowScriptAccess", "always");
		glossaryFlashPlayer.addVariable("ID", "playerwidget");
		glossaryFlashPlayer.addVariable("logLevel", "warn");	
		glossaryFlashPlayer.addVariable("feedPID", feedId);	
		glossaryFlashPlayer.addVariable("directPID", directId);
		glossaryFlashPlayer.addVariable("pageLocation", pageLocation); //Webtrends tracking
		//glossaryFlashPlayer.addVariable("subCategory", webTrendsSubCategory); Webtrends tracking
		glossaryFlashPlayer.write("glossary-popup-video");
	}else{
		//check vehicle name to choose the correct swf player
		var cssName = vehicleSection.split('-');
		var vehicleNameLen = cssName[0].length;
		var vehicleName = vehicleSection.substr(0,(vehicleNameLen-4));
		//prado css name is pradong, need to be Modified
		if(vehicleName == "pradong"){
			vehicleName = "prado";
		}
	
		tpSetCommManagerID("communicationwidget", true);
		tpRegisterID("playerwidget");
		
		//vehicleName is set from the freetext content
		glossaryFlashPlayer = new SWFObject("/toyota/vehicles/"+vehicleName+"/videoSmall/swf/smallPlayer"+vehicleName+".swf", "playerwidget", "246", "177", "9.0.0.0"); 
	
		glossaryFlashPlayer.addParam("scale", "noscale");
		glossaryFlashPlayer.addParam("salign", "tl");
		glossaryFlashPlayer.addParam("menu", "true");
		glossaryFlashPlayer.addParam("bgcolor", "#202930");
		glossaryFlashPlayer.addParam("allowFullScreen", "true");
		glossaryFlashPlayer.addParam("allowScriptAccess", "always");
		glossaryFlashPlayer.addVariable("ID", "playerwidget");
		glossaryFlashPlayer.addVariable("logLevel", "warn");	
		glossaryFlashPlayer.addVariable("feedPID", feedId);	
		glossaryFlashPlayer.addVariable("directPID", directId);		
		glossaryFlashPlayer.addVariable("pageLocation", pageLocation); //Webtrends tracking
		//glossaryFlashPlayer.addVariable("subCategory", webTrendsSubCategory); Webtrends tracking
		glossaryFlashPlayer.write("glossary-popup-video");
	}
	return false;
}

function getElementWidth(objectId) {
	x = document.getElementById(objectId);
	//alert(x.offsetWidth);
	if (x.offsetWidth > 80) {
		return x.offsetWidth/6;
	} else {
		return x.offsetWidth/2;	
	}
}

function getAbsoluteLeft(objectId) {
	// Get an object left position from the upper left viewport corner
	o = document.getElementById(objectId)
	oLeft = o.offsetLeft            // Get left position from the parent object
	while(o.offsetParent!=null) {   // Parse the parent hierarchy up to the document element
		oParent = o.offsetParent    // Get parent object reference
		oLeft += oParent.offsetLeft // Add parent left position
		o = oParent
	}
	return oLeft
}

function getAbsoluteTop(objectId) {
	// Get an object top position from the upper left viewport corner
	o = document.getElementById(objectId)
	oTop = o.offsetTop            // Get top position from the parent object
	while(o.offsetParent!=null) { // Parse the parent hierarchy up to the document element
		oParent = o.offsetParent  // Get parent object reference
		oTop += oParent.offsetTop // Add parent top position
		o = oParent
	}
	return oTop
}

function blockEvents(evt) {
	  if(evt.target){
	  evt.preventDefault();
	  }else{
	  evt.returnValue = false;
	  }
}



$(document).ready(function() {
	//Init Tooltips
	GlossaryTips_initGlobal();
});
