<script type="text/javascript">
(function (cjs, an) {

var p; // shortcut to reference prototypes
var lib={};var ss={};var img={};
lib.webFontTxtInst = {}; 
var loadedTypekitCount = 0;
var loadedGoogleCount = 0;
var gFontsUpdateCacheList = [];
var tFontsUpdateCacheList = [];
lib.ssMetadata = [
		{name:"kseal_engine_components_new_atlas_", frames: [[0,1522,859,464],[0,725,873,795],[1449,1280,335,119],[1117,374,808,246],[1438,1612,479,423],[1449,622,505,245],[0,0,1115,723],[1449,1091,384,187],[1117,0,791,372],[861,1612,575,422],[875,725,572,885],[1449,869,350,220],[1786,1280,164,114],[1801,869,191,177]]}
];



lib.updateListCache = function (cacheList) {		
	for(var i = 0; i < cacheList.length; i++) {		
		if(cacheList[i].cacheCanvas)		
			cacheList[i].updateCache();		
	}		
};		

lib.addElementsToCache = function (textInst, cacheList) {		
	var cur = textInst;		
	while(cur != null && cur != exportRoot) {		
		if(cacheList.indexOf(cur) != -1)		
			break;		ro
		cur = cur.parent;		
	}		
	if(cur != exportRoot) {		
		var cur2 = textInst;		
		var index = cacheList.indexOf(cur);		
		while(cur2 != null && cur2 != cur) {		
			cacheList.splice(index, 0, cur2);		
			cur2 = cur2.parent;		
			index++;		
		}		
	}		
	else {		
		cur = textInst;		
		while(cur != null && cur != exportRoot) {		
			cacheList.push(cur);		
			cur = cur.parent;		
		}		
	}		
};		

lib.gfontAvailable = function(family, totalGoogleCount) {		
	lib.properties.webfonts[family] = true;		
	var txtInst = lib.webFontTxtInst && lib.webFontTxtInst[family] || [];		
	for(var f = 0; f < txtInst.length; ++f)		
		lib.addElementsToCache(txtInst[f], gFontsUpdateCacheList);		

	loadedGoogleCount++;		
	if(loadedGoogleCount == totalGoogleCount) {		
		lib.updateListCache(gFontsUpdateCacheList);		
	}		
};		

lib.tfontAvailable = function(family, totalTypekitCount) {		
	lib.properties.webfonts[family] = true;		
	var txtInst = lib.webFontTxtInst && lib.webFontTxtInst[family] || [];		
	for(var f = 0; f < txtInst.length; ++f)		
		lib.addElementsToCache(txtInst[f], tFontsUpdateCacheList);		

	loadedTypekitCount++;		
	if(loadedTypekitCount == totalTypekitCount) {		
		lib.updateListCache(tFontsUpdateCacheList);		
	}		
};
// symbols:



(lib.CylinderHead = function() {
	this.spriteSheet = ss["kseal_engine_components_new_atlas_"];
	this.gotoAndStop(0);
}).prototype = p = new cjs.Sprite();



(lib.EngineBlock = function() {
	this.spriteSheet = ss["kseal_engine_components_new_atlas_"];
	this.gotoAndStop(1);
}).prototype = p = new cjs.Sprite();



(lib.FreezePlug = function() {
	this.spriteSheet = ss["kseal_engine_components_new_atlas_"];
	this.gotoAndStop(2);
}).prototype = p = new cjs.Sprite();



(lib.HeadGasket = function() {
	this.spriteSheet = ss["kseal_engine_components_new_atlas_"];
	this.gotoAndStop(3);
}).prototype = p = new cjs.Sprite();



(lib.HeaterCore = function() {
	this.spriteSheet = ss["kseal_engine_components_new_atlas_"];
	this.gotoAndStop(4);
}).prototype = p = new cjs.Sprite();



(lib.HoseHeaterCore = function() {
	this.spriteSheet = ss["kseal_engine_components_new_atlas_"];
	this.gotoAndStop(5);
}).prototype = p = new cjs.Sprite();



(lib.HoseLower = function() {
	this.spriteSheet = ss["kseal_engine_components_new_atlas_"];
	this.gotoAndStop(6);
}).prototype = p = new cjs.Sprite();



(lib.HoseReturn = function() {
	this.spriteSheet = ss["kseal_engine_components_new_atlas_"];
	this.gotoAndStop(7);
}).prototype = p = new cjs.Sprite();



(lib.HoseWaterPump = function() {
	this.spriteSheet = ss["kseal_engine_components_new_atlas_"];
	this.gotoAndStop(8);
}).prototype = p = new cjs.Sprite();



(lib.IntakeManifold = function() {
	this.spriteSheet = ss["kseal_engine_components_new_atlas_"];
	this.gotoAndStop(9);
}).prototype = p = new cjs.Sprite();



(lib.Radiator = function() {
	this.spriteSheet = ss["kseal_engine_components_new_atlas_"];
	this.gotoAndStop(10);
}).prototype = p = new cjs.Sprite();



(lib.Reservoir = function() {
	this.spriteSheet = ss["kseal_engine_components_new_atlas_"];
	this.gotoAndStop(11);
}).prototype = p = new cjs.Sprite();



(lib.Thermostat = function() {
	this.spriteSheet = ss["kseal_engine_components_new_atlas_"];
	this.gotoAndStop(12);
}).prototype = p = new cjs.Sprite();



(lib.WaterPump = function() {
	this.spriteSheet = ss["kseal_engine_components_new_atlas_"];
	this.gotoAndStop(13);
}).prototype = p = new cjs.Sprite();
// helper functions:

function mc_symbol_clone() {
	var clone = this._cloneProps(new this.constructor(this.mode, this.startPosition, this.loop));
	clone.gotoAndStop(this.currentFrame);
	clone.paused = this.paused;
	clone.framerate = this.framerate;
	return clone;
}

function getMCSymbolPrototype(symbol, nominalBounds, frameBounds) {
	var prototype = cjs.extend(symbol, cjs.MovieClip);
	prototype.clone = mc_symbol_clone;
	prototype.nominalBounds = nominalBounds;
	prototype.frameBounds = frameBounds;
	return prototype;
	}


(lib.mcHoseWaterPump = function(mode,startPosition,loop) {
	this.initialize(mode,startPosition,loop,{});

	// Layer_1
	this.instance = new lib.HoseWaterPump();
	this.instance.parent = this;
	this.instance.setTransform(-197.7,-93,0.5,0.5);

	this.timeline.addTween(cjs.Tween.get(this.instance).wait(1));

}).prototype = getMCSymbolPrototype(lib.mcHoseWaterPump, new cjs.Rectangle(-197.7,-93,395.5,186), null);


(lib.mcHoseReturn = function(mode,startPosition,loop) {
	this.initialize(mode,startPosition,loop,{});

	// Layer_1
	this.instance = new lib.HoseReturn();
	this.instance.parent = this;
	this.instance.setTransform(-96,-46.7,0.5,0.5);

	this.timeline.addTween(cjs.Tween.get(this.instance).wait(1));

}).prototype = getMCSymbolPrototype(lib.mcHoseReturn, new cjs.Rectangle(-96,-46.7,192,93.5), null);


(lib.mcHoseLower = function(mode,startPosition,loop) {
	this.initialize(mode,startPosition,loop,{});

	// Layer_1
	this.instance = new lib.HoseLower();
	this.instance.parent = this;
	this.instance.setTransform(-278.7,-180.7,0.5,0.5);

	this.timeline.addTween(cjs.Tween.get(this.instance).wait(1));

}).prototype = getMCSymbolPrototype(lib.mcHoseLower, new cjs.Rectangle(-278.7,-180.7,557.5,361.5), null);


(lib.mcHoseHeaterCore = function(mode,startPosition,loop) {
	this.initialize(mode,startPosition,loop,{});

	// Layer_1
	this.instance = new lib.HoseHeaterCore();
	this.instance.parent = this;
	this.instance.setTransform(-126.2,-61.2,0.5,0.5);

	this.timeline.addTween(cjs.Tween.get(this.instance).wait(1));

}).prototype = getMCSymbolPrototype(lib.mcHoseHeaterCore, new cjs.Rectangle(-126.2,-61.2,252.5,122.5), null);


(lib.mcDot = function(mode,startPosition,loop) {
	this.initialize(mode,startPosition,loop,{});

	// dot
	this.shape = new cjs.Shape();
	this.shape.graphics.f("#F56723").s().p("AhBBCQgbgbAAgnQAAgmAbgbQAcgbAlAAQAmAAAcAbQAbAbAAAmQAAAngbAbQgcAbgmAAQglAAgcgbg");

	this.timeline.addTween(cjs.Tween.get(this.shape).wait(72));

	// ring 1
	this.shape_1 = new cjs.Shape();
	this.shape_1.graphics.f().s("#F56723").ss(2,1,1).p("ABQAAQAAAdgSAWQgDADgCADQgYAXghAAQggAAgYgXQgCgDgDgDQgBgBgBgBQgQgVAAgcQAAgbAQgVQAEgEADgEQAYgXAgAAQAhAAAYAXQAXAYAAAgg");

	this.shape_2 = new cjs.Shape();
	this.shape_2.graphics.f().s("rgba(245,103,35,0.965)").ss(2,1,1).p("AhRAAQAAgbARgWQAIgKACgBQAXgVAfAAQAkACAWAWQAYAYAAAhQgBAegRAWQgDADgDADQgZAYghAAQAAAAAAAAQgggBgYgWQgBAAAAgBQgDgDgDgDQgBgBAAgBQgRgWAAgcg");

	this.shape_3 = new cjs.Shape();
	this.shape_3.graphics.f().s("rgba(245,103,35,0.929)").ss(1.9,1,1).p("AhTAAQAAgcARgWQAJgKABgBQAYgWAgAAQAkABAYAXQAYAZAAAiQAAAfgSAWQgDADgDAEQgaAYgiAAQAAAAAAAAQghAAgZgXQAAgBgBAAQgDgEgDgDQgBgBAAAAQgRgXAAgdg");

	this.shape_4 = new cjs.Shape();
	this.shape_4.graphics.f().s("rgba(245,103,35,0.898)").ss(1.9,1,1).p("AhVAAQAAgdARgWQAJgKABgBQAZgXAhAAQAlABAYAYQAZAaAAAiQAAAfgTAXQgDAEgDADQgaAZgiAAQgBAAAAAAQgiAAgZgYQgBAAgBgBQgCgDgDgDQgBgBgBgBQgRgXAAgeg");

	this.shape_5 = new cjs.Shape();
	this.shape_5.graphics.f().s("rgba(245,103,35,0.863)").ss(1.8,1,1).p("AhXAAQAAgeARgXQAJgKACgBQAZgXAiAAQAmABAZAYQAZAbAAAjQAAAggTAYQgDADgDADQgbAagjAAQgBAAAAAAQgjAAgagYQgBgBAAgBQgDgDgDgDQgBgBgBgBQgRgXAAgfg");

	this.shape_6 = new cjs.Shape();
	this.shape_6.graphics.f().s("rgba(245,103,35,0.827)").ss(1.8,1,1).p("AhZAAQAAgeASgYQAJgKABgBQAagYAiAAQAoABAZAZQAaAbAAAkQAAAhgTAYQgDADgDAEQgcAagkAAQgBAAAAAAQgkAAgagZQgBgBgBAAQgDgEgDgDQgBgBAAgBQgSgYAAgfg");

	this.shape_7 = new cjs.Shape();
	this.shape_7.graphics.f().s("rgba(245,103,35,0.792)").ss(1.7,1,1).p("AhcAAQAAgfATgYQAJgLACgBQAagYAjgBQApACAaAZQAaAcABAlQgBAhgTAZQgEAEgDADQgcAbglABQgBAAAAAAQglgBgbgZQgBgBAAgBQgDgDgDgDQgBgCgBAAQgTgZAAggg");

	this.shape_8 = new cjs.Shape();
	this.shape_8.graphics.f().s("rgba(245,103,35,0.757)").ss(1.7,1,1).p("AheAAQAAggATgYQAJgLACgBQAbgZAkgBQApABAbAbQAcAcAAAmQgBAigUAZQgDAEgDAEQgdAbgmABQgBAAAAAAQglgBgcgaQgBgBgBAAQgDgEgDgDQgBgBgBgBQgTgZAAghg");

	this.shape_9 = new cjs.Shape();
	this.shape_9.graphics.f().s("rgba(245,103,35,0.725)").ss(1.6,1,1).p("AhgAAQAAggATgaQAKgKABgCQAcgZAlgBQAqABAbAbQAdAdAAAnQgBAjgUAaQgDAEgEADQgdAdgnAAQgBAAAAAAQgmgBgdgbQgBAAgBgBQgDgDgDgEQgBgBgBgBQgTgZAAgig");

	this.shape_10 = new cjs.Shape();
	this.shape_10.graphics.f().s("rgba(245,103,35,0.69)").ss(1.6,1,1).p("AhiAAQAAghAUgaQAJgLACgBQAcgaAlgBQAsABAcAbQAdAeAAAoQAAAkgVAaQgEAEgDAEQgeAdgoAAQgBAAAAAAQgnAAgegcQAAgBgBgBQgDgDgEgEQgBgBAAgBQgUgaAAgig");

	this.shape_11 = new cjs.Shape();
	this.shape_11.graphics.f().s("rgba(245,103,35,0.655)").ss(1.5,1,1).p("AhkAAQAAgiAUgaQAKgLABgBQAdgbAmgBQAtABAcAcQAeAeAAApQAAAkgWAbQgDAEgEAEQgeAegpAAQgBAAAAAAQgoAAgegdQgBAAgBgBQgDgEgDgDQgBgBgBgBQgUgbAAgjg");

	this.shape_12 = new cjs.Shape();
	this.shape_12.graphics.f().s("rgba(245,103,35,0.62)").ss(1.5,1,1).p("AhmAAQAAgjAUgaQAKgLACgCQAdgbAngBQAuABAdAcQAeAfAAAqQAAAlgWAbQgDAFgEADQgfAfgqAAQAAAAgBAAQgpAAgfgdQgBgBAAgBQgEgDgDgEQgBgBgBgBQgUgbAAgkg");

	this.shape_13 = new cjs.Shape();
	this.shape_13.graphics.f().s("rgba(245,103,35,0.584)").ss(1.4,1,1).p("AhoAAQAAgjAVgcQAJgLACgBQAegcAngBQAvAAAeAeQAfAfAAArQAAAmgWAcQgEAEgDAEQggAfgrAAQAAAAgBAAQgqAAgfgeQgBgBgBAAQgDgEgEgEQgBgBAAgBQgVgbAAglg");

	this.shape_14 = new cjs.Shape();
	this.shape_14.graphics.f().s("rgba(245,103,35,0.553)").ss(1.4,1,1).p("AhrAAQAAgkAWgcQAKgLABgCQAfgcAogCQAwABAfAeQAfAgABAsQgBAmgWAdQgEAEgEAEQggAggrABQgBAAgBAAQgrgBgggeQgBgBgBgBQgDgEgDgDQgBgCgBgBQgWgcAAglg");

	this.shape_15 = new cjs.Shape();
	this.shape_15.graphics.f().s("rgba(245,103,35,0.518)").ss(1.3,1,1).p("AhtAAQAAglAWgcQAKgMACgBQAfgdApgCQAxABAfAfQAgAgABAtQgBAngXAdQgDAFgEAEQghAggsABQgBAAgBAAQgsgBgggfQgBgBgBgBQgEgDgDgEQgBgBgBgBQgWgdAAgmg");

	this.shape_16 = new cjs.Shape();
	this.shape_16.graphics.f().s("rgba(245,103,35,0.482)").ss(1.2,1,1).p("AhvAAQAAglAWgdQAKgMACgBQAggeAqgCQAyABAgAfQAhAiAAAtQAAAogYAdQgEAFgEAEQgiAhgsABQgBAAgBAAQgsAAgiggQgBgBgBgBQgDgEgEgEQgBgBgBgBQgWgdAAgng");

	this.shape_17 = new cjs.Shape();
	this.shape_17.graphics.f().s("rgba(245,103,35,0.447)").ss(1.2,1,1).p("AhxAAQAAgmAXgeQAKgLACgCQAggeAqgCQA0ABAgAgQAiAiAAAuQAAApgYAeQgEAEgEAFQgjAhgtABQgBAAgBAAQgtAAgighQgBgBgBgBQgEgEgEgEQgBgBAAgBQgXgdAAgog");

	this.shape_18 = new cjs.Shape();
	this.shape_18.graphics.f().s("rgba(245,103,35,0.416)").ss(1.1,1,1).p("AhzAAQAAgnAXgeQAKgMACgBQAhgfArgCQA1ABAhAgQAiAjAAAvQAAApgYAfQgEAFgFAEQgjAjguAAQgBAAgBAAQguAAgjghQgBgBgBgCQgEgDgDgEQgBgCgBgBQgXgeAAgog");

	this.shape_19 = new cjs.Shape();
	this.shape_19.graphics.f().s("rgba(245,103,35,0.38)").ss(1.1,1,1).p("Ah1AAQAAgnAXgfQALgMABgCQAigfAsgCQA1AAAiAiQAjAjAAAwQAAAqgZAfQgEAFgEAFQgkAjgvAAQgBAAgBAAQgvAAgjgiQgBgBgCgBQgDgEgEgEQgBgBgBgBQgXgfAAgpg");

	this.shape_20 = new cjs.Shape();
	this.shape_20.graphics.f().s("rgba(245,103,35,0.345)").ss(1,1,1).p("Ah3AAQAAgoAXgfQALgMACgCQAiggAtgCQA2AAAjAiQAjAkAAAwQAAAsgZAfQgEAFgEAFQglAkgwAAQgBAAgBAAQgwAAgkgiQgBgCgBgBQgEgEgEgEQgBgBgBgBQgXgfAAgqg");

	this.shape_21 = new cjs.Shape();
	this.shape_21.graphics.f().s("rgba(245,103,35,0.31)").ss(1,1,1).p("Ah6AAQAAgpAZggQAKgMACgCQAjggAtgDQA4ABAjAjQAkAkABAxQgBAsgZAhQgEAFgFAEQglAlgxABQgBAAgBAAQgxgBgkgjQgCgBgBgBQgEgEgDgEQgBgCgBgBQgZgfAAgrg");

	this.shape_22 = new cjs.Shape();
	this.shape_22.graphics.f().s("rgba(245,103,35,0.275)").ss(0.9,1,1).p("Ah8AAQAAgqAZggQALgMACgCQAjghAugDQA5ABAkAjQAkAlABAyQAAAtgbAhQgEAFgEAFQgmAlgyABQgBAAgBAAQgyAAglgkQgBgCgBgBQgEgEgEgEQgBgBgBgCQgZggAAgrg");

	this.shape_23 = new cjs.Shape();
	this.shape_23.graphics.f().s("rgba(245,103,35,0.243)").ss(0.9,1,1).p("Ah+AAQAAgqAZghQALgNACgBQAjgjAwgCQA6ABAkAjQAlAmABAzQAAAugbAhQgEAFgFAFQgmAmgyABQgCAAgBAAQgzAAgmglQgBgBgBgCQgEgEgEgEQgBgBgBgBQgZghAAgsg");

	this.shape_24 = new cjs.Shape();
	this.shape_24.graphics.f().s("rgba(245,103,35,0.208)").ss(0.8,1,1).p("AiAAAQAAgrAaghQAKgNACgCQAkgjAwgCQA7AAAlAlQAnAmAAA0QAAAvgbAhQgEAGgFAFQgnAmgzABQgCAAgBAAQgzAAgngmQgBgBgCgBQgEgEgEgFQgBgBAAgBQgaghAAgtg");

	this.shape_25 = new cjs.Shape();
	this.shape_25.graphics.f().s("rgba(245,103,35,0.173)").ss(0.8,1,1).p("AiCAAQAAgsAagiQALgMACgCQAkgkAxgCQA8AAAmAlQAnAnAAA1QAAAvgbAjQgFAFgFAFQgnAng0ABQgCAAgBAAQg0AAgogmQgBgBgBgCQgEgEgEgEQgBgCgBgBQgaghAAgug");

	this.shape_26 = new cjs.Shape();
	this.shape_26.graphics.f().s("rgba(245,103,35,0.137)").ss(0.7,1,1).p("AiEAAQAAgsAagjQALgNACgCQAlgkAygCQA9AAAmAmQAoAnAAA2QAAAwgcAjQgEAFgFAGQgoAng1ABQgCAAgBAAQg1AAgognQgBgBgCgBQgEgFgEgEQgBgBgBgCQgagiAAgug");

	this.shape_27 = new cjs.Shape();
	this.shape_27.graphics.f().s("rgba(245,103,35,0.102)").ss(0.7,1,1).p("AiGAAQAAgtAagjQAMgNACgCQAlglAzgCQA+AAAnAmQAoAoAAA3QAAAxgcAjQgEAGgFAFQgpAog2ABQgBAAgCAAQg2AAgpgnQgBgCgBgBQgFgEgEgFQgBgBgBgBQgagjAAgvg");

	this.shape_28 = new cjs.Shape();
	this.shape_28.graphics.f().s("rgba(245,103,35,0.071)").ss(0.6,1,1).p("AiIAAQAAguAbgjQALgNACgCQAmgmAzgCQBAAAAnAnQApApAAA3QAAAxgcAkQgFAGgFAFQgpAqg3AAQgBAAgCAAQg3AAgpgoQgCgBgBgCQgEgEgEgEQgBgCgBgBQgbgjAAgwg");

	this.shape_29 = new cjs.Shape();
	this.shape_29.graphics.f().s("rgba(245,103,35,0.035)").ss(0.6,1,1).p("AiLAAQAAgvAcgkQALgNACgCQAngmA0gDQBAAAApAoQApAqABA4QAAAygdAlQgFAFgFAGQgqAqg4ABQgBAAgCAAQg4AAgqgpQgBgCgCgBQgEgFgEgEQgBgCgBgBQgcgjAAgxg");

	this.shape_30 = new cjs.Shape();
	this.shape_30.graphics.f().s("rgba(245,103,35,0)").ss(0.5,1,1).p("ACOAAQAAA7gqApQgpAqg7AAQg5AAgqgqQgqgpAAg7QAAg6AqgpQAqgqA5AAQA7AAApAqQAqApAAA6g");

	this.timeline.addTween(cjs.Tween.get({}).to({state:[{t:this.shape_1}]}).to({state:[{t:this.shape_2}]},1).to({state:[{t:this.shape_3}]},1).to({state:[{t:this.shape_4}]},1).to({state:[{t:this.shape_5}]},1).to({state:[{t:this.shape_6}]},1).to({state:[{t:this.shape_7}]},1).to({state:[{t:this.shape_8}]},1).to({state:[{t:this.shape_9}]},1).to({state:[{t:this.shape_10}]},1).to({state:[{t:this.shape_11}]},1).to({state:[{t:this.shape_12}]},1).to({state:[{t:this.shape_13}]},1).to({state:[{t:this.shape_14}]},1).to({state:[{t:this.shape_15}]},1).to({state:[{t:this.shape_16}]},1).to({state:[{t:this.shape_17}]},1).to({state:[{t:this.shape_18}]},1).to({state:[{t:this.shape_19}]},1).to({state:[{t:this.shape_20}]},1).to({state:[{t:this.shape_21}]},1).to({state:[{t:this.shape_22}]},1).to({state:[{t:this.shape_23}]},1).to({state:[{t:this.shape_24}]},1).to({state:[{t:this.shape_25}]},1).to({state:[{t:this.shape_26}]},1).to({state:[{t:this.shape_27}]},1).to({state:[{t:this.shape_28}]},1).to({state:[{t:this.shape_29}]},1).to({state:[{t:this.shape_30}]},1).to({state:[]},1).wait(42));

}).prototype = p = new cjs.MovieClip();
p.nominalBounds = new cjs.Rectangle(-9.3,-9.3,18.6,18.6);


(lib.mcCalloutBackground = function(mode,startPosition,loop) {
	this.initialize(mode,startPosition,loop,{});

	// Layer_1
	this.shape = new cjs.Shape();
	this.shape.graphics.f("#FFFFFF").s().p("A2pZoQgyAAAAg6MAAAgxbQAAg6AyAAMAtTAAAQAyAAAAA6MAAAAxbQAAA6gyAAg");

	this.timeline.addTween(cjs.Tween.get(this.shape).wait(1));

}).prototype = getMCSymbolPrototype(lib.mcCalloutBackground, new cjs.Rectangle(), null);


(lib.btnCalloutButton = function(mode,startPosition,loop) {
	this.initialize(mode,startPosition,loop,{});

	// Layer_1
	this.shape = new cjs.Shape();
	this.shape.graphics.f("#F76707").s().rr(-79.55,-23.5,159.1,47,5);
	this.shape.setTransform(0,0,0.723,1);

	this.shape_1 = new cjs.Shape();
	this.shape_1.graphics.f("#C55206").s().rr(-79.55,-23.5,159.1,47,5);
	this.shape_1.setTransform(0,0,0.723,1);

	this.shape_2 = new cjs.Shape();
	this.shape_2.graphics.f("#000000").s().rr(-79.55,-23.5,159.1,47,5);
	this.shape_2.setTransform(0,0,0.723,1);

	this.timeline.addTween(cjs.Tween.get({}).to({state:[{t:this.shape}]}).to({state:[{t:this.shape_1}]},1).to({state:[{t:this.shape_2}]},1).wait(2));

}).prototype = p = new cjs.MovieClip();
p.nominalBounds = new cjs.Rectangle(-57.5,-23.5,115.1,47);


(lib.mcWaterPump = function(mode,startPosition,loop) {
	this.initialize(mode,startPosition,loop,{});

	// Layer_1
	this.instance = new lib.mcDot();
	this.instance.parent = this;
	this.instance.setTransform(-1,30.1);

	this.instance_1 = new lib.WaterPump();
	this.instance_1.parent = this;
	this.instance_1.setTransform(-47.7,-44.2,0.5,0.5);

	this.timeline.addTween(cjs.Tween.get({}).to({state:[{t:this.instance_1},{t:this.instance}]}).wait(1));

}).prototype = getMCSymbolPrototype(lib.mcWaterPump, new cjs.Rectangle(-47.7,-44.2,95.5,88.5), null);


(lib.mcThermostat = function(mode,startPosition,loop) {
	this.initialize(mode,startPosition,loop,{});

	// Layer_1
	this.instance = new lib.mcDot();
	this.instance.parent = this;
	this.instance.setTransform(-5,-7.9);

	this.instance_1 = new lib.Thermostat();
	this.instance_1.parent = this;
	this.instance_1.setTransform(-41,-28.5,0.5,0.5);

	this.timeline.addTween(cjs.Tween.get({}).to({state:[{t:this.instance_1},{t:this.instance}]}).wait(1));

}).prototype = getMCSymbolPrototype(lib.mcThermostat, new cjs.Rectangle(-41,-28.5,82,57), null);


(lib.mcReservoir = function(mode,startPosition,loop) {
	this.initialize(mode,startPosition,loop,{});

	// Layer_1
	this.instance = new lib.mcDot();
	this.instance.parent = this;
	this.instance.setTransform(4,-18.9);

	this.instance_1 = new lib.Reservoir();
	this.instance_1.parent = this;
	this.instance_1.setTransform(-87.5,-55,0.5,0.5);

	this.timeline.addTween(cjs.Tween.get({}).to({state:[{t:this.instance_1},{t:this.instance}]}).wait(1));

}).prototype = getMCSymbolPrototype(lib.mcReservoir, new cjs.Rectangle(-87.5,-55,175,110), null);


(lib.mcRadiator = function(mode,startPosition,loop) {
	this.initialize(mode,startPosition,loop,{});

	// Layer_1
	this.instance = new lib.mcDot();
	this.instance.parent = this;
	this.instance.setTransform(41,-78.9);

	this.instance_1 = new lib.Radiator();
	this.instance_1.parent = this;
	this.instance_1.setTransform(-143,-221.2,0.5,0.5);

	this.timeline.addTween(cjs.Tween.get({}).to({state:[{t:this.instance_1},{t:this.instance}]}).wait(1));

}).prototype = getMCSymbolPrototype(lib.mcRadiator, new cjs.Rectangle(-143,-221.2,286,442.5), null);


(lib.mcIntakeManifold = function(mode,startPosition,loop) {
	this.initialize(mode,startPosition,loop,{});

	// Layer_1
	this.instance = new lib.mcDot();
	this.instance.parent = this;
	this.instance.setTransform(38,-51.9);

	this.instance_1 = new lib.IntakeManifold();
	this.instance_1.parent = this;
	this.instance_1.setTransform(-143.7,-105.5,0.5,0.5);

	this.timeline.addTween(cjs.Tween.get({}).to({state:[{t:this.instance_1},{t:this.instance}]}).wait(1));

}).prototype = getMCSymbolPrototype(lib.mcIntakeManifold, new cjs.Rectangle(-143.7,-105.5,287.5,211), null);


(lib.mcHeaterCore = function(mode,startPosition,loop) {
	this.initialize(mode,startPosition,loop,{});

	// Layer_1
	this.instance = new lib.mcDot();
	this.instance.parent = this;
	this.instance.setTransform(71,39.1);

	this.instance_1 = new lib.HeaterCore();
	this.instance_1.parent = this;
	this.instance_1.setTransform(-119.7,-105.7,0.5,0.5);

	this.timeline.addTween(cjs.Tween.get({}).to({state:[{t:this.instance_1},{t:this.instance}]}).wait(1));

}).prototype = getMCSymbolPrototype(lib.mcHeaterCore, new cjs.Rectangle(-119.7,-105.7,239.5,211.5), null);


(lib.mcHeadGasket = function(mode,startPosition,loop) {
	this.initialize(mode,startPosition,loop,{});

	// Layer_1
	this.instance = new lib.mcDot();
	this.instance.parent = this;
	this.instance.setTransform(-121,38.1);

	this.instance_1 = new lib.HeadGasket();
	this.instance_1.parent = this;
	this.instance_1.setTransform(-202,-61.5,0.5,0.5);

	this.timeline.addTween(cjs.Tween.get({}).to({state:[{t:this.instance_1},{t:this.instance}]}).wait(1));

}).prototype = getMCSymbolPrototype(lib.mcHeadGasket, new cjs.Rectangle(-202,-61.5,404,123), null);


(lib.mcFreezePlug = function(mode,startPosition,loop) {
	this.initialize(mode,startPosition,loop,{});

	// Layer_1
	this.instance = new lib.mcDot();
	this.instance.parent = this;
	this.instance.setTransform(-8,-4.9);

	this.instance_1 = new lib.FreezePlug();
	this.instance_1.parent = this;
	this.instance_1.setTransform(-83.7,-29.7,0.5,0.5);

	this.timeline.addTween(cjs.Tween.get({}).to({state:[{t:this.instance_1},{t:this.instance}]}).wait(1));

}).prototype = getMCSymbolPrototype(lib.mcFreezePlug, new cjs.Rectangle(-83.7,-29.7,167.5,59.5), null);


(lib.mcEngineBlock = function(mode,startPosition,loop) {
	this.initialize(mode,startPosition,loop,{});

	// Layer_1
	this.instance = new lib.mcDot();
	this.instance.parent = this;
	this.instance.setTransform(-120,91);

	this.instance_1 = new lib.EngineBlock();
	this.instance_1.parent = this;
	this.instance_1.setTransform(-218.2,-198.7,0.5,0.5);

	this.timeline.addTween(cjs.Tween.get({}).to({state:[{t:this.instance_1},{t:this.instance}]}).wait(1));

}).prototype = getMCSymbolPrototype(lib.mcEngineBlock, new cjs.Rectangle(-218.2,-198.7,436.5,397.5), null);


(lib.mcCylinderHead = function(mode,startPosition,loop) {
	this.initialize(mode,startPosition,loop,{});

	// Layer_1
	this.instance = new lib.mcDot();
	this.instance.parent = this;
	this.instance.setTransform(-116,-21.5);

	this.instance_1 = new lib.CylinderHead();
	this.instance_1.parent = this;
	this.instance_1.setTransform(-214.7,-116,0.5,0.5);

	this.timeline.addTween(cjs.Tween.get({}).to({state:[{t:this.instance_1},{t:this.instance}]}).wait(1));

}).prototype = getMCSymbolPrototype(lib.mcCylinderHead, new cjs.Rectangle(-214.7,-116,429.5,232), null);


(lib.mcCalloutButton = function(mode,startPosition,loop) {
	this.initialize(mode,startPosition,loop,{});

	// Layer_2
	this.txtCalloutButton = new cjs.Text("Learn More", "normal 700 18px 'Fira Sans'", "#FFFFFF");
	this.txtCalloutButton.name = "txtCalloutButton";
	this.txtCalloutButton.lineHeight = 30;
	this.txtCalloutButton.lineWidth = 98;
	this.txtCalloutButton.parent = this;
	this.txtCalloutButton.setTransform(-47,-12.5);
	if(!lib.properties.webfonts['Fira Sans']) {
		lib.webFontTxtInst['Fira Sans'] = lib.webFontTxtInst['Fira Sans'] || [];
		lib.webFontTxtInst['Fira Sans'].push(this.txtCalloutButton);
	}

	this.timeline.addTween(cjs.Tween.get(this.txtCalloutButton).wait(1));

	// Layer_1
	this.instance = new lib.btnCalloutButton();
	this.instance.parent = this;
	new cjs.ButtonHelper(this.instance, 0, 1, 2, false, new lib.btnCalloutButton(), 3);

	this.timeline.addTween(cjs.Tween.get(this.instance).wait(1));

}).prototype = getMCSymbolPrototype(lib.mcCalloutButton, new cjs.Rectangle(-57.5,-23.5,115.1,47), null);


(lib.mcCallout = function(mode,startPosition,loop) {
	this.initialize(mode,startPosition,loop,{});

	// timeline functions:
	this.frame_0 = function() {
		/* Click to Go to Web Page
		Clicking on the specified symbol instance loads the URL in a new browser window.
		
		Instructions:
		1. Replace http://www.adobe.com with the desired URL address.
		   Keep the quotation marks ("").
		*/
		
		//this.mcCalloutButton.bg_clickTag.cursor = "pointer"
		this.mcCalloutButton.addEventListener("click", fl_ClickToGoToWebPage);
		
		function fl_ClickToGoToWebPage() {
			window.open(currentComponentLink, "_parent");
		}
	}

	// actions tween:
	this.timeline.addTween(cjs.Tween.get(this).call(this.frame_0).wait(1));

	// Layer_1
	this.mcCalloutButton = new lib.mcCalloutButton();
	this.mcCalloutButton.name = "mcCalloutButton";
	this.mcCalloutButton.parent = this;
	this.mcCalloutButton.setTransform(-76,126);

	this.txtComponentDescription = new cjs.Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ultrices purus non ipsum feugiat, nec efficitur sem porttitor. Aenean sit amet sapien sit amet massa aliquam pretium.", "normal 400 18px 'Fira Sans'", "#333333");
	this.txtComponentDescription.name = "txtComponentDescription";
	this.txtComponentDescription.lineHeight = 28;
	this.txtComponentDescription.lineWidth = 267;
	this.txtComponentDescription.parent = this;
	this.txtComponentDescription.setTransform(-133.6,-109.3);
	if(!lib.properties.webfonts['Fira Sans']) {
		lib.webFontTxtInst['Fira Sans'] = lib.webFontTxtInst['Fira Sans'] || [];
		lib.webFontTxtInst['Fira Sans'].push(this.txtComponentDescription);
	}

	this.txtComponentName = new cjs.Text("Component Name", "normal 700 22px 'Fira Sans'", "#234287");
	this.txtComponentName.name = "txtComponentName";
	this.txtComponentName.lineHeight = 36;
	this.txtComponentName.lineWidth = 267;
	this.txtComponentName.parent = this;
	this.txtComponentName.setTransform(-133.6,-154.3);
	if(!lib.properties.webfonts['Fira Sans']) {
		lib.webFontTxtInst['Fira Sans'] = lib.webFontTxtInst['Fira Sans'] || [];
		lib.webFontTxtInst['Fira Sans'].push(this.txtComponentName);
	}

	this.timeline.addTween(cjs.Tween.get({}).to({state:[{t:this.txtComponentName},{t:this.txtComponentDescription},{t:this.mcCalloutButton}]}).wait(1));

	// Layer_2
	this.mcCalloutBackground = new lib.mcCalloutBackground();
	this.mcCalloutBackground.name = "mcCalloutBackground";
	this.mcCalloutBackground.parent = this;
	this.mcCalloutBackground.shadow = new cjs.Shadow("rgba(153,153,153,1)",0,5,15);

	this.timeline.addTween(cjs.Tween.get(this.mcCalloutBackground).wait(1));

}).prototype = getMCSymbolPrototype(lib.mcCallout, new cjs.Rectangle(-166,-175,336,364), null);


// stage content:
(lib.ksealenginecomponents = function(mode,startPosition,loop) {
	this.initialize(mode,startPosition,loop,{});

	// timeline functions:
	this.frame_0 = function() {
		this.stop();
		
		var root = this;
		
		//counts the number of reasons that the callout should be visible
		calloutShow = 0;
		calloutVisibility();
		
		//gather up all the components
		var engineComponents = [this.mcRadiator,
								this.mcHoseLower,
								this.mcReservoir,
								this.mcThermostat,
								this.mcHoseWaterPump,
								this.mcIntakeManifold,
								this.mcWaterPump,
								this.mcCylinderHead,
								this.mcHeadGasket,
								this.mcFreezePlug,
								this.mcEngineBlock,
								this.mcHoseHeaterCore,
								this.mcHeaterCore,
								this.mcHoseReturn
								];
		
		
		//initialize engine components
		engineComponents.forEach(function(item, index, array) {
			
			//set origin x and y
			item.originX = item.x;
			item.originY = item.y;
				
			//add mouseover and mouseout listeners only to important components
			if( index == 1 || index == 4 || index == 11 || index == 13 ){
					//do nothing
			} else {
				
				//add component mouseover listener
				item.addEventListener("mouseover", componentRollOver);
				item.addEventListener("MouseEvent.CLICK", componentRollOver);
			
				//add component mouseout listener
				item.addEventListener("mouseout", componentRollOut);
			}
		});
		
		//holds the web link for the current component
		currentComponentLink = "";
		
		// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		// !-- Set the text and links for the callouts here --!
		// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		
		//text for the callout button
		this.mcCallout.mcCalloutButton.txtCalloutButton.text = "Learn More";
		
		//callout headline
		this.mcRadiator.txtComponentName = "Radiator";
		
		//callout body copy
		this.mcRadiator.txtComponentDescription = "The radiator is designed to transfer heat between the cooling system and the atmosphere in order to maintain the correct engine temperature. The main reason radiators fail is due to corrosion or damage causing a leak, which can lead to the engine overheating  - potentially costing you a lot of money to get it fixed. So how can you look out for a leak, and fix it?";
		
		//callout link address (use absolute links)
		//this.mcRadiator.txtComponentLink = "1131";
		this.mcRadiator.txtComponentLink = "https://www.kseal.com/expert-advice/engine-problems/radiator";
		
		
		
		this.mcReservoir.txtComponentName = "Reservoir";
		this.mcReservoir.txtComponentDescription = "Known as the expansion tank, header tank or reservoir, this is a container located near the radiator that holds the excess or overflowing cooling agent used in the engine. In most modern cars this is also where you would top up the coolant and add K-Seal. In older cars you may still need to add K-Seal via the radiator.";
		//this.mcReservoir.txtComponentLink = "28";
		
		
		this.mcReservoir.txtComponentLink = "https://www.kseal.com/using-k-seal/instructions/how-to-use-k-seal";
		
		
		this.mcThermostat.txtComponentName = "Thermostat";
		this.mcThermostat.txtComponentDescription = "Sitting between the engine and the radiator, the thermostat is critical to making your car’s cooling system work. If the engine is too hot, the thermostat acknowledges this and lets coolant flow freely through the radiator in order to cool the engine. If the engine is too cool the thermostat reduces or stops the flow of coolant to the radiator allowing the engine to warm up.";
		//this.mcThermostat.txtComponentLink = "1131";
		this.mcThermostat.txtComponentLink = "https://www.kseal.com/expert-advice/engine-problems/radiator";
		
		this.mcIntakeManifold.txtComponentName = "Intake Manifold";
		this.mcIntakeManifold.txtComponentDescription = "Your vehicle’s intake manifold is a vital part of the internal combustion engine. Its primary purpose is to evenly distribute the mixture of air and fuel into the cylinders. The intake manifold also conducts coolant through the cylinders to reduce engine temperature – helping to keep your engine running smoothly. However, it can be very difficult to identify symptoms as related to intake manifold failure – unless you know what to look out for.";
		//this.mcIntakeManifold.txtComponentLink = "1134";
		this.mcIntakeManifold.txtComponentLink = "https://www.kseal.com/expert-advice/engine-problems/intake-manifold";
		
		this.mcWaterPump.txtComponentName = "Water Pump";
		this.mcWaterPump.txtComponentDescription = "The water pump ensures that enough coolant liquid is flowing around the cooling system in order to remove sufficient heat to prevent the engine overheating. The more the engine works the faster coolant is pushed around the cooling system. Water pumps do malfunction from time to time, but the most common issue is the casing developing a leak.  This will lead to overheating which can cause serious damage to other parts of the engine, including the cylinder head and block. Fortunately, there is an affordable way to fix this…";
		//this.mcWaterPump.txtComponentLink = "1133";
		this.mcWaterPump.txtComponentLink = "https://www.kseal.com/expert-advice/engine-problems/water-pump";
		
		this.mcCylinderHead.txtComponentName = "Cylinder Head";
		this.mcCylinderHead.txtComponentDescription = "A cylinder head sits on top of the engine block and covers its cylinders, creating the combustion chamber. A complicated part of the engine, if the cylinder head fails it will lead to the engine (and by extension the vehicle) breaking down. Any problem it might develop should therefore be repaired as quickly as possible.";
		//this.mcCylinderHead.txtComponentLink = "1136";
		this.mcCylinderHead.txtComponentLink = "https://www.kseal.com/expert-advice/engine-problems/cylinder-head";
		
		this.mcHeadGasket.txtComponentName = "Head Gasket";
		this.mcHeadGasket.txtComponentDescription = "A head gasket acts as the seal between the engine block and cylinder head. It seals the combustion gases within the engine and keeps out the coolant that is designed to cool the engine cylinder. If you don’t notice the early symptoms of head gasket leaks and continue to drive the car, things will get progressively worse. And should the head gasket blow, some motorists may find it cheaper to scrap the vehicle than fork out to have it repaired.";
		//this.mcHeadGasket.txtComponentLink = "1128";
		this.mcHeadGasket.txtComponentLink = "https://www.kseal.com/expert-advice/engine-problems/head-gasket";
		
		this.mcFreezePlug.txtComponentName = "Freeze Plug";
		this.mcFreezePlug.txtComponentDescription = "Commonly known as a freeze plug, core plug, or expansion plug, this engine component is left over from the casting process when the engine block was manufactured. Corrosion can result in the core plug leaking leading to more severe problems due to overheating.";
		//this.mcFreezePlug.txtComponentLink = "1130";
		this.mcFreezePlug.txtComponentLink = "https://www.kseal.com/expert-advice/engine-problems/engine-block";
		
		this.mcEngineBlock.txtComponentName = "Engine Block";
		this.mcEngineBlock.txtComponentDescription = "The engine or cylinder block is the key component of an internal combustion engine, where the power to drive the vehicle is generated by igniting a mixture of fuel and air to produce an explosion. Performing a number of functions, the engine block needs to be monitored to ensure the engine – and car as a whole – continue to run safely. Leave a problem unchecked, and it could cost you thousands to repair. But there are ways to recognise the symptoms before the problem gets worse.";
		//this.mcEngineBlock.txtComponentLink = "1130";
		this.mcEngineBlock.txtComponentLink = "https://www.kseal.com/expert-advice/engine-problems/engine-block";
		
		
		this.mcHeaterCore.txtComponentName = "Heater Core";
		this.mcHeaterCore.txtComponentDescription = "The heater core is also known as the heater matrix. Instead of removing heat to the outside air like the radiator, the heater core transfers heat to the vehicle interior to help keep you warm. If the heater core leaks, you may no longer be able to warm up your vehicle’s interior, and more coolant than usual may be being used up. Getting this replaced or repaired is a time consuming and expensive job.";
		//this.mcHeaterCore.txtComponentLink = "1132";
		this.mcHeaterCore.txtComponentLink = "https://www.kseal.com/expert-advice/engine-problems/heater-core";
		
		
		// !!!!!!!!!!!!!!!!!!!!!!!!!
		// !-- Stop editing here --!
		// !!!!!!!!!!!!!!!!!!!!!!!!!
		
		//adjust component target X and Y
		this.mcRadiator.targetX = 223;
		this.mcRadiator.targetY = 537;
		
		this.mcHoseLower.targetX = 845;
		this.mcHoseLower.targetY = 680;
		
		this.mcReservoir.targetX = 530;
		this.mcReservoir.targetY = 773;
		
		this.mcThermostat.targetX = 954;
		this.mcThermostat.targetY = 445;
		
		this.mcHoseWaterPump.targetX = 697;
		this.mcHoseWaterPump.targetY = 457;
		
		this.mcIntakeManifold.targetX = 770;
		this.mcIntakeManifold.targetY = 535;
		
		this.mcWaterPump.targetX = 407;
		this.mcWaterPump.targetY = 538;
		
		this.mcCylinderHead.targetX = 626;
		this.mcCylinderHead.targetY = 144;
		
		this.mcHeadGasket.targetX = 622;
		this.mcHeadGasket.targetY = 295;
		
		this.mcFreezePlug.targetX = 864;
		this.mcFreezePlug.targetY = 664;
		
		this.mcEngineBlock.targetX = 623;
		this.mcEngineBlock.targetY = 526;
		
		this.mcHoseHeaterCore.targetX = 881;
		this.mcHoseHeaterCore.targetY = 345;
		
		this.mcHeaterCore.targetX = 972;
		this.mcHeaterCore.targetY = 283;
		
		this.mcHoseReturn.targetX = 395;
		this.mcHoseReturn.targetY = 356;
		
		
		//initialize original z-index
		this.mcRadiator.originZ = 14;
		this.mcHoseLower.originZ = 13;
		this.mcReservoir.originZ = 12;
		this.mcThermostat.originZ = 11;
		this.mcHoseWaterPump.originZ = 10;
		this.mcIntakeManifold.originZ = 9;
		this.mcWaterPump.originZ = 8;
		this.mcCylinderHead.originZ = 7;
		this.mcHeadGasket.originZ = 6;
		this.mcFreezePlug.originZ = 5;
		this.mcEngineBlock.originZ = 4;
		this.mcHoseHeaterCore.originZ = 3;
		this.mcHeaterCore.originZ = 2;
		this.mcHoseReturn.originZ = 1;
		
		//reorders components into correct z-order stack
		function resetZ() {
			engineComponents.forEach(function(item, index, array) {
				item.parent.setChildIndex(item, item.originZ);
			});
		}
		
		////mouse over listener
		stage.enableMouseOver(10);
		var mouse = {x:0, y:0};
		
		
		//stage mouseover listener
		stage.addEventListener("mouseover", over.bind(this));
		function over(){
			//explode the components to their target locations
		  engineComponents.forEach(function(item, index, array) {
				TweenLite.to(item, 0.75, {y:item.targetY, x:item.targetX, ease:Power1.easeInOut});
			});
			
		}
		
		stage.addEventListener("mouseout", out.bind(this));
		function out(){
			//implode the components to their original location
		  engineComponents.forEach(function(item, index, array) {
				TweenLite.to(item, 0.75, {x:item.originX, y:item.originY, ease:Power1.easeInOut});
			});
		}
		
		
		//when mouse rolls over a component
		function componentRollOver(e) {
			
			var compName = e.currentTarget.txtComponentName;
			var compDesc = e.currentTarget.txtComponentDescription;
			var compLink = e.currentTarget.txtComponentLink;
			
			jQuery('.lightbox .dialogue-box').html('<h2>' + compName + '</h2>' + '<p>' + compDesc + '</p>' + '<a href="'+ compLink +'" class="btn-primary btn">Learn More </a>');
			
			jQuery('.tooltip-title').html(compName).show();
			
			if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) { jQuery('.phone-moreinfo').show(); }
						
			jQuery('.canvas-wrap').css( 'cursor', 'pointer' );
			
			
			//scale up the target
			TweenLite.to(e.currentTarget, 0.3, {scaleX:1.1, scaleY:1.1, ease:Power1.easeInOut});
			//pop it to the top of the Z index stack
			e.currentTarget.parent.setChildIndex( e.currentTarget, e.currentTarget.parent.getNumChildren()-1 );
			
			//get values for bitmap cache
			var cachewidth = e.currentTarget.getBounds().width;
			var cacheheight = e.currentTarget.getBounds().height;
			var cacheleft = cachewidth * -0.5;
			var cachetop = cacheheight * -0.5;
			
			//crate bitmap cache for GSAP EaselPlugin
			e.currentTarget.cache(cacheleft, cachetop, cachewidth, cacheheight, 2); //left, top, width, height
			
			//colorize the target component
			TweenLite.to(e.currentTarget, 0.3, {easel:{colorize:"#F56723", colorizeAmount:1}});
		
			//set the callout text and link
			root.mcCallout.txtComponentName.text = e.currentTarget.txtComponentName;
			root.mcCallout.txtComponentDescription.text = e.currentTarget.txtComponentDescription;
			currentComponentLink = e.currentTarget.txtComponentLink;
			
			calloutShow += 1;
			calloutVisibility();
		
			//set position of callout
			var calloutWidth = root.mcCallout.getBounds().width;
			var calloutHeight = root.mcCallout.getBounds().width;	
			var calloutSide = 1;
			
			//decide whether callout should appear to right or left of component
			if(e.currentTarget.x > root.stage.getBounds().width - (calloutWidth/2) - (cachewidth/2) - 50){
				calloutSide = -1;
			}
			
			//set x of callout
			root.mcCallout.x = e.currentTarget.x + (((cachewidth/2) + (calloutWidth/2) + 25) * calloutSide);
			
			//set y of callout
			if(e.currentTarget.y < (calloutHeight/2) + 100){
				//too high
				root.mcCallout.y = (calloutHeight/2) + 100;
			} else if(e.currentTarget.y > root.stage.getBounds().height - (calloutHeight/2) - 100) {
				//too low
				root.mcCallout.y = root.stage.getBounds().height - (calloutHeight/2);
			} else {
				//just right
				root.mcCallout.y = e.currentTarget.y;
			}
			
			
		//	callout.parent.setChildIndex(callout, callout.parent.getNumChildren()-1 );
		}
		
		//when mouse rolls off a component
		function componentRollOut(e) {
			calloutShow -= 1;
			calloutVisibility();
								
			//return target to original Z index
			e.currentTarget.parent.setChildIndex(e.currentTarget, e.currentTarget.originZ);
				
			//scale down target
			TweenLite.to(e.currentTarget, 0.3, {scaleX:1, scaleY:1, ease:Power1.easeInOut});
				
			//de-colorize target
			TweenLite.to(e.currentTarget, 0.3, {easel:{colorize:"#F56723", colorizeAmount:0}});
			
		}
		
		//decides if Callout should be visible
		function calloutVisibility(){
			//if callout has 1 or more reasons to show
			//console.log(calloutShow);
			if(calloutShow > 0) {
				//show the callout
				root.mcCallout.visible = false;
				//pop it to the top of the z index stack
				root.mcCallout.parent.setChildIndex( root.mcCallout, root.mcCallout.parent.getNumChildren()-1 );
			} else {
				//otherwise hide callout
				root.mcCallout.visible = false;
				calloutShow = 0;
			}
		}
		
		//add component mouseover listener
		this.mcCallout.addEventListener("mouseover", calloutRollOver);
			
		//add component mouseout listener
		this.mcCallout.addEventListener("mouseout", calloutRollOut);
		
		function calloutRollOver(){
			calloutShow += 1;
			calloutVisibility();
		}
		
		function calloutRollOut() {
			calloutShow -= 1;
			calloutVisibility();
		}
	}

	// actions tween:
	this.timeline.addTween(cjs.Tween.get(this).call(this.frame_0).wait(2));

	// callout
	this.mcCallout = new lib.mcCallout();
	this.mcCallout.name = "mcCallout";
	this.mcCallout.parent = this;
	this.mcCallout.setTransform(1029.9,714);

	this.timeline.addTween(cjs.Tween.get(this.mcCallout).wait(2));

	// radiator
	this.mcRadiator = new lib.mcRadiator();
	this.mcRadiator.name = "mcRadiator";
	this.mcRadiator.parent = this;
	this.mcRadiator.setTransform(308.5,387.9);

	this.timeline.addTween(cjs.Tween.get(this.mcRadiator).wait(1).to({x:223,y:537},0).wait(1));

	// hose lower
	this.mcHoseLower = new lib.mcHoseLower();
	this.mcHoseLower.name = "mcHoseLower";
	this.mcHoseLower.parent = this;
	this.mcHoseLower.setTransform(709.1,406.6);

	this.timeline.addTween(cjs.Tween.get(this.mcHoseLower).wait(1).to({x:845,y:671},0).wait(1));

	// reservoir
	this.mcReservoir = new lib.mcReservoir();
	this.mcReservoir.name = "mcReservoir";
	this.mcReservoir.parent = this;
	this.mcReservoir.setTransform(521.2,322.9);

	this.timeline.addTween(cjs.Tween.get(this.mcReservoir).wait(1).to({x:530,y:773},0).wait(1));

	// thermostat
	this.mcThermostat = new lib.mcThermostat();
	this.mcThermostat.name = "mcThermostat";
	this.mcThermostat.parent = this;
	this.mcThermostat.setTransform(889.5,235.2);

	this.timeline.addTween(cjs.Tween.get(this.mcThermostat).wait(1).to({x:95445,y:445.5},0).wait(1));

	// hose water pump
	this.mcHoseWaterPump = new lib.mcHoseWaterPump();
	this.mcHoseWaterPump.name = "mcHoseWaterPump";
	this.mcHoseWaterPump.parent = this;
	this.mcHoseWaterPump.setTransform(695.9,324.6);

	this.timeline.addTween(cjs.Tween.get(this.mcHoseWaterPump).wait(1).to({x:697.3,y:456.8},0).wait(1));

	// intake manifold
	this.mcIntakeManifold = new lib.mcIntakeManifold();
	this.mcIntakeManifold.name = "mcIntakeManifold";
	this.mcIntakeManifold.parent = this;
	this.mcIntakeManifold.setTransform(709.6,290.5);

	this.timeline.addTween(cjs.Tween.get(this.mcIntakeManifold).wait(1).to({x:770.3,y:535.1},0).wait(1));

	// water pump
	this.mcWaterPump = new lib.mcWaterPump();
	this.mcWaterPump.name = "mcWaterPump";
	this.mcWaterPump.parent = this;
	this.mcWaterPump.setTransform(489.1,389.1);

	this.timeline.addTween(cjs.Tween.get(this.mcWaterPump).wait(1).to({x:407.4,y:538},0).wait(1));

	// cylinder head
	this.mcCylinderHead = new lib.mcCylinderHead();
	this.mcCylinderHead.name = "mcCylinderHead";
	this.mcCylinderHead.parent = this;
	this.mcCylinderHead.setTransform(625.6,199.7);

	this.timeline.addTween(cjs.Tween.get(this.mcCylinderHead).wait(1).to({x:626.6,y:144},0).wait(1));

	// head gasket
	this.mcHeadGasket = new lib.mcHeadGasket();
	this.mcHeadGasket.name = "mcHeadGasket";
	this.mcHeadGasket.parent = this;
	this.mcHeadGasket.setTransform(621.6,250.6);

	this.timeline.addTween(cjs.Tween.get(this.mcHeadGasket).wait(1).to({y:294.7},0).wait(1));

	// freeze plug
	this.mcFreezePlug = new lib.mcFreezePlug();
	this.mcFreezePlug.name = "mcFreezePlug";
	this.mcFreezePlug.parent = this;
	this.mcFreezePlug.setTransform(684.8,430.6);

	this.timeline.addTween(cjs.Tween.get(this.mcFreezePlug).wait(1).to({x:824.5,y:663.7},0).wait(1));

	// engine block
	this.mcEngineBlock = new lib.mcEngineBlock();
	this.mcEngineBlock.name = "mcEngineBlock";
	this.mcEngineBlock.parent = this;
	this.mcEngineBlock.setTransform(623,391.6);

	this.timeline.addTween(cjs.Tween.get(this.mcEngineBlock).wait(1).to({x:623.3,y:525.6},0).wait(1));

	// hose heater core
	this.mcHoseHeaterCore = new lib.mcHoseHeaterCore();
	this.mcHoseHeaterCore.name = "mcHoseHeaterCore";
	this.mcHoseHeaterCore.parent = this;
	this.mcHoseHeaterCore.setTransform(900.2,183.8);

	this.timeline.addTween(cjs.Tween.get(this.mcHoseHeaterCore).wait(1).to({x:881.3,y:345.5},0).wait(1));

	// heater core
	this.mcHeaterCore = new lib.mcHeaterCore();
	this.mcHeaterCore.name = "mcHeaterCore";
	this.mcHeaterCore.parent = this;
	this.mcHeaterCore.setTransform(932,144.7);

	this.timeline.addTween(cjs.Tween.get(this.mcHeaterCore).wait(1).to({x:971.9,y:283.3},0).wait(1));

	// hose return
	this.mcHoseReturn = new lib.mcHoseReturn();
	this.mcHoseReturn.name = "mcHoseReturn";
	this.mcHoseReturn.parent = this;
	this.mcHoseReturn.setTransform(362.4,201);

	this.timeline.addTween(cjs.Tween.get(this.mcHoseReturn).wait(1).to({x:395,y:356.4},0).wait(1));

	// background
	this.shape = new cjs.Shape();
	this.shape.graphics.f().s().p("EhdvBGUMAAAiMnMC7fAAAMAAACMng");
	this.shape.setTransform(600,450);

	this.timeline.addTween(cjs.Tween.get(this.shape).wait(2));

}).prototype = p = new cjs.MovieClip();
p.nominalBounds = new cjs.Rectangle(600,450,1200,904);
// library properties:
lib.properties = {
	id: '6DEFC84FD411479E841AF2F7606C5481',
	width: 1200,
	height: 900,
	fps: 24,
	color: "#FFFFFF",
	opacity: 0.00,
	webfonts: {},
	manifest: [
		{src:"https://www.kseal.com/wp-content/uploads/2017/11/kseal_engine_components_atlas_.png", id:"kseal_engine_components_new_atlas_"}
	],
	preloads: []
};



// bootstrap callback support:

(lib.Stage = function(canvas) {
	createjs.Stage.call(this, canvas);
}).prototype = p = new createjs.Stage();

p.setAutoPlay = function(autoPlay) {
	this.tickEnabled = autoPlay;
}
p.play = function() { this.tickEnabled = true; this.getChildAt(0).gotoAndPlay(this.getTimelinePosition()) }
p.stop = function(ms) { if(ms) this.seek(ms); this.tickEnabled = false; }
p.seek = function(ms) { this.tickEnabled = true; this.getChildAt(0).gotoAndStop(lib.properties.fps * ms / 1000); }
p.getDuration = function() { return this.getChildAt(0).totalFrames / lib.properties.fps * 1000; }

p.getTimelinePosition = function() { return this.getChildAt(0).currentFrame / lib.properties.fps * 1000; }

an.bootcompsLoaded = an.bootcompsLoaded || [];
if(!an.bootstrapListeners) {
	an.bootstrapListeners=[];
}

an.bootstrapCallback=function(fnCallback) {
	an.bootstrapListeners.push(fnCallback);
	if(an.bootcompsLoaded.length > 0) {
		for(var i=0; i<an.bootcompsLoaded.length; ++i) {
			fnCallback(an.bootcompsLoaded[i]);
		}
	}
};

an.compositions = an.compositions || {};
an.compositions['6DEFC84FD411479E841AF2F7606C5481'] = {
	getStage: function() { return exportRoot.getStage(); },
	getLibrary: function() { return lib; },
	getSpriteSheet: function() { return ss; },
	getImages: function() { return img; }
};

an.compositionLoaded = function(id) {
	an.bootcompsLoaded.push(id);
	for(var j=0; j<an.bootstrapListeners.length; j++) {
		an.bootstrapListeners[j](id);
	}
}

an.getComposition = function(id) {
	return an.compositions[id];
}



})(createjs = createjs||{}, AdobeAn = AdobeAn||{});
var createjs, AdobeAn;
</script>{"id":7726,"date":"2018-02-26T10:52:38","date_gmt":"2018-02-26T10:52:38","guid":{"rendered":"https:\/\/www.kseal.com\/?page_id=7726"},"modified":"2024-03-14T15:34:05","modified_gmt":"2024-03-14T15:34:05","slug":"bmw","status":"publish","type":"page","link":"https:\/\/www.kseal.com\/uk\/expert-advice\/engine-problems\/bmw","title":{"rendered":"How to fix common BMW engine problems"},"content":{"rendered":"<h2>What kinds of engine problems do BMWs suffer from?<\/h2>\n<p>Although considered to have a reasonable level of reliability, engine cooling system problems are fairly common in BMWs \u2013 particularly in the case of coolant leaks and failed water pumps.<\/p>\n<p>These can all be costly in their own way if left unchecked \u2013 but there are ways to diagnose problems before the cost of repairs hits your wallet.<\/p>\n<h2>Which BMW models suffer from cooling system problems?<\/h2>\n<p>Owners of a 1999-2005 BMW 3-series (E46), 2006-2011 BMW 3-series or 2007-2012 BMW X5 should ensure they pay special attention to their vehicle\u2019s cooling systems. If the cooling system is not functioning properly this can cause the engine to overheat, and require very expensive repairs.<\/p>\n<h2>Why do cooling systems fail?<\/h2>\n<p>This overheating is usually caused by a coolant leak \u2013 which can be quickly identified if the coolant indicator on your dashboard has dropped quickly over a short time. If your BMW\u2019s water pump fails, this can also prevent coolant from flowing freely through your engine, and result in it overheating.<\/p>\n<p>Catch this early, however, and you can apply K-Seal to fix the problem and prevent the engine from overheating. Widely available, you can <a href=\"https:\/\/www.kseal.com\/find-stockist\">find your nearest stockist using our handy search tool<\/a>.<\/p>\n<h2>How do I know if my BMW\u2019s head gasket is leaking?<\/h2>\n<p>If smoke is coming from your car\u2019s exhaust, it could mean that your BMW\u2019s <a href=\"https:\/\/www.kseal.com\/expert-advice\/engine-problems\/how-to-fix-a-blown-head-gasket\">head gasket is leaking<\/a>, and needs replacing or fixing. Smoke like this tends to appear if the car has just been started or is idling for a while. If your cooling system constantly needs to be topped up with water, this may be a sign too.<\/p>\n<h2><a name=\"_Toc494978438\"><\/a>How much does a BMW head gasket replacement cost?<\/h2>\n<p>A blown gasket always takes a toll on your bank account \u2013 often costing in the thousands. Rather than risking the cost of replacing your BMW\u2019s head gasket altogether, it\u2019s much better to try to fix the leak before it gets to this point.<\/p>\n<p>K-Seal is purpose-made to solve this problem before it gets out of hand, successfully mixing with all kinds of antifreeze and engine coolant to safely repair failures, prevent engine leaks and stop coolant from leaking into the engine cylinder.<\/p>\n<p>Want to fix that problem before it gets out of hand? <a href=\"https:\/\/www.kseal.com\/uk\/find-stockist\">Find your nearest K-Seal stockist<\/a>, and save yourself the cost of repairing your BMW\u2019s head gasket.<\/p>\n<h2>Could other parts of my engine be affected?<\/h2>\n<p>Although we\u2019ve mentioned the most common issues your BMW may encounter or be suffering from, this is not an exhaustive list.<\/p>\n<p>Select an engine part in the interactive diagram below to explore your engine and the important components that keep everything ticking over, or <a href=\"https:\/\/www.kseal.com\/expert-advice\/common-symptoms\/60-second-problem-solver\">try our 60 second problem solver<\/a> to quickly identify what your issue is from the symptoms.<\/p>\n<p>&nbsp;<\/p>\n<div class=\"schematic-desc\">Click on the engine components below for details<div class=\"tooltip-title\"><\/div><a href=\"javascript:void(0);\" class=\"phone-moreinfo\">More Info &raquo;<\/a><\/div><div id=\"smallWrap\" class=\"canvas-wrap\">\r\n\t<div id=\"animation_container\" style=\"background-color:rgba(255, 255, 255, 0.00); width:100% !important; height:auto !important\">\r\n\t\t<canvas id=\"canvas\" width=\"1200\" height=\"900\" style=\"position: absolute; display: block; background-color:rgba(255, 255, 255, 0.00);\"><\/canvas>\r\n\t\t<div id=\"dom_overlay_container\" style=\"pointer-events:none; overflow:hidden; width:100% !important; height:auto !important; position: absolute; left: 0px; top: 0px; display: block;\">\r\n\t\t<\/div>\r\n\t<\/div><\/div>  \r\n\n","protected":false},"excerpt":{"rendered":"<p>What kinds of engine problems do BMWs suffer from? Although considered to have a reasonable level of reliability, engine cooling system problems are fairly common in BMWs \u2013 particularly in the case of coolant leaks and failed water pumps. These can all be costly in their own way if left unchecked \u2013 but there are<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":171,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"acf":[],"_links":{"self":[{"href":"https:\/\/www.kseal.com\/uk\/wp-json\/wp\/v2\/pages\/7726"}],"collection":[{"href":"https:\/\/www.kseal.com\/uk\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.kseal.com\/uk\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.kseal.com\/uk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kseal.com\/uk\/wp-json\/wp\/v2\/comments?post=7726"}],"version-history":[{"count":25,"href":"https:\/\/www.kseal.com\/uk\/wp-json\/wp\/v2\/pages\/7726\/revisions"}],"predecessor-version":[{"id":19784,"href":"https:\/\/www.kseal.com\/uk\/wp-json\/wp\/v2\/pages\/7726\/revisions\/19784"}],"up":[{"embeddable":true,"href":"https:\/\/www.kseal.com\/uk\/wp-json\/wp\/v2\/pages\/171"}],"wp:attachment":[{"href":"https:\/\/www.kseal.com\/uk\/wp-json\/wp\/v2\/media?parent=7726"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}