MTV.UI = new function(){ this.iframes = new Array(); this.initScrollingModules = function(){ /* handle no max-height in IE 6 */ if(jQuery.browser.msie && jQuery.browser.version.substr(0,1)=="6"){ $j(".scroll-wrap").each(function(){ var sw = $j(this); var olHeight = sw.children("ol:first").height(); if(olHeight < 370) sw.height("100%"); }); } } this.initIframes = function(){ var parent_doc = parent.document; for(var i=0; i < MTV.UI.iframes.length; i++){ // update height var iframe = $j("#"+MTV.UI.iframes[i], parent_doc); poll_height = $j(".iframe-mdl").height(); iframe.height(poll_height); } } } MTV.UI.Overlay = new function(){ this.active = false; this.init = function(){ $j("#container-outer").append('
'); $j("#modalWindow").remove().appendTo("#container-outer"); MTV.UI.Overlay.active = true; } this.open = function(){ $j("#overlay").addClass("open"); $j("#overlay").height(document.body.offsetHeight + "px"); } this.close = function(){ $j("#overlay").removeClass("open"); $j("#overlay").height("0px"); } } MTV.UI.ModalWindow = new function(){ var modalWindowId = "modalWindow"; var currentLocationId = ""; this.ignoreMouseDownBody = false; this.isOpen = false; this.open = function(requestUrl, locationId){ currentLocationId = locationId; $j.get(requestUrl, function(data){ MTV.UI.Overlay.open(); $j("#dialogContainer").empty().append(data); MTV.UI.ModalWindow.updateLocation(); }); } this.updateLocation = function(){ var mwElement = document.getElementById(modalWindowId); var mwLeft = 0; var mwTop = 0; var mwWidth = 446; var bodyWidth = document.body.offsetWidth; $j("#" + modalWindowId).removeClass("hide"); var wrap = document.getElementById("wrap"); var wrapX = $j("#wrap").offset().left; var wrapWidth = wrap.offsetWidth; var wrapThird = Math.round(wrapWidth/3); if(!currentLocationId){ // defaults to centered position if(MTV.UI.Overlay.active){ mwLeft = Math.round(bodyWidth/2 - mwWidth/2); } else{ mwLeft = Math.round(bodyWidth/2 - mwWidth/2); // centered for 446px-wide modal window } mwTop = Math.round(((document.documentElement.clientHeight - mwElement.offsetHeight)/2) + document.documentElement.scrollTop) - 30; // 30 pixel cheat } else{ //positioning relative to an element var locElement = document.getElementById(currentLocationId); var locLeft = $j("#" + currentLocationId).offset().left - wrapX; //left position relative to wrap instead of the window left var locTop = $j("#" + currentLocationId).offset().top; if(locLeft < wrapThird){ mwLeft = wrapX -20; } else if(locLeft > wrapThird && locLeft < (wrapThird * 2)){ Math.round(bodyWidth/2 - mwWidth/2); } else{ mwLeft = (wrapX + wrapWidth - mwWidth + 20) ; } //mwTop = locTop - (mwElement.offsetHeight + 1); mwTop = locTop + 20; } mwElement.style.left = mwLeft + "px"; mwElement.style.top = mwTop + "px"; MTV.UI.ModalWindow.isOpen = true; } this.close = function(){ var mwElement = document.getElementById(modalWindowId); mwElement.style.left = "-9999px"; MTV.UI.Overlay.close(); currentLocationId=""; this.isOpen = false; } this.mouseDown = function(e){ this.ignoreMouseDownBody = true; return true; } this.mouseDownBody = function(e){ if (!this.ignoreMouseDownBody){ this.close(); } this.ignoreMouseDownBody = false; return true; } } MTV.UI.Tab = new function(){ this.open = function(obj){ var newActiveTabId = obj.parentNode.id; var newActivePageId = newActiveTabId.substring(0, newActiveTabId.indexOf("Tab")); var tab = document.getElementById(newActiveTabId); var tabList = tab.parentNode; var tabs = tabList.getElementsByTagName("li"); // set new active tab for(var i=0; i < tabs.length; i++){ var t = tabs[i]; if(t.id == newActiveTabId){ $j(t).addClass("active"); } else{ $j(t).removeClass("active"); } } // set new active page var page = document.getElementById(newActivePageId); var pageList = page.parentNode; var pages = pageList.childNodes; for(var i=0; i < pages.length; i++){ var p = pages[i]; if(p.nodeName=="DIV" && p.className.indexOf('tab-content') >= 0){ if(p.id == newActivePageId){ $j(p).removeClass("hide"); } else{ $j(p).addClass("hide"); } } } } } MTV.UI.MdlTab = new function(){ this.open = function(obj){ var currentTabNavItem = $j(obj).parent(); var position = currentTabNavItem.prevAll().length; currentTabNavItem.addClass("active"); currentTabNavItem.siblings().removeClass("active"); var mdl = currentTabNavItem.parents(".mdl:first"); var pages = (mdl.children("ol.lst").length >0) ? mdl.children("ol.lst") : mdl.children("div.tab-content"); pages.addClass("hide"); pages.eq(position).removeClass("hide"); } } MTV.UI.RefreshPaginate = new function(){ this.submit = function(form){ var str = $j(form).text(); var maxPages = parseInt(str.substring(str.indexOf("of")+3, str.length)); var val = parseInt(form.page.value); var baseUrl = form.baseUrl.value; if(val > 0 && val <= maxPages){ var connector = (baseUrl.indexOf("?") >=0) ? "&" : "?"; var url = (val==1) ? baseUrl : baseUrl + connector + "page=" + val; window.location.href = url; } return false; } } MTV.UI.AjaxPaginate = new function(){ this.page = function(obj, requestUrl, pageNum){ var paginationDiv = $j(obj).parent(); var container = paginationDiv.parent(); var params = {}; if(pageNum > 1) params.page = pageNum; $j.get(requestUrl, params, function(data){ container.empty(); container.append(data); }); } } MTV.UI.Accordion = new function(){ var howMany = ""; this.init = function(){ // remove text nodes $j("#accordion a.accord-link").each(function(){ for(var i=0; i div.accord-slat").bind("mouseenter", function(){ MTV.UI.Accordion.activate(this); }); howMany = $j("#accordion > div.accord-slat").length; MTV.UI.Accordion.positionContent($j("#accordion > div.accord-over")); } this.activate = function(obj){ var active = $j(obj); $j("#accordion > div.accord-slat").removeClass("accord-over"); active.addClass("accord-over"); MTV.UI.Accordion.positionContent(active); } this.positionContent = function(active){ var position = active.prevAll().length + 1; var gap = howMany - position; var content = active.children(".accord-content"); // the active content box var offsetLeft = MTV.UI.Accordion.getOffsetLeft(active.get(0), active.get(0).offsetLeft); // left side of active item var contentWidth = content.width() + 30; var newLeft = (offsetLeft+133) - contentWidth/2; var newRight = newLeft + contentWidth; if(newRight > 950){ newLeft = 950 - contentWidth - (10*gap); // 10px for every item } else if(newLeft < 0){ newLeft = 10*position; } content.css("left", newLeft); } this.getOffsetLeft = function(element, offsetLeft){ if(element.offsetParent.className=="mdl mdl-main mdl-accordion"){ return offsetLeft; } else{ var parent = element.offsetParent; var val = element.offsetLeft + parent.offsetLeft; return MTV.UI.Accordion.getOffsetLeft(parent, val); } } } MTV.UI.InView = new function() { var elements = []; var positions = []; var offsets = []; var jwin = $j(window); var init = function() { jwin.bind("scroll resize", function() { jwin.unbind("scroll resize"); setTimeout(function() { checkElements(); }, 500); }); } this.register = function(element, callback) { var coords = element.offset().left + "x" + element.offset().top; var offset = $j.grep(positions, function(n, i){ return (n == coords); }); offsets.push(offset.length * 100); positions.push(coords); if(isInView(element, offset.length * 100)) { callback(); } else { elements.push(element); element.one("inView", callback); init(); } } var checkElements = function () { var tempElements = []; $j.each(elements, function(i) { tempElements.push(this); if (isInView(this, offsets[i])) { this.trigger("inView"); tempElements.pop(); } }); elements = tempElements; if (elements.length > 0) { init(); } } var isInView = function(element, offset) { var viewportHeight = jwin.height(); var docPos = jwin.scrollTop(); var elPos = parseInt(element.offset().top) + offset; return (elPos < viewportHeight + docPos); } }