var M_IN_STOCK = "IN_STOCK"; var M_IN_STOCK_RETAIL = "IN_STOCK_RETAIL"; var M_BACKORDERED = "BACKORDERED"; var M_RE_ORDERED = "RE_ORDERED"; var M_OUT_OF_STOCK = "OUT_OF_STOCK"; var M_iMouseX = 0; var M_iMouseY = 0; var M_strGFileName = "Global.js"; var M_bIsDropdownHidden = false; var M_bMenuItemShow = false; var BrowserInfo = new BrowserDetect2(); var M_bIsPToP = false; var M_oPToPWin = null; // Track mouse position SetTimeout( "document.onmousemove = GetMousePosition;", 1 ); /* disallow the page to be framed */ if (window.self != window.top) { try { top.location.replace( window.location.pathname + window.location.search); } catch( e ) { HandleError( "unframe window", e, M_strGFileName ); } } /* javascript regex for illegal characters (anything not number, letter, underscore) - returns bool if it finds them*/ function HasIllegalChars( strVal ) { try { var illegalChars = /\W/; // allow only letters, numbers, and underscores return illegalChars.test(strVal); } catch( e ) { HandleError( "HasIllegalChars", e, M_strGFileName ); } } /* Changes the visibility on our pop up boxes. */ function DisplayPopUp( strLayer, bShow ) { try { Element.setStyle(strLayer, {visibility: ( bShow ? "visible" : "hidden" )}); } catch( e ) { HandleError( "DisplayPopUp", e, M_strGFileName ); } } function IsEmpty( strVal ) { try { return ( strVal == null || strVal == "" || TrimWhitespace(strVal) == "" ); } catch( e ) { HandleError( "IsEmpty", e, M_strGFileName ); } } function HandleError( strFunction, err, strFile ) { try { alert( "Sorry, we're having a problem. Please try refreshing your browser as this issue may be temporary.\n\nDetails: \nFile Name: " + strFile + "\nFunction Name: " + strFunction + "\nMessage: " + err + ", " + err.description); } catch( e ) { alert( "Sorry, we're having a problem. Please try refreshing your browser as this issue may be temporary.\n\nDetails: \nFile Name: " + strFile + "\nFunction Name: " + strFunction + "\nMessage: " + err + ", " + err.description); } } /* Launches pop up window, does not return a reference */ function popUp( strURL, strWindowName, strFeatures ){ try { popUpRef( strURL, strWindowName, strFeatures ); } // End try catch( e ) { HandleError( "popUp", e, M_strGFileName ); } } /* Launches pop up window. Returns a reference */ function popUpRef( strURL, strWindowName, strFeatures ){ try { new_window = window.open( strURL, strWindowName, strFeatures ); new_window.focus(); return new_window; } // End try catch( e ) { HandleError( "popUpRef", e, M_strGFileName ); } } // jump to next field, used on a number of pages for the phone field. function autoNext( objStartTxtBox, objNextTxtBox ){ try { if( objStartTxtBox != null ) { if ( objStartTxtBox.value.length == objStartTxtBox.getAttribute("maxlength") ) { objNextTxtBox.focus(); } // End length check } // End if not null } // End try catch( e ) { HandleError( "autoNext", e, M_strGFileName ); } } /* This function gets all of the dropdown menus on the page and hides them. On pages where we may have layers that need to sit on top of dropdowns, we show and hide the dropdowns before we show and hide the layer by overriding a function pointer. */ function HideDropdowns() { try { var objSelects = document.getElementsByTagName( "select" ); var nodes = $A(objSelects); nodes.each( function(node) { ShowObject( node, false );} ); M_bIsDropdownHidden = true; } catch( e ) { HandleError( "HideDropdowns", e, M_strPageName ); } } /* This function gets all of the dropdown menus on the page and shows them. On pages where we may have layers that need to sit on top of dropdowns, we show and hide the dropdowns before we show and hide the layer by overriding a function pointer. */ function ShowDropdowns() { try { var objSelects = document.getElementsByTagName( "select" ); var nodes = $A(objSelects); nodes.each( function(node) { ShowObject( node, true );} ); M_bIsDropdownHidden = false; } catch( e ) { HandleError( "ShowDropdowns", e, M_strPageName ); } } /* Gets the Y scroll position */ function GetScrollPositionY() { var intReturn = 0; try { if ( document.all ) { if ( !document.documentElement.scrollTop ) { intReturn = document.body.scrollTop; } else { intReturn = document.documentElement.scrollTop; } } else { intReturn = window.pageYOffset; } } catch( e ) { HandleError( "GetScrollPositionY", e, M_strGFileName ); } return intReturn; } /* Gets the X scroll position */ function GetScrollPositionX() { var intReturn = 0; try { if ( document.all ) { if ( !document.documentElement.scrollLeft ) { intReturn = document.body.scrollLeft; } else { intReturn = document.documentElement.scrollLeft; } } else { intReturn = window.pageXOffset; } } catch( e ) { HandleError( "GetScrollPositionY", e, M_strGFileName ); } return intReturn; } /* Takes a currency string and checks it for '$'. If it finds them, it removes them. */ function ConvertCurrencyToNumber( strInput ) { var strReturn; try { strReturn = strInput.toString().replace( /$|\,/g, '' ); // Its not a number, return 0 if ( isNaN( strReturn ) ) { strReturn = 0.00; } } catch( e ) { HandleError( "ConvertCurrencyToNumber", e, M_strGFileName ); } return parseFloat( strReturn ); } function OpenSlideshowL(id) { try { popUp('/web/us' + '/popup/media_gallery_photo_b.jsp?OPTION=SAR&assetid=' + id,'win','width=760,height=830,scrollbars=yes,resizable=yes'); } catch(e) { HandleError( "OpenSlideshowL", e, M_strGFileName ); } } /* Uses regex to trim whitespace */ function TrimWhitespace( strInput ) { var strReturn; try { if( strInput != null && strInput != ""){ strReturn = strInput.toString().replace(/^\s+/g, '').replace(/\s+$/g, ''); } else { strReturn = strInput; } } catch( e ) { HandleError( "TrimWhitespace", e, M_strGFileName ); } return strReturn; } // Function validates email in the footer function ValidateEmailSignUpFooter() { try { return ValidateEmailSignUp("emailForm"); } catch( e ) { HandleError( "ValidateSignUp", e, M_strPageName ); } } // Function validates email in the footer function ValidateEmailSignUpSidebar() { try { return ValidateEmailSignUp("emailFormSide"); } catch( e ) { HandleError( "ValidateEmailSignUpSidebar", e, M_strPageName ); } } function ValidateEmailSignUp(frm) { var bIsValid = false; try { var oFrm = $(frm); if(oFrm != null) { var oEmail = oFrm.getElementsByTagName("input")[0]; if(oEmail != null) { bIsValid = ValidateEmail($F(oEmail)); if( !bIsValid ) { alert("Invalid email address. Must be of the form: 'name@something.xyz'"); } // end if not valid } // oemail != null } // end if ofrm != null } catch( e ) { HandleError( "ValidateSignUp", e, M_strPageName ); } return bIsValid; } // Validates Emails function ValidateEmail( strVal ) { var bIsValid = false; try { var emailRegex = new RegExp(/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/); bIsValid = emailRegex.test(TrimWhitespace(strVal)); } catch( e ) { HandleError( "ValidateEmail", e, M_strGFileName ); } return bIsValid; } function ValidateNoChars( strVal ) { var bIsValid = false; try { var letRegex = new RegExp(/^([a-zA-Z0-9]+)$/); bIsValid = letRegex.test(TrimWhitespace(strVal)); } catch( e ) { HandleError( "ValidateNoChars", e, M_strGFileName ); } return bIsValid; } function ValidateNoCharsAcceptSpaces( strVal ) { var bIsValid = false; try { var letRegex = new RegExp(/^([a-zA-Z0-9 ]+)$/); bIsValid = letRegex.test(TrimWhitespace(strVal)); } catch( e ) { HandleError( "ValidateNoCharsAcceptSpaces", e, M_strGFileName ); } return bIsValid; } /* Positions an object. */ function SetObjectPosition( layer, intX, intY ) { try { var objLayer = $(layer); if( objLayer != null ) { strX = intX + ( intX.toString().indexOf("px") == -1 ? "px" : "" ); strY = intY + ( intY.toString().indexOf("px") == -1 ? "px" : "" ); Element.setStyle(objLayer,{top: strY, left: strX }); } } catch( e ) { HandleError( "SetObjectPosition" + e, M_strGFileName ); } } /* Helper function to return baseline x coordinate parsed as int. */ function GetBasePositionX() { var objPos; try { objBase = GetBasePosition(); } catch( e ) { HandleError( "GetBasePositionX" + e, M_strGFileName ); } return parseInt( objBase.x ); } /* Helper function to return baseline y coordinate parsed as int. */ function GetBasePositionY() { var objPos; try { objBase = GetBasePosition(); } catch( e ) { HandleError( "GetBasePositionY" + e, M_strGFileName ); } return parseInt( objBase.y ); } /* For elements that we position absolutely, this function provides us the X and Y coordinate of the item that we use as our baseline for the topmost, leftmost item. Presently its