/* =================================================== Global Javascripts - Dyson US Version: v1.0 Author: James Taylor - 28/03/2007 /* =================================================*/ /* Break out of frames */ if (top.location != location) top.location.href = document.location.href; /* Global Flags */ var w3 = !!(document.getElementById && document.createElement); var browser = identifyBrowser(); function stopDefaultAction(event) { event.returnValue = false; if (typeof event.preventDefault != "undefined"){ event.preventDefault(); } return true; } /* Gets all elements that match an attribute and attribute value pair E.G. var arrGoogleLinks = getElementsByAttribute("href","http://www.google.com"); */ function getElementsByAttribute(attribute, attributeValue){ var elementArray = new Array(); var matchedArray = new Array(); if (document.all){ elementArray = document.all; }else{ elementArray = document.getElementsByTagName("*"); } for (var i = 0; i < elementArray.length; i++){ if (attribute == "class"){ var pattern = new RegExp("(^| )" + attributeValue + "( |$)"); if (elementArray[i].className.match(pattern)){ matchedArray[matchedArray.length] = elementArray[i]; } }else if (attribute == "for"){ if (elementArray[i].getAttribute("htmlFor") || elementArray[i].getAttribute("for")){ if (elementArray[i].htmlFor == attributeValue){ matchedArray[matchedArray.length] = elementArray[i]; } } }else if (elementArray[i].getAttribute(attribute) == attributeValue){ matchedArray[matchedArray.length] = elementArray[i]; } } return matchedArray; } // hide / show errors in forms function showError(idField, idErr, strMsg) { if(!$(idErr)){ var errorSpan = document.createElement("span"); var errorMessage = document.createTextNode(strMsg); errorSpan.appendChild(errorMessage); errorSpan.className = "err"; errorSpan.id = idErr; var cont = $(idField).parentNode; cont.appendChild(errorSpan); } } function hideError(idErr) { if($(idErr)){ var errorSpan = $(idErr); var cont = errorSpan.parentNode; cont.removeChild(errorSpan); } } function trim(stringToTrim) { return stringToTrim.replace(/^\s+|\s+$/g,""); } function isValidEmail(str) { var at="@"; var dot="."; var lat=str.indexOf(at); var lstr=str.length; var ldot=str.indexOf(dot); if (str.indexOf(at)==-1) return false; if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr) return false; if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr) return false; if (str.indexOf(at,(lat+1))!=-1) return false; if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot) return false; if (str.indexOf(dot,(lat+2))==-1) return false; if (str.indexOf(" ")!=-1) return false; return true } /* returns browser & version E.G. "ie7" or "ie5mac" or "mozilla" or "opera7" or "safari1.2" */ function identifyBrowser() { var agent = navigator.userAgent.toLowerCase(); if (typeof navigator.vendor != "undefined" && navigator.vendor == "KDE" && typeof window.sidebar != "undefined") { return "kde"; }else if (typeof window.opera != "undefined"){ var version = parseFloat(agent.replace(/.*opera[\/ ]([^ $]+).*/, "$1")); if (version >= 7){ return "opera7"; }else if (version >= 5){ return "opera5"; } return false; }else if (typeof document.all != "undefined"){ if (typeof document.getElementById != "undefined"){ var browser = agent.replace(/.*ms(ie[\/ ][^ $]+).*/, "$1").replace(/ /, ""); if (typeof document.uniqueID != "undefined"){ if (browser.indexOf("5.5") != -1){ return browser.replace(/(.*5\.5).*/, "$1"); }else{ return browser.replace(/(.*)\..*/, "$1"); } }else{ return "ie5mac"; } } return false; }else if (typeof document.getElementById != "undefined") { if (navigator.vendor.indexOf("Apple Computer, Inc.") != -1){ if (typeof window.XMLHttpRequest != "undefined"){ return "safari1.2"; } return "safari1"; }else if (agent.indexOf("gecko") != -1){ return "mozilla"; } } return false; } function getRoughPosition(ele, dir){ var pos = dir == 'x' ? ele.offsetLeft : ele.offsetTop; var tmp = ele.offsetParent; while (tmp != null){ pos += dir == 'x' ? tmp.offsetLeft : tmp.offsetTop; tmp = tmp.offsetParent; } return pos; } function getViewportSize(){ var size = [0,0]; if (typeof window.innerWidth != 'undefined'){ size = [window.innerWidth,window.innerHeight]; } else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0){ size = [document.documentElement.clientWidth,document.documentElement.clientHeight]; }else{ size = [$$('body')[0].clientWidth,$$('body')[0].clientHeight]; } return size; } /*function initLocationMenu() { if(!w3) return; if(browser=="safari1.2") return; if($("nav_international_select")){ var slDd = $("nav_international_select"); var options = $$("#nav_international_select option"); if(options.length > 1){ strImgPath = "/chfr/images/flags/" var div = document.createElement("div"); div.setAttribute("id","dvLocation"); var ul = document.createElement("ul"); ul.setAttribute("id","navLocation"); ul.setAttribute("class","clear"); div.style.display="none"; var strSelText, strSelImg for(var i=0;i < options.length; i++){ var strUrl = options[i].getAttribute("value"); if(strUrl!=""){ var strId = options[i].getAttribute("id"); var text = options[i].firstChild; if(options[i].getAttribute("selected")){ strSelText = text.nodeValue; if(strId!="OTHER"){ strSelImg = strImgPath + strId + ".gif"; } } else { var strText = text.nodeValue; var li = document.createElement("li"); var a = document.createElement("a"); a.setAttribute("href",strUrl); text = document.createTextNode(strText); var img = document.createElement("img"); var imgSrc = strImgPath + strId + ".gif"; img.setAttribute("src",imgSrc); img.setAttribute("alt",strText); a.appendChild(text); if(strId!="OTHER") a.appendChild(img); li.appendChild(a); ul.appendChild(li); div.appendChild(ul); } } } var ulTrig = document.createElement("ul"); ulTrig.setAttribute("id","trigger"); var liTrig = document.createElement("li"); var aTrig = document.createElement("a"); aTrig.setAttribute("href","#"); Event.observe(aTrig,"click",toggleMenu); Event.observe(window,"resize",positionMenu); var txtTrig = document.createTextNode("Change Location"); var imgTrig = document.createElement("img"); imgTrig.setAttribute("alt",strSelText); imgTrig.setAttribute("src",strSelImg); aTrig.appendChild(txtTrig); aTrig.appendChild(imgTrig); liTrig.appendChild(aTrig); ulTrig.appendChild(liTrig); var loc = $("siteLocation"); loc.innerHTML = ""; loc.appendChild(ulTrig); loc.appendChild(div); $("topline").addClassName("script"); } } }*/ function initLocationMenu(myDropDownId, myLocation, myIndex) { if(!w3) return; if(browser=="safari1.2") return; if($(myDropDownId)){ var slDd = $(myDropDownId); var options = $$("#" + myDropDownId + " option"); if(options.length > 1){ strImgPath = "/images/flags/" var div = document.createElement("div"); div.setAttribute("id","dvLocation" + myIndex); var ul = document.createElement("ul"); ul.setAttribute("id","navLocation" + myIndex); ul.setAttribute("class","clear"); div.style.display="none"; var strSelText, strSelImg for(var i=0;i < options.length; i++){ var strUrl = options[i].getAttribute("value"); if(strUrl!=""){ var strId = options[i].getAttribute("id"); var text = options[i].firstChild; if(options[i].getAttribute("selected")){ strSelText = text.nodeValue; if(strId!="OTHER"){ strSelImg = strImgPath + strId + ".gif"; } } else { var strText = text.nodeValue; var li = document.createElement("li"); var a = document.createElement("a"); a.setAttribute("href",strUrl); text = document.createTextNode(strText); var img = document.createElement("img"); var imgSrc = strImgPath + strId + ".gif"; img.setAttribute("src",imgSrc); img.setAttribute("alt",strText); a.appendChild(text); if(strId!="OTHER") a.appendChild(img); li.appendChild(a); ul.appendChild(li); div.appendChild(ul); } } } var ulTrig = document.createElement("ul"); ulTrig.setAttribute("id","trigger" + myIndex); var liTrig = document.createElement("li"); var aTrig = document.createElement("a"); aTrig.setAttribute("href","#"); Event.observe(aTrig,"click", function(event) {toggleMenu(event, myIndex);}); Event.observe(window,"resize", function(event) {positionMenu(event, myIndex);}); var txtTrig = document.createTextNode("Change location"); var imgTrig = document.createElement("img"); imgTrig.setAttribute("alt",strSelText); imgTrig.setAttribute("src",strSelImg); aTrig.appendChild(txtTrig); aTrig.appendChild(imgTrig); liTrig.appendChild(aTrig); ulTrig.appendChild(liTrig); var loc = $(myLocation); loc.innerHTML = ""; loc.appendChild(ulTrig); loc.appendChild(div); $("topline" + myIndex).addClassName("script"); } } } function toggleMenu(event, myIndex){ if(!w3) return; if($("dvLocation" + myIndex)){ if($("dvLocation" + myIndex).style.display=="block"){ $("dvLocation" + myIndex).style.display="none"; } else { $("dvLocation" + myIndex).style.display="block"; positionMenu($("dvLocation" + myIndex), myIndex); } } stopDefaultAction(event) } function positionMenu(event, myIndex) { if($("dvLocation" + myIndex) && $("trigger" + myIndex)){ var ePos = Position.cumulativeOffset($("trigger" + myIndex)); // get position of trigger link var padding = parseInt($("dvLocation" + myIndex).offsetHeight / 6) + 5; // calculate pixel padding var extentY = ePos[1] + $("dvLocation" + myIndex).offsetHeight + padding; // calculate max height for drop DOWN menu var viewSize = getViewportSize(); var viewHeight = viewSize[1]; // get current window height $("header").setStyle({ position: "relative" }); $("footer").setStyle({ position: "relative" }); $("dvLocation" + myIndex).setStyle({ position: "absolute" }); if(extentY > viewHeight) { // position menu above trigger link var itop = $("dvLocation" + myIndex).offsetHeight; $("dvLocation" + myIndex).style.top = "-" + itop +"px"; }else { // position menu below trigger link if (myIndex = "Head") { yPos = 20; } else { yPos = 0; } $("dvLocation" + myIndex).style.top = yPos + "px"; } if(browser=="ie7") { $("dvLocation" + myIndex).className = "ie"; } } } function externalLinks() { if (!document.getElementsByTagName) return; var anchors = document.getElementsByTagName("a"); for (var i=0; i