/** * home page scripts * * @Henry Postulart * @1.0 */ var inMotion = false; var corpTop = 0; var personalTop = 0; function init() { br.home.init(); } br.home = { trigger : "trigger", target : "target", storyDown : 26, storyUp : 85, storyMargin : 8, init : function() { // locate key elements this.headerDIV = document.getElementById("hd"); this.bodyDIV = document.getElementById("bd"); this.contentDIVs = $D.getElementsByClassName("triggerLink","div", this.bodyDIV); this.viewportDIVs = $D.getElementsByClassName("viewport","div", this.bodyDIV); this.footerDIV = document.getElementById("ft"); this.stripCorp = $D.getElementsByClassName("stripCorp", "div", this.bodyDIV)[0]; if (this.stripCorp) { this.corpControls = $D.getElementsByClassName("corpControls", "ul", this.stripCorp); this.corpControlItems = []; for (var i = 0; i < this.corpControls.length; i++) { var ul = this.corpControls[i]; var items = ul.getElementsByTagName("a"); for (var j = 0; j < items.length; j++) { this.corpControlItems.push(items[j]); } } } this.stripPersonal = $D.getElementsByClassName("stripPersonal", "div", this.bodyDIV)[0]; if (this.stripPersonal) { this.personalControls = $D.getElementsByClassName("personalControls","", this.stripPersonal); this.personalControlItems = []; for (var i = 0; i < this.personalControls.length; i++) { var ul = this.personalControls[i]; var items = ul.getElementsByTagName("a"); for (var j = 0; j < items.length; j++) { this.personalControlItems.push(items[j]); } } } // attach event handlers to content strip content panes for (var i=0; i < this.contentDIVs.length; i++) { var d = this.contentDIVs[i]; d.setAttribute("storyID", i); d.setAttribute("status", "down"); } $E.addListener(this.contentDIVs, "mouseover", this.onContentMouseOver); $E.addListener(this.contentDIVs, "mouseout", this.onContentMouseOut); // attach event handlers to content strip selection icons $E.addListener(this.corpControlItems, "click", this.onContentAreaControlClick); $E.addListener(this.personalControlItems, "click", this.onContentAreaControlClick); // set up scrolling this.setupScrolling(); // set up initial scroll(s) try { this.scrollViewport(this.viewportDIVs[0]); this.scrollViewport(this.viewportDIVs[3]); } catch(e) {} /* Reduce IE flicker bug */ var isIE = navigator.appName.indexOf("Microsoft") != -1; if(isIE){ try{ document.execCommand("BackgroundImageCache", true, true); }catch(e){} } }, onContentMouseOver : function(e) { if (inMotion) {return;} var tbl = YAHOO.util.Dom.getAncestorByTagName(this, "table"); var h3 = this.getElementsByTagName("h3")[0]; var p = this.getElementsByTagName("p")[0]; p.style.display = "block"; var rh3 = YAHOO.util.Region.getRegion(h3); var rp = YAHOO.util.Region.getRegion(p); var h = rp.bottom - rh3.top; var anim = new YAHOO.util.Anim(this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode, {height:{to:h+br.home.storyMargin}}, 0.5, YAHOO.util.Easing.backOut); if ($D.hasClass(h3, "btnTop")) { $D.replaceClass(h3, "btnTop", "btnLeft"); } anim.animate(); }, onContentMouseOut : function(e) { if (inMotion) {return;} var h3 = this.getElementsByTagName("h3")[0]; this.getElementsByTagName("p")[0].style.display = "none"; var anim = new YAHOO.util.Anim(this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode, {height:{to:br.home.storyDown}}, 0.5, YAHOO.util.Easing.backOut); if ($D.hasClass(h3, "btnLeft")) { $D.replaceClass(h3, "btnLeft", "btnTop"); } anim.animate(); }, onContentAreaControlClick : function(e) { var par = this.parentNode; var el = par.parentNode; var divToOpen = null; var divToClose = null; var divStory = [null, null]; var items = el.getElementsByTagName("a"); for (var i = 0; i < items.length; i++) { var a = items[i]; var s = a.className.replace(/trigger/,"layer"); var testDIV = document.getElementById(s); if (testDIV) { if (a === this && $D.hasClass(testDIV, "hide")) { divToOpen = testDIV; divStory[0] = $D.getElementsByClassName("slabList", "div", testDIV) $D.setStyle(divStory[0], "opacity", "0"); } if ($D.hasClass(testDIV, "show")) { divToClose = testDIV; divStory[1] = $D.getElementsByClassName("slabList", "div", testDIV) } } } if (divToOpen && divToClose) { var viewport = $D.getElementsByClassName("viewport", "div", divToOpen)[0]; if (viewport) {br.home.scrollViewport(viewport);} var animOutDn = new $A(divStory[1], {opacity: { to: 0} }, 0.5, YAHOO.util.Easing.backOut); animOutDn.onStart.subscribe(function() { inMotion = true; }) animOutDn.onComplete.subscribe(function() { animOut.animate(); }); var animInUp = new $A(divStory[0], { opacity: { from: 0, to: 0.85} }, 0.5, YAHOO.util.Easing.backOut); animInUp.onComplete.subscribe(function() { inMotion = false; }); var rOut = $D.getRegion(divToClose); var newOutX = 0 - (rOut.right + rOut.left); var newOutY = rOut.top; var newInStartX = rOut.right; var newInStartY = newOutY; var newInEndX = rOut.left; var newInEndY = newOutY; var animOut = new $M(divToClose, { points: { to: [newOutX, newOutY] } }, 1, YAHOO.util.Easing.backOut); animOut.onStart.subscribe(function() { $D.replaceClass(divToOpen, "hide", "show"); animIn.animate();}); animOut.onComplete.subscribe(function() {$D.replaceClass(divToClose, "show", "hide"); }); var animIn = new $M(divToOpen, { points: { from: [newInStartX, newInStartY], to: [newInEndX, newInEndY] } }, 1, YAHOO.util.Easing.backOut); animIn.onComplete.subscribe(function() { animInUp.animate(); }); animOutDn.animate(); } $E.stopEvent(e); }, setupScrolling : function () { if (scrollItems) { for (var i = 0; i < scrollItems.length; i++) { var scroller = scrollItems[i]; // Assign values from global array, default where applicable var target = (scroller.target) ? scroller.target : "layerCorpSlabAir"; var image = (scroller.image) ? scroller.image : null; var direction = (scroller.direction) ? scroller.direction : "right"; var dimensions = (scroller.dimensions) ? scroller.dimensions : null; var duration = -1; //hack this for now to disable scrolling altogether // only proceed if image value supplied if (image) { // [Required] define target viewport var el = $D.getElementsByClassName("viewport", "div", $(target))[0]; // if present in page... if (typeof el != typeof undefined) { // [Required] assign scrolling background image to element el.style.backgroundPosition = "100%"; el.style.backgroundImage = "url(" + image + ")"; // [Required] store position attributes on element // "100% 0%" scrolls from left to right // "0% 100%" scrolls from right to left el.setAttribute("backgroundPosition", (direction.toLowerCase()==="right") ? "100% 0%" : "0% 100%"); // [Optional] store background image dimensions on element if (dimensions) el.setAttribute("dimensions", dimensions); // [Optional] store custom scroll duration on element el.setAttribute("duration", duration); } } } } }, scrollViewport : function(vp) { // set default values var xPos = 100, xEnd = 0; var yPos = 0 , yEnd = 100; var duration = scrollDuration; // attempt to retrieve position from viewport element var pos = vp.getAttribute("backgroundPosition"); if (pos !== null) { var posSplit = pos.split(" "); if (posSplit) { xPos = parseInt(posSplit[0], 10); yPos = parseInt(posSplit[1], 10); } } // attempt to retrieve scrolling image dimensions from viewport element var dim = vp.getAttribute("dimensions"); if (dim !== null) { var dimSplit = dim.split(" "); if (dimSplit) { var imgW = parseInt(dimSplit[0], 10); var imgH = parseInt(dimSplit[1], 10); } } // attempt to retrieve custom scrolling duration from viewport element var dur = vp.getAttribute("duration"); if (dur !== null) { duration = parseInt(dur, 10); } var w = vp.offsetWidth; if (xPos===100) xEnd = 0; if (xPos===0) xEnd = 100; var attributes = { backgroundPosition : {from: xPos, to : xEnd, unit:'%'} }; var anim = new YAHOO.util.Anim(vp, attributes, duration, null); anim.animate(); } }; // Set up event handlers when the DOM is ready YAHOO.util.Event.addListener(window, "load", init)