CINXE.COM
Lancasteronline - BlackBerry World
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html><head><script type="text/javascript" src="/_static/js/bundle-playback.js?v=HxkREWBo" charset="utf-8"></script> <script type="text/javascript" src="/_static/js/wombat.js?v=txqj7nKC" charset="utf-8"></script> <script>window.RufflePlayer=window.RufflePlayer||{};window.RufflePlayer.config={"autoplay":"on","unmuteOverlay":"hidden"};</script> <script type="text/javascript" src="/_static/js/ruffle/ruffle.js"></script> <script type="text/javascript"> __wm.init("https://web.archive.org/web"); __wm.wombat("https://appworld.blackberry.com/webstore/content/15725/?countrycode=US&countrycode=US&lang=en","20170302124208","https://web.archive.org/","web","/_static/", "1488458528"); </script> <link rel="stylesheet" type="text/css" href="/_static/css/banner-styles.css?v=S1zqJCYt" /> <link rel="stylesheet" type="text/css" href="/_static/css/iconochive.css?v=3PDvdIFv" /> <!-- End Wayback Rewrite JS Include --> <script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/javax.faces.resource/jquery.js.seam"></script><script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/javax.faces.resource/richfaces.js.seam"></script><script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/javax.faces.resource/richfaces-base-component.js.seam"></script><script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/javax.faces.resource/richfaces-event.js.seam"></script><script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/javax.faces.resource/popupPanel.js.seam?ln=org.richfaces"></script><script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/javax.faces.resource/popupPanelBorders.js.seam?ln=org.richfaces"></script><script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/javax.faces.resource/popupPanelSizer.js.seam?ln=org.richfaces"></script><link type="text/css" rel="stylesheet" href="/web/20170302124208cs_/https://appworld.blackberry.com/webstore/rfRes/popupPanel.ecss.seam?db=eAE78Y1hMgAGmQJS&ln=org.richfaces"/><script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/javax.faces.resource/jsf.js.seam?ln=javax.faces"></script><script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/javax.faces.resource/richfaces-queue.js.seam"></script> <script language="javascript" type="text/javascript"> Date.now = Date.now || function() { return +new Date; }; var pageRenderStart = Date.now(); var pageRenderEnd = null; var pageRenderTimeToLoad = null; </script> <script language="JavaScript" type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/js/10.3.2.MR-49/AWP_Constants.js"></script> <script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/js/10.3.2.MR-49/libraries/cookieAPI.js?p=1"></script> <script language="javascript" type="text/javascript"> //********************** Version: 10.3.2.MR-49 ************ var mixpanelInitToken = ''; var mixpanelActive = false; var dataDictionary = new Object(); setSanitizeCookieStringPattern(/[^a-zA-Z0-9_.,()+:\/=\s\-ÂÃÄÀÁÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŽÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ]/g); var onloadCallbacks=new Array(); function registerOnloadCallback(method){ onloadCallbacks[onloadCallbacks.length]=method; } function fireOnloadCallback(){ var loader=0; for (loader=0; loader < onloadCallbacks.length; loader++){ onloadCallbacks[loader](); } } function trackPageLoadTime(){ pageRenderEnd = Date.now(); pageRenderTimeToLoad = pageRenderEnd - pageRenderStart; } registerOnloadCallback(trackPageLoadTime); var browserSupported = false; var currVersion; var usrAgnt = navigator.userAgent; var usrOS = navigator.appVersion; if(usrAgnt.toLowerCase().indexOf("firefox")!=-1){ currVersion = usrAgnt.substring(usrAgnt.toLowerCase().indexOf("firefox")+8, usrAgnt.toLowerCase().indexOf("firefox")+10); if(currVersion.indexOf(".") != -1){ currVersion = usrAgnt.substring(usrAgnt.toLowerCase().indexOf("firefox")+8, usrAgnt.toLowerCase().indexOf("firefox")+9); } if(currVersion >= 3){ browserSupported = true; } }else if(usrAgnt.toLowerCase().indexOf("msie")!=-1){ currVersion = usrAgnt.substring(usrAgnt.toLowerCase().indexOf("msie")+5, usrAgnt.toLowerCase().indexOf("msie")+6); if(currVersion >= 7 && currVersion < 10){ browserSupported = true; } }else if(usrAgnt.toLowerCase().indexOf("chrome")!=-1){ browserSupported = true; }else if(usrAgnt.toLowerCase().indexOf("safari")!=-1){ currVersion = usrAgnt.substring(usrAgnt.toLowerCase().indexOf("safari")+7, usrAgnt.toLowerCase().indexOf("safari")+8); if(currVersion >= 4){ browserSupported = true; } } var osSupported=true; if (usrOS.toLowerCase().indexOf("windows") == -1 && usrOS.toLowerCase().indexOf("mac") == -1){ osSupported = false; } if(!browserSupported && (false || usrAgnt.toLowerCase().indexOf("opera")!=-1)){ if(!doesExist("messageSeen", "yes", "wsUnsupportedCookie")){ window.location = "/webstore/unsupportedbrowser/"; }else{ touchCookie("wsUnsupportedCookie"); } } if(!osSupported && false){ if(!doesExist("messageSeen", "yes", "wsUnsupportedCookie")){ window.location = "/webstore/unsupportedos"; }else{ touchCookie("wsUnsupportedCookie"); } } </script> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <link rel="shortcut icon" href="/web/20170302124208im_/https://appworld.blackberry.com/webstore/favicon.ico"/> <title>Lancasteronline - BlackBerry World</title> <link rel="shortcut icon" href="/web/20170302124208im_/https://appworld.blackberry.com/webstore/img/favicon.ico"/> <link charset="utf-8" title="Global" media="screen" type="text/css" href="/web/20170302124208cs_/https://appworld.blackberry.com/webstore/css/10.3.2.MR-49/webstore.css" rel="stylesheet"/> <link rel="stylesheet" type="text/css" href="/web/20170302124208cs_/https://appworld.blackberry.com/webstore/css/10.3.2.MR-49/jquery-ui-1.8.24.custom.css"/> <link rel="stylesheet" type="text/css" href="/web/20170302124208cs_/https://appworld.blackberry.com/webstore/css/10.3.2.MR-49/component.css"/> <link rel="stylesheet" type="text/css" href="/web/20170302124208cs_/https://appworld.blackberry.com/webstore/css/10.3.2.MR-49/core.css"/> <link rel="stylesheet" type="text/css" href="/web/20170302124208cs_/https://appworld.blackberry.com/webstore/css/10.3.2.MR-49/additions.css"/> <link type="text/css" href="/web/20170302124208cs_/https://appworld.blackberry.com/webstore/layout/jplayer/skin/jplayer.black.friday.css" rel="stylesheet"/> <script src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/js/10.3.2.MR-49/scripts.js" language="JavaScript" type="text/javascript"></script> <script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/foresee/foresee-trigger.js"></script> <script type="text/javascript">var isIE6=false</script> <link charset="utf-8" title="Global" media="screen" type="text/css" href="/web/20170302124208cs_/https://appworld.blackberry.com/webstore/css/10.3.2.MR-49/webstore_SAF.css" rel="stylesheet"/> <!--[if IE 6]> <script type="text/javascript">isIE6=true</script> <link charset="utf-8" title="Global" media="screen" type="text/css" href="/webstore/css/10.3.2.MR-49/webstore_IE6.css" rel="stylesheet"/> <![endif]--> <!--[if IE 7]> <script type="text/javascript"> isIE6=true; document.write('<link charset="utf-8" title="Global" media="screen" type="text/css" href="/webstore/css/10.3.2.MR-49/webstore_IE7.css" rel="stylesheet"/>'); </script> <![endif]--> <!--[if IE 8]> <link charset="utf-8" title="Global" media="screen" type="text/css" href="/webstore/css/10.3.2.MR-49/webstore_IE8.css" rel="stylesheet"/> <script type="text/javascript"></script> <![endif]--> <!--[if IE 9]> <link charset="utf-8" title="Global" media="screen" type="text/css" href="/webstore/css/10.3.2.MR-49/webstore_IE9.css" rel="stylesheet"/> <![endif]--> <script type="text/javascript"> try { document.execCommand('BackgroundImageCache', false, true); } catch(e) {} var blankImg = "/webstore/img/1px.gif"; var servletContext = "/webstore"; if(typeof String.prototype.trim !== 'function') { String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); } } </script> <!-- <script src="/webstore/js/10.3.2.MR-49/libraries/scriptaculous/prototype.new.js" type="text/javascript" charset="utf-8"></script> --> <script language="JavaScript" type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/js/10.3.2.MR-49/libraries/omniture_utils.js"></script> <!-- <script src="/webstore/js/10.3.2.MR-49/libraries/scriptaculous/builder.js" type="text/javascript" charset="utf-8"></script> <script src="/webstore/js/10.3.2.MR-49/libraries/scriptaculous/dragdrop.js" type="text/javascript" charset="utf-8"></script> <script src="/webstore/js/10.3.2.MR-49/libraries/scriptaculous/sound.js" type="text/javascript" charset="utf-8"></script> <script src="/webstore/js/10.3.2.MR-49/libraries/scriptaculous/controls.js" type="text/javascript" charset="utf-8"></script> <script src="/webstore/js/10.3.2.MR-49/libraries/scriptaculous/slider.js" type="text/javascript" charset="utf-8"></script> --> <noscript><style type="text/css">#content-start { visibility:visible; }</style></noscript> <noscript><style type="text/css">#docmgrd ul#sidenav li ul li { display:block; }</style></noscript> <script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/js/10.3.2.MR-49/base64.js"></script> <!-- META SHARING INFORMATION --> <meta name="packageid"/> <meta property="og:title" content="BlackBerry World - Lancasteronline"/> <meta property="og:description" content="Get your news, weather, entertainment, business and sports about Lancaster County, the state, nation and world all in one place when you want it wherever you are. And it’s all absolutely ..."/> <meta property="og:type" content="website"/> <meta property="og:url" content="https://web.archive.org/web/20170302124208/http://appworld.blackberry.com/webstore/content/15725/"/> <meta property="og:image" content="https://web.archive.org/web/20170302124208im_/http://appworld.blackberry.com/webstore/servedimages/430571/?t=7"/> <meta name="title" content="BlackBerry World - Lancasteronline"/> <meta name="description" content="Get your news, weather, entertainment, business and sports about Lancaster County, the state, nation and world all in one place when you want it wherever you are. And it’s all absolutely ..."/> <!-- cache control header --> <!-- end cache control header --> <script type="text/javascript"> window.onload=fireOnloadCallback; </script></head> <div id="pushModalHTML" class="awwsModalContainer"> <div id="pushModal_background" class="awwsModalBackgroundContainer"> <div class="awwsModalBackground"></div> </div> <div id="pushModal_modal" class="awwsModal"> <div id="pushModal_closeButton" class="awwsModalCloseButton"></div> <div id="pushModal_content" class="awwsAddReviewModal"> <!-- Begin Push Modal --> <div id="sendingPush" class="awwsShareByEmailTextDiv"> <div class="awMarginTop-Twenty" style="text-align:center;"> <h3>Loading</h3> </div> <div class="awMarginTop-Twenty" style="text-align:center;"> <img src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/img/global/loader.gif"/> </div> </div> <table> <tr> <td rowspan="2" width="75"> <div id="pushModalIcon" style="margin-left: 20px; margin-right: 20px; margin-top: 20px;"> <img id="pushModalIconId"/> </div> </td> <td> <div id="pushModalName" style="text-align: left; margin-top: 20px;"> <h3 id="pushModalContentName"></h3> </div> </td> </tr> <tr> <td> <div id="pushModalPurchaseTitle" style="text-align: left;"> <h3>Purchase on your Smartphone</h3> </div> <div id="pushModalDownloadTitle" style="text-align: left;"> <h3>Install on your smartphone</h3> </div> </td> </tr> <tr> <td colspan="2"> <div id="pushSuccessDiv" style="margin-top: 20px; display: none;"> <div id="pushPurchaseSuccess" style="margin-left: 20px; margin-right: 20px; display: none;"><span class="awwsPushMessageInformationBold">A message has been sent to your smartphone to purchase this item. To complete the purchase, check your BlackBerry 10 smartphone now.</span> </div> <div id="pushDownloadSuccess" style="margin-left: 20px; margin-right: 20px; display: none;"><span class="awwsPushMessageInformationBold">A message has been sent to your BlackBerry 10 smartphone to install this item. To continue, check your BlackBerry 10 smartphone now.</span> </div> <div class="awMarginTop-Fifteen"></div> <div style="margin-left: 20px; margin-right: 20px;"><span class="awwsPushMessageInformation">It may take up to a minute or two for the message to arrive. Your BlackBerry 10 smartphone must be turned on and have network connectivity to receive the message. If the message does not arrive, please launch BlackBerry World on your smartphone to find the content you are looking for.</span> </div> <div class="awMarginTop-Fifteen"></div> <div style="margin-left: 20px; margin-right: 20px;"><span class="awwsPushMessageInformation">Once purchased, you can only open the item on a BlackBerry 10 smartphone and download it on a maximum of 4 other BlackBerry 10 smartphones.</span><span class="awwsPushMessageInformation">Once downloaded, you can only open the item on your BlackBerry 10 smartphone.</span> </div> </div> <div id="pushErrorDiv" style="margin-top: 20px; margin-left: 20px; margin-right: 20px; display: none;"><span class="awwsPushMessageInformation">There was a problem and the request for this item was not sent to your BlackBerry 10 smartphone successfully. Your BlackBerry 10 smartphone must be turned on and have network connectivity. Please try again or launch BlackBerry World on your smartphone to find the content you are looking for.</span> </div> </td> </tr> </table> <div id="pushModalNotRegistered" style="margin-top: 20px; margin-left: 20px; margin-right: 20px; display: none;">There is an issue identifying your BlackBerry 10 device. Sign in with your Blackberry ID on your smartphone. </div> <div class="awMarginTop-Twenty"></div> <div style="text-align: center; margin: 0px auto;"> <span id="pushOkayButtonbuttonMain" class="awButtonWrapper"><a id="pushModal:pushModal:pushOkayButtonoutputLink" name="pushModal:pushModal:pushOkayButtonoutputLink" href="" onclick="pushModal.modal.hide(); return false;"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="pushOkayButtonLabel" style="color: black;" class="awNoArrow">Close</div> </div> <div class="awRightButton"></div></a> </span> <span id="pushOkayButtonbuttonMainDisabled" style="display:none" class="awDisabledButton"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="pushOkayButtonDisabledLabel" class="awNoArrow">Close</div> </div> <div class="awRightButton"></div> </span> </div> <script type="text/javascript"> </script> <!-- End Add Review Modal --> </div> </div> </div> <script type="text/javascript"><!-- function pushModalConstructor() { var modalCloseHandler = function() { //This fires when the Close Button is Clicked... var contentId = pushModal.modal.getAssociatedContent(); var data = dataDictionary[contentId]; }; var modal = new ComponentModal(); modal.setModalContainerSelector("#pushModalHTML"); modal.setModalBackgroundSelector("#pushModal_background"); modal.setModalSelector("#pushModal_modal"); modal.setCloseButtonSelector("#pushModal_closeButton"); modal.setWidth(360); modal.setHeight(300); modal.close.add(this, modalCloseHandler); this.modal = modal; this.show = function(data, licensetype, pushtype) { pushModal.modal.setAssociatedContent(data.id); //var data = dataDictionary[cID]; var isPurchase = false; jQuery("#pushModalIcon").hide(); jQuery("#pushModalName").hide(); jQuery("#pushSuccessDiv").hide(); jQuery("#pushPurchaseSuccess").hide(); jQuery("#pushDownloadSuccess").hide(); jQuery("#pushErrorDiv").hide(); jQuery("#pushModalPurchaseTitle").hide(); jQuery("#pushModalDownloadTitle").hide(); jQuery("#pushModalNotRegistered").hide(); jQuery("#sendingPush").show(); pushModal.modal.resize(360, 200); this.modal.show(); if(isDefined(pushtype)){ if(pushtype.trim().toLowerCase() === 'install'){ jQuery("#pushDownloadSuccess").show(); }else if(pushtype.trim().toLowerCase() === 'purchase'){ jQuery("#pushPurchaseSuccess").show(); isPurchase=true; } }else{ return; } addToCookie("pushedMessages", data.id, "pushedMessages", true); if(isDefined(data.iconId)){ document.getElementById("pushModalIconId").src='/webstore/servedimages/' + data.iconId + '.png/?t=7'; } safeInnerHTMLAlternative(document.getElementById("pushModalContentName"), data.name); var qs = window.location.search.replace('?', ''); var qsEnc = encodeURIComponent(base64_encode(qs)); $j.ajax('/webstore/myworld/pushMessage/' + '?cID=' + data.id + '&iID=' + data.iconId + '<ype=' + licensetype + '&ptype=' + pushtype + '&qs=' + qsEnc ,{ method: 'post', dataType: 'html', cache: false, complete: function(transport) { var transportData = transport.getResponseHeader('PUSH_STATUS'); if(transportData == "FAILED"){ jQuery("#sendingPush").hide(); pushModal.modal.resize(860, 275); jQuery("#pushModalIcon").show(); jQuery("#pushModalName").show(); jQuery("#pushErrorDiv").show(); }else{ jQuery("#sendingPush").hide(); pushModal.modal.resize(860, 350); jQuery("#pushModalIcon").show(); jQuery("#pushModalName").show(); jQuery("#pushSuccessDiv").show(); if(!isPurchase){ jQuery("#pushModalDownloadTitle").show(); }else{ jQuery("#pushModalPurchaseTitle").show(); } } } } ); }; this.showNotRegistered = function() { jQuery("#pushModalIcon").hide(); jQuery("#pushModalName").hide(); jQuery("#pushSuccessDiv").hide(); jQuery("#pushPurchaseSuccess").hide(); jQuery("#pushDownloadSuccess").hide(); jQuery("#pushErrorDiv").hide(); jQuery("#pushModalPurchaseTitle").hide(); jQuery("#pushModalDownloadTitle").hide(); jQuery("#sendingPush").hide(); jQuery("#pushModalNotRegistered").show(); pushModal.modal.resize(360, 150); this.modal.show(); }; }; pushModalInitialized = false; function pushModalInitialize() { if (pushModalInitialized) return; pushModalInitialized = true; pushModal = new pushModalConstructor(); }; registerOnloadCallback(pushModalInitialize); --></script> <div id="emailInstallModalHTML" class="awwsModalContainer"> <div id="emailInstallModal_background" class="awwsModalBackgroundContainer"> <div class="awwsModalBackground"></div> </div> <div id="emailInstallModal_modal" class="awwsModal"> <div id="emailInstallModal_closeButton" class="awwsModalCloseButton"></div> <div id="emailInstallModal_content" class="awwsAddReviewModal"> <!-- Begin Email Install Modal --> <div id="emailInstallDownloadTitle" class="awMarginTop-Twenty awMarginBottom-Twenty"> <h1 style="text-align: center"><span class="awwsProductDetailsContentItemTitle">Download on Device</span></h1> </div> <div id="emailInstallPurchaseTitle" class="awMarginTop-Twenty awMarginBottom-Twenty"> <h1 style="text-align: center"><span class="awwsProductDetailsContentItemTitle">Purchase on Device</span></h1> </div> <div id="sendInstallEmailInput"> <div id="emailInstallDownloadBody" class="awwsShareByEmailTextDiv">Downloading this item can only be completed on your BBOS smartphone. Please visit this item in BlackBerry World on your device. </div> <div id="emailInstallPurchaseBody" class="awwsShareByEmailTextDiv">In order to purchase this item, you must complete the transaction on your BBOS smartphone. Please visit this item in BlackBerry World on your device. </div> <div class="awMarginTop-Ten"></div> <div id="emailInstallDownloadBody" class="awwsShareByEmailTextDiv">To receive an email with a link to the item, you may use the form below. </div> <div class="awMarginTop-Ten"></div> <div class="awwsShareByEmailTextDiv">Security question: </div> <div class="awMarginTop-Five"></div> <div class="awwsShareByEmailTextDiv"><img id="emailInstallModal:emailInstallModal:theInstallImg" src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/content/15725/?countrycode=US&countrycode=US&lang=en"/> </div> <div class="awMarginTop-Ten"></div> <div class="awwsShareByEmailTextDiv">Answer: </div> <div class="awMarginTop-Five"></div> <div id="badInstallCaptchaErrorDiv" class="awwsShareByEmailTextDiv" style="display:none"><span class="appdetailsText emailblurb" style="color:RED"> *Please provide a valid answer.</span> </div> <div class="awwsShareByEmailDiv"><input id="emailInstallModal:emailInstallModal:emailInstallAnswer" type="text" name="emailInstallModal:emailInstallModal:emailInstallAnswer" class="awwsShareByEmailInputDiv"/> </div> <div class="awMarginTop-Ten"></div> <div class="awwsShareByEmailTextDiv">Email: </div> <div class="awMarginTop-Five"></div> <div id="badInstallEmailErrorDiv" class="awwsShareByEmailTextDiv" style="display:none"><span class="appdetailsText emailblurb" style="color:RED"> *Please provide a valid email address.</span> </div> <div class="awwsShareByEmailDiv"><input id="emailInstallModal:emailInstallModal:emailInput" type="text" name="emailInstallModal:emailInstallModal:emailInput" class="awwsShareByEmailInputDiv" onkeypress="return emailInstallKeyPressed2(event);"/> </div> <div class="awMarginTop-Ten"></div> <div style="text-align: right; width: 250px; margin: 0px auto;"> <span id="sendAppLinkbuttonMain" class="awButtonWrapper"><a id="emailInstallModal:emailInstallModal:sendAppLinkoutputLink" name="emailInstallModal:emailInstallModal:sendAppLinkoutputLink" href="javascript:void(0);" onclick="sendInstallEmail(); return false;"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="sendAppLinkLabel" style="color: black;" class="awNoArrow">Send Link</div> </div> <div class="awRightButton"></div></a> </span> <span id="sendAppLinkbuttonMainDisabled" style="display:none" class="awDisabledButton"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="sendAppLinkDisabledLabel" class="awNoArrow">Send Link</div> </div> <div class="awRightButton"></div> </span> </div> </div> <div id="sendingInstallEmail" class="awwsShareByEmailTextDiv" style="display:none"> <div class="awMarginTop-Twenty" style="text-align:center;"> <img src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/img/global/loader.gif"/> </div> </div> <div id="installEmailResultSent" style="display:none"> <table> <tr> <td rowspan="2" width="75"> <div style="margin-left: 20px; margin-right: 20px; margin-top: 20px;"> <img id="emailInstallIconId"/> </div> </td> <td> <div style="margin-top: 20px; text-align: left;"> <h3 id="emailInstallContentName"></h3> </div> </td> </tr> <tr> <td> <div style="text-align: left;"> <h3 id="emailInstallAddressUsed"></h3> </div> </td> </tr> <tr> <td colspan="2"> <div> <div id="emailInstallDownloadSuccess" style="margin-left: 20px; margin-right: 20px;"><span class="awwsPushMessageInformationBold">A message containing a link to this item has been sent to the email address you provided. To begin your download, open the email on your BBOS smartphone now.</span> </div> <div id="emailInstallPurchaseSuccess" style="margin-left: 20px; margin-right: 20px;"><span class="awwsPushMessageInformationBold">A message containing a link to this item has been sent to the email address you provided. To begin your purchase, open the email on your BBOS smartphone now.</span> </div> <div style="margin-top: 15px; margin-left: 20px; margin-right: 20px;"><span class="awwsPushMessageInformation">It may take up to a minute or two for the message to arrive. Your BBOS smartphone must be turned on and have network connectivity to receive the message. If the message does not arrive, please launch BlackBerry World on your smartphone to find the content you are looking for.</span> </div> </div> </td> </tr> </table> <div class="awMarginTop-Twenty"></div> <div style="text-align: center; margin: 0px auto;"> <span id="sendInstallEmailOkbuttonMain" class="awButtonWrapper"><a id="emailInstallModal:emailInstallModal:sendInstallEmailOkoutputLink" name="emailInstallModal:emailInstallModal:sendInstallEmailOkoutputLink" href="" onclick="emailInstallModal.modal.hide(); return false;"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="sendInstallEmailOkLabel" style="color: black;" class="awNoArrow">Close</div> </div> <div class="awRightButton"></div></a> </span> <span id="sendInstallEmailOkbuttonMainDisabled" style="display:none" class="awDisabledButton"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="sendInstallEmailOkDisabledLabel" class="awNoArrow">Close</div> </div> <div class="awRightButton"></div> </span> </div> </div> <script type="text/javascript"> function getRandom(){ return ((new Date()).getTime() + Math.floor(Math.random()*10000)); } function emailInstallLoadImg(){ var img = document.getElementById("emailInstallModal:emailInstallModal:theInstallImg").src="/webstore/myworld/simpleCaptcha.png?rand=" + getRandom(); } emailInstallLoadImg(); function emailInstallKeyPressed2(e) { var keycode; if (window.event) keycode = window.event.keyCode; else if (e) keycode = e.which; if (keycode == 13) { sendInstallEmail(); return false; } return true; } function sendInstallEmail() { jQuery("#sendInstallEmailInput").hide(); jQuery("#badInstallCaptchaErrorDiv").hide(); jQuery("#badInstallEmailErrorDiv").hide(); jQuery("#sendingInstallEmail").show(); //emailInstallModal.modal.resize(360, 200); var plainEmail = (document.getElementById("emailInstallModal:emailInstallModal:emailInput").value).trim(); var email = base64_encode(plainEmail); var captchaInput = document.getElementById("emailInstallModal:emailInstallModal:emailInstallAnswer").value; var answer = base64_encode(captchaInput); var cID=emailInstallModal.modal.getAssociatedContent(); safeInnerHTMLAlternative(document.getElementById("emailInstallAddressUsed"), plainEmail); //var pageURL = window.location.href; var emailDeepLinkCallBack = function(result) { var data = dataDictionary[cID]; //alert(result); jQuery("#sendingInstallEmail").hide(); if(result=="error"){ return; } if(result=="bademail" || result=="errorboth"){ jQuery("#badInstallEmailErrorDiv").show(); } if(result=="badcaptcha" || result=="errorboth"){ emailInstallLoadImg(); document.getElementById("emailInstallModal:emailInstallModal:emailInstallAnswer").value = ""; jQuery("#badInstallCaptchaErrorDiv").show(); } if(result=="sent") { emailInstallModal.modal.resize(860, 350); jQuery("#installEmailResultSent").show(); } else{ emailInstallModal.modal.resize(360, 425); jQuery("#sendInstallEmailInput").show(); } } var emailDeeplink = Seam.createBean("emailEngineBean"); emailDeeplink.sendEmail(cID, email, answer, true, emailDeepLinkCallBack); } </script> <!-- End Add Review Modal --> </div> </div> </div> <script type="text/javascript"><!-- function emailInstallModalConstructor() { var modalCloseHandler = function() { //This fires when the Close Button is Clicked... var contentId = emailInstallModal.modal.getAssociatedContent(); var data = dataDictionary[contentId]; }; var modal = new ComponentModal(); modal.setModalContainerSelector("#emailInstallModalHTML"); modal.setModalBackgroundSelector("#emailInstallModal_background"); modal.setModalSelector("#emailInstallModal_modal"); modal.setCloseButtonSelector("#emailInstallModal_closeButton"); modal.setWidth(360); modal.setHeight(400); modal.close.add(this, modalCloseHandler); this.modal = modal; this.show = function(data, licensetype) { var tname; var tcId; if(isDefined(data.id)){ emailInstallModal.modal.setAssociatedContent(data.id); tcId = data.id; tname = data.name; }else if(isDefined(data.contentId)){ emailInstallModal.modal.setAssociatedContent(data.contentId); tcId = data.contentId; tname = data.contentName; }else{ return; } if(isDefined(licensetype)){ if(licensetype == "1"){ jQuery("#emailInstallPurchaseTitle").hide(); jQuery("#emailInstallPurchaseBody").hide(); jQuery("#emailInstallPurchaseSuccess").hide(); jQuery("#emailInstallDownloadTitle").show(); jQuery("#emailInstallDownloadBody").show(); jQuery("#emailInstallDownloadSuccess").show(); }else{ jQuery("#emailInstallDownloadTitle").hide(); jQuery("#emailInstallDownloadBody").hide(); jQuery("#emailInstallDownloadSuccess").hide(); jQuery("#emailInstallPurchaseTitle").show(); jQuery("#emailInstallPurchaseBody").show(); jQuery("#emailInstallPurchaseSuccess").show(); } }else{ return; } //var data = dataDictionary[cID]; var url = u="https://web.archive.org/web/20170302124208/https://appworld.blackberry.com/webstore/content/" + tcId + "/?CPID=PRD_BBWSH_email"; if(isDefined(data.iconId)){ document.getElementById("emailInstallIconId").src='/webstore/servedimages/' + data.iconId + '.png/?t=7'; } safeInnerHTMLAlternative(document.getElementById("emailInstallContentName"), tname); //if (contentID == null) //return; //This show method is our hook from add review links... //jQuery("#contentID").append(contentID); emailInstallModal.modal.resize(360, 400); this.modal.show(); emailInstallLoadImg(); jQuery("#installEmailResultSent").hide(); jQuery("#badInstallCaptchaErrorDiv").hide(); jQuery("#badInstallEmailErrorDiv").hide(); jQuery("#sendInstallEmailInput").show(); document.getElementById("emailInstallModal:emailInstallModal:emailInstallAnswer").value = ""; document.getElementById("emailInstallModal:emailInstallModal:emailInput").value = ""; }; this.showById = function(cID, licensetype){ this.show(dataDictionary[cID], licensetype); }; this.showByIdMyWorld = function(cID, licensetype){ this.showById(cID, '1'); }; this.showByIdMyWorldPaid = function(cID, licensetype){ this.showById(cID, '2'); }; }; emailInstallModalInitialized = false; function emailInstallModalInitialize() { if (emailInstallModalInitialized) return; emailInstallModalInitialized = true; emailInstallModal = new emailInstallModalConstructor(); }; registerOnloadCallback(emailInstallModalInitialize); --></script><div id="sessionTimeoutModalPanel" style="visibility: hidden;"><div class="rf-pp-shade" id="sessionTimeoutModalPanel_shade" style="z-index:100;"><button class="rf-pp-btn" id="sessionTimeoutModalPanelFirstHref"></button></div><div class="rf-pp-cntr awModalPanel" id="sessionTimeoutModalPanel_container" style="position: fixed; z-index:100; z-index:1000;"><div class="rf-pp-shdw" id="sessionTimeoutModalPanel_shadow"></div><div class="rf-pp-cnt-scrlr" id="sessionTimeoutModalPanel_content_scroller"><div class="rf-pp-cnt" id="sessionTimeoutModalPanel_content" style="z-index:1000;"> <div style="width:420px; height:100%" class="awModalPanelWrapper"> <div class="awModalPanelWrapperInner"> <div id="j_idt107" class="awModalHeader">Expired session</div><table width="380px"> <tbody> <tr> <td>Your session has expired and you have been logged out.</td> </tr> <tr> <td> <div class="awDownloadModalButton"> <span id="sessionTimeoutModalPanelButtonbuttonMain" class="awButtonWrapper"><a id="sessionTimeoutModalPanelButtonoutputLink" name="sessionTimeoutModalPanelButtonoutputLink" href="" onclick="navigateToNonAuthenticatedPage();return false;"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="sessionTimeoutModalPanelButtonLabel" style="color: black;" class="awNoArrow">Close</div> </div> <div class="awRightButton"></div></a> </span> <span id="sessionTimeoutModalPanelButtonbuttonMainDisabled" style="display:none" class="awDisabledButton"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="sessionTimeoutModalPanelButtonDisabledLabel" class="awNoArrow">Close</div> </div> <div class="awRightButton"></div> </span> </div></td> </tr> </tbody> </table> </div> </div></div></div></div><script type="text/javascript">new RichFaces.ui.PopupPanel("sessionTimeoutModalPanel",{"height":0,"width":420} );</script></div> <script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/seam/resource/remoting/resource/remote.js?compress=false"></script> <script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/seam/resource/remoting/interface.js?emailEngineBean"></script> <script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/seam/resource/remoting/interface.js?sessionManager"></script> <script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/seam/resource/remoting/interface.js?addReviewBean"></script> <script language="javascript" type="text/javascript"> var authenticated = false; function showTimeoutPanel() { showModalPanel(RichFaces.$('sessionTimeoutModalPanel')); } function showCartFullPanel(){ showModalPanel(); } function hideCartFullPanel(){ hideModalPanel(); } function showCartClearedPanel(){ showModalPanel(); } function hideCartClearedPanel(){ hideModalPanel(); } function initSessionCheck() { touchCookie(); var sessionExpired = isSessionExpired(); if(authenticated && sessionExpired) { logout(); } else if(authenticated && !sessionExpired) { var timeToPingServerInMS = getTimeToPingServerInMS(); setTimeout("pingServer()", timeToPingServerInMS); setTimeout("checkExpiredSession()", getTimeToExpireInMS()); } else { cleanSession(); } } function checkExpiredSession() { if(isSessionExpired()) { logout(); } else { setTimeout("checkExpiredSession()", getTimeToExpireInMS()); } } function cleanSession() { deleteCookie(); deleteCookie("deviceCookie"); deleteCookie("useritems"); deleteCookie("wsCartCookie"); deleteCookie("pushedMessages"); deleteKey("devicePIN","wsfiltering"); deleteKey("os","wsfiltering"); } function pingResponse(isAuthenticated) { if(isAuthenticated) { resetTimeToPingServer(); } else { cleanSession(); showTimeoutPanel(); } } function logout() { $j.ajax('/webstore/sessionutils/sessionmanager/?logout=true', { method: 'get', cache: false}); cleanSession(); showTimeoutPanel(); } function pingServer() { var timeToPing = getTimeToPingServerInMS(); if(timeToPing == null || isSessionExpired()) { logout(); } else if(timeToPing > 0) { //already pinged by another tab setTimeout("pingServer()", timeToPing); } else { $j.ajax('/webstore/sessionutils/sessionmanager/?logout=false', { method: 'get', cache: false}); } } function navigateToNonAuthenticatedPage() { window.location="/webstore/" } function checkOS() { if (navigator.appVersion.indexOf("Mac") != -1) return MAC; else if (navigator.appVersion.indexOf("Win") != -1) return WINDOWS; else if (navigator.appVersion.indexOf("Linux") != -1) return LINUX; else return UNKNOWN; } </script> <script defer="defer" language="javascript" type="text/javascript"> initSessionCheck(); </script><body> <script type="text/javascript"> //Adjust header sharing if(jQuery(".has-like-button").length){ jQuery(".has-like-button").hide(); } </script> <!-- model --> <script type="text/javascript"> function modelConstructor() { awwsModel = new ComponentData(); awwsModel.setProperty("productID", ""); awwsModel.setProperty("categoryID", ""); awwsModel.setProperty("contentID", "15725"); if ("" != "") awwsModel.setProperty("categoryID", getProductCategoryID("")); if ("15725" == "") awwsModel.setProperty("contentID", awwsModel.getProperty("categoryID")); }; function modelInitialize() { model = new modelConstructor(); }; registerOnloadCallback(modelInitialize); </script> <div id="deviceModalHTML" class="awwsModalContainer"> <div id="deviceModal_background" class="awwsModalBackgroundContainer"> <div class="awwsModalBackground"></div> </div> <div id="deviceModal_modal" class="awwsModal"> <div id="deviceModal_closeButton" class="awwsModalCloseButton"></div> <div class="awwsDeviceModalVerticalDivider"></div> <div class="awwsDeviceModalDoneButton"> <button id="clearButton" type="button" value="Clear" class="awwsBlueButton" style="display: inline; width: auto;"><span id="clearButtonLabel">Clear</span></button> <button id="doneButton" type="button" value="Apply" class="awwsBlueButton" style="display: inline; width: auto;"><span id="doneButtonLabel">Apply</span></button> <button id="backButton" type="button" value="Back" class="awwsBlueButton" style="display: none; width: auto;"><span id="backButtonLabel">Back</span></button> </div> <div class="awwsDeviceModal"> <div class="awwsDeviceModalTitle"> <h1>Choose your device specification</h1> </div> <div class="awwsDeviceModalColumn1"> <div class="awwsDeviceModalCountryPanel"> <h2>Select Country</h2> <div class="awwsMainMenuSearchBackground2" style="width: 161px; z-index: 1001; background-repeat: no-repeat;"> <input id="deviceModalSearchInput" class="awwsMainMenuSearchInputInactive" type="text"/> </div> </div> <img class="awwsDeviceModalHorizontalDivider" src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/resources/components/miscellaneous/images/horizontal-divider.png"/> <div class="awwsDeviceModalCarrierPanel"> <h2>Select Carrier</h2> <div id="carrierList" class="awwsDeviceModalCarrierList"></div> </div> </div> <div class="awwsDeviceModalColumn2"> <div class="awwsDeviceModalDevicePanel"> <h2>Select BlackBerry Device</h2> <div class="awwsDeviceModalDeviceListMask"> <div id="deviceList" class="awwsDeviceModalDeviceList"> </div> </div> </div> <div class="awwsDeviceModalHelp"> <img src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/resources/components/miscellaneous/images/arrow-callout.png"/> <a onclick="showCol2Help(300);" href="#">How to find your Model</a> </div> </div> <div class="awwsDeviceModalColumn2Help" style="display: none;"> <div class="awwsDeviceModalColumn2Content"> <h2>How to find your Model</h2> <span>If you are using BlackBerry Device software version 7.1 or older, on the home screen of your device, click the Options icon. Click Device > About Device Versions. If you are using a BlackBerry 10 device, on the home screen of your device, swipe down from the top of the screen and tap Settings > About.</span> <span>If your smartphone cannot be powered on, remove the battery to reveal the BlackBerry model number printed on the label underneath.</span> </div> </div> </div> </div> </div> <div id="carrierTemplate" style="display: none;"> <div id="carrierItemWrapper" class="awwsDeviceModalCarrierListItem"> <button id="carrierUp" type="button" class="awwsLargeRadioDeselectedButton" style="display: block; width: 100%;"><span id="carrierUpLabel"></span></button> <button id="carrierOver" type="button" class="awwsLargeRadioSelectedButton" style="display: block; width: 100%;"><span id="carrierOverLabel"></span></button> </div> </div> <div id="deviceTemplate" style="display: none;"> <div class="awwsDeviceModalDeviceListItem"> <div class="awwsDeviceModalDeviceListItemImageContainer"> <img id="image" class="awwsDeviceModalDeviceListItemImage" onload="imageScaler(event);"/> </div> <div class="awwsDeviceModalDeviceListItemButton"> <button id="deviceUp" type="button" class="awwsLargeRadioDeselectedButton" style="display: block; width: 100%;"><span id="deviceUpLabel"></span></button> <button id="deviceOver" type="button" class="awwsLargeRadioSelectedButton" style="display: block; width: 100%;"><span id="deviceOverLabel"></span></button> </div> </div> </div> <script type="text/javascript"><!-- function deviceModalConstructor() { this.resize = new ComponentSignal(); var deselectedRectangle = new Object(); deselectedRectangle.top = 24; deselectedRectangle.right = 32; deselectedRectangle.bottom = 8; deselectedRectangle.left = 32; var selectedRectangle = new Object(); selectedRectangle.top = 26; selectedRectangle.right = 32; selectedRectangle.bottom = 6; selectedRectangle.left = 32; var countries = null; var carriers = null; var filterDevices = null; var textInput = new ComponentTextInput(); //device list... var deviceClickHandler = function(id, model, imageUrl, imageId, displayName) { selectedDeviceModel = model; selectedDeviceImageURL = imageUrl; selectedDeviceImageId = imageId; selectedDeviceDisplayName = displayName; }; var backClickHandler = function() { hideCol2Help(300); } var carrierRadioGroup = new ComponentRadioTroop(); carrierRadioGroup.setType("reveal"); //carrierRadioGroup.setSelectedClass("awwsLargeRadioButtonSelected"); //carrierRadioGroup.setDeselectedClass("awwsLargeRadioButtonDeselected"); //carrier list... var carrierClickHandler = function(id, label) { selectedCarrierId = id; selectedCarrierName = label; }; var carrierTemplateHTML = jQuery("#carrierTemplate").html(); var carrierTemplate = new ComponentTemplate(); carrierTemplate.setHTML(carrierTemplateHTML); carrierTemplate.append("#carrierUpLabel", "label"); carrierTemplate.append("#carrierOverLabel", "label"); carrierTemplate.attr("#carrierItemWrapper", "title", "label"); carrierTemplate.click("", null, carrierClickHandler, ["id", "label"]); carrierTemplate.radio(carrierRadioGroup, "id", "#carrierUp", "#carrierOver"); var carrierData = new ComponentData(); var carrierList = new ComponentList(); carrierList.setListSelector("#carrierList"); carrierList.setTemplate(carrierTemplate); carrierList.setData(carrierData); var deviceRadioGroup = new ComponentRadioTroop(); deviceRadioGroup.setType("reveal"); //deviceRadioGroup.setSelectedClass("awwsLargeRadioButtonSelected"); //deviceRadioGroup.setDeselectedClass("awwsLargeRadioButtonDeselected"); var deviceTemplateHTML = jQuery("#deviceTemplate").html(); var deviceTemplate = new ComponentTemplate(); deviceTemplate.setHTML(deviceTemplateHTML); deviceTemplate.attr("#image", "src", "image"); deviceTemplate.append("#deviceUpLabel", "displayName"); deviceTemplate.append("#deviceOverLabel", "displayName"); deviceTemplate.click("#title", this, deviceClickHandler, ["id", "model", "image", "imageId", "displayName"]); deviceTemplate.radio(deviceRadioGroup, "displayName", "#deviceUp", "#deviceOver"); var deviceData = new ComponentData(); var deviceList = new ComponentList(); deviceList.setListSelector("#deviceList"); deviceList.setTemplate(deviceTemplate); deviceList.setData(deviceData); deviceList.update(); var requestProfileData = new RequestProfile(); requestProfileData.loadFromFilteringCookie(); var selectedCarrierId = requestProfileData.carrierid; var selectedCarrierName = null; var selectedCountryId = requestProfileData.countryid; var selectedCountryName = null; var selectedDeviceModel = requestProfileData.model; var selectedDeviceDisplayName = requestProfileData.deviceDisplayName; var selectedDeviceImageURL = null; var selectedDeviceImageId = null; var modal = null; var countryClickHandler = function(event, ui) { if (!isDefined(ui)) { var value = textInput.getValue(); if (isDefined(value)) { var foundCountry = false; // They didn't select one, they just typed so lets see if what they typed is one of our contries: for (var i=0; i<countries.length ; i++ ) { if (countries[i].label.toLowerCase() == value.toLowerCase()) { if (selectedCountryId != countries[i].id) { selectedCountryId = countries[i].id; selectedCountryName = countries[i].label; getCarriersMetaData(new RequestProfile(null,null,selectedCountryId,null,null,null,null,null), carriersCallback); } foundCountry = true; break; } } if (foundCountry == false) { selectedCountryId = null; selectedCountryName = null; selectedCarrierId = null; selectedCarrierName = null; carrierRadioGroup.select(null); carrierRadioGroup.clear(); carrierData.setProperty("data", []); carrierList.clear(); } } } else if (isDefined(ui.item) && isDefined(ui.item.id)) { if (selectedCountryId != ui.item.id) { selectedCountryId = ui.item.id; selectedCountryName = ui.item.label; // Log omniture click: for (var i=0; i<countries.length ; i++ ) { if (selectedCountryId == countries[i].id) { break; } } getCarriersMetaData(new RequestProfile(null,null,selectedCountryId,null,null,null,null,null), carriersCallback); } } }; var countriescallback = function(data) { var selectedCountry = null; countries = new Array(); for (var i=0; i<data.length ; i++ ) { countries.push({label: data[i].description, id: data[i].id, countrycode: data[i].country}); if (data[i].id == selectedCountryId) selectedCountry = data[i]; } textInput.setMinLength(1); textInput.setAutoComplete(countries); textInput.setChangeHandler(countryClickHandler); textInput.setSelectHandler(countryClickHandler); textInput.setSelector("#deviceModalSearchInput"); textInput.setLabel("Search Country"); textInput.setActiveClass("awwsMainMenuSearchInputActive"); textInput.setInactiveClass("awwsMainMenuSearchInputInactive"); if (selectedCountry == null) return; textInput.setValue(selectedCountry.description); countryClickHandler({}, {item: {id: selectedCountry.id, label: selectedCountry.description}}); } var carriersCallback = function(data) { carriers = new Array(); for (var i=0; i<data.length ; i++ ) { carriers.push({label: data[i].carrierName, id: data[i].id}); } carrierRadioGroup.clear(); carrierData.setProperty("data", carriers); carrierRadioGroup.select(selectedCarrierId); } var compareDevices = function(a,b) { if (a.displayName < b.displayName){ return -1; } if (a.displayName > b.displayName){ return 1; } return 0; } var devicesCallback = function(data) { filterDevices = new Array(); var pbid = -1; var pbImgUrl = ""; var priorityDevices = new Array(); var legacyDevices = new Array(); for (var i=0; i<data.length ; i++ ) { var imageId = data[i].imageId; var imageUrl = ""; var originalName = ""; if (!isDefined(imageId) || imageId == "0") { imageUrl = "/webstore/img/devices/default_device_image.jpg"; } else { imageUrl = '/webstore' + '/servedimages/' + imageId + '.png/?t=5'; } if(isDefined(data[i].displayName)){ originalName = data[i].displayName; }else{ continue; } if(data[i].displayName.toLowerCase().indexOf("blackberry") == -1 && data[i].displayName.length < 14){ data[i].displayName = "BlackBerry " + data[i].displayName; } if (originalName.toLowerCase().indexOf("playbook") > -1){ pbid = i; pbImgUrl = imageUrl; }else if (originalName.trim().length > 5){ priorityDevices.push({model: data[i].model, id: data[i].id, image: imageUrl, platform: data[i].platform, imageId: data[i].imageId, displayName: data[i].displayName}); }else { legacyDevices.push({model: data[i].model, id: data[i].id, image: imageUrl, platform: data[i].platform, imageId: data[i].imageId, displayName: data[i].displayName}); } } priorityDevices.sort(compareDevices); legacyDevices.sort(compareDevices).reverse(); if(pbid > -1){ priorityDevices.push({model: data[pbid].model, id: data[pbid].id, image: pbImgUrl, platform: data[pbid].platform, imageId: data[pbid].imageId, displayName: data[pbid].displayName}); } filterDevices = priorityDevices.concat(legacyDevices); deviceData.setProperty("data", filterDevices); deviceRadioGroup.select(selectedDeviceDisplayName); } modal = new ComponentModal(); modal.setModalContainerSelector("#deviceModalHTML"); modal.setModalBackgroundSelector("#deviceModal_background"); modal.setModalSelector("#deviceModal_modal"); modal.setCloseButtonSelector("#deviceModal_closeButton"); modal.setWidth(656); modal.setHeight(441); this.show = function() { modal.show(); if (countries == null) getCountriesMetaData(null, countriescallback); if (!filterDevices) { getDevicesMetaData(null, devicesCallback); } if (carriers == null) { if (selectedCountryId) getCarriersMetaData(new RequestProfile(null,null,selectedCountryId,null,null,null,null,null), carriersCallback); } this.resize.dispatch(); }; var clearClickHandler = function() { textInput.setValue(""); carrierRadioGroup.select(null); deviceRadioGroup.select(null); carrierList.clear(); selectedCountryId = null; selectedCountryName = null; selectedCarrierId = null; selectedCarrierName = null; selectedDeviceImageURL = null; selectedDeviceImageId = null; selectedDeviceDisplayName = null; selectedDeviceModel = null; var requestProfile = new RequestProfile(); requestProfile.loadFromFilteringCookie(); if (!requestProfile.isDeviceInfoCleared()) { // MKS6515615 - CAS error is given when Clear filter button is clicked a few times in a row // If the cookie is already cleared no use triggering a refresh if they press the button more than once. requestProfile.clearDeviceInfo(); fireOnloadCallback(); } }; var clearButton = jQuery("#clearButton"); clearButton.css("display", userAuth ? "none" : "inline"); clearButton.click(clearClickHandler); var backButton = jQuery("#backButton"); backButton.click(backClickHandler); var doneClickHandler = function() { var requestProfile = new RequestProfile(); requestProfile.loadFromFilteringCookie(); if (selectedCountryId == null) textInput.setValue(""); //Check if we already have this filter loaded... if (requestProfile.model == selectedDeviceModel && requestProfile.countryid == selectedCountryId && requestProfile.carrierid == selectedCarrierId) { modal.hide(); return; } requestProfile.model = selectedDeviceModel; requestProfile.countryid = selectedCountryId; requestProfile.carrierid = selectedCarrierId; requestProfile.carrierName = selectedCarrierName; requestProfile.countryName = selectedCountryName; requestProfile.deviceImageId = selectedDeviceImageId; requestProfile.deviceDisplayName = selectedDeviceDisplayName; requestProfile.writeToFilteringCookie(); fireOnloadCallback(); modal.hide(); }; var doneButton = jQuery("#doneButton"); doneButton.click(doneClickHandler); var searchBackgroundRectangle = new Object(); searchBackgroundRectangle.top = 10; searchBackgroundRectangle.right = 4; searchBackgroundRectangle.bottom = 10; searchBackgroundRectangle.left = 4; //var searchSelection = jQuery("#deviceModalHTML"); //var searchBackgroundSelection = jQuery(".awwsMainMenuSearchBackground2", searchSelection); //searchBackgroundSelection.scale9Grid(searchBackgroundRectangle, this.resize); this.reset = function() { this.resize.dispatch(); } }; function showCol2Help(ms) { jQuery(".awwsDeviceModalColumn2").css("display", "none"); jQuery("#clearButton").css("display", "none"); jQuery("#doneButton").css("display", "none"); jQuery(".awwsDeviceModalColumn2Help").css("display", "block"); jQuery("#backButton").css("display", "inline"); }; function hideCol2Help(ms) { jQuery(".awwsDeviceModalColumn2Help").css("display", "none"); jQuery("#backButton").css("display", "none"); jQuery(".awwsDeviceModalColumn2").css("display", "block"); jQuery("#clearButton").css("display", "inline"); jQuery("#doneButton").css("display", "inline"); }; function deviceModalInitialize() { var component; try { component = eval("deviceModal"); } catch (error) { } if (component == null) { deviceModal = new deviceModalConstructor(); } else { component.reset(); } }; registerOnloadCallback(deviceModalInitialize); --></script> <div id="b4bbDescriptionModalHTML" class="awwsModalContainer"> <div id="b4bbDescriptionModal_background" class="awwsModalBackgroundContainer"> <div class="awwsModalBackground"></div> </div> <div id="b4bbDescriptionModal_modal" class="awwsModal"> <div id="b4bbDescriptionModal_closeButton" class="awwsModalCloseButton"></div> <div id="b4bbDescriptionModal_content" class="awwsMessageModal" style="text-align: center;"> <!-- Message Goes Here --> <div class="awwsDeviceModalTitle"> <h1 id="b4bbDescriptionModalmessageTitle">Built for BlackBerry</h1> </div> <div id="b4bbDescriptionModalmessageContent1" class="awwsB4BBDescriptionModalMessageContent">Look for the Built for BlackBerry badge to identify apps and games that deliver the signature BlackBerry 10 experience.</div> <br/><br/> <div id="imagePanel" class="awwsB4BBDescriptionModalImagePanel"> <img class="awwsB4BBDescriptionModalImagePanelLargeIcon" src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/img/webstore/BFBLogo_90x35-wht.png"/> <img class="awwsB4BBDescriptionModalImagePanelSmallIcon" src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/img/webstore/BfB.bbworld.indicator.png"/> </div> <br/><br/> <div id="b4bbDescriptionModalmessageContent2" class="awwsB4BBDescriptionModalMessageContent">Built for BlackBerry. The signature BlackBerry® 10 experience.</div> <br/> <div id="b4bbDescriptionModalmessageContent2" class="awwsB4BBDescriptionModalMessageContent">Built to keep you moving, apps and games with the Built for BlackBerry designation provide the seamless performance and integrated experience you've come to love.</div> <button id="b4bbDescriptionModal_okButton" type="button" value="OK" class="awwsBlueButton" style="display: inline; width: auto;" onclick="b4bbDescriptionModal.okMethod();"><span id="b4bbDescriptionModal_okButtonLabel">OK</span></button> </div> </div> </div> <script type="text/javascript"><!-- function b4bbDescriptionModalModalConstructor() { var modal = new ComponentModal(); modal.setModalContainerSelector("#b4bbDescriptionModalHTML"); modal.setModalBackgroundSelector("#b4bbDescriptionModal_background"); modal.setModalSelector("#b4bbDescriptionModal_modal"); modal.setCloseButtonSelector("#b4bbDescriptionModal_closeButton"); modal.setWidth(345); modal.setHeight(360); this.modal = modal; this.hide = function() { this.modal.hide(); } this.show = function() { modal.show(); } this.okMethod = function() { this.hide(); } }; function b4bbDescriptionModalModalInitialize() { b4bbDescriptionModal = new b4bbDescriptionModalModalConstructor(); }; registerOnloadCallback(b4bbDescriptionModalModalInitialize); --></script> <!-- header --> <div class="awwsHeader"> <a href="/web/20170302124208/https://appworld.blackberry.com/webstore/?lang=en&countrycode=US"><img class="awwsHeaderLogo" src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/resources/components/miscellaneous/images/blackberry-appworld-logo.png"/></a> <span class="awwsSubMenuItems"> <span class="awwsSubMenuItemRow1"> <!-- Register --><span id="registerPanel" style="float: right;"> <span class="awwsSubMenuItem"><a id="registerLink" name="registerLink" href="https://web.archive.org/web/20170302124208/http://blackberryid.blackberry.com/bbid/createaccount/?callbackuri=aHR0cHM6Ly9hcHB3b3JsZC5ibGFja2JlcnJ5LmNvbS93ZWJzdG9yZS9teXdvcmxkL3NlY3VyZS9sb2dpbi8%3D&locale=ZW4%3D&userdata=bGFuZz1lbiZjaWQ9bnVsbA%3D%3D&authtype=d2Vic3RvcmU%3D" class="awwsWelcomeLabel">Register</a> </span></span> </span> <div class="clear"></div> <span class="awwsSubMenuItemRow2"> <!-- language selector --> <span id="learnMoreSelector" class="awwsLanguageSelector awwsSubMenuItem" onmouseover="showPopup('learnMoreMenu', 'learnMoreSelector', true);" onmouseout="hidePopup('learnMoreMenu', 'learnMore');">Learn More </span> <span class="awwsSubMenuDivider">|</span> <!-- help --> <a id="helpLinkSpan" class="awwsSubMenuItem" href="https://web.archive.org/web/20170302124208/http://docs.blackberry.com/18020" target="_blank">Help</a> <span class="awwsSubMenuDivider">|</span> <!-- language selector --> <span id="langSel" class="awwsLanguageSelector awwsSubMenuItem" onmouseover="showPopup('ttLang', 'langSel', true);" onmouseout="hidePopup('ttLang', 'langSel');">English </span> <!-- <a4j:outputPanel rendered="false"> <h:form class="awHeaderForm" id="headerForm"> <span class="awwsSubMenuDivider">|</span> <span class="awPodItem awPodItemPadding" id="devicesItem" style="display:none;"> <span id="deviceSelector" onclick=".show(event);sizeTT('deviceTT');"> <h:outputText styleClass="awPodItemLink" value="Available Devices"/> <h:graphicImage height="7" width="9" styleClass="awPodItemLinkArrowRight wspngfix" value="/resources/components/smallMenu/images/arrow-up.png" /> </span> <ws:tooltip tttitle="Available Devices" horizontalOffset="-210" verticalOffset="-10" direction="topLeft" id="deviceTT" styleClass="awNewToolTip" mode="client" hideEvent="none" showEvent="onclick"> <x:div id="deviceSwitchImageWrapper" styleClass="clearFloats deviceSwitchImageWrapperDiv"> </x:div> <x:div id="deviceSwitchRadioWrapper"> </x:div> <x:div id="deviceSwitchRadioLabelsWrapper"> </x:div> <x:div styleClass="awDeviceSwitchCaption"> <h:outputText value="BlackBerry World catalog will be modified based on your device selection."/> </x:div> <x:div styleClass="awDeviceSwitchCaption"> <h:graphicImage height="3" width="215" value="/img/devices/deviceHR.jpg" /> </x:div> <x:div styleClass="awDeviceSwitchCaption"> <h:outputText value="To view the entire catalog without filtering, sign out of your account."/> </x:div> </ws:tooltip> </span> </h:form> </a4j:outputPanel> --> </span> </span> <span class="awwsDeviceSelectorContainer"> <div id="deviceSelectorInfo" class="awwsDeviceSelectorInfo" style="display: none;">Displaying info for</div> <div id="deviceSelectorHTML" class="awwsDeviceSelector2" style="display: none;" onclick="if (isDeviceSelectorClickable) { deviceModal.show();}"> <div id="deviceSelectorSelected" style="display: none;"> <div class="awwsDeviceSelectorImageContainer"> <img id="deviceSelectorImage" class="awwsDeviceSelectorImage" width="52"/> </div> <div class="awwsDeviceSelectorInfoContainer"> <div id="deviceSelectorDevice" class="awwsDeviceSelectorDevice"></div> <div id="deviceSelectorChangeLink" class="awwsDeviceSelectorChange">Change</div><br/> <div id="deviceSelectorCarrier" class="awwsDeviceSelectorCarrier"></div> </div> </div> <div id="deviceSelectorDeselected" class="awwsDeviceSelectorSelect" style="display: none;"> Select your device and location </div> </div> </span> <script type="text/javascript"><!-- // In the new UI we aren't supposed to show these images so disable them, but leave the code. var showDeviceImagesInDeviceSelector = false; var isDeviceSelectorClickable = true; deviceSelectorInitialized = false; function deviceSelectorConstructor() { this.resize = new ComponentSignal(); this.reset = function() { this.render(); this.resize.dispatch(); } this.render = function() { var requestProfile = new RequestProfile(); requestProfile.loadFromFilteringCookie(); var deviceSelectorContainerSelection = jQuery("#deviceSelectorHTML"); var deselectedSelection = jQuery("#deviceSelectorDeselected"); var selectedSelection = jQuery("#deviceSelectorSelected"); var infoSelection = jQuery("#deviceSelectorInfo"); if (!isDefined(requestProfile.model) && !isDefined(requestProfile.countryName) && !isDefined(requestProfile.carrierName)) { deselectedSelection.css("display", "block"); selectedSelection.css("display", "none"); infoSelection.css("display", "none"); //Show the device selector... deviceSelectorContainerSelection.css("display", "block"); return; } deselectedSelection.css("display", "none"); selectedSelection.css("display", "block"); infoSelection.css("display", "block"); var imageSelection = jQuery("#deviceSelectorImage"); var deviceSelection = jQuery("#deviceSelectorDevice"); var carrierSelection = jQuery("#deviceSelectorCarrier"); var imageUrl = ""; if (!isDefined(requestProfile.deviceImageId) || requestProfile.deviceImageId == "0") { if (isDefined(requestProfile.model)) { // They have a model specified, but not an image so use a default image: imageUrl = "/webstore/img/devices/default_device_image.jpg"; } } else { imageUrl = '/webstore' + '/servedimages/' + requestProfile.deviceImageId + '.png/?t=5'; } if (!showDeviceImagesInDeviceSelector || imageUrl == "") { imageSelection.hide(); } else { imageSelection.show(); imageSelection.attr("src", imageUrl); } if (isDefined(requestProfile.deviceDisplayName)) { deviceSelection.empty().append(requestProfile.deviceDisplayName); } else { deviceSelection.empty().append(requestProfile.model); } carrierSelection.empty(); if (requestProfile.countryName && requestProfile.carrierName) { carrierSelection.append(requestProfile.countryName + " | " + requestProfile.carrierName); } else if (requestProfile.countryName) { carrierSelection.append(requestProfile.countryName); } else if (requestProfile.carrierName) { carrierSelection.append(requestProfile.carrierName); } //Show the device selector... deviceSelectorContainerSelection.css("display", "block"); } this.render(); var rectangle = new Object(); rectangle.top = 18; //24 rectangle.right = 7; rectangle.bottom = 18; //24 rectangle.left = 7; var deviceSelectorContainerSelection = jQuery("#deviceSelectorHTML"); deviceSelectorContainerSelection.scale9Grid(rectangle, this.resize); }; function deviceSelectorInitialize() { var component; try { component = eval("deviceSelector"); } catch (error) { } if (component == null) { deviceSelector = new deviceSelectorConstructor(); } else { component.reset(); } var changeElement = jQuery("#deviceSelectorChangeLink"); changeElement.css("display", "inline"); isDeviceSelectorClickable = true; }; var disableDeviceSelector = function() { var changeElement = jQuery("#deviceSelectorChangeLink"); changeElement.css("display", "none"); isDeviceSelectorClickable = false; }; var enableDeviceSelector = function() { var changeElement = jQuery("#deviceSelectorChangeLink"); changeElement.css("display", "inline"); isDeviceSelectorClickable = true; }; registerOnloadCallback(deviceSelectorInitialize); --></script><span id="userNotAuthPanel" class="awwsSubMenuButton"> <button id="signInLink" type="button" value="Sign In" class="awwsBlueWhiteTextButton" style="display: block; width: auto;"><span id="signInLinkLabel">Sign In</span></button> <!-- <span id="signInLink" class="awwsBlueButtonWhiteText" onclick="doLogin(); return false">Sign In</span> --></span> <!-- <span class="awwsSubMenuButton awwsTransparentButton" onclick="deviceModal.show();">Select your device and location</span> --> </div> <div class="clear"></div> <div id="ttLang" style="display:none;" class="awwsLanguageSelectorContainer" onmouseover="showPopup('ttLang', 'langSel', true);" onmouseout="hidePopup('ttLang', 'langSel');"> <div class="awwsSmallMenuBackground"> <div class="awwsSmallMenuBox"> <div class="awwsLanguageSelectorMenu"><span id="j_idt167:0:j_idt168"> <div id="langSel_0" class="awwsLanguageSelectorMenuItem" onmouseover="this.className='awwsLanguageSelectorMenuItemOver'" onmouseout="this.className='awwsLanguageSelectorMenuItem'" onclick="changeParamLI('lang','id');">Bahasa Indonesia </div></span><span id="j_idt167:1:j_idt168"> <div id="langSel_1" class="awwsLanguageSelectorMenuItem" onmouseover="this.className='awwsLanguageSelectorMenuItemOver'" onmouseout="this.className='awwsLanguageSelectorMenuItem'" onclick="changeParamLI('lang','de');">Deutsch </div></span><span id="j_idt167:3:j_idt168"> <div id="langSel_3" class="awwsLanguageSelectorMenuItem" onmouseover="this.className='awwsLanguageSelectorMenuItemOver'" onmouseout="this.className='awwsLanguageSelectorMenuItem'" onclick="changeParamLI('lang','es');">Español </div></span><span id="j_idt167:4:j_idt168"> <div id="langSel_4" class="awwsLanguageSelectorMenuItem" onmouseover="this.className='awwsLanguageSelectorMenuItemOver'" onmouseout="this.className='awwsLanguageSelectorMenuItem'" onclick="changeParamLI('lang','fr');">Français </div></span><span id="j_idt167:5:j_idt168"> <div id="langSel_5" class="awwsLanguageSelectorMenuItem" onmouseover="this.className='awwsLanguageSelectorMenuItemOver'" onmouseout="this.className='awwsLanguageSelectorMenuItem'" onclick="changeParamLI('lang','it');">Italiano </div></span><span id="j_idt167:6:j_idt168"> <div id="langSel_6" class="awwsLanguageSelectorMenuItem" onmouseover="this.className='awwsLanguageSelectorMenuItemOver'" onmouseout="this.className='awwsLanguageSelectorMenuItem'" onclick="changeParamLI('lang','nl');">Nederlands </div></span><span id="j_idt167:7:j_idt168"> <div id="langSel_7" class="awwsLanguageSelectorMenuItem" onmouseover="this.className='awwsLanguageSelectorMenuItemOver'" onmouseout="this.className='awwsLanguageSelectorMenuItem'" onclick="changeParamLI('lang','pt_br');">Português (Brasil) </div></span><span id="j_idt167:8:j_idt168"> <div id="langSel_8" class="awwsLanguageSelectorMenuItem" onmouseover="this.className='awwsLanguageSelectorMenuItemOver'" onmouseout="this.className='awwsLanguageSelectorMenuItem'" onclick="changeParamLI('lang','fi');">Suomi </div></span><span id="j_idt167:9:j_idt168"> <div id="langSel_9" class="awwsLanguageSelectorMenuItem" onmouseover="this.className='awwsLanguageSelectorMenuItemOver'" onmouseout="this.className='awwsLanguageSelectorMenuItem'" onclick="changeParamLI('lang','vi');">Tiếng Việt </div></span><span id="j_idt167:10:j_idt168"> <div id="langSel_10" class="awwsLanguageSelectorMenuItem" onmouseover="this.className='awwsLanguageSelectorMenuItemOver'" onmouseout="this.className='awwsLanguageSelectorMenuItem'" onclick="changeParamLI('lang','th');">ไทย </div></span><span id="j_idt167:11:j_idt168"> <div id="langSel_11" class="awwsLanguageSelectorMenuItem" onmouseover="this.className='awwsLanguageSelectorMenuItemOver'" onmouseout="this.className='awwsLanguageSelectorMenuItem'" onclick="changeParamLI('lang','zh_cn');">中文 (简体) </div></span><span id="j_idt167:12:j_idt168"> <div id="langSel_12" class="awwsLanguageSelectorMenuItem" onmouseover="this.className='awwsLanguageSelectorMenuItemOver'" onmouseout="this.className='awwsLanguageSelectorMenuItem'" onclick="changeParamLI('lang','zh_tw');">中文 (繁體) </div></span><span id="j_idt167:13:j_idt168"> <div id="langSel_13" class="awwsLanguageSelectorMenuItem" onmouseover="this.className='awwsLanguageSelectorMenuItemOver'" onmouseout="this.className='awwsLanguageSelectorMenuItem'" onclick="changeParamLI('lang','ja');">日本語 </div></span><span id="j_idt167:14:j_idt168"> <div id="langSel_14" class="awwsLanguageSelectorMenuItem" onmouseover="this.className='awwsLanguageSelectorMenuItemOver'" onmouseout="this.className='awwsLanguageSelectorMenuItem'" onclick="changeParamLI('lang','ko');">한국어 </div></span> </div> </div> </div> </div> <div id="learnMoreMenu" style="display:none;" class="awwsLanguageSelectorContainer" onmouseover="showPopup('learnMoreMenu', 'learnMoreSelector', true);" onmouseout="hidePopup('learnMoreMenu', 'learnMoreSelector');"> <div class="awwsSmallMenuBackground"> <div class="awwsSmallMenuBox"> <div class="awwsLanguageSelectorMenu"> <div class="awwsLoggedInMenuSelectorMenuItem"> <a target="_blank" href="https://web.archive.org/web/20170302124208/http://www.blackberry.com/bbid">BlackBerry ID</a> </div> <div class="awwsLoggedInMenuSelectorMenuItem"> <a target="_blank" href="https://web.archive.org/web/20170302124208/http://www.blackberry.com/bbw">BlackBerry World</a> </div> </div> </div> </div> </div> <div id="loggedInUserMenu" style="display:none;" class="awwsLoggedInMenuSelectorContainer" onmouseover="showPopup('loggedInUserMenu', 'userActionSel', true);" onmouseout="hidePopup('loggedInUserMenu', 'userActionSel');"> <div class="awwsSmallMenuBackground"> <div class="awwsSmallMenuBox"> <div class="awwsLoggedInMenuSelectorMenu"> <div class="awwsLoggedInMenuSelectorMenuItem"><a id="logoutLink" name="logoutLink" href="/web/20170302124208/https://appworld.blackberry.com/webstore/myworld/logout/">Sign Out</a> </div> <div class="awwsLoggedInMenuSelectorMenuItem"><a id="BBIDLink" name="BBIDLink" href="" onclick="editAccountInfoLink();">Account Settings</a> </div> </div> </div> </div> </div> <div id="invalidSearchModalHTML" class="awwsModalContainer"> <div id="invalidSearchModal_background" class="awwsModalBackgroundContainer"> <div class="awwsModalBackground"></div> </div> <div id="invalidSearchModal_modal" class="awwsModal"> <div id="invalidSearchModal_closeButton" class="awwsModalCloseButton"></div> <div id="invalidSearchModal_content" class="awwsMessageModal"> <!-- Message Goes Here --> <div class="awwsDeviceModalTitle"> <h1 id="invalidSearchModalmessageTitle"></h1> </div> <div id="invalidSearchModalmessageImg"></div> <div id="invalidSearchModalmessageContent" class="messageContent"></div> </div> </div> </div> <script type="text/javascript"><!-- function invalidSearchModalModalConstructor() { var modalCloseHandler = function() { //This fires when the Close Button is Clicked... }; var modal = new ComponentModal(); modal.setModalContainerSelector("#invalidSearchModalHTML"); modal.setModalBackgroundSelector("#invalidSearchModal_background"); modal.setModalSelector("#invalidSearchModal_modal"); modal.setCloseButtonSelector("#invalidSearchModal_closeButton"); modal.setWidth(300); modal.setHeight(120); modal.close.add(this, modalCloseHandler); this.modal = modal; this.show = function(title, message, image) { jQuery("#invalidSearchModalmessageTitle")[0].innerHTML = title; jQuery("#invalidSearchModalmessageContent")[0].innerHTML = message; if(image != null) jQuery("#invalidSearchModalmessageImg")[0].innerHTML = image; this.modal.show(); }; }; function invalidSearchModalModalInitialize() { invalidSearchModal = new invalidSearchModalModalConstructor(); }; registerOnloadCallback(invalidSearchModalModalInitialize); --></script> <div id="mainMenuHTML" class="awwsMainMenuContainer" style="visibility: hidden;"> <div class="awwsMainMenuBackground2"> <div> <div id="mainMenu_awwsMainMenuList" class="noSelect"> </div> <div class="awwsMainMenuSearch"> <div class="awwsMainMenuSearchBackground2"> <input id="mainMenu_searchInput" class="awwsMainMenuSearchInputInactive" type="text" onkeypress="return keyPressed(event);" maxlength="64"/> </div> </div> </div> </div> <div class="clear"></div> </div> <noscript> <div id="noJSDiv" class="awwsLegacyPageWrapper"> <div class="awwsBoxStandardError awMarginBottom-Twenty awMarginTop-Twenty">To access BlackBerry World from the desktop, your browser must support JavaScript.</div> </div> </noscript> <div id="noCookiesDiv" class="awwsLegacyPageWrapper" style="display: none;"> <div class="awwsBoxStandardError awMarginBottom-Twenty awMarginTop-Twenty">To access BlackBerry World from the desktop, your browser must support cookies.</div> </div> <script language="javascript" type="text/javascript"> jQuery("#noCookiesDiv").hide(); if(!navigator.cookieEnabled){ jQuery("#noCookiesDiv").show(); } if(jQuery("#noJSDiv").length){ jQuery("#noJSDiv").hide(); } </script> <div id="mainMenu_awwsMainMenuItemTemplate" style="display: none;"> <div id="mainMenu_awwsMainMenuListItem"> <a id="link"> <div id="awwsMainMenuListItemUp" class="awwsMainMenuListItem"> <span id="title" class="awwsMainMenuListItemTitle pointer"></span> </div> <div id="awwsMainMenuListItemOver" class="awwsMainMenuListItemOver2"> <span id="titleOver" class="awwsMainMenuListItemTitleOver pointer"></span> </div> </a> </div> </div> <script type="text/javascript"><!-- function mainMenuConstructor() { this.visible = false; this.service = null; this.reload = function() { getProductTypeList(null, jQuery.proxy(this.service, "_loadCompleteHandler")); } jQuery("#mainMenu_awwsMainMenuList").empty(); var clickHandler = function(productURL) { window.location.href = productURL; }; var mouseOverHandler = function(event) { //var selection1 = jQuery("#awwsMainMenuListItemUp", this); //var selection2 = jQuery("#awwsMainMenuListItemOver", this); var selection = jQuery(event.currentTarget); var namespace = selection.attr("id"); var selection1 = this.template.getEntitySelection(namespace, "#awwsMainMenuListItemUp"); var selection2 = this.template.getEntitySelection(namespace, "#awwsMainMenuListItemOver"); var selected = selection1.data("selected"); if (selected) return; selection1.css("display", "none"); selection2.css("display", "block"); }; var mouseOutHandler = function(event) { //var selection1 = jQuery("#awwsMainMenuListItemUp", this); //var selection2 = jQuery("#awwsMainMenuListItemOver", this); var selection = jQuery(event.currentTarget); var namespace = selection.attr("id"); var selection1 = this.template.getEntitySelection(namespace, "#awwsMainMenuListItemUp"); var selection2 = this.template.getEntitySelection(namespace, "#awwsMainMenuListItemOver"); var selected = selection1.data("selected"); if (selected) return; selection1.css("display", "block"); selection2.css("display", "none"); }; var dataUpdateHandler = function() { var isLoggedInUser = false; if (isLoggedInUser == false) return; var myWorld = new Object(); myWorld.name = "My World"; myWorld.productTypeId = 99; var items = data.getProperty("data"); items.push(myWorld); }; var data = new ComponentData(); data.update.add(this, dataUpdateHandler); var formattedData = new ComponentData(); var dataFormatter = new ComponentDataFormatter(); dataFormatter.setData(data); dataFormatter.setFormattedData(formattedData); dataFormatter.addDataFormatter("productTypeId", productLinkFormatter, "productTypeLink","lang=en&countrycode=US"); var activeProductLink = productLinkFormatter(""); this.service = new ComponentService(); this.service.setData(data); var radioGroup = new ComponentRadioTroop(); radioGroup.setType("reveal"); //"toggle" radioGroup.select(window.location.pathname + window.location.search); var templateHTML = jQuery("#mainMenu_awwsMainMenuItemTemplate").html(); var rectangle = new Object(); rectangle.top = 24; rectangle.right = 1; rectangle.bottom = 24; rectangle.left = 1; var template = this.template = new ComponentTemplate(); template.setHTML(templateHTML); template.append("#title", "name"); template.append("#titleOver", "name"); template.attr("#link", "href", "productTypeLink"); template.hover("", jQuery.proxy(mouseOverHandler, this), jQuery.proxy(mouseOutHandler, this)); template.nineScale("#awwsMainMenuListItemOver", rectangle); template.visible("#awwsMainMenuListItemOver", false); template.radio(radioGroup, "productTypeLink", "#awwsMainMenuListItemUp", "#awwsMainMenuListItemOver"); var populateCompleteHandler = function() { var dataLength = data.getProperty("data").length; if (dataLength == 0) return; if (this.visible) return; this.visible = true; var selection = jQuery("#mainMenuHTML"); selection.hide(); selection.css("visibility", ""); selection.fadeIn(1000); } var list = new ComponentList(); list.setListSelector("#mainMenu_awwsMainMenuList"); list.setTemplate(template); list.setData(formattedData); list.populateComplete.add(this, populateCompleteHandler); var textInput = new ComponentTextInput(); var autoComplete = function(request, response) { var term = request.term; if(!checkAgainstPattern(term)) { // Don't autocomplete if there are special characters... return; } var searchProductTypeHandler = function(data) { var componentData = new ComponentData(); componentData.setProperty("data", data); var formattedData = new ComponentData(); var dataFormatter = new ComponentDataFormatter(); dataFormatter.setData(componentData); dataFormatter.setFormattedData(formattedData); dataFormatter.addDataFormatter("_itemDetailsLink", linkFormatter, null,"lang=en&countrycode=US"); dataFormatter.addDataFormatter("iconId", iconIDFormatter, "iconImgUrl","lang=en&countrycode=US"); dataFormatter.update(); var newData = dataFormatter.getFormattedData().getProperty("data"); response(newData); }; var requestProfile = new RequestProfile(); requestProfile.pagesize = 5; searchProductType("all", term, requestProfile, searchProductTypeHandler); }; var renderItem = function(ul, item) { var listItem = jQuery("<li>"); listItem.data("item.autocomplete", item); var trackingId=item.parentId == null ? item.id : item.parentId; var itemLink = item._itemDetailsLink; var itemIconImgUrl = item.iconImgUrl; var itemName = item.name; var itemBy = item.vendorName; itemName = nameSpecialCharacterFormatter(itemName, null); itemBy = nameSpecialCharacterFormatter(itemBy, null); item._itemDetailsLink = itemLink; if (itemIconImgUrl != "") { listItem.append("<a href=\"" + itemLink + "\" onclick=\"infoLinkClickedNoPage(\'search:results:predictive:\' +" + trackingId + ")\"" + "><img class=\"awwsDropDownImage\" src=\"" + itemIconImgUrl + "\" /><b>" + itemName + "</b><br />" + itemBy + "</a>") } else { // No img listItem.append("<a href=\"" + itemLink + "\" onclick=\"infoLinkClickedNoPage(\'search:results:predictive:\' +" + trackingId + ")\"" + "><b>" + itemName + "</b><br />" + itemBy + "</a>") } ul.append(listItem); return listItem; }; var selectHandler = function(event, ui) { window.location.href = ui.item._itemDetailsLink; return true; }; var position = new Object(); position.my = "right top"; position.at = "right bottom"; textInput.setPosition(position); textInput.setAutoFocus(false); textInput.setMinLength(2); textInput.setAutoComplete(autoComplete); textInput.setRenderItem(renderItem); textInput.setSelectHandler(selectHandler); textInput.setSelector("#mainMenu_searchInput"); textInput.setLabel("Search"); textInput.setActiveClass("awwsMainMenuSearchInputActive") textInput.setInactiveClass("awwsMainMenuSearchInputInactive"); getProductTypeList(null, jQuery.proxy(this.service, "_loadCompleteHandler")); if (awwsModel) awwsModel.setProperty("mainMenuData", data); var mainMenuBackgroundRectangle = new Object(); mainMenuBackgroundRectangle.top = 24; mainMenuBackgroundRectangle.right = 7; mainMenuBackgroundRectangle.bottom = 24; mainMenuBackgroundRectangle.left = 7; var mainMenuSelection = jQuery("#mainMenuHTML"); var mainMenuBackgroundSelection = jQuery(".awwsMainMenuBackground2", mainMenuSelection); mainMenuBackgroundSelection.scale9Grid(mainMenuBackgroundRectangle); var searchBackgroundRectangle = new Object(); searchBackgroundRectangle.top = 10; searchBackgroundRectangle.right = 4; searchBackgroundRectangle.bottom = 10; searchBackgroundRectangle.left = 4; var searchSelection = jQuery("#mainMenuHTML"); var searchBackgroundSelection = jQuery(".awwsMainMenuSearchBackground2", searchSelection); searchBackgroundSelection.scale9Grid(searchBackgroundRectangle); }; mainMenuInitialized = false; function mainMenuInitialize() { if (mainMenuInitialized) { mainMenu.reload(); return; } mainMenuInitialized = true; mainMenu = new mainMenuConstructor(); }; registerOnloadCallback(mainMenuInitialize); var focused = false; var $j = jQuery.noConflict(); function keyPressed(e) { var keycode; if (window.event) { keycode = window.event.keyCode; } else if (e) { keycode = e.which; } var keychar = String.fromCharCode(keycode); if(keycode == 32 || keycode == 0) return true; if (keycode == 13){ // Enter submitSearch(); } //Don't escape the chars yet, wait until they press submit! //return checkAgainstPattern(keychar); return true; } function utf8encode(string) { string = string.replace(/\r\n/g,"\n"); var utftext = ""; for (var n = 0; n < string.length; n++) { var c = string.charCodeAt(n); if (c < 128) { utftext += String.fromCharCode(c); } else if((c > 127) && (c < 2048)) { utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128); } else { utftext += String.fromCharCode((c >> 12) | 224); utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); } } return utftext; } function base64Encode(input) { var keyStr ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var output = ""; var chr1, chr2, chr3, enc1, enc2, enc3, enc4; var i = 0; input = utf8encode(input); while (i < input.length) { chr1 = input.charCodeAt(i++); chr2 = input.charCodeAt(i++); chr3 = input.charCodeAt(i++); enc1 = chr1 >> 2; enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63; if (isNaN(chr2)) { enc3 = enc4 = 64; } else if (isNaN(chr3)) { enc4 = 64; } output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4); } return output; } function checkAgainstPattern(text) { var patternText = "^[^<>%#$\`\"\{\}\|\?\^\[\]/\\]+$"; if(patternText == 'notset') { //default accepts everything return true; }else{ var pattern = /^[^<>%#$\`\"\{\}\|\?\^\[\]/\\]+$/; return pattern.test(text); } } function submitSearch(){ var input = jQuery("#mainMenu_searchInput"); var keyword = input[0].value; var length_nospace = keyword.replace(/\ /g, '').length; if((keyword == '') || (2 > length_nospace)) { showInvalidSearchModal("Invalid Search Criteria", "Search criteria must be at least two characters long (without counting spaces)."); return; } if(!checkAgainstPattern(keyword)) { showInvalidSearchModal("Invalid Search Criteria", "Search criteria must not contain invalid characters."); return; } var link = document.getElementById("searchLink"); var url = link.href; url = url.replace("tobereplaced", encodeURIComponent(keyword)); window.location.href = url + "?lang=en&countrycode=US"; } function searchBoxFocused(searchBox) { if(focused) return; focused = true; if(searchBox.value=='') searchBox.value=''; var classes = searchBox.getAttribute("class"); if(classes == null) { //Internet Explorer classes = searchBox.getAttribute("className"); } classes = classes + " searchBoxFocused"; searchBox.setAttribute("class", classes); //no hurt searchBox.setAttribute("className", classes); } function showInvalidSearchModal(title, text) { eval(invalidSearchModal).show(title, text, null); } --></script> <script type="text/javascript"> var $j = jQuery.noConflict(); function editAccountInfoLink(){ window.open('https://web.archive.org/web/20170302124208/http://blackberryid.blackberry.com/bbid/login/?&locale=ZW4%3D', '_blank'); $j.ajax('/webstore/sessionutils/sessionmanager/?logout=true', { method: 'get', cache: false}); cleanSession(); } function showPopup(popid, controlId, inheritParentLeft){ if (inheritParentLeft !=undefined ){ var control = $j('#' + controlId); var controlOffset = control.offset(); var controlWidth = control.width(); var menu = $j('#' + popid); var menuWidth = menu.width(); if (menuWidth < (controlWidth + 26)) { menuWidth = controlWidth + 26; menu.css("width", menuWidth); } menu.css("left", controlOffset.left + controlWidth - menuWidth + 22); } $j('#' + popid).css("display", "block"); $j('#' + controlId).addClass("awwsLanguageSelectorOver"); $j('#' + controlId).removeClass("awwsLanguageSelector"); } function hidePopup(popid, controlId){ $j('#' + popid).css("display", "none"); $j('#' + controlId).removeClass("awwsLanguageSelectorOver"); $j('#' + controlId).addClass("awwsLanguageSelector"); } var cachedPage = true; //; var authenticated = false; var nonCachedNonAuthenticationPage = true; //; function changeParamLI(param, val){ if (param == "lang") { updateLanguageInRequestProfile(val); } var sameParam = param; var newval = val; var url = '/webstore/myworld/updateprefs/' + '?'+param +'=' + val; if(authenticated) { $j.ajax(url, { method: 'get', complete: function(transport){ changeParam(sameParam, newval); } }); } else { changeParam(sameParam, newval); } } function getChangedParamCurrentURL(url, sameParam, newval){ var urlbase=url.split('?'); var newLocation='?'; if (urlbase[1] == undefined){ newLocation= newLocation + sameParam +'='+newval; paramInserted=true; }else{ var params=urlbase[1].split('&'); var paramInserted=false; for (i=0; i<params.length; i++){ if (params[i].indexOf(sameParam + '=') == -1){ if (newLocation != '?'){ newLocation=newLocation +'&'+params[i]; }else{ newLocation= newLocation+params[i]; } }else{ paramInserted=true; if (newLocation != '?'){ newLocation= newLocation +'&'+ sameParam + '='+newval; }else{ newLocation=newLocation + sameParam +'='+newval; } } } } if (!paramInserted){ newLocation= newLocation + '&' + sameParam + '=' + newval; } return urlbase[0]+newLocation; } function changeParam(sameParam, newval){ var location=window.location +''; if(cachedPage || nonCachedNonAuthenticationPage) { window.location = getChangedParamCurrentURL((window.location +''), sameParam, newval); } else { //reload the page window.location.href = window.location.href; } } function updateLanguageInRequestProfile(newLang) { var requestProfile = new RequestProfile(); requestProfile.loadFromFilteringCookie(); //Check if we already have this language loaded... if (requestProfile.lang == newLang) { // Do Nothing return; } requestProfile.lang = newLang; requestProfile.writeToFilteringCookie(); //fireOnloadCallback(); }; function scrubForm(){ } </script> <div id="awFilterWrapperDiv" class="awFilterWrapper" style="display:none"> </div> <div id="bodyContentWrapper" class="awwsMain"> <!-- --> <!-- Data --> <!-- --> <!-- content --> <script type="text/javascript"> contentDataInitialized = false; function contentDataInitialize() { if (contentDataInitialized) return; contentDataInitialized = true; contentData = new ComponentData(); var data = eval("contentData"); if (data == null) return; data.setID("contentData"); var source = eval(""); var path = "data"; if (source) data.setProperty(path, source); }; var contentDataRegistered = contentDataRegistered || false; var contentDataRegister = contentDataRegister || function() { if (contentDataRegistered) return; contentDataRegistered = true; registerOnloadCallback(contentDataInitialize); } contentDataRegister(); </script> <script type="text/javascript"> ownershipDataInitialized = false; function ownershipDataInitialize() { if (ownershipDataInitialized) return; ownershipDataInitialized = true; ownershipData = new ComponentData(); var data = eval("ownershipData"); if (data == null) return; data.setID("ownershipData"); var source = eval(""); var path = "data"; if (source) data.setProperty(path, source); }; var ownershipDataRegistered = ownershipDataRegistered || false; var ownershipDataRegister = ownershipDataRegister || function() { if (ownershipDataRegistered) return; ownershipDataRegistered = true; registerOnloadCallback(ownershipDataInitialize); } ownershipDataRegister(); </script> <script type="text/javascript"> formattedContentDataInitialized = false; function formattedContentDataInitialize() { if (formattedContentDataInitialized) return; formattedContentDataInitialized = true; formattedContentData = new ComponentData(); var data = eval("formattedContentData"); if (data == null) return; data.setID("formattedContentData"); var source = eval(""); var path = "data"; if (source) data.setProperty(path, source); }; var formattedContentDataRegistered = formattedContentDataRegistered || false; var formattedContentDataRegister = formattedContentDataRegister || function() { if (formattedContentDataRegistered) return; formattedContentDataRegistered = true; registerOnloadCallback(formattedContentDataInitialize); } formattedContentDataRegister(); </script> <script type="text/javascript"> contentDataFormatterInitialized = false; function contentDataFormatterInitialize() { if (contentDataFormatterInitialized) return; contentDataFormatterInitialized = true; var dataFormatter = contentDataFormatter = new ComponentDataFormatter(); dataFormatter.setID("contentDataFormatter"); var data = eval("contentData"); if (data == null) return; var formattedData = eval("formattedContentData"); if (formattedData == null) return; dataFormatter.setData(data); dataFormatter.setFormattedData(formattedData); }; var contentDataFormatterRegistered = contentDataFormatterRegistered || false; var contentDataFormatterRegister = contentDataFormatterRegister || function() { if (contentDataFormatterRegistered) return; contentDataFormatterRegistered = true; registerOnloadCallback(contentDataFormatterInitialize); } contentDataFormatterRegister(); </script> <script type="text/javascript"><!-- //View in My World //Download //Upgrade //Purchase //Purchase Upgrade {0} //Try //Subscribe //Special behavior for buttons on album page var isAlbumPage = (window.location.href.indexOf('album') !== -1); var isMyWorld = (window.location.href.indexOf('myworld') !== -1); var LICENSE_TYPE_DOWNLOAD = 1; var LICENSE_TYPE_PURCHASE = 2; var LICENSE_TYPE_TRY = 3; var LICENSE_TYPE_MULTI = 4; var LICENSE_TYPE_7_SUB = 5; var LICENSE_TYPE_30_SUB = 6; var LICENSE_TYPE_NOT_FOR_SALE = 7; var LICENSE_TYPE_RENTAL = 8; var OPERATION_PURCHASE = "1"; var OPERATION_PURCHASE_UPGRADE = "2"; var OPERATION_TRY = "3"; var OPERATION_UPGRADE = "4"; var OPERATION_DOWNLOAD = "5"; var OPERATION_RENT = "10"; var OPERATION_NOT_FOR_SALE = "7"; var freeLicense = new Object(); freeLicense.type = LICENSE_TYPE_DOWNLOAD; freeLicense.label = "Download"; freeLicense.labelPrice = false; freeLicense.operation = OPERATION_DOWNLOAD; var purchaseLicense = new Object(); purchaseLicense.type = LICENSE_TYPE_PURCHASE; purchaseLicense.label = "Buy {0}"; purchaseLicense.labelPrice = true; purchaseLicense.operation = OPERATION_PURCHASE; var tryLicense = new Object(); tryLicense.type = LICENSE_TYPE_TRY; tryLicense.label = "Try"; tryLicense.labelPrice = false; tryLicense.operation = OPERATION_TRY; var subscription7License = new Object(); subscription7License.type = LICENSE_TYPE_7_SUB; subscription7License.label = "Subscribe"; subscription7License.labelPrice = false; subscription7License.operation = OPERATION_PURCHASE; var subscription30License = new Object(); subscription30License.type = LICENSE_TYPE_30_SUB; subscription30License.label = "Subscribe"; subscription30License.labelPrice = false; subscription30License.operation = OPERATION_PURCHASE; var notForSaleLicense = new Object(); notForSaleLicense.type = LICENSE_TYPE_NOT_FOR_SALE; // Not For Sale is not supported.. notForSaleLicense.label = "Not For Sale"; notForSaleLicense.labelPrice = false; notForSaleLicense.operation = OPERATION_NOT_FOR_SALE; var rentalLicense = new Object(); rentalLicense.type = LICENSE_TYPE_RENTAL; rentalLicense.label = "Rent {0}"; rentalLicense.labelPrice = true; rentalLicense.operation = OPERATION_RENT; var licenseTypes = new Object(); licenseTypes[1] = freeLicense; licenseTypes[2] = purchaseLicense; licenseTypes[3] = tryLicense; licenseTypes[5] = subscription7License; licenseTypes[6] = subscription30License; licenseTypes[7] = notForSaleLicense; licenseTypes[8] = rentalLicense; j_idt189Initialized = false; var buttonsOnly = true; function j_idt189Initialize() { if (j_idt189Initialized) return; j_idt189Initialized = true; var dataFormatter = eval(""); if (dataFormatter == null) dataFormatter = eval("contentDataFormatter"); if (dataFormatter == null) return; var actionButtonsFormatter = function(value, parameters, data) { if (value == null || !isDefined(data)) return ""; var isMusicTrack = (isDefined(data.vendorTrackId) && isDefined(data.parentId)); var currentMillis = new Date().getTime(); if(isDefined(data.releaseDate) && (data.releaseDate > currentMillis)){ return ""; } if(isAlbumPage){ var parentReleaseDate = this.albumDetails.data._properties.data.releaseDate; if (isDefined(parentReleaseDate)){ if(parentReleaseDate > currentMillis){ return ""; } } } var myWorldForceVideo = "false" == "true" ? true : false; var myWorldForceMusic = "false" == "true" ? true : false; var isLoggedIn = "false"; var isVideoEnabled = "false" == "true" ? true : false; var isAnonVideoAllowed = "false" == "true" ? true : false; var videoCountries = ","; var isVideoAllowedCurrCountry = false; var isMusicEnabled = "false" == "true" ? true : false; var isAnonMusicAllowed = "false" == "true" ? true : false; var musicCountries = ","; var isMusicAllowedCurrCountry = false; var currCountry = getCurrentCountry(); if(isDefined(data.videoTitle) && !(isMyWorld && myWorldForceVideo)){ if(!isDefined(isVideoEnabled) || (!isVideoEnabled)){ return ""; } if(!isDefined(videoCountries)){ return ""; } else if((isDefined(currCountry) && currCountry != "0")){ var arrCountries = videoCountries.split(","); var country; for (i = 0; i < arrCountries.length; i++){ if (currCountry == arrCountries[i].trim()) { isVideoAllowedCurrCountry = true; break; } } if(!isVideoAllowedCurrCountry){ return ""; } }else if(!isDefined(isAnonVideoAllowed) || (isDefined(isAnonVideoAllowed) && !isAnonVideoAllowed)){ return ""; } } if(isDefined(data.musicVendorArtistId) && !(isMyWorld && myWorldForceMusic)){ if(!isDefined(isMusicEnabled) || (!isMusicEnabled)){ return ""; } if(!isDefined(musicCountries)){ return ""; } else if((isDefined(currCountry) && currCountry != "0")){ var arrCountries = musicCountries.split(","); var country; for (i = 0; i < arrCountries.length; i++){ if (currCountry == arrCountries[i].trim()) { isMusicAllowedCurrCountry = true; break; } } if(!isMusicAllowedCurrCountry){ return ""; } }else if(!isDefined(isAnonMusicAllowed) || (isDefined(isAnonMusicAllowed) && !isAnonMusicAllowed)){ return ""; } } dataDictionary[data.id] = data; buttonsOnly = "false".toLowerCase() == "true"; // If it's already installed, check if update is avail, show a message var updateInfo = getUpdateInfo(data, userAuth); if (userAuth && (((updateInfo&BUTTON_UPGRADE) == BUTTON_UPGRADE) || ((updateInfo&BUTTON_PURCHASE_UPGRADE) == BUTTON_PURCHASE_UPGRADE))) { // They aren't plugged in, so we don't know if it is installed or not. return getUpdateButton(data, "awwsBlueButton"); } // If it's not available for the current device, country, carrier show a message if(!buttonsOnly){ switch (compatibleContent(data)){ case 'errorModel': return "<div class='awPriceInstallState'>The item is not available for your selected device.</div>"; case 'errorCountry': return "<div class='awPriceInstallState'>The item is not available for your selected country.</div>"; case 'errorCarrier': return "<div class='awPriceInstallState'>The item is not available for your selected carrier.</div>"; default: break; } } // Playbook is not supportd // TODO Should be checking if pushEnabledDevice here, then once a playbook has been upgraded they will be supported in WebStore. if (!buttonsOnly && getCurrentModel().toLowerCase() == 'playbook') { return "<div class='awPriceSuperscript awPriceSuperscriptRed'>Visit this item in BlackBerry World on your PlayBook to download.</div>"; } var actionButtonsHTML = ''; var actionButtonsArray = []; if (!buttonsOnly && doesExist("pushedMessages", data.id, "pushedMessages")) { // If they have pushed it this session, then lets tell them here. actionButtonsArray.push('<div class="awPriceInstallState">' + "This item has been sent to your device" + "</div>"); } var valueLength = value.length; for (var i = 0; i < valueLength; ++i) { var license = value[i]; //license.accessDuration; //license.initialRenewalPeriod; //license.licenseModelType; //license.licenseType; //license.price; //license.pricingtierId; //license.renewalPrice; //license.renewalPricintTierId; var licenseType = licenseTypes[license.licenseType]; var label = licenseType.label; if (licenseType.type == LICENSE_TYPE_NOT_FOR_SALE) { return; } if (license.licenseModelType == null) { // MKS 6534032 - In rare cases we are ingesting a license that is mostly NULL and // it looks like crap. Lets skip it here if license model type is null. continue; } if (licenseType.type == freeLicense.type && !buttonsOnly) { actionButtonsArray.push('<div class="awwsActionButtonFreeText">' + "FREE" + "</div>"); } else if (licenseType.type != freeLicense.type && !buttonsOnly && ((updateInfo&BUTTON_DOWNLOAD) == BUTTON_DOWNLOAD)) { // If they have already bought it, then we should show a download button, not a buy button. return '<div class="awwsActionButtonFreeText">' + "Already Purchased" + "</div>" + getButtonHTML(freeLicense.label, data.id, licenseType.type, OPERATION_DOWNLOAD, "awwsBlueButton"); } if (!buttonsOnly && ((licenseType.type == LICENSE_TYPE_7_SUB) || (licenseType.type == LICENSE_TYPE_30_SUB))) { //"{(price ne renewalPrice and renewalPrice ge 0) or (contentapp.content.initialRenewalPeriod ne contentapp.content.licensetype.accessduration)}") { // Its a subscription if (isDefined(license.price) && license.price > 0) { // Paid Subscription actionButtonsArray.push('<div class="awwsActionButtonFreeText">' +license.priceString + "</div>"); } else if (isDefined(license.price) && license.price == 0) { // Free Subscription actionButtonsArray.push('<div class="awwsActionButtonFreeText">' + "FREE" + "</div>"); } if (license.renewalPrice > 0 && license.price != license.renewalPrice) { // Special Initial Period Subscription var priceLabel = '{0} for first <span class="awPriceSuperscriptBlue">{1}</span> days'; priceLabel = priceLabel.replace("{0}", license.priceString); priceLabel = priceLabel.replace("{1}", license.initialRenewalPeriod); actionButtonsArray.push('<div class="awwsActionButtonFreeText">' + priceLabel + "</div>"); if (licenseType.type == LICENSE_TYPE_7_SUB) { actionButtonsArray.push('<div class="awwsActionButtonFreeText">' + license.renewalPriceString + " / " + "7 days" + "</div>"); } else if (licenseType.type == LICENSE_TYPE_30_SUB) { actionButtonsArray.push('<div class="awwsActionButtonFreeText">' + license.renewalPriceString + " / " + "30 days" + "</div>"); } } if (licenseType.type == LICENSE_TYPE_7_SUB) { actionButtonsArray.push('<div class="awwsActionButtonSubscriptText">' + "7-day subscription recurring" + "</div>"); } else if (licenseType.type == LICENSE_TYPE_30_SUB) { actionButtonsArray.push('<div class="awwsActionButtonSubscriptText">' + "30-day subscription recurring" + "</div>"); } } if (licenseType.labelPrice) { if (isDefined(license.priceString)) { label = label.replace("{0}", license.priceString); } else { label = ""; } } var buttonHTML = null; if(isMusicTrack && !isAlbumPage) { buttonHTML = getButtonHTMLMusicTrack(label, data.id, "awwsBlueButton", data.parentId); } else { buttonHTML = getButtonHTML(label, data.id, licenseType.type, licenseType.operation, "awwsBlueButton"); } var showTryButton = "true".toLowerCase() == "true"; if (licenseType.type == LICENSE_TYPE_TRY && showTryButton == false) { //don't show the Try button if we're told not to... } else { actionButtonsArray.push(buttonHTML); } if (licenseType.type == LICENSE_TYPE_TRY) { // In the Try case we also need a Purchase button! label = purchaseLicense.label.replace("{0}", license.priceString); buttonHTML = getButtonHTML(label, data.id, purchaseLicense.type, purchaseLicense.operation, "awwsBlueButton"); actionButtonsArray.push(buttonHTML); } } var actionButtonsArrayLength = actionButtonsArray.length; for (var j = 0; j < actionButtonsArrayLength; ++j) { actionButtonsHTML += actionButtonsArray[j]; //if (j < actionButtonsArrayLength - 1) //actionButtonsHTML += '<div style="display: inline-block; width: 5px;"></div>'; } return actionButtonsHTML; }; var property = "licenses"; var newPath = "actionButtons"; dataFormatter.addDataFormatter(property, actionButtonsFormatter, newPath); }; registerOnloadCallback(j_idt189Initialize); function getButtonHTMLMusicTrack(label, id, styleClass, parentId){ return '<button type="button" value="' + label + '" class="' + styleClass + '" onclick="albumNavigateAction(' + parentId + ');"><span>' + label + '</span></button>'; } function getButtonHTML(label, id, licenseType, operation, styleClass) { if (!isDefined(label)) { return ""; } return '<button type="button" value="' + label + '" class="' + styleClass + '" onclick="licenseAction(' + id + ', ' + licenseType + ', ' + operation + ', event);"><span>' + label + '</span></button>'; } function albumNavigateAction(parentId) { window.location='/webstore/album/' + parentId + '/?lang=en&countrycode=US'; } function licenseAction(id, licenseType, operation, event) { if (isDefined(id) && isDefined(licenseType)) { var selection = null; if (event && event.currentTarget) { selection = jQuery(event.currentTarget); } else if (event && event.srcElement) { selection = jQuery(event.srcElement); } var route = null; if (selection) route = selection.data("route"); var isLoggedIn = false; var rtl = function(operation){ addToCookie("lt", licenseType, "wsPreLogin", true); addToCookie("cid", id, "wsPreLogin", true); window.location='/webstore/myworld/controller/?contentId=' + id + '&operation=' + operation + '&lang=en&countrycode=US'; } if(!isLoggedIn){ if(isDefined(operation)){ $j.ajax('/webstore/myworld/resetSession/',{ method: 'post', complete: function(transport) {rtl(operation);}}); } return false; } var isInvalidState=false; var isRegistered=false; if(isDefined(platform) && (platform == "QNX") && isInvalidState){ pushModal.showNotRegistered(); return; } switch(licenseType) { case LICENSE_TYPE_DOWNLOAD: if(isRegistered){ pushModal.show(dataDictionary[id], licenseType, 'install'); }else{ emailInstallModal.show(dataDictionary[id], licenseType); } break; case LICENSE_TYPE_TRY: if(isRegistered){ pushModal.show(dataDictionary[id], licenseType, 'install'); }else{ emailInstallModal.show(dataDictionary[id], '1'); } break; case LICENSE_TYPE_PURCHASE: case LICENSE_TYPE_7_SUB: case LICENSE_TYPE_30_SUB: if(isRegistered){ pushModal.show(dataDictionary[id], licenseType, 'purchase'); }else{ emailInstallModal.show(dataDictionary[id], licenseType); } break; case LICENSE_TYPE_RENTAL: return false; break; } } return false; } var buttonstatus=""; function getUpdateInfo(data, userAuth) { var BUTTON_DOWNLOAD = 1; var BUTTON_UPGRADE = 2; var BUTTON_PURCHASE = 4; var BUTTON_PURCHASE_UPGRADE = 8; var BUTTON_TRY = 16; var BUTTON_REVIEW = 32; var BUTTON_SUBSCRIBE = 64; var appData = ""; if (userAuth){ buttonStatus = data.ownership; appData = buttonStatus; //getButtonData(data.id); } var updateInfo = 0; if(appData != null && appData.length > 0) { var dataArray = appData.split('&'); updateInfo = dataArray[0]; } return updateInfo; } function setButtonStatus(data){ buttonstatus=data; } function getButtonData(id){ if ('false' == 'false' || !userAuth){ return ""; } var ver2 = $j("#version"); return; $j.ajax('https://web.archive.org/web/20170302124208/https://appworld.blackberry.com/webstore/myworld/ownership/' + id + "/" + ver2.text() + "/" ,{ method: 'post', async: false, dataType: "text", complete: function(transport, status) { var val = transport.responseText; val = val.split(":"); if (val.length > 1){ setButtonStatus(val[1]); } } } ); return buttonstatus; } function getUpdateButton(data, styleClass) { var returnString = ""; var updateInfo = getUpdateInfo(data, true); if ((updateInfo&BUTTON_UPGRADE) == BUTTON_UPGRADE) { if (!buttonsOnly) { returnString += "<div class='awPriceSuperscript awPriceSuperscriptBlue'>Upgrade Available</div>"; } returnString += '<button type="button" class="' + styleClass + '" onclick="licenseAction(' + data.id + ', ' + LICENSE_TYPE_DOWNLOAD + ', ' + OPERATION_UPGRADE + ', event);"><span>Upgrade</span></button>'; } else if ((updateInfo&BUTTON_PURCHASE_UPGRADE) == BUTTON_PURCHASE_UPGRADE) { if (!buttonsOnly) { returnString += "<div class='awPriceSuperscript awPriceSuperscriptBlue'>Upgrade Available</div>"; } var label = "Purchase Upgrade {0}"; //Upgrade price is in the cookie. //label = label.replace("{0}", appData[1]); label = label.replace("{0}", data.licenses[0].priceString); returnString += '<button type="button" class="' + styleClass + '" onclick="licenseAction(' + data.id + ', ' + LICENSE_TYPE_PURCHASE + ', ' + OPERATION_PURCHASE_UPGRADE + ', event);"><span>' + label + '</span></button>'; } else { // Already Installed, no update required } return returnString; } function getCurrentModel() { var requestProfile = new RequestProfile(); requestProfile.loadFromFilteringCookie(); var model = requestProfile.model; if (model == null) model = ""; return model; } function getCurrentCountry() { var requestProfile = new RequestProfile(); requestProfile.loadFromFilteringCookie(); var countryid = requestProfile.countryid; if (countryid == null) countryid = ""; return countryid; } --></script> <script type="text/javascript"> var contentCatalogueServiceInitialized = contentCatalogueServiceInitialized || false; function contentCatalogueServiceInitialize() { var appendData = "" == "true"; var loadImmediately = "" != "false"; if (contentCatalogueServiceInitialized) { if (loadImmediately) contentCatalogueService.load(); return; } contentCatalogueServiceInitialized = true; var catalogueService = contentCatalogueService = new ComponentCatalogueService(); catalogueService.setID("contentCatalogueService"); var catalogueServiceLoadCompleteHandler = function(json, metaData) { var data = eval("contentData"); if (data == null) return; //Check metaData and store it only once... if (metaData) { var existingMetaData = data.getProperty("meta"); if (existingMetaData == null) { data.setProperty("meta", metaData, null, true); } } //See if we were told to append the data instead of replace it... var appendedData = null; if (appendData) appendedData = json; //Store/append the updated data object... data.setProperty("data", json, appendedData); }; var requestProfile = null; catalogueService.setProductType(""); catalogueService.setListType(""); catalogueService.setCategoryType(""); catalogueService.setCategoryID(""); catalogueService.setVendorType(""); catalogueService.setVendorID(""); catalogueService.setContentType("content"); catalogueService.setContentID("15725"); catalogueService.setReleaseVersion(""); catalogueService.setActor(""); catalogueService.setProducer(""); catalogueService.setDirector(""); catalogueService.setTvShowId(""); catalogueService.setTvSeasonId(""); catalogueService.setArtistId(""); catalogueService.setSearch(""); catalogueService.setRequestProfile(requestProfile); catalogueService.setLoadCompleteHandler(catalogueServiceLoadCompleteHandler); if (loadImmediately) catalogueService.load(); }; var contentCatalogueServiceRegistered = contentCatalogueServiceRegistered || false; var contentCatalogueServiceRegister = contentCatalogueServiceRegister || function() { if (contentCatalogueServiceRegistered) return; contentCatalogueServiceRegistered = true; registerOnloadCallback(contentCatalogueServiceInitialize); } contentCatalogueServiceRegister(); </script> <script type="text/javascript"> function ownershipServiceConstructor() { var data = eval("ownershipData"); var path = "data"; var loadImmediately = "false" != "false"; this.buttonID = "15725"; this.version = ""; this.setButtonID = function(buttonID) { this.buttonID = buttonID; } this.setVersion = function(version) { this.version = version; } this.loadCompleteHandler = function(transport, status) { if (status == "error") return; var val = transport.responseText; val = val.split(":"); if (val.length > 1) { var newData = new Object(); newData[path] = val[1]; data.setProperty("data", newData); } } this.load = function() { if (userAuth == false) return; var url = "https://web.archive.org/web/20170302124208/https://appworld.blackberry.com/webstore/myworld/ownership/" + this.buttonID + "/" + this.version + "/"; var request = new Object(); request.method = "post"; //request.async = false; request.dataType = "text"; request.complete = this.loadCompleteHandler; jQuery.ajax(url, request); } if (loadImmediately) this.load(); }; //Initialize... var ownershipServiceInitialized = ownershipServiceInitialized || false; function ownershipServiceInitialize() { if (ownershipServiceInitialized) return; ownershipServiceInitialized = true; ownershipService = new ownershipServiceConstructor(); } //Register the Initialize method... var ownershipServiceRegistered = ownershipServiceRegistered || false; var ownershipServiceRegister = ownershipServiceRegister || function() { if (ownershipServiceRegistered) return; ownershipServiceRegistered = true; registerOnloadCallback(ownershipServiceInitialize); } ownershipServiceRegister(); </script> <script type="text/javascript"> distributeContentOwnershipActionInitialized = false; function distributeContentOwnershipActionInitialize() { if (distributeContentOwnershipActionInitialized) return; distributeContentOwnershipActionInitialized = true; distributeContentOwnershipAction = new ComponentAction(); var action = eval("distributeContentOwnershipAction"); if (action == null) return; var signal = eval("contentData.update"); var signalHandler = function() { var fromData = eval("contentData"); var fromPath = "data"; var fromPropertyPath = "cdDTO.releaseVersion"; var setMethodString = "ownershipService.setVersion"; var setMethodExtraction = extract(setMethodString); var setMethodObject = setMethodExtraction.object; var setMethod = setMethodExtraction.property; var data = fromData.getProperty(fromPath); var property = eval("data." + fromPropertyPath); if (setMethod == null) return; if (setMethodObject == null) return; if (property == null) return; setMethod.call(setMethodObject, property); }; action.setSignal(signal); action.setSignalHandler(signalHandler); }; registerOnloadCallback(distributeContentOwnershipActionInitialize); </script> <script type="text/javascript"> executeOwnershipLoadActionInitialized = false; function executeOwnershipLoadActionInitialize() { if (executeOwnershipLoadActionInitialized) return; executeOwnershipLoadActionInitialized = true; executeOwnershipLoadAction = new ComponentAction(); var action = eval("executeOwnershipLoadAction"); if (action == null) return; var signal = eval("contentData.update"); var parameters = ""; var signalHandler = function() { var methodPath = "ownershipService.load"; var methodPathExtraction = extract(methodPath); var methodPathObject = methodPathExtraction.object; var methodPathMethod = methodPathExtraction.property; if (methodPathMethod == null) return; if (methodPathObject == null) return; if (parameters == null) return; methodPathMethod.call(methodPathObject, parameters); }; action.setSignal(signal); action.setSignalHandler(signalHandler); var immediate = ""; if (immediate == "true"){ signalHandler(); } }; registerOnloadCallback(executeOwnershipLoadActionInitialize); </script> <script type="text/javascript"> function distributeOwnershipActionInitialize() { distributeOwnershipAction = new ComponentAction(); var action = eval("distributeOwnershipAction"); if (action == null) return; var signal = eval("ownershipData.update"); var signalHandler = function() { var fromData = eval("ownershipData"); var fromPath = "data"; var fromProperty = "data"; var toData = eval("contentData"); var toPath = "data"; var toProperty = "ownership"; toData.getProperty(toPath)[toProperty] = fromData.getProperty(fromPath)[fromProperty]; }; action.setSignal(signal); action.setSignalHandler(signalHandler); }; registerOnloadCallback(distributeOwnershipActionInitialize); </script> <script type="text/javascript"> executeContentFormatterActionInitialized = false; function executeContentFormatterActionInitialize() { if (executeContentFormatterActionInitialized) return; executeContentFormatterActionInitialized = true; executeContentFormatterAction = new ComponentAction(); var action = eval("executeContentFormatterAction"); if (action == null) return; var signal = eval("ownershipData.update"); var parameters = ""; var signalHandler = function() { var methodPath = "contentDataFormatter.update"; var methodPathExtraction = extract(methodPath); var methodPathObject = methodPathExtraction.object; var methodPathMethod = methodPathExtraction.property; if (methodPathMethod == null) return; if (methodPathObject == null) return; if (parameters == null) return; methodPathMethod.call(methodPathObject, parameters); }; action.setSignal(signal); action.setSignalHandler(signalHandler); var immediate = ""; if (immediate == "true"){ signalHandler(); } }; registerOnloadCallback(executeContentFormatterActionInitialize); </script> <!-- --> <!-- Layout --> <!-- --> <div id="addReviewModalHTML" class="awwsModalContainer"> <div id="addReviewModal_background" class="awwsModalBackgroundContainer"> <div class="awwsModalBackground"></div> </div> <div id="addReviewModal_modal" class="awwsModal"> <div id="addReviewModal_closeButton" class="awwsModalCloseButton"></div> <div id="addReviewModal_content" class="awwsAddReviewModal"> <!-- Begin Add Review Modal --> <div class="awMarginTop-Twenty awMarginBottom-Twenty"> <h1 style="text-align: center"><span class="awwsProductDetailsContentItemTitle">Submit Review</span></h1> </div> <div id="addReviewInput"> <div class="awwsShareByEmailTextDiv">My Rating: </div> <div class="awMarginTop-Ten"></div> <div class="awwsShareByEmailDiv"> <a onmousemove="changeCurrentStars(event);" onmouseout="resetStars();" onclick="updateStars(event);enableSubmit();"><img id="addReviewModal:addReviewModal:stars" src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/img/stars/star-1.png" width="75px"/> </a><input id="addReviewModal:addReviewModal:rating" type="hidden" name="addReviewModal:addReviewModal:rating"/> </div> <div class="awMarginTop-Ten"></div> <div class="awwsShareByEmailTextDiv">My Review Title: </div> <div class="awMarginTop-Ten"></div> <div class="awwsShareByEmailDiv"><input id="addReviewModal:addReviewModal:reviewTitle" type="text" name="addReviewModal:addReviewModal:reviewTitle" class="awReviewTitleField" maxlength="1000" onkeyup="enableSubmit();" size="39"/> </div> <div class="awMarginTop-Ten"></div> <div class="awwsShareByEmailTextDiv">My Review: </div> <div class="awMarginTop-Ten"></div> <div class="awwsShareByEmailDiv"><textarea id="addReviewModal:addReviewModal:reviewBody" name="addReviewModal:addReviewModal:reviewBody" class="awReviewTitleField" cols="36" onkeydown="limitText(this,4000);" onkeyup="limitText(this,4000);enableSubmit();" rows="8"></textarea> </div> <div class="awMarginTop-Ten"></div> <div style="text-align: right; width: 250px; margin: 0px auto;"> <span id="reviewSubmitButtonbuttonMain" class="awButtonWrapper"><a id="addReviewModal:addReviewModal:reviewSubmitButtonoutputLink" name="addReviewModal:addReviewModal:reviewSubmitButtonoutputLink" href="javascript:void(0);" onclick="fixEncoding(); return false;"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="reviewSubmitButtonLabel" style="color: black;" class="awNoArrow">Submit Review</div> </div> <div class="awRightButton"></div></a> </span> <span id="reviewSubmitButtonbuttonMainDisabled" style="display:none" class="awDisabledButton"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="reviewSubmitButtonDisabledLabel" class="awNoArrow">Submit Review</div> </div> <div class="awRightButton"></div> </span> </div> </div> <div id="submittingReview" class="awwsShareByEmailTextDiv" style="display:none"> <div class="awMarginTop-Twenty" style="text-align:center;"> <img src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/img/global/loader.gif"/> </div> </div> <div id="addReviewAlreadyReviewed" class="awwsShareByEmailTextDiv" style="display:none; text-align: center; margin: 0px auto;"><span class="appdetailsText emailblurb" style="color:RED">You have already submitted a review for this item.</span> <div class="awMarginTop-Twenty"></div> <div style="text-align: center; margin: 0px auto;"> <span id="submitReviewClose1buttonMain" class="awButtonWrapper"><a id="addReviewModal:addReviewModal:submitReviewClose1outputLink" name="addReviewModal:addReviewModal:submitReviewClose1outputLink" href="" onclick="addReviewModal.modal.hide(); return false;"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="submitReviewClose1Label" style="color: black;" class="awNoArrow">Close</div> </div> <div class="awRightButton"></div></a> </span> <span id="submitReviewClose1buttonMainDisabled" style="display:none" class="awDisabledButton"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="submitReviewClose1DisabledLabel" class="awNoArrow">Close</div> </div> <div class="awRightButton"></div> </span> </div> </div> <div id="addReviewNotDownloaded" class="awwsShareByEmailTextDiv" style="display:none; text-align: center; margin: 0px auto;"><span class="appdetailsText emailblurb" style="color:RED">You must download the item to review it.</span> <div class="awMarginTop-Twenty"></div> <div style="text-align: center; margin: 0px auto;"> <span id="submitReviewClose2buttonMain" class="awButtonWrapper"><a id="addReviewModal:addReviewModal:submitReviewClose2outputLink" name="addReviewModal:addReviewModal:submitReviewClose2outputLink" href="" onclick="addReviewModal.modal.hide(); return false;"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="submitReviewClose2Label" style="color: black;" class="awNoArrow">Close</div> </div> <div class="awRightButton"></div></a> </span> <span id="submitReviewClose2buttonMainDisabled" style="display:none" class="awDisabledButton"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="submitReviewClose2DisabledLabel" class="awNoArrow">Close</div> </div> <div class="awRightButton"></div> </span> </div> </div> <div id="addReviewInvalid" class="awwsShareByEmailTextDiv" style="display:none; text-align: center; margin: 0px auto;"><span class="appdetailsText emailblurb" style="color:RED">Invalid review. Please ensure that all fields are entered correctly.</span> </div> <div id="addReviewGenericError" class="awwsShareByEmailTextDiv" style="display:none; text-align: center; margin: 0px auto;"><span class="appdetailsText emailblurb" style="color:RED">There is an issue with BlackBerry World. Please try again.</span> </div> <div id="addReviewInvalidChars" class="awwsShareByEmailTextDiv" style="display:none; text-align: center; margin: 0px auto;"><span class="appdetailsText emailblurb" style="color:RED">Invalid characters entered. Please ensure all fields are entered correctly.</span> <!-- denied review --> </div> <div id="addReviewSuccess" class="awwsShareByEmailTextDiv" style="display:none; text-align: center; margin: 0px auto;"><span class="appdetailsText emailblurb">Your review has been submitted.</span> <div class="awMarginTop-Twenty"></div> <div style="text-align: center; margin: 0px auto;"> <span id="submitReviewClose3buttonMain" class="awButtonWrapper"><a id="addReviewModal:addReviewModal:submitReviewClose3outputLink" name="addReviewModal:addReviewModal:submitReviewClose3outputLink" href="" onclick="addReviewModal.modal.hide(); return false;"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="submitReviewClose3Label" style="color: black;" class="awNoArrow">Close</div> </div> <div class="awRightButton"></div></a> </span> <span id="submitReviewClose3buttonMainDisabled" style="display:none" class="awDisabledButton"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="submitReviewClose3DisabledLabel" class="awNoArrow">Close</div> </div> <div class="awRightButton"></div> </span> </div> </div> <div id="addReviewNotLoggedIn" class="awwsShareByEmailTextDiv" style="display:none; text-align: center; margin: 0px auto;"><span class="appdetailsText emailblurb" style="color:RED">You must sign in to submit a review.</span> <div class="awMarginTop-Twenty"></div> <div style="text-align: center; margin: 0px auto;"> <span id="submitReviewClose4buttonMain" class="awButtonWrapper"><a id="addReviewModal:addReviewModal:submitReviewClose4outputLink" name="addReviewModal:addReviewModal:submitReviewClose4outputLink" href="" onclick="addReviewModal.modal.hide(); return false;"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="submitReviewClose4Label" style="color: black;" class="awNoArrow">Close</div> </div> <div class="awRightButton"></div></a> </span> <span id="submitReviewClose4buttonMainDisabled" style="display:none" class="awDisabledButton"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="submitReviewClose4DisabledLabel" class="awNoArrow">Close</div> </div> <div class="awRightButton"></div> </span> </div> </div> <script type="text/javascript"> <!-- var obj_stars = document.getElementById('addReviewModal:addReviewModal:stars'); var starsStartPos; var selectedStar = document.getElementById('addReviewModal:addReviewModal:stars').src; var currentStarIndex = -1; var cID = "15725"; var stars = new Array(11); stars[0] = "/webstore/img/stars/star0.png"; stars[1] = "/webstore/img/stars/star1.png"; stars[2] = "/webstore/img/stars/star2.png"; stars[3] = "/webstore/img/stars/star3.png"; stars[4] = "/webstore/img/stars/star4.png"; stars[5] = "/webstore/img/stars/star5.png"; stars[6] = "/webstore/img/stars/star6.png"; stars[7] = "/webstore/img/stars/star7.png"; stars[8] = "/webstore/img/stars/star8.png"; stars[9] = "/webstore/img/stars/star9.png"; stars[10] = "/webstore/img/stars/star10.png"; function resetStars(){ obj_stars.src = selectedStar; document.body.style.cursor = 'default'; } //used for when mouse clicked to select rating level function updateStars(event){ var starindex = Math.ceil( (event.clientX-starsStartPos) / (obj_stars.offsetWidth/10) ); if(starindex == undefined){ starindex= 0; }else if(starindex > 10){ starindex= 10; } obj_stars.src = stars[starindex]; selectedStar = stars[starindex]; document.getElementById('addReviewModal:addReviewModal:rating').value = starindex; } //used for mouseover function changeCurrentStars(event){ findPos(); var starindex = Math.ceil( (event.clientX-starsStartPos) / (obj_stars.offsetWidth/10) ); if(starindex == undefined){ starindex= 0; }else if(starindex > 10){ starindex= 10; } obj_stars.src = stars[starindex]; document.body.style.cursor = 'pointer'; } function findPos(){ starsStartPos = 0; var obj = obj_stars; if (obj.offsetParent){ do { starsStartPos += obj.offsetLeft; } while (obj = obj.offsetParent); } } function zeroStars(){ obj_stars.src = stars[0]; } function limitText(limitField, limitNum){ var fieldVal = limitField.value; var strippedVal = fieldVal.replace(/\n/g, "\n\r"); var strippedValLength = strippedVal.length; if (strippedValLength > limitNum){ var newLimit = limitNum - (strippedValLength - limitNum); limitField.value = limitField.value.substring(0,newLimit); limitField.scrollTop = limitField.scrollHeight; } } function enableSubmit(){ var enable = true; if (document.getElementById){ if (document.getElementById('addReviewModal:addReviewModal:rating')){ if ((document.getElementById('addReviewModal:addReviewModal:rating').value=="")||(document.getElementById('addReviewModal:addReviewModal:rating')==-1)){ enable = false; } } if (document.getElementById('addReviewModal:addReviewModal:reviewTitle')){ if (document.getElementById('addReviewModal:addReviewModal:reviewTitle').value==""){ enable = false; } } if (document.getElementById('addReviewModal:addReviewModal:reviewBody')){ if (document.getElementById('addReviewModal:addReviewModal:reviewBody').value==""){ enable = false; } } if (enable){ enableButton('reviewSubmitButton'); } else { disableButton('reviewSubmitButton'); } } } function fixEncoding(){ jQuery("#addReviewInput").hide(); jQuery("#submittingReview").show(); var title = base64_encode(document.getElementById('addReviewModal:addReviewModal:reviewTitle').value); var body = base64_encode(document.getElementById('addReviewModal:addReviewModal:reviewBody').value); var rating = base64_encode(document.getElementById('addReviewModal:addReviewModal:rating').value); var revTitle = document.getElementById('addReviewModal:addReviewModal:reviewTitle').value; var revBody = document.getElementById('addReviewModal:addReviewModal:reviewBody').value; var revRating = document.getElementById('addReviewModal:addReviewModal:rating').value; var submitReviewCallback = function(result) { jQuery("#submittingReview").hide(); var responseType = 'Success'; addReviewModal.modal.resize(360, 180); if(result == "notdownloaded"){ jQuery("#addReviewNotDownloaded").show(); responseType = 'Error'; }else if(result == "alreadyreviewed"){ jQuery("#addReviewAlreadyReviewed").show(); responseType = 'Error'; }else if(result == "invalid"){ jQuery("#addReviewInvalid").show(); responseType = 'Error'; }else if(result == "denied"){ jQuery("#addReviewInvalidChars").show(); responseType = 'Error'; }else if(result == "success"){ jQuery("#addReviewSuccess").show(); }else if(result == "notloggedin"){ jQuery("#addReviewNotLoggedIn").show(); responseType = 'Error'; }else if(result == "error"){ jQuery("#addReviewGenericError").show(); responseType = 'Error' } } var submitReviewBean = Seam.createBean("addReviewBean"); submitReviewBean.addReview(title, body, rating, cID, submitReviewCallback); } //call function to initialize values setTimeout(findPos,500); setTimeout(enableSubmit,250); window.onresize=findPos; --> </script> <!--<ws:reviewsForm/>--> <!-- End Add Review Modal --> </div> </div> </div> <script type="text/javascript"><!-- function addReviewModalConstructor() { var modalCloseHandler = function() { //This fires when the Close Button is Clicked... }; var modal = new ComponentModal(); modal.setModalContainerSelector("#addReviewModalHTML"); modal.setModalBackgroundSelector("#addReviewModal_background"); modal.setModalSelector("#addReviewModal_modal"); modal.setCloseButtonSelector("#addReviewModal_closeButton"); modal.setWidth(360); modal.setHeight(400); modal.close.add(this, modalCloseHandler); this.modal = modal; this.show = function(contentID) { if (contentID == null) return; else { cID = contentID; } var modalSpawnCallback = function(result){ //alert(result); if(result == "notdownloaded"){ addReviewModal.modal.resize(360, 180); jQuery("#addReviewNotDownloaded").show(); }else if(result == "alreadyreviewed"){ addReviewModal.modal.resize(360, 180); jQuery("#addReviewAlreadyReviewed").show(); }else if(result == "notloggedin"){ addReviewModal.modal.resize(360, 180); jQuery("#addReviewNotLoggedIn").show(); }else{ addReviewModal.modal.resize(360, 400); jQuery("#addReviewInput").show(); jQuery("#addReviewNotLoggedIn").hide(); } } document.getElementById('addReviewModal:addReviewModal:reviewTitle').value = ""; document.getElementById('addReviewModal:addReviewModal:reviewBody').value = ""; document.getElementById('addReviewModal:addReviewModal:rating').value = ""; zeroStars(); var isLoggedIn = false; jQuery("#addReviewAlreadyReviewed").hide(); jQuery("#addReviewNotDownloaded").hide(); jQuery("#addReviewInvalid").hide(); jQuery("#addReviewInvalidChars").hide(); jQuery("#addReviewSuccess").hide(); jQuery("#submittingReview").hide(); jQuery("#addReviewInput").hide(); jQuery("#addReviewNotLoggedIn").hide(); jQuery("#addReviewGenericError").hide(); if(!isLoggedIn){ addReviewModal.modal.resize(360, 180); jQuery("#addReviewNotLoggedIn").show(); } else{ var modalSpawnJSBean = Seam.createBean("addReviewBean"); modalSpawnJSBean.currentReviewStatus(cID, modalSpawnCallback); } this.modal.show(); }; }; addReviewModalInitialized = false; function addReviewModalInitialize() { if (addReviewModalInitialized) return; addReviewModalInitialized = true; addReviewModal = new addReviewModalConstructor(); }; registerOnloadCallback(addReviewModalInitialize); --></script> <div id="emailShareModalHTML" class="awwsModalContainer"> <div id="emailShareModal_background" class="awwsModalBackgroundContainer"> <div class="awwsModalBackground"></div> </div> <div id="emailShareModal_modal" class="awwsModal"> <div id="emailShareModal_closeButton" class="awwsModalCloseButton"></div> <div id="emailShareModal_content" class="awwsAddReviewModal"> <!-- Begin Add Review Modal --> <div class="awMarginTop-Twenty awMarginBottom-Twenty"> <h1 style="text-align: center"><span class="awwsProductDetailsContentItemTitle">Share Link</span></h1> </div> <div id="sendEmailInput"> <div class="awwsShareByEmailTextDiv">Share a link to this item with your friends and show them how they can personalize their BlackBerry smartphones. </div> <div class="awMarginTop-Ten"></div> <div class="awwsShareByEmailTextDiv">Security question: </div> <div class="awMarginTop-Five"></div> <div class="awwsShareByEmailTextDiv"><img id="emailShareModal:emailShareModal:theImg" src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/content/15725/?countrycode=US&countrycode=US&lang=en"/> </div> <div class="awMarginTop-Ten"></div> <div class="awwsShareByEmailTextDiv">Answer: </div> <div class="awMarginTop-Five"></div> <div id="badCaptchaErrorDiv" class="awwsShareByEmailTextDiv" style="display:none"><span class="appdetailsText emailblurb" style="color:RED"> *Please provide a valid answer.</span> </div> <div class="awwsShareByEmailDiv"><input id="emailShareModal:emailShareModal:a" type="text" name="emailShareModal:emailShareModal:a" class="awwsShareByEmailInputDiv"/> </div> <div class="awMarginTop-Ten"></div> <div class="awwsShareByEmailTextDiv">Email: </div> <div class="awMarginTop-Five"></div> <div id="badEmailErrorDiv" class="awwsShareByEmailTextDiv" style="display:none"><span class="appdetailsText emailblurb" style="color:RED"> *Please provide a valid email address.</span> </div> <div class="awwsShareByEmailDiv"><input id="emailShareModal:emailShareModal:emailInput" type="text" name="emailShareModal:emailShareModal:emailInput" class="awwsShareByEmailInputDiv" onkeypress="return keyPressed2(event);"/> </div> <div class="awMarginTop-Ten"></div> <div style="text-align: right; width: 250px; margin: 0px auto;"> <span id="sendAppLinkbuttonMain" class="awButtonWrapper"><a id="emailShareModal:emailShareModal:sendAppLinkoutputLink" name="emailShareModal:emailShareModal:sendAppLinkoutputLink" href="javascript:void(0);" onclick="sendEmail(); return false;"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="sendAppLinkLabel" style="color: black;" class="awNoArrow">Share Link</div> </div> <div class="awRightButton"></div></a> </span> <span id="sendAppLinkbuttonMainDisabled" style="display:none" class="awDisabledButton"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="sendAppLinkDisabledLabel" class="awNoArrow">Share Link</div> </div> <div class="awRightButton"></div> </span> </div> </div> <div id="sendingEmail" class="awwsShareByEmailTextDiv" style="display:none"> <div class="awMarginTop-Twenty" style="text-align:center;"> <img src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/img/global/loader.gif"/> </div> </div> <div id="resultSent" class="awwsShareByEmailTextDiv" style="display:none"><span class="appdetailsText emailblurb" style="color:RED"> *An email containing download details has been sent to the specified address.</span> <div class="awMarginTop-Twenty"></div> <div style="text-align: center; margin: 0px auto;"> <span id="sendEmailOkbuttonMain" class="awButtonWrapper"><a id="emailShareModal:emailShareModal:sendEmailOkoutputLink" name="emailShareModal:emailShareModal:sendEmailOkoutputLink" href="" onclick="emailShareModal.modal.hide(); return false;"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="sendEmailOkLabel" style="color: black;" class="awNoArrow">Close</div> </div> <div class="awRightButton"></div></a> </span> <span id="sendEmailOkbuttonMainDisabled" style="display:none" class="awDisabledButton"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="sendEmailOkDisabledLabel" class="awNoArrow">Close</div> </div> <div class="awRightButton"></div> </span> </div> </div> <script type="text/javascript"> function getRandom(){ return ((new Date()).getTime() + Math.floor(Math.random()*10000)); } function loadImg(){ var img = document.getElementById("emailShareModal:emailShareModal:theImg").src="/webstore/myworld/simpleCaptcha.png?rand=" + getRandom(); } loadImg(); function keyPressed2(e) { var keycode; if (window.event) keycode = window.event.keyCode; else if (e) keycode = e.which; if (keycode == 13) { sendEmail(); return false; } return true; } function sendEmail() { jQuery("#sendEmailInput").hide(); jQuery("#badCaptchaErrorDiv").hide(); jQuery("#badEmailErrorDiv").hide(); jQuery("#sendingEmail").show(); //emailShareModal.modal.resize(360, 200); var email = base64_encode(document.getElementById("emailShareModal:emailShareModal:emailInput").value); var captchaInput = document.getElementById("emailShareModal:emailShareModal:a").value; var answer = base64_encode(captchaInput); var cID=emailShareModal.modal.getAssociatedContent(); //var pageURL = window.location.href; var sayHelloCallback = function(result) { var data = dataDictionary[cID]; //alert(result); jQuery("#sendingEmail").hide(); if(result=="error"){ return; } if(result=="bademail" || result=="errorboth"){ jQuery("#badEmailErrorDiv").show(); } if(result=="badcaptcha" || result=="errorboth"){ loadImg(); document.getElementById("emailShareModal:emailShareModal:a").value = ""; jQuery("#badCaptchaErrorDiv").show(); } if(result=="sent") { emailShareModal.modal.resize(360, 200); jQuery("#resultSent").show(); } else{ emailShareModal.modal.resize(360, 400); jQuery("#sendEmailInput").show(); } } var test22 = Seam.createBean("emailEngineBean"); test22.sendEmail(cID, email, answer, false, sayHelloCallback); } </script> <!-- End Add Review Modal --> </div> </div> </div> <script type="text/javascript"><!-- function emailShareModalConstructor() { var modalCloseHandler = function() { //This fires when the Close Button is Clicked... var contentId = emailShareModal.modal.getAssociatedContent(); var data = dataDictionary[contentId]; }; var modal = new ComponentModal(); modal.setModalContainerSelector("#emailShareModalHTML"); modal.setModalBackgroundSelector("#emailShareModal_background"); modal.setModalSelector("#emailShareModal_modal"); modal.setCloseButtonSelector("#emailShareModal_closeButton"); modal.setWidth(360); modal.setHeight(400); modal.close.add(this, modalCloseHandler); this.modal = modal; this.show = function(cID) { emailShareModal.modal.setAssociatedContent(cID); var data = dataDictionary[cID]; var url = u="https://web.archive.org/web/20170302124208/https://appworld.blackberry.com/webstore/content/" + cID + "/?CPID=PRD_BBWSH_email"; //if (contentID == null) //return; //This show method is our hook from add review links... //jQuery("#contentID").append(contentID); emailShareModal.modal.resize(360, 400); this.modal.show(); loadImg(); jQuery("#resultSent").hide(); jQuery("#badCaptchaErrorDiv").hide(); jQuery("#badEmailErrorDiv").hide(); jQuery("#sendEmailInput").show(); document.getElementById("emailShareModal:emailShareModal:a").value = ""; document.getElementById("emailShareModal:emailShareModal:emailInput").value = ""; }; }; emailShareModalInitialized = false; function emailShareModalInitialize() { if (emailShareModalInitialized) return; emailShareModalInitialized = true; emailShareModal = new emailShareModalConstructor(); }; registerOnloadCallback(emailShareModalInitialize); --></script> <div id="messageModalHTML" class="awwsModalContainer"> <div id="messageModal_background" class="awwsModalBackgroundContainer"> <div class="awwsModalBackground"></div> </div> <div id="messageModal_modal" class="awwsModal"> <div id="messageModal_closeButton" class="awwsModalCloseButton"></div> <div id="messageModal_content" class="awwsMessageModal"> <!-- Message Goes Here --> <div class="awwsDeviceModalTitle"> <h1 id="messageModalmessageTitle"></h1> </div> <div id="messageModalmessageImg"></div> <div id="messageModalmessageContent" class="messageContent"></div> </div> </div> </div> <script type="text/javascript"><!-- function messageModalModalConstructor() { var modalCloseHandler = function() { //This fires when the Close Button is Clicked... }; var modal = new ComponentModal(); modal.setModalContainerSelector("#messageModalHTML"); modal.setModalBackgroundSelector("#messageModal_background"); modal.setModalSelector("#messageModal_modal"); modal.setCloseButtonSelector("#messageModal_closeButton"); modal.setWidth(300); modal.setHeight(480); modal.close.add(this, modalCloseHandler); this.modal = modal; this.show = function(title, message, image) { jQuery("#messageModalmessageTitle")[0].innerHTML = title; jQuery("#messageModalmessageContent")[0].innerHTML = message; if(image != null) jQuery("#messageModalmessageImg")[0].innerHTML = image; this.modal.show(); }; }; function messageModalModalInitialize() { messageModal = new messageModalModalConstructor(); }; registerOnloadCallback(messageModalModalInitialize); --></script> <div id="imageZoomModalHTML" class="awwsModalContainer"> <div id="imageZoomModal_background" class="awwsModalBackgroundContainer"> <div class="awwsModalBackground"></div> </div> <div id="imageZoomModal_modal" class="awwsModal"> <div id="imageZoomModal_closeButton" class="awwsModalCloseButton"></div> <div id="imageZoomModal_content"> <div id="imageZoomModalZoomDiv" style="text-align: center; margin-top: 30px;"> </div> </div> </div> </div> <script type="text/javascript"><!-- var Ids = new Array(); function imageZoomModalModalConstructor() { var modalCloseHandler = function() { //This fires when the Close Button is Clicked... }; var modal = new ComponentModal(); modal.setModalContainerSelector("#imageZoomModalHTML"); modal.setModalBackgroundSelector("#imageZoomModal_background"); modal.setModalSelector("#imageZoomModal_modal"); modal.setCloseButtonSelector("#imageZoomModal_closeButton"); modal.close.add(this, modalCloseHandler); this.modal = modal; this.show = function(imageId) { if(!isDefined(imageId) || imageId < 1 || this.Ids.length < imageId || !isDefined(this.Ids[imageId - 1])){ return; } imageURL = '/webstore/servedimages/' + this.Ids[imageId - 1] + '.png/?t=17'; modal.setWidth(640 + 30); jQuery('#imageZoomModalZoomDiv').html(""); var adjustedImgURL = (imageURL.split('?'))[0] + '?t=17'; var zoomedImg = new Image(); zoomedImg.onload = function() { var scaleFactor = this.height/this.width; if (this.height > 801){ this.width=401; modal.setWidth(420); this.height=401*scaleFactor; modal.setHeight((401*scaleFactor)+40); }else{ modal.setHeight(this.height + 40); } jQuery('#imageZoomModalZoomDiv').append(this); modal.show(); } zoomedImg.src = adjustedImgURL; //jQuery('#imageZoomModalZoomImg').attr("src", adjustedImgURL); //modal.setHeight(jQuery('#imageZoomModalZoomImg').attr('height')); }; this.setIds = function(imgIds) { this.Ids = imgIds; } }; function imageZoomModalModalInitialize() { imageZoomModal = new imageZoomModalModalConstructor(); }; registerOnloadCallback(imageZoomModalModalInitialize); --></script> <div class="awwsLegacyPageWrapper"> <div style="display:inline-block; float: left;"> <div id="bc_bread_crumbs" class="awwsBreadCrumbs"> <span id="bcTitle" class="awwsBreadCrumbsLeaf"></span> </div> <script type="text/javascript"><!-- var contentname; var render = true; var categoryTree = false; function bcInitialize() { contentname = nameSpecialCharacterFormatter("", null); var catId = "43"; if (catId != -1){ categoryTree = true; getCategoryTreeMetaData(catId, null, bcdraw); }else{ bcdraw(null); } } function bcdraw(data){ if (render == false){ return; } render = false; var htmlInsert="<a href='/webstore/?lang=en&countrycode=US'><span class='awwsBreadCrumbsItem'>BlackBerry World</span></a><span id='bc_sep_id' class='awwsBreadCrumbsDivider'>></span><span>"; if (data != null){ if (contentname != "NONAME"){ htmlInsert += bcbuildhtml(data); }else{ htmlInsert += bcbuildhtml(data.parent); } } htmlInsert+="</span>"; if (data != null){ if (contentname != "NONAME"){ if (categoryTree == true){ contentname = toTitleCase(contentname); } htmlInsert+="<span class='awwsBreadCrumbsLeaf'>"+contentname+"</span>" }else{ if (categoryTree == true){ data.name = toTitleCase(data.name); } htmlInsert+="<span class='awwsBreadCrumbsLeaf'>"+data.name+"</span>" } } jQuery("#bc_bread_crumbs").html(htmlInsert + jQuery("#bc_bread_crumbs").html()); } function bcbuildhtml(data){ if (data == null){ return ""; } var seperator = "<span class='awwsBreadCrumbsDivider'>></span>"; var url=""; html = ""; if (data.parent!=null){ html = bcbuildhtml(data.parent, html); } if (data.parent==null){ url = "/webstore/product/" + data.productTypeId + "/?" + "lang=en&countrycode=US"; }else{ url = "/webstore/category/" + data.id + "/?" + "lang=en&countrycode=US"; } if (categoryTree == true){ data.name = toTitleCase(nameSpecialCharacterFormatter(data.name, null)); } html += "<a href='"+ url +"'><span class='awwsBreadCrumbsItem'>"+data.name+"</span></a>" + seperator; return html; } registerOnloadCallback(bcInitialize); --></script> </div> <div style="display:inline-block; float: right;"> <div id="j_idt338HTML" class="shareApp"> <script type="text/javascript"> var modal = "emailShareModal,show"; </script> <!-- SHARING SCRIPT --> <script> function share_click(shareSite) { var contentId = "15725"; var data = dataDictionary[contentId]; u="https://web.archive.org/web/20170302124208/https://appworld.blackberry.com/webstore/content/15725/?CPID=PRD_BBWSH_" + shareSite; t="Lancasteronline"; d="Get your news, weather, entertainment, business and sports about Lancaster County, the state, nation and world all in one place when you want it wherever you are. And it’s all absolutely ..."; if (shareSite == "email") { //var modal = "emailShareModal,show"; var modalSplit = modal.split(","); var modalTarget = eval(modalSplit[0]); var modalMethod = eval(modalSplit[0] + '["' + modalSplit[1] + '"]'); var cID="15725"; //modalMethod.call(modalTarget); modalTarget.show(cID); } else if (shareSite == "facebook") { window.open("https://web.archive.org/web/20170302124208/http://www.facebook.com/sharer.php?u="+encodeURIComponent(u)+"&t="+encodeURIComponent(t),"sharer","toolbar=0,resizable=1,status=0,width=626,height=436"); } else if (shareSite == "twitter") { tempMsg = "Check it out! - "+u+" - "; if ((tempMsg.length + t.length)>140){ twitterStatus = "Check it out! - "+encodeURIComponent(u)+" - "+encodeURIComponent(t.substr(0,137-tempMsg.length))+"..."; } else { twitterStatus = "Check it out! - "+encodeURIComponent(u)+" - "+encodeURIComponent(t); } window.open("https://web.archive.org/web/20170302124208/http://twitter.com/home?status="+twitterStatus,"sharer","toolbar=0,resizable=1,status=0,width=626,height=436"); } else if (shareSite == "stumbleupon") { window.open("https://web.archive.org/web/20170302124208/http://www.stumbleupon.com/submit?url="+encodeURIComponent(u)+"&title="+encodeURIComponent(t),"sharer","toolbar=0,resizable=1,status=0,width=626,height=436"); } else if (shareSite == "digg") { window.open("https://web.archive.org/web/20170302124208/http://digg.com/submit?url="+encodeURIComponent(u)+"&title="+encodeURIComponent(t)+"&bodytext="+encodeURIComponent(d)+"&topic=tech_news","sharer","toolbar=0,resizable=1,status=0,width=626,height=436"); } } </script> <div class="appdetail_right_topic"><table> <tbody> <tr> <td> <h6 id="shareHeader">Share </h6></td> <td> <a onclick="share_click('email');" class="shareLink"> <img src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/img/shareIcons/Email_20x20.png" height="20" width="20" class="wspngfix" alt="Send item to a friend via email" title="Send item to a friend via email"/> </a></td> <td> <a onclick="share_click('facebook');" class="shareLink"> <img src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/img/shareIcons/FaceBook_20x20.png" height="20" width="20" class="wspngfix" alt="Share on Facebook" title="Share on Facebook"/> </a></td> <td> <a onclick="share_click('twitter');" class="shareLink"> <img src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/img/shareIcons/Twitter_20x20.png" height="20" width="20" class="wspngfix" border="0" alt="Share on Twitter" title="Share on Twitter"/> </a></td> <td> <a onclick="share_to_myspace();" class="shareLink"> <img src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/img/shareIcons/MySpace_20x20.png" height="20" width="20" class="wspngfix" border="0" alt="Share on MySpace" title="Share on MySpace"/> </a></td> <td> <a onclick="share_click('stumbleupon')" class="shareLink"> <img src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/img/shareIcons/Stumbleupon_20x20.png" height="20" width="20" class="wspngfix" border="0" alt="Share on StumbleUpon" title="Share on StumbleUpon"/> </a></td> <td> <a onclick="share_click('digg')" class="shareLink"> <img src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/img/shareIcons/Digg_20x20.png" height="20" width="20" class="wspngfix" border="0" alt="Digg This!" title="Digg This!"/> </a></td> </tr> </tbody> </table> <!-- FORM FOR MYSPACE SHARING --> <form id="myspacepostto" method="post" action="https://web.archive.org/web/20170302124208/https://www.myspace.com/index.cfm?fuseaction=postto" target="_blank"> <input type="hidden" id="myspaceformappname" name="t"/> <input type="hidden" id="myspaceformdescription" name="c"/> <input type="hidden" name="u" value="https://appworld.blackberry.com/webstore/content/15725/"/> </form> <script type="text/javascript"> function share_to_myspace(){ var contentId = "15725"; var data = dataDictionary[contentId]; var shareUrl="https://web.archive.org/web/20170302124208/https://appworld.blackberry.com/webstore/content/15725/?CPID=PRD_BBWSH_MySpace"; document.getElementById('myspaceformappname').value="Lancasteronline"; document.getElementById('myspaceformdescription').value="Get your news, weather, entertainment, business and sports about Lancaster County, the state, nation and world all in one place when you want it wherever you are. And it’s all absolutely ..."; document.getElementById('myspacepostto').submit(); } </script> </div> </div></div> </div> <div class="clear"></div> <div class="awwsLegacyPageWrapper"> <script type="text/javascript"> var $j = jQuery.noConflict(); $j(window).load(function() { //read message from cookie if(retrieveCookie('wsMessageCookie') !== null){ var message = decodeCookieValue('message', 'wsMessageCookie'); var typeExists = doesKeyExist('type', 'wsMessageCookie'); var errorDiv = document.getElementById('error'); if(typeExists === false){ errorDiv.style.display="block"; errorDiv.innerHTML = "*" + message; }else{ var type = getValue('type', 'wsMessageCookie'); var fatalDiv = document.getElementById('fatal'); var warningDiv = document.getElementById('warning'); var infoDiv = document.getElementById('info'); var infoDivInner = document.getElementById('infoMessageBody'); var modDiv = document.getElementById('deviceModalsFormGeneric:genericErrText'); var modInfoDiv = document.getElementById('deviceModalsFormGenericInfo:genericInfoText'); var modHomeDiv = document.getElementById('deviceModalsFormGenericGoHome:genericErrTextGoHome'); switch(type){ case "mod": modDiv.innerHTML = message; showModalPanel(); break; case "modinfo": modInfoDiv.innerHTML = message; showModalPanel(); break; case "modHome": modHomeDiv.innerHTML = message; showModalPanel(); break; case "fatal": fatalDiv.style.display="block"; fatalDiv.innerHTML = "*" + message; break; case "error": errorDiv.style.display="block"; errorDiv.innerHTML = "*" + message; break; case "warning": warningDiv.style.display="block"; warningDiv.innerHTML = "*" + message; break; default: infoDiv.style.display="block"; infoDivInner.innerHTML = message; break; } } deleteCookie('wsMessageCookie'); } }); </script> <div id="fatal" style="display:none" class="awMessage_fatal "><table> <tbody> <tr> <td class="awGenericVerticalTop"> <div id="j_idt360"></div></td> <td class=" awGenericVerticalTop"> <div id="fatalMessageBody" class="awMessageBody"></div></td> </tr> </tbody> </table> </div> <div id="error" style="display:none" class="awMessage_error "><table> <tbody> <tr> <td class="awGenericVerticalTop"> <div id="j_idt366"></div></td> <td class=" awGenericVerticalTop"> <div id="errorMessageBody" class="awMessageBody"></div></td> </tr> </tbody> </table> </div> <div id="warning" style="display:none" class="awMessage_warning "><table> <tbody> <tr> <td class="awGenericVerticalTop"> <div id="j_idt372"><img src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/img/ico_warning2.gif" height="16px" width="16px" class="wspngfix"/></div></td> <td class=" awGenericVerticalTop"> <div id="warningMessageBody" class="awMessageBody"></div></td> </tr> </tbody> </table> </div> <div id="info" style="display:none" class="awMessage_info "><table> <tbody> <tr> <td class="awGenericVerticalTop"> <div id="j_idt378"><img src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/img/msginfo.png" height="16px" width="16px"/></div></td> <td class=" awGenericVerticalTop"> <div id="infoMessageBody" class="awMessageBody"></div></td> </tr> </tbody> </table> </div> </div><div id="productDetails:ratingStandardsModal" style="visibility: hidden;"><div class="rf-pp-shade" id="productDetails:ratingStandardsModal_shade" style="z-index:100;"><button class="rf-pp-btn" id="productDetails:ratingStandardsModalFirstHref"></button></div><div class="rf-pp-cntr awModalPanel" id="productDetails:ratingStandardsModal_container" style="position: fixed; z-index:100; z-index:1000;"><div class="rf-pp-shdw" id="productDetails:ratingStandardsModal_shadow"></div><div class="rf-pp-cnt-scrlr" id="productDetails:ratingStandardsModal_content_scroller"><div class="rf-pp-cnt" id="productDetails:ratingStandardsModal_content" style="z-index:1000;"> <div style="width:900px; height:100%" class="awModalPanelWrapper"> <div class="awModalPanelWrapperInner"> <div id="j_idt384" class="awModalHeader">Content Ratings</div><table class="ratingsModalTable"> <tbody> <tr class="ratingsModalTitleRow"> <td class="ratingsModalTitleCol"> </td> <td class="ratingsModalDetailCol"><img src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/servedimages/478660.png/?t=18" style="padding-right:5px" class="vertalignMid"/>General (G)</td> <td class="ratingsModalDetailCol"><img src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/servedimages/478661.png/?t=18" style="padding-right:5px" class="vertalignMid"/>Teen (T)</td> <td class="ratingsModalDetailCol"><img src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/servedimages/478662.png/?t=18" style="padding-right:5px" class="vertalignMid"/>Mature (M)</td> <td class="ratingsModalDetailCol"><img src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/servedimages/478663.png/?t=18" style="padding-right:5px" class="vertalignMid"/>Adult (A)</td> </tr> <tr class="ratingsModalOddRow"> <td class="ratingsModalTitleCol">Overview</td> <td class="ratingsModalDetailCol">All ages</td> <td class="ratingsModalDetailCol">May not be suitable for children under the age of 13</td> <td class="ratingsModalDetailCol">May not be suitable for children under the age of 17</td> <td class="ratingsModalDetailCol">Content that is generally recognized as appropriate only for or that is legally restricted to persons at least the age of majority in their region.</td> </tr> <tr class="ratingsModalEvenRow"> <td class="ratingsModalTitleCol">Violence</td> <td class="ratingsModalDetailCol">Minimal cartoon or fantasy violence</td> <td class="ratingsModalDetailCol">Mild to moderate cartoon, fantasy, or realistic violence</td> <td class="ratingsModalDetailCol">Frequent, intense or graphic cartoon, fantasy, or realistic violence</td> <td class="ratingsModalDetailCol">Extreme depictions of graphic violence appropriate only for or legally restricted to persons at least 18 years of age.</td> </tr> <tr class="ratingsModalOddRow"> <td class="ratingsModalTitleCol">Sexual Content</td> <td class="ratingsModalDetailCol">Little or no sexual content, situations, or themes</td> <td class="ratingsModalDetailCol">Infrequent/Mild sexual content, situations, or themes</td> <td class="ratingsModalDetailCol">Intense/Frequent sexual content, situations, or themes</td> <td class="ratingsModalDetailCol">BlackBerry World will not accept apps with graphic nudity</td> </tr> <tr class="ratingsModalEvenRow"> <td class="ratingsModalTitleCol">Language</td> <td class="ratingsModalDetailCol">No strong or coarse language</td> <td class="ratingsModalDetailCol">Infrequent/Mild profanity or crude humor</td> <td class="ratingsModalDetailCol">Intense or graphic profanity/crude humor</td> <td class="ratingsModalDetailCol">BlackBerry World will not accept Hate Speech</td> </tr> <tr class="ratingsModalOddRow"> <td class="ratingsModalTitleCol">Alcohol, Tobacco, Drug Use</td> <td class="ratingsModalDetailCol">None</td> <td class="ratingsModalDetailCol">Infrequent/Mild</td> <td class="ratingsModalDetailCol">Intense/Frequent drug/alcohol use or reference</td> <td class="ratingsModalDetailCol">Content designed to encourage/promote drug or alcohol abuse, or content appropriate only for or that is legally restricted to persons at least 18 years of age</td> </tr> <tr class="ratingsModalEvenRow"> <td class="ratingsModalTitleCol">Gambling</td> <td class="ratingsModalDetailCol">None</td> <td class="ratingsModalDetailCol">Simulated</td> <td class="ratingsModalDetailCol">Simulated</td> <td class="ratingsModalDetailCol">Simulated</td> </tr> </tbody> </table> <div class="clearFloats"> <div class="awMarginTop-Twenty awFloatRight awMarginBottom-Twenty"> <span id="ratingStandardsModalbuttonMain" class="awButtonWrapper"><a id="productDetails:ratingStandardsModaloutputLink" name="productDetails:ratingStandardsModaloutputLink" href="#" onclick="hideModalPanel(RichFaces.$('productDetails:ratingStandardsModal')); return false;"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="ratingStandardsModalLabel" style="color: black;" class="awNoArrow">Close</div> </div> <div class="awRightButton"></div></a> </span> <span id="ratingStandardsModalbuttonMainDisabled" style="display:none" class="awDisabledButton"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="ratingStandardsModalDisabledLabel" class="awNoArrow">Close</div> </div> <div class="awRightButton"></div> </span> </div> </div> </div> </div></div></div></div><script type="text/javascript">new RichFaces.ui.PopupPanel("productDetails:ratingStandardsModal",{"height":0,"width":900} );</script></div> <div style="position: absolute; z-index: 1000; pos-x:-1000"> </div> <div id="productDetailsHTML" class="awwsProductDetailsContainer" style="visibility: hidden;"> <div id="productDetails_boxHTML" class="webstore-blocks-box" style="visibility: hidden;"> <div class="awwsProductDetailsContentLeft"> <img id="icon" class="awwsProductDetailsContentItem"/> <div class="awwsProductDetailsContentItem"> <h1 id="title" class="awwsProductDetailsContentItemTitle" style="overflow: hidden; text-overflow: ellipsis;"></h1> <div class="awwsProductDetailsContentItemButtons"></div> <h4 class="inline" style="padding-right: 3px;">By</h4> <h5 class="inline"><a id="vendor"></a></h5> <img id="rating" class="awwsProductDetailsContentItemRating"/> <h6 class="inline"> <a id="writeAReviewButton" class="awwsProductDetailsContentItemWriteAReview">Write a review</a> </h6> </div> <div id="descriptionContainer" class="awwsProductDetailsContentItem awwsProductDetailsContentItemDescription"> <div id="description"></div> </div> <div id="fullDescription" class="awwsProductDetailsFullDescriptionClosed" style="display: none;">More Description</div> <div class="awwsProductDetailsContentItem awwsProductDetailsModels"> <div id="productDetails_boxSmallHTML" class="awwsSmallBoxBackground" style="visibility: hidden;"> <div class="awwsProductDetailsData"> <table><tr> <td style="vertical-align:top;"> <ul class="awwsProductDetailsContentItem" style="width: 174px;"> <li><b>Version:</b> <span id="version"></span></li> <li><b>Released:</b> <span id="releaseDate"></span></li> <li><b>File Size:</b> <span id="releaseSize"></span></li> <li><b style="position: relative; top: -11px;">Rated:</b><img id="contentRatingIcon" class="awwsProductDetailsRatingStandard"/><span id="contentRating" class="awwsProductDetailsContentItemRatingLink"></span></li> <li id="emailItem"><h6><a id="email">Email Application Support</a></h6></li> <li style="margin-top: 5px;"><h6><a id="website" target="_blank">Visit Support Website</a></h6></li> <li style="margin-top: 5px;"><h6><a id="privacy" target="_blank">Privacy Policy</a></h6></li> </ul> </td> <td style="vertical-align:top;"> <ul class="awwsProductDetailsContentItem" style="position: relative; z-index: 202; width: 194px;"> <li class="poplist"><a href="#"><b>Supported Carriers</b></a><span id="supportedCarriersList">All carriers</span></li> </ul> <ul class="awwsProductDetailsContentItem" style="position: relative; z-index: 201; width: 194px;"> <li class="poplist"><a href="#"><b>Supported Countries</b></a><span id="supportedCountriesList">All Countries</span></li> </ul> <ul class="awwsProductDetailsContentItem" style="position: relative; z-index: 200; width: 194px;"> <li class="poplist"><a href="#"><b>Supported Devices</b></a><span id="supportedDevicesList">This item supports all devices</span></li> </ul> </td> <td style="vertical-align:top;"> <div class="floatRight"> <img class="QRCode" width="89" height="89" src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/servedimages/15725/?t=13"/> <br/> <div style="cursor: pointer" onclick="showMessageModal(); return false;"><h6>Instructions</h6></div> <script type="text/javascript"> //<![CDATA[ function showMessageModal() { eval(messageModal).show("Item QR Code", "<div style=\"text-align:center;\"><b>Scan the QR code above to download the app.</b></div><br /><br />Open BlackBerry World on your device. Do one of the following:<ol><li>On a device running BlackBerry Device software 7.1 or older, press the Menu key. Click <strong>Scan a Barcode</strong>.</li><li>On a BlackBerry 10 device, swipe down from the top of the screen. Click <strong>Scan a Barcode</strong>.</li></ol>", "<img class=\"nestedQRCode\" width=\"150\" height=\"150\" src=\"/webstore/servedimages/15725/?t=13\" />"); } //]]> </script> <img id="b4bbIcon" src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/img/webstore/BFBLogo_90x35-wht.png" class="awwsProductDetailsB4BBFullIconImg" onclick="javascript: b4bbDescriptionModal.show();"/> </div> </td> </tr></table> </div> <div class="clear"></div> </div> <script type="text/javascript"><!-- function productDetails_boxSmallConstructor() { this.drawFlag = false; this.completeSignal = new ComponentSignal(); this.completeSignal.setID("productDetails_boxSmall"); this.timeout = null; this._fireCompleteSignal = function() { window.clearInterval(this.timeout); this.completeSignal.dispatch(); } this.render = function() { this._fireCompleteSignal(); //this.timeout = window.setTimeout(jQuery.proxy(this._fireCompleteSignal, this), 60); } //Set up the signal passed through the signal attribute... if ("" != "") { var signal = eval(""); signal.add(this, this.render); } this.setSignal = function(signal) { if (signal == null) return; signal.add(this, this.render); } this.draw = function() { if (this.drawFlag) return; this.drawFlag = true; var selection = jQuery("#productDetails_boxSmallHTML"); var userAgent = navigator.userAgent; var indexOf = userAgent.indexOf("MSIE"); if (indexOf > -1) { selection.removeClass("awwsSmallBoxBackground"); selection.addClass("awwsSmallBoxBackgroundIE"); selection.css("visibility", ""); return; } var rectangle = new Object(); rectangle.top = 69; rectangle.right = 9; rectangle.bottom = 69; rectangle.left = 8; selection.scale9Grid(rectangle, this.completeSignal); selection.css("visibility", ""); } if ("false" == "true") this.draw(); }; productDetails_boxSmallInitialized = false; function productDetails_boxSmallInitialize() { if (productDetails_boxSmallInitialized) return; productDetails_boxSmallInitialized = true; productDetails_boxSmall = new productDetails_boxSmallConstructor(); }; registerOnloadCallback(productDetails_boxSmallInitialize); --></script> </div> </div> <div class="awwsProductDetailsContentRight"> <div class="awwsProductDetailsScreenshots"> <div id="awwsScreenshotListArrowLeft" class="awwsScreenshotListArrowLeft noSelect"> <img class="awwsScreenshotListArrowImage" src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/resources/components/productList/images/leftArrow-up.png"/> </div> <div id="awwsScreenshotListArrowRight" class="awwsScreenshotListArrowRight noSelect"> <img class="awwsScreenshotListArrowImage" src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/resources/components/productList/images/rightArrow-up.png"/> </div> <div class="awwsScreenshotListMask"> <div id="awwsScreenshotList" class="awwsScreenshotList"> </div> <div class="awwsScreenshotListLength"> <p id="currentScreenshot" class="inline"></p><p id="numberOfScreenshots" class="inline"></p> </div> </div> </div> </div> <div class="clear"></div> </div> <script type="text/javascript"><!-- function productDetails_boxConstructor() { this.drawFlag = false; this.completeSignal = new ComponentSignal(); this.completeSignal.setID("productDetails_box"); this.timeout = null; this.adjustTimeout = null; this._fireCompleteSignal = function() { window.clearInterval(this.timeout); this.completeSignal.dispatch(); } this._fireAdjustCompleteSignal = function() { window.clearInterval(this.adjustTimeout); this.completeSignal.dispatch(); } this.render = function() { //this._fireCompleteSignal(); this.timeout = window.setTimeout(jQuery.proxy(this._fireCompleteSignal, this), 10); this.adjustTimeout = window.setTimeout(jQuery.proxy(this._fireCompleteSignal, this), 250); } //Set up the signal passed through the signal attribute... if ("" != "") { var signal = eval(""); signal.add(this, this.render); } this.setSignal = function(signal) { if (signal == null) return; signal.add(this, this.render); } this.draw = function() { if (this.drawFlag) return; this.drawFlag = true; var selection = jQuery("#productDetails_boxHTML"); var userAgent = navigator.userAgent; var indexOf = userAgent.indexOf("MSIE"); if (indexOf > -1) { selection.removeClass("webstore-blocks-box"); selection.addClass("webstore-blocks-box-ie"); selection.css("visibility", ""); return; } var rectangle = new Object(); rectangle.top = 100; rectangle.right = 8; rectangle.bottom = 83; rectangle.left = 8; selection.scale9Grid(rectangle, this.completeSignal); selection.css("visibility", ""); } if ("false" == "true") this.draw(); }; productDetails_boxInitialized = false; function productDetails_boxInitialize() { if (productDetails_boxInitialized) return; productDetails_boxInitialized = true; productDetails_box = new productDetails_boxConstructor(); }; registerOnloadCallback(productDetails_boxInitialize); --></script> </div> <div id="awwsScreenshotItemTemplate" style="display: none;"> <div id="awwsScreenshotListItem" class="awwsScreenshotListItem"> <img id="image" class="awwsScreenshotListItemImage"/> </div> </div> <script type="text/javascript"><!-- function productDetailsConstructor() { this.visible = false; var fullDescriptionToggleState = false; var template = new ComponentTemplate(); template.attr("#icon", "src", "iconId"); template.attr("#rating", "src", "rating"); template.attr("#email", "href", "emailSupport"); template.visible("#emailItem", "emailSupport"); template.attr("#website", "href", "vendorHomeUrl"); template.visible("#website", "vendorHomeUrl"); template.attr("#privacy", "href", "vendorPrivacyPolicyURL"); template.visible("#privacy", "vendorPrivacyPolicyURL"); template.attr("#vendor", "href", "vendorLink"); template.html("#title", "name", true); template.visible("#b4bbIcon", "bbCertified"); //template.html("#description", "description", true); template.append("#version", "version", true); template.append("#releaseDate", "releaseDate", true); template.append("#releaseSize", "releaseSize", true); template.append("#vendor", "vendorName", true); template.append("#supportedCountriesList", "supportedCountriesList", true); template.append("#supportedCarriersList", "supportedCarriersList", true); template.append("#supportedDevicesList", "supportedDevicesList", true); template.append(".awwsProductDetailsContentItemButtons", "actionButtons", true); template.attr("#contentRatingIcon", "src", "cdDTO.ratingDescriptionImageId"); template.append("#contentRating", "cdDTO.ratingDescriptionName", true); template.click("#contentRating", this, showRatingStandards, []); template.click("#contentRatingIcon", this, showRatingStandards, []); var modal = "addReviewModal,show"; var modalSplit = modal.split(","); var modalTarget = eval(modalSplit[0]); var modalMethod = eval(modalSplit[0] + '["' + modalSplit[1] + '"]'); template.click("#writeAReviewButton", modalTarget, modalMethod, ["id"]); var dataUpdateHandler = function() { var productDetailsData = data.getProperty("data"); var imgModal = "imageZoomModal,show"; var imgModalSplit = imgModal.split(","); var imgModalTarget = eval(imgModalSplit[0]); imgModalTarget.setIds(productDetailsData.screenShots); screenshotData.setProperty("data", productDetailsData.screenShots); }; var formattedDataUpdateHandler = function() { var dataObject = formattedData.getProperty("data"); if (dataObject == null) return; var selection = jQuery("#productDetailsHTML"); template.apply(selection, dataObject); //Full Description Logic: var fullDescriptionSelection = jQuery("#fullDescription"); var descriptionContainerSelection = jQuery("#descriptionContainer"); var descriptionSelection = jQuery("#description"); //Add the description to the page in a unique way to help IE retain pre-formatting... descriptionSelection.empty().html('<pre id="descriptionPre" class="awwsProductDetailsContentItemDescriptionPre">' + dataObject.description + '</pre>'); var descriptionPreSelection = jQuery("#descriptionPre"); //Check if we should show the Full Description button or not... if (descriptionPreSelection.height() <= 75) { fullDescriptionSelection.hide(); } else { fullDescriptionSelection.show(); descriptionPreSelection.css("max-height", "75px"); descriptionPreSelection.dotdotdot(); } var toggleDescription = function() { fullDescriptionSelection.removeClass("awwsProductDetailsFullDescriptionClosed"); fullDescriptionSelection.removeClass("awwsProductDetailsFullDescriptionOpened"); fullDescriptionSelection.empty(); descriptionContainerSelection.removeClass("awwsProductDetailsContentItemDescription"); descriptionContainerSelection.removeClass("awwsProductDetailsContentItemDescriptionOpened"); descriptionSelection.empty().html('<pre id="descriptionPre" class="awwsProductDetailsContentItemDescriptionPre">' + dataObject.description + '</pre>'); descriptionPreSelection = jQuery("#descriptionPre"); if (fullDescriptionToggleState) { fullDescriptionSelection.addClass("awwsProductDetailsFullDescriptionClosed"); fullDescriptionSelection.append("More Description"); descriptionContainerSelection.addClass("awwsProductDetailsContentItemDescription"); descriptionPreSelection.css("max-height", "75px"); descriptionPreSelection.dotdotdot(); } else { fullDescriptionSelection.addClass("awwsProductDetailsFullDescriptionOpened"); fullDescriptionSelection.append("Less Description"); descriptionContainerSelection.addClass("awwsProductDetailsContentItemDescriptionOpened"); } fullDescriptionToggleState = !fullDescriptionToggleState; productDetails_box.render(); } fullDescriptionSelection.unbind(); fullDescriptionSelection.click(toggleDescription); if (this.visible == false) { this.visible = true; selection.hide(); selection.css("visibility", ""); selection.fadeIn(1000); } }; var data; try { data = eval("formattedContentData"); } catch (error) { } if (data == null) data = new ComponentData(); data.update.add(this, dataUpdateHandler); var formattedData = new ComponentData(); formattedData.update.add(this, formattedDataUpdateHandler); var dataFormatter = new ComponentDataFormatter(); dataFormatter.setData(data); dataFormatter.setFormattedData(formattedData); dataFormatter.addDataFormatter("iconId", iconIDFormatter); dataFormatter.addDataFormatter("rating", ratingFormatter); dataFormatter.addDataFormatter("cdDTO.releaseDate", millisecondDateFormatter, "releaseDate"); dataFormatter.addDataFormatter("cdDTO.size", byteFormatter, "releaseSize"); dataFormatter.addDataFormatter("vendorSupportEmail", emailLinkFormatter, "emailSupport"); dataFormatter.addDataFormatter("vendorId", vendorLinkFormatter, "vendorLink", "lang=en&countrycode=US"); dataFormatter.addDataFormatter("cdDTO.ratingDescriptionImageId", standardsRatingIcontFormatter); dataFormatter.addDataFormatter("cdDTO.supportedCarriers", poplistFormatter, "supportedCarriersList", "All carriers"); dataFormatter.addDataFormatter("cdDTO.supportedCountries", poplistFormatter, "supportedCountriesList", "All Countries"); dataFormatter.addDataFormatter("cdDTO.supportedDevicesToDisplay", poplistFormatter, "supportedDevicesList", "This item supports all devices"); dataFormatter.addDataFormatter("cdDTO", versionFormatter, "version"); dataFormatter.addDataFormatter("name", nameSpecialCharacterFormatter, "name"); dataFormatter.addDataFormatter("description", nameSpecialCharacterFormatter, "description"); dataFormatter.addDataFormatter("vendorName", nameSpecialCharacterFormatter, "vendorName"); var screenshotData = new ComponentData(); var formattedScreenshotData = new ComponentData(); var screenshotDataFormatter = new ComponentDataFormatter(); screenshotDataFormatter.setData(screenshotData); screenshotDataFormatter.setFormattedData(formattedScreenshotData); screenshotDataFormatter.addDataFormatter("", screenshotIDFormatter); var service = new ComponentService(); service.setData(data); var templateHTML = jQuery("#awwsScreenshotItemTemplate").html(); var screenshotTemplate = new ComponentTemplate(); screenshotTemplate.setHTML(templateHTML); screenshotTemplate.attr("#image", "src", "", "visible"); screenshotTemplate.scale("#image", "visible"); screenshotTemplate.reflect("#image", "visible"); var productDetailsPopulateCompleteHandler = function() { } var list = new ComponentList(); list.setListSelector("#awwsScreenshotList"); list.setScrollPreviousPageSelector("#awwsScreenshotListArrowLeft"); list.setScrollNextPageSelector("#awwsScreenshotListArrowRight"); list.setCurrentScreenshotSelector("#currentScreenshot"); list.setNumberOfItemsSelector("#numberOfScreenshots"); list.setTemplate(screenshotTemplate); list.setData(formattedScreenshotData); list.setNumberOfItemsPerPage(1); list.setScrollItemAmount(235); list.setScrollDuration(1000); list.setScrollTransition("easeOutQuint"); list.enableCulling = true; list.populateComplete.add(this, productDetailsPopulateCompleteHandler); productDetails_box.setSignal(template.applyComplete); productDetails_box.draw(); productDetails_boxSmall.setSignal(template.applyComplete); productDetails_boxSmall.draw(); jQuery('.awwsScreenshotListMask').attr('onclick', 'showImageModal()'); }; productDetailsInitialized = false; function productDetailsInitialize() { if (productDetailsInitialized) return; productDetailsInitialized = true; productDetails = new productDetailsConstructor(); }; function showImageModal() { var modal = "imageZoomModal,show"; var modalSplit = modal.split(","); var modalTarget = eval(modalSplit[0]); modalTarget.show(parseInt((document.getElementById("currentScreenshot").innerHTML.split(" of"))[0])); } function showRatingStandards() { javascript: showModalPanel(RichFaces.$('productDetails:ratingStandardsModal')); } registerOnloadCallback(productDetailsInitialize); --></script> <!-- <wsBlocks:box id="reviewsBox" /> <div class="clear"></div> --> <!-- reviews --> <script type="text/javascript"> reviewDataInitialized = false; function reviewDataInitialize() { if (reviewDataInitialized) return; reviewDataInitialized = true; reviewData = new ComponentData(); var data = eval("reviewData"); if (data == null) return; data.setID("reviewData"); var source = eval(""); var path = "data"; if (source) data.setProperty(path, source); }; var reviewDataRegistered = reviewDataRegistered || false; var reviewDataRegister = reviewDataRegister || function() { if (reviewDataRegistered) return; reviewDataRegistered = true; registerOnloadCallback(reviewDataInitialize); } reviewDataRegister(); </script> <!-- populate the CAS review call here --> <script type="text/javascript"> reviewListDataInitialized = false; function reviewListDataInitialize() { if (reviewListDataInitialized) return; reviewListDataInitialized = true; reviewListData = new ComponentData(); var data = eval("reviewListData"); if (data == null) return; data.setID("reviewListData"); var source = eval(""); var path = "data"; if (source) data.setProperty(path, source); }; var reviewListDataRegistered = reviewListDataRegistered || false; var reviewListDataRegister = reviewListDataRegister || function() { if (reviewListDataRegistered) return; reviewListDataRegistered = true; registerOnloadCallback(reviewListDataInitialize); } reviewListDataRegister(); </script> <!-- take the reviews property from the CAS call and put it in here --> <script type="text/javascript"> formattedReviewListDataInitialized = false; function formattedReviewListDataInitialize() { if (formattedReviewListDataInitialized) return; formattedReviewListDataInitialized = true; formattedReviewListData = new ComponentData(); var data = eval("formattedReviewListData"); if (data == null) return; data.setID("formattedReviewListData"); var source = eval(""); var path = "data"; if (source) data.setProperty(path, source); }; var formattedReviewListDataRegistered = formattedReviewListDataRegistered || false; var formattedReviewListDataRegister = formattedReviewListDataRegister || function() { if (formattedReviewListDataRegistered) return; formattedReviewListDataRegistered = true; registerOnloadCallback(formattedReviewListDataInitialize); } formattedReviewListDataRegister(); </script> <!-- format the reviewListData here --> <script type="text/javascript"> reviewListDataFormatterInitialized = false; function reviewListDataFormatterInitialize() { if (reviewListDataFormatterInitialized) return; reviewListDataFormatterInitialized = true; var dataFormatter = reviewListDataFormatter = new ComponentDataFormatter(); dataFormatter.setID("reviewListDataFormatter"); var data = eval("reviewListData"); if (data == null) return; var formattedData = eval("formattedReviewListData"); if (formattedData == null) return; dataFormatter.setData(data); dataFormatter.setFormattedData(formattedData); }; var reviewListDataFormatterRegistered = reviewListDataFormatterRegistered || false; var reviewListDataFormatterRegister = reviewListDataFormatterRegister || function() { if (reviewListDataFormatterRegistered) return; reviewListDataFormatterRegistered = true; registerOnloadCallback(reviewListDataFormatterInitialize); } reviewListDataFormatterRegister(); </script> <script type="text/javascript"> function j_idt461Initialize() { var dataFormatter = eval(""); if (dataFormatter == null) dataFormatter = eval("reviewListDataFormatter"); if (dataFormatter == null) return; var ratingFormatter = function(value) { if (value == null) return "-1.png"; return "/webstore/resources/components/rating/images/" + String(value) + ".png"; }; var property = "rating"; var newPath = "ratingIconURL"; dataFormatter.addDataFormatter(property, ratingFormatter, newPath); }; registerOnloadCallback(j_idt461Initialize); </script> <script type="text/javascript"> function j_idt463Initialize() { var dataFormatter = eval(""); if (dataFormatter == null) dataFormatter = eval("reviewListDataFormatter"); if (dataFormatter == null) return; var nameSpecialCharactersFormatter = function(value) { if (value == null) return ""; // Call the formatter in component.js return nameSpecialCharacterFormatter(value, null); }; var property = "title"; var newPath = "title"; dataFormatter.addDataFormatter(property, nameSpecialCharactersFormatter, newPath); }; registerOnloadCallback(j_idt463Initialize); </script> <script type="text/javascript"> function j_idt465Initialize() { var dataFormatter = eval(""); if (dataFormatter == null) dataFormatter = eval("reviewListDataFormatter"); if (dataFormatter == null) return; var nameSpecialCharactersFormatter = function(value) { if (value == null) return ""; // Call the formatter in component.js return nameSpecialCharacterFormatter(value, null); }; var property = "nickname"; var newPath = "nickname"; dataFormatter.addDataFormatter(property, nameSpecialCharactersFormatter, newPath); }; registerOnloadCallback(j_idt465Initialize); </script> <script type="text/javascript"> function j_idt466Initialize() { var dataFormatter = eval(""); if (dataFormatter == null) dataFormatter = eval("reviewListDataFormatter"); if (dataFormatter == null) return; var nameSpecialCharactersFormatter = function(value) { if (value == null) return ""; // Call the formatter in component.js return nameSpecialCharacterFormatter(value, null); }; var property = "review"; var newPath = "review"; dataFormatter.addDataFormatter(property, nameSpecialCharactersFormatter, newPath); }; registerOnloadCallback(j_idt466Initialize); </script> <script type="text/javascript"> reviewsRequestProfileInitialized = false; function reviewsRequestProfileInitialize() { if (reviewsRequestProfileInitialized) return; reviewsRequestProfileInitialized = true; var requestProfile = reviewsRequestProfile = new RequestProfile(); if ("true" == "true") requestProfile.loadFromFilteringCookie(); requestProfile.id = "reviewsRequestProfile"; requestProfile.os = ""; requestProfile.model = ""; requestProfile.countryid = ""; requestProfile.carrierid = ""; requestProfile.lang = ""; requestProfile.page = "1"; requestProfile.pagesize = "12"; requestProfile.sortby = "newest"; requestProfile.carrierName = ""; requestProfile.countryName = ""; requestProfile.deviceImageId = ""; requestProfile.deviceDisplayName = ""; requestProfile.devicePIN = ""; }; registerOnloadCallback(reviewsRequestProfileInitialize); </script> <script type="text/javascript"> var reviewCatalogueServiceInitialized = reviewCatalogueServiceInitialized || false; function reviewCatalogueServiceInitialize() { var appendData = "true" == "true"; var loadImmediately = "false" != "false"; if (reviewCatalogueServiceInitialized) { if (loadImmediately) reviewCatalogueService.load(); return; } reviewCatalogueServiceInitialized = true; var catalogueService = reviewCatalogueService = new ComponentCatalogueService(); catalogueService.setID("reviewCatalogueService"); var catalogueServiceLoadCompleteHandler = function(json, metaData) { var data = eval("reviewData"); if (data == null) return; //Check metaData and store it only once... if (metaData) { var existingMetaData = data.getProperty("meta"); if (existingMetaData == null) { data.setProperty("meta", metaData, null, true); } } //See if we were told to append the data instead of replace it... var appendedData = null; if (appendData) appendedData = json; //Store/append the updated data object... data.setProperty("data", json, appendedData); }; var requestProfile = reviewsRequestProfile; catalogueService.setProductType(""); catalogueService.setListType(""); catalogueService.setCategoryType(""); catalogueService.setCategoryID(""); catalogueService.setVendorType(""); catalogueService.setVendorID(""); catalogueService.setContentType("reviews"); catalogueService.setContentID("15725"); catalogueService.setReleaseVersion(""); catalogueService.setActor(""); catalogueService.setProducer(""); catalogueService.setDirector(""); catalogueService.setTvShowId(""); catalogueService.setTvSeasonId(""); catalogueService.setArtistId(""); catalogueService.setSearch(""); catalogueService.setRequestProfile(requestProfile); catalogueService.setLoadCompleteHandler(catalogueServiceLoadCompleteHandler); if (loadImmediately) catalogueService.load(); }; var reviewCatalogueServiceRegistered = reviewCatalogueServiceRegistered || false; var reviewCatalogueServiceRegister = reviewCatalogueServiceRegister || function() { if (reviewCatalogueServiceRegistered) return; reviewCatalogueServiceRegistered = true; registerOnloadCallback(reviewCatalogueServiceInitialize); } reviewCatalogueServiceRegister(); </script> <div id="reviewTemplateHTML" style="display: none;"> <div class="awwsReview"> <div class="awwsReviewTitle"></div> <img class="awwsReviewRating"/> <div class="awwsReviewBy awwsReviewHeader">By</div> <div class="awwsReviewUserName awwsReviewHeader"></div> <div class="awwsReviewDate awwsReviewHeader"></div> <div class="awwsReviewBody"></div> </div> </div> <script type="text/javascript"> reviewTemplateInitialized = false; function reviewTemplateInitialize() { if (reviewTemplateInitialized) return; reviewTemplateInitialized = true; reviewTemplate = new ComponentTemplate(); var template = eval("reviewTemplate"); if (template == null) return; var id = "reviewTemplate"; var htmlSelector = "#reviewTemplateHTML"; var html = jQuery("#reviewTemplateHTML").html(); var data = eval(""); var metaHack = ""; template.setID("reviewTemplate"); template.setHTMLSelector(htmlSelector); template.setHTML(html); if (metaHack == "true") { var templateApply = template.apply; template.apply = function() { var selection = jQuery(htmlSelector); var meta = data.getProperty("meta"); templateApply.apply(template, [selection, meta]); } } }; var reviewTemplateRegistered = reviewTemplateRegistered || false; var reviewTemplateRegister = reviewTemplateRegister || function() { if (reviewTemplateRegistered) return; reviewTemplateRegistered = true; registerOnloadCallback(reviewTemplateInitialize); } reviewTemplateRegister(); </script> <script type="text/javascript"> j_idt469Initialized = false; function j_idt469Initialize() { if (j_idt469Initialized) return; j_idt469Initialized = true; var template = eval(""); if (template == null) template = eval("reviewTemplate"); if (template == null) return; var selector = ".awwsReviewTitle"; var dataPath = "title"; var unescape = "true" == "true"; template.html(selector, dataPath, unescape); }; var j_idt469Registered = j_idt469Registered || false; var j_idt469Register = j_idt469Register || function() { if (j_idt469Registered) return; j_idt469Registered = true; registerOnloadCallback(j_idt469Initialize); } j_idt469Register(); </script> <script type="text/javascript"> j_idt471Initialized = false; function j_idt471Initialize() { if (j_idt471Initialized) return; j_idt471Initialized = true; var template = eval(""); if (template == null) template = eval("reviewTemplate"); if (template == null) return; var selector = ".awwsReviewRating"; var attr = "src"; var dataPath = "ratingIconURL"; var options = ""; template.attr(selector, attr, dataPath, options); }; var j_idt471Registered = j_idt471Registered || false; var j_idt471Register = j_idt471Register || function() { if (j_idt471Registered) return; j_idt471Registered = true; registerOnloadCallback(j_idt471Initialize); } j_idt471Register(); </script> <script type="text/javascript"> j_idt473Initialized = false; function j_idt473Initialize() { if (j_idt473Initialized) return; j_idt473Initialized = true; var template = eval(""); if (template == null) template = eval("reviewTemplate"); if (template == null) return; var selector = ".awwsReviewUserName"; var dataPath = "nickname"; var unescape = "true" == "true"; template.html(selector, dataPath, unescape); }; var j_idt473Registered = j_idt473Registered || false; var j_idt473Register = j_idt473Register || function() { if (j_idt473Registered) return; j_idt473Registered = true; registerOnloadCallback(j_idt473Initialize); } j_idt473Register(); </script> <script type="text/javascript"> j_idt474Initialized = false; function j_idt474Initialize() { if (j_idt474Initialized) return; j_idt474Initialized = true; var template = eval(""); if (template == null) template = eval("reviewTemplate"); if (template == null) return; var selector = ".awwsReviewDate"; var dataPath = "createdDate"; var clear = "" == "true"; template.append(selector, dataPath, clear); }; var j_idt474Registered = j_idt474Registered || false; var j_idt474Register = j_idt474Register || function() { if (j_idt474Registered) return; j_idt474Registered = true; registerOnloadCallback(j_idt474Initialize); } j_idt474Register(); </script> <script type="text/javascript"> j_idt476Initialized = false; function j_idt476Initialize() { if (j_idt476Initialized) return; j_idt476Initialized = true; var template = eval(""); if (template == null) template = eval("reviewTemplate"); if (template == null) return; var selector = ".awwsReviewBody"; var dataPath = "review"; var unescape = "true" == "true"; template.html(selector, dataPath, unescape); }; var j_idt476Registered = j_idt476Registered || false; var j_idt476Register = j_idt476Register || function() { if (j_idt476Registered) return; j_idt476Registered = true; registerOnloadCallback(j_idt476Initialize); } j_idt476Register(); </script> <script type="text/javascript"> j_idt477Initialized = false; function j_idt477Initialize() { if (j_idt477Initialized) return; j_idt477Initialized = true; var template = eval(""); if (template == null) template = eval("reviewTemplate"); if (template == null) return; var selector = ".awwsReviewBy"; var visible = "nickname"; var equivalence = null; var options = ""; var equal = ""; if (equal == "") { equal = null; } else { equal = equal == "true"; } template.visible(selector, visible, equivalence, options, equal); }; registerOnloadCallback(j_idt477Initialize); </script> <script type="text/javascript"> j_idt479Initialized = false; function j_idt479Initialize() { if (j_idt479Initialized) return; j_idt479Initialized = true; var template = eval(""); if (template == null) template = eval("reviewTemplate"); if (template == null) return; var selector = ".awwsReviewUserName"; var visible = "nickname"; var equivalence = null; var options = ""; var equal = ""; if (equal == "") { equal = null; } else { equal = equal == "true"; } template.visible(selector, visible, equivalence, options, equal); }; registerOnloadCallback(j_idt479Initialize); </script> <!-- recommendations --> <script type="text/javascript"> recommendationsDataInitialized = false; function recommendationsDataInitialize() { if (recommendationsDataInitialized) return; recommendationsDataInitialized = true; recommendationsData = new ComponentData(); var data = eval("recommendationsData"); if (data == null) return; data.setID("recommendationsData"); var source = eval(""); var path = "data"; if (source) data.setProperty(path, source); }; var recommendationsDataRegistered = recommendationsDataRegistered || false; var recommendationsDataRegister = recommendationsDataRegister || function() { if (recommendationsDataRegistered) return; recommendationsDataRegistered = true; registerOnloadCallback(recommendationsDataInitialize); } recommendationsDataRegister(); </script> <script type="text/javascript"> formattedRecommendationsDataInitialized = false; function formattedRecommendationsDataInitialize() { if (formattedRecommendationsDataInitialized) return; formattedRecommendationsDataInitialized = true; formattedRecommendationsData = new ComponentData(); var data = eval("formattedRecommendationsData"); if (data == null) return; data.setID("formattedRecommendationsData"); var source = eval(""); var path = "data"; if (source) data.setProperty(path, source); }; var formattedRecommendationsDataRegistered = formattedRecommendationsDataRegistered || false; var formattedRecommendationsDataRegister = formattedRecommendationsDataRegister || function() { if (formattedRecommendationsDataRegistered) return; formattedRecommendationsDataRegistered = true; registerOnloadCallback(formattedRecommendationsDataInitialize); } formattedRecommendationsDataRegister(); </script> <script type="text/javascript"> recommendationsDataFormatterInitialized = false; function recommendationsDataFormatterInitialize() { if (recommendationsDataFormatterInitialized) return; recommendationsDataFormatterInitialized = true; var dataFormatter = recommendationsDataFormatter = new ComponentDataFormatter(); dataFormatter.setID("recommendationsDataFormatter"); var data = eval("recommendationsData"); if (data == null) return; var formattedData = eval("formattedRecommendationsData"); if (formattedData == null) return; dataFormatter.setData(data); dataFormatter.setFormattedData(formattedData); }; var recommendationsDataFormatterRegistered = recommendationsDataFormatterRegistered || false; var recommendationsDataFormatterRegister = recommendationsDataFormatterRegister || function() { if (recommendationsDataFormatterRegistered) return; recommendationsDataFormatterRegistered = true; registerOnloadCallback(recommendationsDataFormatterInitialize); } recommendationsDataFormatterRegister(); </script> <script type="text/javascript"> function j_idt482Initialize() { var dataFormatter = eval(""); if (dataFormatter == null) dataFormatter = eval("recommendationsDataFormatter"); if (dataFormatter == null) return; var iconIDFormatter = function(iconID) { if (iconID == null) return ""; return "/webstore/servedimages/" + iconID + ".png/?t=7"; }; var property = "iconId"; var newPath = "iconURL"; dataFormatter.addDataFormatter(property, iconIDFormatter, newPath); }; registerOnloadCallback(j_idt482Initialize); </script> <script type="text/javascript"> function j_idt484Initialize() { var dataFormatter = eval(""); if (dataFormatter == null) dataFormatter = eval("recommendationsDataFormatter"); if (dataFormatter == null) return; var ratingFormatter = function(value) { if (value == null) return "-1.png"; return "/webstore/resources/components/rating/images/" + String(value) + ".png"; }; var property = "rating"; var newPath = "ratingIconURL"; dataFormatter.addDataFormatter(property, ratingFormatter, newPath); }; registerOnloadCallback(j_idt484Initialize); </script> <script type="text/javascript"> function j_idt485Initialize() { var dataFormatter = eval(""); if (dataFormatter == null) dataFormatter = eval("recommendationsDataFormatter"); if (dataFormatter == null) return; var productLinkFormatter = function(value, parameters) { if (value == null) return ""; var link = "/webstore" + value; if (parameters) link += "?" + parameters; return link; }; var property = "_itemDetailsLink"; var newPath = "contentURL"; dataFormatter.addDataFormatter(property, productLinkFormatter, newPath, "lang=en&countrycode=US"); }; registerOnloadCallback(j_idt485Initialize); </script> <script type="text/javascript"> function j_idt487Initialize() { var dataFormatter = eval(""); if (dataFormatter == null) dataFormatter = eval("recommendationsDataFormatter"); if (dataFormatter == null) return; var vendorLinkFormatter = function(id, parameters) { if (id == null) return name; var link = linkFormatter("/vendor/" + id, parameters); return link; }; var property = "vendorId"; var newPath = "vendorLink"; if (newPath == "") newPath = null; dataFormatter.addDataFormatter(property, vendorLinkFormatter, newPath, "lang=en&countrycode=US"); }; registerOnloadCallback(j_idt487Initialize); </script> <script type="text/javascript"><!-- //View in My World //Download //Upgrade //Purchase //Purchase Upgrade {0} //Try //Subscribe //Special behavior for buttons on album page var isAlbumPage = (window.location.href.indexOf('album') !== -1); var isMyWorld = (window.location.href.indexOf('myworld') !== -1); var LICENSE_TYPE_DOWNLOAD = 1; var LICENSE_TYPE_PURCHASE = 2; var LICENSE_TYPE_TRY = 3; var LICENSE_TYPE_MULTI = 4; var LICENSE_TYPE_7_SUB = 5; var LICENSE_TYPE_30_SUB = 6; var LICENSE_TYPE_NOT_FOR_SALE = 7; var LICENSE_TYPE_RENTAL = 8; var OPERATION_PURCHASE = "1"; var OPERATION_PURCHASE_UPGRADE = "2"; var OPERATION_TRY = "3"; var OPERATION_UPGRADE = "4"; var OPERATION_DOWNLOAD = "5"; var OPERATION_RENT = "10"; var OPERATION_NOT_FOR_SALE = "7"; var freeLicense = new Object(); freeLicense.type = LICENSE_TYPE_DOWNLOAD; freeLicense.label = "Download"; freeLicense.labelPrice = false; freeLicense.operation = OPERATION_DOWNLOAD; var purchaseLicense = new Object(); purchaseLicense.type = LICENSE_TYPE_PURCHASE; purchaseLicense.label = "Buy {0}"; purchaseLicense.labelPrice = true; purchaseLicense.operation = OPERATION_PURCHASE; var tryLicense = new Object(); tryLicense.type = LICENSE_TYPE_TRY; tryLicense.label = "Try"; tryLicense.labelPrice = false; tryLicense.operation = OPERATION_TRY; var subscription7License = new Object(); subscription7License.type = LICENSE_TYPE_7_SUB; subscription7License.label = "Subscribe"; subscription7License.labelPrice = false; subscription7License.operation = OPERATION_PURCHASE; var subscription30License = new Object(); subscription30License.type = LICENSE_TYPE_30_SUB; subscription30License.label = "Subscribe"; subscription30License.labelPrice = false; subscription30License.operation = OPERATION_PURCHASE; var notForSaleLicense = new Object(); notForSaleLicense.type = LICENSE_TYPE_NOT_FOR_SALE; // Not For Sale is not supported.. notForSaleLicense.label = "Not For Sale"; notForSaleLicense.labelPrice = false; notForSaleLicense.operation = OPERATION_NOT_FOR_SALE; var rentalLicense = new Object(); rentalLicense.type = LICENSE_TYPE_RENTAL; rentalLicense.label = "Rent {0}"; rentalLicense.labelPrice = true; rentalLicense.operation = OPERATION_RENT; var licenseTypes = new Object(); licenseTypes[1] = freeLicense; licenseTypes[2] = purchaseLicense; licenseTypes[3] = tryLicense; licenseTypes[5] = subscription7License; licenseTypes[6] = subscription30License; licenseTypes[7] = notForSaleLicense; licenseTypes[8] = rentalLicense; j_idt489Initialized = false; var buttonsOnly = true; function j_idt489Initialize() { if (j_idt489Initialized) return; j_idt489Initialized = true; var dataFormatter = eval(""); if (dataFormatter == null) dataFormatter = eval("recommendationsDataFormatter"); if (dataFormatter == null) return; var actionButtonsFormatter = function(value, parameters, data) { if (value == null || !isDefined(data)) return ""; var isMusicTrack = (isDefined(data.vendorTrackId) && isDefined(data.parentId)); var currentMillis = new Date().getTime(); if(isDefined(data.releaseDate) && (data.releaseDate > currentMillis)){ return ""; } if(isAlbumPage){ var parentReleaseDate = this.albumDetails.data._properties.data.releaseDate; if (isDefined(parentReleaseDate)){ if(parentReleaseDate > currentMillis){ return ""; } } } var myWorldForceVideo = "false" == "true" ? true : false; var myWorldForceMusic = "false" == "true" ? true : false; var isLoggedIn = "false"; var isVideoEnabled = "false" == "true" ? true : false; var isAnonVideoAllowed = "false" == "true" ? true : false; var videoCountries = ","; var isVideoAllowedCurrCountry = false; var isMusicEnabled = "false" == "true" ? true : false; var isAnonMusicAllowed = "false" == "true" ? true : false; var musicCountries = ","; var isMusicAllowedCurrCountry = false; var currCountry = getCurrentCountry(); if(isDefined(data.videoTitle) && !(isMyWorld && myWorldForceVideo)){ if(!isDefined(isVideoEnabled) || (!isVideoEnabled)){ return ""; } if(!isDefined(videoCountries)){ return ""; } else if((isDefined(currCountry) && currCountry != "0")){ var arrCountries = videoCountries.split(","); var country; for (i = 0; i < arrCountries.length; i++){ if (currCountry == arrCountries[i].trim()) { isVideoAllowedCurrCountry = true; break; } } if(!isVideoAllowedCurrCountry){ return ""; } }else if(!isDefined(isAnonVideoAllowed) || (isDefined(isAnonVideoAllowed) && !isAnonVideoAllowed)){ return ""; } } if(isDefined(data.musicVendorArtistId) && !(isMyWorld && myWorldForceMusic)){ if(!isDefined(isMusicEnabled) || (!isMusicEnabled)){ return ""; } if(!isDefined(musicCountries)){ return ""; } else if((isDefined(currCountry) && currCountry != "0")){ var arrCountries = musicCountries.split(","); var country; for (i = 0; i < arrCountries.length; i++){ if (currCountry == arrCountries[i].trim()) { isMusicAllowedCurrCountry = true; break; } } if(!isMusicAllowedCurrCountry){ return ""; } }else if(!isDefined(isAnonMusicAllowed) || (isDefined(isAnonMusicAllowed) && !isAnonMusicAllowed)){ return ""; } } dataDictionary[data.id] = data; buttonsOnly = "true".toLowerCase() == "true"; // If it's already installed, check if update is avail, show a message var updateInfo = getUpdateInfo(data, userAuth); if (userAuth && (((updateInfo&BUTTON_UPGRADE) == BUTTON_UPGRADE) || ((updateInfo&BUTTON_PURCHASE_UPGRADE) == BUTTON_PURCHASE_UPGRADE))) { // They aren't plugged in, so we don't know if it is installed or not. return getUpdateButton(data, "awwsActionButtons awwsSmallGreyButton"); } // If it's not available for the current device, country, carrier show a message if(!buttonsOnly){ switch (compatibleContent(data)){ case 'errorModel': return "<div class='awPriceInstallState'>The item is not available for your selected device.</div>"; case 'errorCountry': return "<div class='awPriceInstallState'>The item is not available for your selected country.</div>"; case 'errorCarrier': return "<div class='awPriceInstallState'>The item is not available for your selected carrier.</div>"; default: break; } } // Playbook is not supportd // TODO Should be checking if pushEnabledDevice here, then once a playbook has been upgraded they will be supported in WebStore. if (!buttonsOnly && getCurrentModel().toLowerCase() == 'playbook') { return "<div class='awPriceSuperscript awPriceSuperscriptRed'>Visit this item in BlackBerry World on your PlayBook to download.</div>"; } var actionButtonsHTML = ''; var actionButtonsArray = []; if (!buttonsOnly && doesExist("pushedMessages", data.id, "pushedMessages")) { // If they have pushed it this session, then lets tell them here. actionButtonsArray.push('<div class="awPriceInstallState">' + "This item has been sent to your device" + "</div>"); } var valueLength = value.length; for (var i = 0; i < valueLength; ++i) { var license = value[i]; //license.accessDuration; //license.initialRenewalPeriod; //license.licenseModelType; //license.licenseType; //license.price; //license.pricingtierId; //license.renewalPrice; //license.renewalPricintTierId; var licenseType = licenseTypes[license.licenseType]; var label = licenseType.label; if (licenseType.type == LICENSE_TYPE_NOT_FOR_SALE) { return; } if (license.licenseModelType == null) { // MKS 6534032 - In rare cases we are ingesting a license that is mostly NULL and // it looks like crap. Lets skip it here if license model type is null. continue; } if (licenseType.type == freeLicense.type && !buttonsOnly) { actionButtonsArray.push('<div class="awwsActionButtonFreeText">' + "FREE" + "</div>"); } else if (licenseType.type != freeLicense.type && !buttonsOnly && ((updateInfo&BUTTON_DOWNLOAD) == BUTTON_DOWNLOAD)) { // If they have already bought it, then we should show a download button, not a buy button. return '<div class="awwsActionButtonFreeText">' + "Already Purchased" + "</div>" + getButtonHTML(freeLicense.label, data.id, licenseType.type, OPERATION_DOWNLOAD, "awwsActionButtons awwsSmallGreyButton"); } if (!buttonsOnly && ((licenseType.type == LICENSE_TYPE_7_SUB) || (licenseType.type == LICENSE_TYPE_30_SUB))) { //"{(price ne renewalPrice and renewalPrice ge 0) or (contentapp.content.initialRenewalPeriod ne contentapp.content.licensetype.accessduration)}") { // Its a subscription if (isDefined(license.price) && license.price > 0) { // Paid Subscription actionButtonsArray.push('<div class="awwsActionButtonFreeText">' +license.priceString + "</div>"); } else if (isDefined(license.price) && license.price == 0) { // Free Subscription actionButtonsArray.push('<div class="awwsActionButtonFreeText">' + "FREE" + "</div>"); } if (license.renewalPrice > 0 && license.price != license.renewalPrice) { // Special Initial Period Subscription var priceLabel = '{0} for first <span class="awPriceSuperscriptBlue">{1}</span> days'; priceLabel = priceLabel.replace("{0}", license.priceString); priceLabel = priceLabel.replace("{1}", license.initialRenewalPeriod); actionButtonsArray.push('<div class="awwsActionButtonFreeText">' + priceLabel + "</div>"); if (licenseType.type == LICENSE_TYPE_7_SUB) { actionButtonsArray.push('<div class="awwsActionButtonFreeText">' + license.renewalPriceString + " / " + "7 days" + "</div>"); } else if (licenseType.type == LICENSE_TYPE_30_SUB) { actionButtonsArray.push('<div class="awwsActionButtonFreeText">' + license.renewalPriceString + " / " + "30 days" + "</div>"); } } if (licenseType.type == LICENSE_TYPE_7_SUB) { actionButtonsArray.push('<div class="awwsActionButtonSubscriptText">' + "7-day subscription recurring" + "</div>"); } else if (licenseType.type == LICENSE_TYPE_30_SUB) { actionButtonsArray.push('<div class="awwsActionButtonSubscriptText">' + "30-day subscription recurring" + "</div>"); } } if (licenseType.labelPrice) { if (isDefined(license.priceString)) { label = label.replace("{0}", license.priceString); } else { label = ""; } } var buttonHTML = null; if(isMusicTrack && !isAlbumPage) { buttonHTML = getButtonHTMLMusicTrack(label, data.id, "awwsActionButtons awwsSmallGreyButton", data.parentId); } else { buttonHTML = getButtonHTML(label, data.id, licenseType.type, licenseType.operation, "awwsActionButtons awwsSmallGreyButton"); } var showTryButton = "true".toLowerCase() == "true"; if (licenseType.type == LICENSE_TYPE_TRY && showTryButton == false) { //don't show the Try button if we're told not to... } else { actionButtonsArray.push(buttonHTML); } if (licenseType.type == LICENSE_TYPE_TRY) { // In the Try case we also need a Purchase button! label = purchaseLicense.label.replace("{0}", license.priceString); buttonHTML = getButtonHTML(label, data.id, purchaseLicense.type, purchaseLicense.operation, "awwsActionButtons awwsSmallGreyButton"); actionButtonsArray.push(buttonHTML); } } var actionButtonsArrayLength = actionButtonsArray.length; for (var j = 0; j < actionButtonsArrayLength; ++j) { actionButtonsHTML += actionButtonsArray[j]; //if (j < actionButtonsArrayLength - 1) //actionButtonsHTML += '<div style="display: inline-block; width: 5px;"></div>'; } return actionButtonsHTML; }; var property = "licenses"; var newPath = "appActionButtons"; dataFormatter.addDataFormatter(property, actionButtonsFormatter, newPath); }; registerOnloadCallback(j_idt489Initialize); function getButtonHTMLMusicTrack(label, id, styleClass, parentId){ return '<button type="button" value="' + label + '" class="' + styleClass + '" onclick="albumNavigateAction(' + parentId + ');"><span>' + label + '</span></button>'; } function getButtonHTML(label, id, licenseType, operation, styleClass) { if (!isDefined(label)) { return ""; } return '<button type="button" value="' + label + '" class="' + styleClass + '" onclick="licenseAction(' + id + ', ' + licenseType + ', ' + operation + ', event);"><span>' + label + '</span></button>'; } function albumNavigateAction(parentId) { window.location='/webstore/album/' + parentId + '/?lang=en&countrycode=US'; } function licenseAction(id, licenseType, operation, event) { if (isDefined(id) && isDefined(licenseType)) { var selection = null; if (event && event.currentTarget) { selection = jQuery(event.currentTarget); } else if (event && event.srcElement) { selection = jQuery(event.srcElement); } var route = null; if (selection) route = selection.data("route"); var isLoggedIn = false; var rtl = function(operation){ addToCookie("lt", licenseType, "wsPreLogin", true); addToCookie("cid", id, "wsPreLogin", true); window.location='/webstore/myworld/controller/?contentId=' + id + '&operation=' + operation + '&lang=en&countrycode=US'; } if(!isLoggedIn){ if(isDefined(operation)){ $j.ajax('/webstore/myworld/resetSession/',{ method: 'post', complete: function(transport) {rtl(operation);}}); } return false; } var isInvalidState=false; var isRegistered=false; if(isDefined(platform) && (platform == "QNX") && isInvalidState){ pushModal.showNotRegistered(); return; } switch(licenseType) { case LICENSE_TYPE_DOWNLOAD: if(isRegistered){ pushModal.show(dataDictionary[id], licenseType, 'install'); }else{ emailInstallModal.show(dataDictionary[id], licenseType); } break; case LICENSE_TYPE_TRY: if(isRegistered){ pushModal.show(dataDictionary[id], licenseType, 'install'); }else{ emailInstallModal.show(dataDictionary[id], '1'); } break; case LICENSE_TYPE_PURCHASE: case LICENSE_TYPE_7_SUB: case LICENSE_TYPE_30_SUB: if(isRegistered){ pushModal.show(dataDictionary[id], licenseType, 'purchase'); }else{ emailInstallModal.show(dataDictionary[id], licenseType); } break; case LICENSE_TYPE_RENTAL: return false; break; } } return false; } var buttonstatus=""; function getUpdateInfo(data, userAuth) { var BUTTON_DOWNLOAD = 1; var BUTTON_UPGRADE = 2; var BUTTON_PURCHASE = 4; var BUTTON_PURCHASE_UPGRADE = 8; var BUTTON_TRY = 16; var BUTTON_REVIEW = 32; var BUTTON_SUBSCRIBE = 64; var appData = ""; if (userAuth){ buttonStatus = data.ownership; appData = buttonStatus; //getButtonData(data.id); } var updateInfo = 0; if(appData != null && appData.length > 0) { var dataArray = appData.split('&'); updateInfo = dataArray[0]; } return updateInfo; } function setButtonStatus(data){ buttonstatus=data; } function getButtonData(id){ if ('true' == 'false' || !userAuth){ return ""; } var ver2 = $j("#version"); return; $j.ajax('https://web.archive.org/web/20170302124208/https://appworld.blackberry.com/webstore/myworld/ownership/' + id + "/" + ver2.text() + "/" ,{ method: 'post', async: false, dataType: "text", complete: function(transport, status) { var val = transport.responseText; val = val.split(":"); if (val.length > 1){ setButtonStatus(val[1]); } } } ); return buttonstatus; } function getUpdateButton(data, styleClass) { var returnString = ""; var updateInfo = getUpdateInfo(data, true); if ((updateInfo&BUTTON_UPGRADE) == BUTTON_UPGRADE) { if (!buttonsOnly) { returnString += "<div class='awPriceSuperscript awPriceSuperscriptBlue'>Upgrade Available</div>"; } returnString += '<button type="button" class="' + styleClass + '" onclick="licenseAction(' + data.id + ', ' + LICENSE_TYPE_DOWNLOAD + ', ' + OPERATION_UPGRADE + ', event);"><span>Upgrade</span></button>'; } else if ((updateInfo&BUTTON_PURCHASE_UPGRADE) == BUTTON_PURCHASE_UPGRADE) { if (!buttonsOnly) { returnString += "<div class='awPriceSuperscript awPriceSuperscriptBlue'>Upgrade Available</div>"; } var label = "Purchase Upgrade {0}"; //Upgrade price is in the cookie. //label = label.replace("{0}", appData[1]); label = label.replace("{0}", data.licenses[0].priceString); returnString += '<button type="button" class="' + styleClass + '" onclick="licenseAction(' + data.id + ', ' + LICENSE_TYPE_PURCHASE + ', ' + OPERATION_PURCHASE_UPGRADE + ', event);"><span>' + label + '</span></button>'; } else { // Already Installed, no update required } return returnString; } function getCurrentModel() { var requestProfile = new RequestProfile(); requestProfile.loadFromFilteringCookie(); var model = requestProfile.model; if (model == null) model = ""; return model; } function getCurrentCountry() { var requestProfile = new RequestProfile(); requestProfile.loadFromFilteringCookie(); var countryid = requestProfile.countryid; if (countryid == null) countryid = ""; return countryid; } --></script> <script type="text/javascript"> function j_idt490Initialize() { var dataFormatter = eval(""); if (dataFormatter == null) dataFormatter = eval("recommendationsDataFormatter"); if (dataFormatter == null) return; var nameSpecialCharactersFormatter = function(value) { if (value == null) return ""; // Call the formatter in component.js return nameSpecialCharacterFormatter(value, null); }; var property = "name"; var newPath = "name"; dataFormatter.addDataFormatter(property, nameSpecialCharactersFormatter, newPath); }; registerOnloadCallback(j_idt490Initialize); </script> <script type="text/javascript"> function j_idt491Initialize() { var dataFormatter = eval(""); if (dataFormatter == null) dataFormatter = eval("recommendationsDataFormatter"); if (dataFormatter == null) return; var nameSpecialCharactersFormatter = function(value) { if (value == null) return ""; // Call the formatter in component.js return nameSpecialCharacterFormatter(value, null); }; var property = "vendorName"; var newPath = "vendorName"; dataFormatter.addDataFormatter(property, nameSpecialCharactersFormatter, newPath); }; registerOnloadCallback(j_idt491Initialize); </script> <script type="text/javascript"> function j_idt492Initialize() { var dataFormatter = eval(""); if (dataFormatter == null) dataFormatter = eval("recommendationsDataFormatter"); if (dataFormatter == null) return; var nameSpecialCharactersFormatter = function(value) { if (value == null) return ""; // Call the formatter in component.js return nameSpecialCharacterFormatter(value, null); }; var property = "shortDescription"; var newPath = "shortDescription"; dataFormatter.addDataFormatter(property, nameSpecialCharactersFormatter, newPath); }; registerOnloadCallback(j_idt492Initialize); </script> <script type="text/javascript"> var recommendationsCatalogueServiceInitialized = recommendationsCatalogueServiceInitialized || false; function recommendationsCatalogueServiceInitialize() { var appendData = "" == "true"; var loadImmediately = "false" != "false"; if (recommendationsCatalogueServiceInitialized) { if (loadImmediately) recommendationsCatalogueService.load(); return; } recommendationsCatalogueServiceInitialized = true; var catalogueService = recommendationsCatalogueService = new ComponentCatalogueService(); catalogueService.setID("recommendationsCatalogueService"); var catalogueServiceLoadCompleteHandler = function(json, metaData) { var data = eval("recommendationsData"); if (data == null) return; //Check metaData and store it only once... if (metaData) { var existingMetaData = data.getProperty("meta"); if (existingMetaData == null) { data.setProperty("meta", metaData, null, true); } } //See if we were told to append the data instead of replace it... var appendedData = null; if (appendData) appendedData = json; //Store/append the updated data object... data.setProperty("data", json, appendedData); }; var requestProfile = null; catalogueService.setProductType("all"); catalogueService.setListType("similar"); catalogueService.setCategoryType(""); catalogueService.setCategoryID(""); catalogueService.setVendorType(""); catalogueService.setVendorID(""); catalogueService.setContentType(""); catalogueService.setContentID("15725"); catalogueService.setReleaseVersion(""); catalogueService.setActor(""); catalogueService.setProducer(""); catalogueService.setDirector(""); catalogueService.setTvShowId(""); catalogueService.setTvSeasonId(""); catalogueService.setArtistId(""); catalogueService.setSearch(""); catalogueService.setRequestProfile(requestProfile); catalogueService.setLoadCompleteHandler(catalogueServiceLoadCompleteHandler); if (loadImmediately) catalogueService.load(); }; var recommendationsCatalogueServiceRegistered = recommendationsCatalogueServiceRegistered || false; var recommendationsCatalogueServiceRegister = recommendationsCatalogueServiceRegister || function() { if (recommendationsCatalogueServiceRegistered) return; recommendationsCatalogueServiceRegistered = true; registerOnloadCallback(recommendationsCatalogueServiceInitialize); } recommendationsCatalogueServiceRegister(); </script> <div id="recommendationsTemplateHTML" style="display: none;"> <div id="recommendationsTemplateHTML_listItem" class="awwsProductTileListItem"> <div class="awwsProductTileListItemContentLeft"> <div class="awwsProductTileListItemContentLeftContainer"> <a id="imageLink"><img id="image" class="awwsProductTileListItemImage"/></a><br/><br/> <div class="awwsProductTileListItemRating"><img id="rating"/></div> <div id="b4bbIcon" class="awwsProductTileListB4BBSmallIcon"><img src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/img/webstore/BfB.bbworld.indicator.png" onclick="javascript: b4bbDescriptionModal.show();" style="cursor:pointer;"/></div> </div> </div> <div class="awwsProductTileListItemContentRight"> <div id="awwsProductTileListItemContent" class="awwsProductTileListItemContent"> <a id="titleLink"><span id="title" class="awwsProductTileListItemTitle"></span></a> <div class="awwsProductTileListItemBy">By</div> <a id="vendor" class="awwsProductTileListItemVendor"></a> <div id="price" class="awwsVideoTileListItemPrice"></div> <div id="description" class="awwsProductTileListItemDescription"></div> <div id="actionButtons" class="awwsProductTileListItemActionButtons"></div> </div> </div> <img id="verticalRule" class="awwsProductTileListItemVerticalRule" src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/resources/components/productList/images/verticalRule.png"/> </div> </div> <script type="text/javascript"> recommendationsTemplateInitialized = false; function recommendationsTemplateInitialize() { if (recommendationsTemplateInitialized) return; recommendationsTemplateInitialized = true; recommendationsTemplate = new ComponentTemplate(); var template = eval("recommendationsTemplate"); if (template == null) return; var id = "recommendationsTemplate"; var htmlSelector = "#recommendationsTemplateHTML"; var html = jQuery("#recommendationsTemplateHTML").html(); var data = eval(""); var metaHack = ""; template.setID("recommendationsTemplate"); template.setHTMLSelector(htmlSelector); template.setHTML(html); if (metaHack == "true") { var templateApply = template.apply; template.apply = function() { var selection = jQuery(htmlSelector); var meta = data.getProperty("meta"); templateApply.apply(template, [selection, meta]); } } }; var recommendationsTemplateRegistered = recommendationsTemplateRegistered || false; var recommendationsTemplateRegister = recommendationsTemplateRegister || function() { if (recommendationsTemplateRegistered) return; recommendationsTemplateRegistered = true; registerOnloadCallback(recommendationsTemplateInitialize); } recommendationsTemplateRegister(); </script> <script type="text/javascript"> j_idt494Initialized = false; function j_idt494Initialize() { if (j_idt494Initialized) return; j_idt494Initialized = true; var template = eval(""); if (template == null) template = eval("recommendationsTemplate"); if (template == null) return; var selector = "#title"; var dataPath = "name"; var clear = "" == "true"; template.append(selector, dataPath, clear); }; var j_idt494Registered = j_idt494Registered || false; var j_idt494Register = j_idt494Register || function() { if (j_idt494Registered) return; j_idt494Registered = true; registerOnloadCallback(j_idt494Initialize); } j_idt494Register(); </script> <script type="text/javascript"> j_idt495Initialized = false; function j_idt495Initialize() { if (j_idt495Initialized) return; j_idt495Initialized = true; var template = eval(""); if (template == null) template = eval("recommendationsTemplate"); if (template == null) return; var selector = "#vendor"; var dataPath = "vendorName"; var clear = "" == "true"; template.append(selector, dataPath, clear); }; var j_idt495Registered = j_idt495Registered || false; var j_idt495Register = j_idt495Register || function() { if (j_idt495Registered) return; j_idt495Registered = true; registerOnloadCallback(j_idt495Initialize); } j_idt495Register(); </script> <script type="text/javascript"> j_idt496Initialized = false; function j_idt496Initialize() { if (j_idt496Initialized) return; j_idt496Initialized = true; var template = eval(""); if (template == null) template = eval("recommendationsTemplate"); if (template == null) return; var selector = "#description"; var dataPath = "shortDescription"; var clear = "" == "true"; template.append(selector, dataPath, clear); }; var j_idt496Registered = j_idt496Registered || false; var j_idt496Register = j_idt496Register || function() { if (j_idt496Registered) return; j_idt496Registered = true; registerOnloadCallback(j_idt496Initialize); } j_idt496Register(); </script> <script type="text/javascript"> j_idt497Initialized = false; function j_idt497Initialize() { if (j_idt497Initialized) return; j_idt497Initialized = true; var template = eval(""); if (template == null) template = eval("recommendationsTemplate"); if (template == null) return; var selector = "#image"; var attr = "src"; var dataPath = "iconURL"; var options = ""; template.attr(selector, attr, dataPath, options); }; var j_idt497Registered = j_idt497Registered || false; var j_idt497Register = j_idt497Register || function() { if (j_idt497Registered) return; j_idt497Registered = true; registerOnloadCallback(j_idt497Initialize); } j_idt497Register(); </script> <script type="text/javascript"> j_idt498Initialized = false; function j_idt498Initialize() { if (j_idt498Initialized) return; j_idt498Initialized = true; var template = eval(""); if (template == null) template = eval("recommendationsTemplate"); if (template == null) return; var selector = "#imageLink"; var attr = "href"; var dataPath = "contentURL"; var options = ""; template.attr(selector, attr, dataPath, options); }; var j_idt498Registered = j_idt498Registered || false; var j_idt498Register = j_idt498Register || function() { if (j_idt498Registered) return; j_idt498Registered = true; registerOnloadCallback(j_idt498Initialize); } j_idt498Register(); </script> <script type="text/javascript"> j_idt499Initialized = false; function j_idt499Initialize() { if (j_idt499Initialized) return; j_idt499Initialized = true; var template = eval(""); if (template == null) template = eval("recommendationsTemplate"); if (template == null) return; var selector = "#titleLink"; var attr = "href"; var dataPath = "contentURL"; var options = ""; template.attr(selector, attr, dataPath, options); }; var j_idt499Registered = j_idt499Registered || false; var j_idt499Register = j_idt499Register || function() { if (j_idt499Registered) return; j_idt499Registered = true; registerOnloadCallback(j_idt499Initialize); } j_idt499Register(); </script> <script type="text/javascript"> j_idt500Initialized = false; function j_idt500Initialize() { if (j_idt500Initialized) return; j_idt500Initialized = true; var template = eval(""); if (template == null) template = eval("recommendationsTemplate"); if (template == null) return; var selector = "#vendor"; var attr = "href"; var dataPath = "vendorLink"; var options = ""; template.attr(selector, attr, dataPath, options); }; var j_idt500Registered = j_idt500Registered || false; var j_idt500Register = j_idt500Register || function() { if (j_idt500Registered) return; j_idt500Registered = true; registerOnloadCallback(j_idt500Initialize); } j_idt500Register(); </script> <script type="text/javascript"> j_idt501Initialized = false; function j_idt501Initialize() { if (j_idt501Initialized) return; j_idt501Initialized = true; var template = eval(""); if (template == null) template = eval("recommendationsTemplate"); if (template == null) return; var selector = "#b4bbIcon"; var visible = "bbCertified"; var equivalence = null; var options = ""; var equal = ""; if (equal == "") { equal = null; } else { equal = equal == "true"; } template.visible(selector, visible, equivalence, options, equal); }; registerOnloadCallback(j_idt501Initialize); </script> <!-- <coreTemplate:center selector=".awwsProductTileListItemContentLeftContainer" /> --> <!-- <coreTemplate:center selector="#awwsProductTileListItemContent" /> --> <script type="text/javascript"> j_idt503Initialized = false; function j_idt503Initialize() { if (j_idt503Initialized) return; j_idt503Initialized = true; var template = eval(""); if (template == null) template = eval("recommendationsTemplate"); if (template == null) return; var selector = "#actionButtons"; var dataPath = "appActionButtons"; var clear = "" == "true"; template.append(selector, dataPath, clear); }; var j_idt503Registered = j_idt503Registered || false; var j_idt503Register = j_idt503Register || function() { if (j_idt503Registered) return; j_idt503Registered = true; registerOnloadCallback(j_idt503Initialize); } j_idt503Register(); </script> <script type="text/javascript"> function j_idt504Initialize() { var template = eval(""); if (template == null) template = eval("recommendationsTemplate"); if (template == null) return; var selector = "#verticalRule"; var divisor = 3; var style1 = "hidden"; var style2 = "visible"; template.moduloAlternatingCSS(selector, divisor, style1, style2); }; registerOnloadCallback(j_idt504Initialize); </script> <!-- <core:list id="reviewList" data="formattedReviewData" template="reviewTemplate" htmlSelector="#reviewsBox" /> --> <!-- --> <!-- tabList --> <!-- --> <!-- tab html template --> <div id="tabListTabTemplate" style="display: none;"> <div id="tabListTab" class="awwsTabListItemDeselected"></div> </div> <script type="text/javascript"> tabListDataInitialized = false; function tabListDataInitialize() { if (tabListDataInitialized) return; tabListDataInitialized = true; tabListData = new ComponentData(); var data = eval("tabListData"); if (data == null) return; data.setID("tabListData"); var source = eval(""); var path = "data"; if (source) data.setProperty(path, source); }; var tabListDataRegistered = tabListDataRegistered || false; var tabListDataRegister = tabListDataRegister || function() { if (tabListDataRegistered) return; tabListDataRegistered = true; registerOnloadCallback(tabListDataInitialize); } tabListDataRegister(); </script> <script type="text/javascript"> tabListRadioGroupInitialized = false; function tabListRadioGroupInitialize() { if (tabListRadioGroupInitialized) return; tabListRadioGroupInitialized = true; tabListRadioGroup = new ComponentRadioTroop(); var radioGroup = eval("tabListRadioGroup"); if (radioGroup == null) return; radioGroup.setID("tabListRadioGroup"); radioGroup.setType("toggle"); radioGroup.setSelectedClass("awwsTabListItemSelected"); radioGroup.setDeselectedClass("awwsTabListItemDeselected"); radioGroup.setSelectedRadioButtonID("reviewsTab"); }; registerOnloadCallback(tabListRadioGroupInitialize); </script> <script type="text/javascript"> tabListTemplateInitialized = false; function tabListTemplateInitialize() { if (tabListTemplateInitialized) return; tabListTemplateInitialized = true; tabListTemplate = new ComponentTemplate(); var template = eval("tabListTemplate"); if (template == null) return; var id = "tabListTemplate"; var htmlSelector = "#tabListTabTemplate"; var html = jQuery("#tabListTabTemplate").html(); var data = eval(""); var metaHack = ""; template.setID("tabListTemplate"); template.setHTMLSelector(htmlSelector); template.setHTML(html); if (metaHack == "true") { var templateApply = template.apply; template.apply = function() { var selection = jQuery(htmlSelector); var meta = data.getProperty("meta"); templateApply.apply(template, [selection, meta]); } } }; var tabListTemplateRegistered = tabListTemplateRegistered || false; var tabListTemplateRegister = tabListTemplateRegister || function() { if (tabListTemplateRegistered) return; tabListTemplateRegistered = true; registerOnloadCallback(tabListTemplateInitialize); } tabListTemplateRegister(); </script> <script type="text/javascript"> j_idt510Initialized = false; function j_idt510Initialize() { if (j_idt510Initialized) return; j_idt510Initialized = true; var template = eval(""); if (template == null) template = eval("tabListTemplate"); if (template == null) return; var selector = ".awwsTabListItemDeselected"; var dataPath = "label"; var clear = "" == "true"; template.append(selector, dataPath, clear); }; var j_idt510Registered = j_idt510Registered || false; var j_idt510Register = j_idt510Register || function() { if (j_idt510Registered) return; j_idt510Registered = true; registerOnloadCallback(j_idt510Initialize); } j_idt510Register(); </script> <script type="text/javascript"> function j_idt511Initialize() { var template = eval(""); if (template == null) template = eval("tabListTemplate"); if (template == null) return; var radioGroup = eval("tabListRadioGroup"); var dataPathID = "id"; var selector1 = ""; var selector2 = ""; if (selector1 == "") selector1 = null; if (selector2 == "") selector2 = null; template.radio(radioGroup, dataPathID, selector1, selector2); }; registerOnloadCallback(j_idt511Initialize); </script> <!-- <coreTemplate:click target="tabListTemplate" method="tabClickHandler" parameters="id" /> --> <script type="text/javascript"> tabListListInitialized = false; function tabListListInitialize() { if (tabListListInitialized) return; tabListListInitialized = true; tabListList = new ComponentList(); var list = eval("tabListList"); if (list == null) return; list.setID("tabListList"); var listSelector = "#tabListListHTML"; var data = eval("tabListData"); var template = eval("tabListTemplate"); list.setListSelector(listSelector); list.setData(data); list.setTemplate(template); list.update(); }; registerOnloadCallback(tabListListInitialize); </script> <!-- tabGroup --> <script type="text/javascript"> tabListTabGroupInitialized = false; function tabListTabGroupInitialize() { if (tabListTabGroupInitialized) return; tabListTabGroupInitialized = true; tabListTabGroup = new ComponentTabGroup(); var tabGroup = eval("tabListTabGroup"); if (tabGroup == null) return; tabGroup.setID("tabListTabGroup"); }; registerOnloadCallback(tabListTabGroupInitialize); </script> <!-- list --> <div id="tabListListHTML" class="awwsTabList"></div> <!-- arrow --> <div id="tabListArrow" class="awwsTabListArrow" style="display: none;"></div> <!-- tab arrow slider --> <div id="tabListDivider" class="awwsTabListDivider" style="display: none;"></div> <script type="text/javascript"><!-- function tabListConstructor() { tabList = new ComponentTabGroup(); this.data = tabListData; this.data.setProperty("data", new Array()); this.list = tabListList; this.tabGroup = tabListTabGroup; this.arrow = jQuery("#tabListArrow"); this.radioGroup = tabListRadioGroup; this.addTab = function(id, label, selector) { var hasTab = this.tabGroup.hasTab(id); if (hasTab) return; var object = new Object(); object.id = id; object.label = label; var data = this.data.getProperty("data"); data.push(object); this.data.setProperty("data", data); this.tabGroup.addTab(id, selector); var currentTabID = this.tabGroup.getCurrentTabID(); this.select(currentTabID); if (data.length > 0) jQuery("#tabListDivider").show(); }; this.removeTab = function(id) { var data = this.data.getProperty("data"); for (var i = 0; i < data.length; ++i) { if (data[i].id == id) { data.splice(i, 1); break; } } this.data.setProperty("data", data); this.tabGroup.removeTab(id); if (data.length == 0) jQuery("#tabListDivider").hide(); }; this.tabClickHandler = function() { var id = this.radioGroup.getSelectedRadioButtonID(); this.tabGroup.selectTab(id); }; this.radioGroup.selected.add(this, this.tabClickHandler); this.highlight = function(x) { var tween = new Object(); tween.left = x; this.arrow.stop(); this.arrow.animate(tween, 250); }; this.select = function(id) { var selection = this.list.getSelectionMatchingID(id); var position = selection.position(); var width = selection.outerWidth(true); var arrowWidth = this.arrow.outerWidth(true); var x = position.left + width * 0.5 - arrowWidth * 0.5; this.highlight(x); }; this.selectedHandler = function() { var currentTabID = this.tabGroup.getCurrentTabID(); this.select(currentTabID); }; this.tabGroup.selected.add(this, this.selectedHandler); } tabListInitialized = false; function tabListInitialize() { if (tabListInitialized) return; tabListInitialized = true; tabList = new tabListConstructor(); }; registerOnloadCallback(tabListInitialize); --></script> <script type="text/javascript"> function reviewsTabConstructor() { var parent = eval(""); if (parent == null) parent = eval("tabList"); if (parent == null) return; var id = "reviewsTab"; var label = "Reviews"; var selector = "#reviewTileListHTML"; var automaticallyAddToParent = "false" == "true"; this.parent = parent; this.selected = new ComponentSignal(); this.addedToParent = false; this.selectedHandler = function() { initSessionCheck(); var currentTabID = this.parent.tabGroup.getCurrentTabID(); if (currentTabID == "reviewsTab") this.selected.dispatch(); }; this.addToParent = function() { if (this.addedToParent) return; this.addedToParent = true; parent.addTab(id, label, selector); parent.tabGroup.selected.add(this, this.selectedHandler); }; this.removeFromParent = function() { if (!this.addedToParent) return; this.addedToParent = false; parent.removeTab(id); parent.tabGroup.selected.remove(this, this.selectedHandler); }; if (automaticallyAddToParent) this.addToParent(); } reviewsTabInitialized = false; function reviewsTabInitialize() { if (reviewsTabInitialized) return; reviewsTabInitialized = true; reviewsTab = new reviewsTabConstructor(); }; registerOnloadCallback(reviewsTabInitialize); </script> <script type="text/javascript"> function recommendationsTabConstructor() { var parent = eval(""); if (parent == null) parent = eval("tabList"); if (parent == null) return; var id = "recommendationsTab"; var label = "Others also Downloaded"; var selector = "#recomendationsTileListHTML"; var automaticallyAddToParent = "false" == "true"; this.parent = parent; this.selected = new ComponentSignal(); this.addedToParent = false; this.selectedHandler = function() { initSessionCheck(); var currentTabID = this.parent.tabGroup.getCurrentTabID(); if (currentTabID == "recommendationsTab") this.selected.dispatch(); }; this.addToParent = function() { if (this.addedToParent) return; this.addedToParent = true; parent.addTab(id, label, selector); parent.tabGroup.selected.add(this, this.selectedHandler); }; this.removeFromParent = function() { if (!this.addedToParent) return; this.addedToParent = false; parent.removeTab(id); parent.tabGroup.selected.remove(this, this.selectedHandler); }; if (automaticallyAddToParent) this.addToParent(); } recommendationsTabInitialized = false; function recommendationsTabInitialize() { if (recommendationsTabInitialized) return; recommendationsTabInitialized = true; recommendationsTab = new recommendationsTabConstructor(); }; registerOnloadCallback(recommendationsTabInitialize); </script> <div id="reviewTileListHTML" class="awwsProductListContainer" style="display: none;"> <a name="reviewTileListAnchor"></a> <div id="reviewTileList_boxHTML" class="webstore-blocks-box" style="visibility: hidden;"> <div class="tileListRowBackground"> <div class="awwsProductListHeader"> <div id="reviewTileList_boxTitle" class="awwsProductListTitle"> Reviews </div> <span id="reviewTileList_boxCount" class="awwsProductListTitle"></span> <div id="reviewTileList_boxsortDiv" class="awwsProductListSort"> <!-- select one html template --> <div id="reviewTileListsortbySelectOneTemplate"> <span id="reviewTileListsortbyselectOneTitle"></span> <select id="reviewTileListsortbyselectitem_id" onchange="reviewTileListsortbychanged()"> </select> </div> <script type="text/javascript"><!-- function reviewTileListsortbychanged(){ var value = jQuery("#reviewTileListsortbyselectitem_id").val(); if (value.indexOf(";") != 0){ var valParts = value.split(";"); if (valParts[0] != null && valParts[0].length > 0 && valParts[1] != null && valParts[1].length > 0){ (valParts[0],valParts[1]); } else{ (value); } } } function reviewTileListsortbyConstructor() { jQuery("#reviewTileListsortbyselectitem_id").children().remove(); if(true) jQuery("#reviewTileListsortbyselectOneTitle")[0].innerHTML = "Sort By"; this.valueDisplayPairList = ""; this.render = function() { if (this.valueDisplayPairList == null || this.valueDisplayPairList == "") return; if("" != "") { var initialOption = new Option( "", "default", true, true); initialOption.innerText = ""; jQuery("#reviewTileListsortbyselectitem_id").append(initialOption); } var valueDisplayPairs = this.valueDisplayPairList.split(","); for (var idx = 0; idx < valueDisplayPairs.length; idx++ ){ var keyVal = valueDisplayPairs[idx].split(":"); var option = new Option( keyVal[0], keyVal[1], true, true); option.innerText = keyVal[0]; // required to make IE7/8 render properly jQuery("#reviewTileListsortbyselectitem_id").append(option); } } this.setData = function(data) { this.valueDisplayPairList = data; this.render(); jQuery("#reviewTileListsortbyselectitem_id").prop("selectedIndex", 0); } this.render(); jQuery("#reviewTileListsortbyselectitem_id").prop("selectedIndex", 0); } reviewTileListsortbyInitialized = false; function reviewTileListsortbyInitialize() { if (reviewTileListsortbyInitialized) return; reviewTileListsortbyInitialized = true; reviewTileListsortby = new reviewTileListsortbyConstructor(); } registerOnloadCallback(reviewTileListsortbyInitialize); --></script> </div> <div style="float: left; margin-top: 8px; margin-left: 10px;"> <a id="reviewTileListRSSRSSLink" target="_blank" class="awwsRSS"><img src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/resources/components/core/images/rss-icon.png"/></a> <script type="text/javascript"> function reviewTileListRSSConstructor() { var catalogueService = this.catalogueService = new ComponentCatalogueService(); catalogueService.setID("reviewTileListRSS"); catalogueService.setProductType(""); catalogueService.setListType(""); catalogueService.setCategoryType(""); catalogueService.setCategoryID(""); catalogueService.setVendorType(""); catalogueService.setVendorID(""); catalogueService.setContentType("reviews"); catalogueService.setContentID("15725"); catalogueService.setReleaseVersion(""); catalogueService.setActor(""); catalogueService.setProducer(""); catalogueService.setDirector(""); catalogueService.setTvShowId(""); catalogueService.setTvSeasonId(""); catalogueService.setArtistId(""); catalogueService.setSearch(""); this.refreshRSSURL = function() { var rssURL = catalogueService.getRSSURLWithParams("newest"); var rssLinkSelection = jQuery("#reviewTileListRSSRSSLink"); rssLinkSelection.attr("href", rssURL); } var loadImmediately = "true"; if (loadImmediately) this.refreshRSSURL(); } reviewTileListRSSInitialized = false; function reviewTileListRSSInitialize() { if (reviewTileListRSSInitialized) return; reviewTileListRSSInitialized = true; reviewTileListRSS = new reviewTileListRSSConstructor(); }; registerOnloadCallback(reviewTileListRSSInitialize); </script> </div> </div> <div class="awwsProductListBody"> <div class="awwsProductTileListMask"> <div id="reviewTileList_box_tileList" class="awwsProductTileList"> </div> </div> </div> <div class="clear"></div> <div class="awwsProductTileListFooter"> <button id="reviewsLoadMoreButtonHTML" type="button" value="Load More" class="awwsBlueButton" style="display: inline; width: auto;"><span id="reviewsLoadMoreButtonLabel">Load More</span></button> <script type="text/javascript"><!-- function reviewsLoadMoreButtonConstructor() { var id = "reviewsLoadMoreButton"; var buttonSelector = "#" + id + "HTML"; var labelSelector = "#" + id + "Label"; //////////////////////////////////////// // // Properties // //////////////////////////////////////// this.buttonSelection = jQuery(buttonSelector); this.labelSelection = jQuery(labelSelector); this.click = new ComponentSignal(); //////////////////////////////////////// // Label //////////////////////////////////////// this._label = ""; this.getLabel = function(value) { return this._label; } this.setLabel = function(value) { this._label = value; this.labelSelection.empty().append(this._label); } //////////////////////////////////////// // // Methods // //////////////////////////////////////// this.show = function() { this.buttonSelection.show(); } this.hide = function() { this.buttonSelection.hide(); } this.buttonSelectionClickHandler = function() { this.click.dispatch(); } //////////////////////////////////////// // // Initialize // //////////////////////////////////////// this.buttonSelection.click(jQuery.proxy(this.buttonSelectionClickHandler, this)); } reviewsLoadMoreButtonInitialized = false; function reviewsLoadMoreButtonInitialize() { if (reviewsLoadMoreButtonInitialized) return; reviewsLoadMoreButtonInitialized = true; reviewsLoadMoreButton = new reviewsLoadMoreButtonConstructor(); }; registerOnloadCallback(reviewsLoadMoreButtonInitialize); --></script> </div> <div class="clear"></div> </div> </div> <script type="text/javascript"><!-- function reviewTileList_boxConstructor() { this.drawFlag = false; this.completeSignal = new ComponentSignal(); this.completeSignal.setID("reviewTileList_box"); this.timeout = null; this.adjustTimeout = null; this._fireCompleteSignal = function() { window.clearInterval(this.timeout); this.completeSignal.dispatch(); } this._fireAdjustCompleteSignal = function() { window.clearInterval(this.adjustTimeout); this.completeSignal.dispatch(); } this.render = function() { //this._fireCompleteSignal(); this.timeout = window.setTimeout(jQuery.proxy(this._fireCompleteSignal, this), 10); this.adjustTimeout = window.setTimeout(jQuery.proxy(this._fireCompleteSignal, this), 250); } //Set up the signal passed through the signal attribute... if ("formattedReviewListData.update" != "") { var signal = eval("formattedReviewListData.update"); signal.add(this, this.render); } this.setSignal = function(signal) { if (signal == null) return; signal.add(this, this.render); } this.draw = function() { if (this.drawFlag) return; this.drawFlag = true; var selection = jQuery("#reviewTileList_boxHTML"); var userAgent = navigator.userAgent; var indexOf = userAgent.indexOf("MSIE"); if (indexOf > -1) { selection.removeClass("webstore-blocks-box"); selection.addClass("webstore-blocks-box-ie"); selection.css("visibility", ""); return; } var rectangle = new Object(); rectangle.top = 100; rectangle.right = 8; rectangle.bottom = 83; rectangle.left = 8; selection.scale9Grid(rectangle, this.completeSignal); selection.css("visibility", ""); } if ("false" == "true") this.draw(); }; reviewTileList_boxInitialized = false; function reviewTileList_boxInitialize() { if (reviewTileList_boxInitialized) return; reviewTileList_boxInitialized = true; reviewTileList_box = new reviewTileList_boxConstructor(); }; registerOnloadCallback(reviewTileList_boxInitialize); --></script> </div> <script type="text/javascript"><!-- function reviewTileListConstructor() { reviewTileList = new ComponentList(); var listSelector = "#reviewTileList_box_tileList"; var data = eval("formattedReviewListData"); var path = "data"; var template = eval("reviewTemplate"); this.list = eval("reviewTileList"); this.visible = false; this.populateCompleteHandler = function() { var selection = jQuery("#reviewTileListHTML"); var dataObject = data.getProperty("data"); if (dataObject == null) return; var dataObjectLength = dataObject.length; if (dataObjectLength == 0) { if (!this.visible) return; this.visible = false; var cssVisibility = selection.css("visibility"); if (cssVisibility == "hidden") { selection.hide(); selection.css("visibility", ""); } selection.fadeOut(1000); } else { if (this.visible) return; this.visible = true; selection.hide(); selection.css("visibility", ""); selection.fadeIn(1000); } } this.list.setListSelector(listSelector); this.list.setData(data); this.list.setPath(path); this.list.setTemplate(template); this.list.populateComplete.add(this, this.populateCompleteHandler); this.list.update(); reviewTileList_box.setSignal(this.list.populateComplete); reviewTileList_box.draw(); var sortByCB = eval(""); if (sortByCB == null){ jQuery("#reviewTileList_boxsortDiv").css("display", "none"); } }; reviewTileListInitialized = false; function reviewTileListInitialize() { if (reviewTileListInitialized) return; reviewTileListInitialized = true; reviewTileListTileList = new reviewTileListConstructor(); }; registerOnloadCallback(reviewTileListInitialize); --></script> <div id="recomendationsTileListHTML" class="awwsProductListContainer" style="display: none;"> <a name="recomendationsTileListAnchor"></a> <div id="recomendationsTileList_boxHTML" class="webstore-blocks-box" style="visibility: hidden;"> <div class="tileListRowBackground"> <div class="awwsProductListHeader"> <div class="awwsProductListTitle"> Others also Downloaded </div> <span id="recomendationsTileList_boxCount" class="awwsProductListTitle"></span> <div id="recomendationsTileList_boxsortDiv" class="awwsProductListSort"> <!-- select one html template --> <div id="recomendationsTileListsortbySelectOneTemplate"> <span id="recomendationsTileListsortbyselectOneTitle"></span> <select id="recomendationsTileListsortbyselectitem_id" onchange="recomendationsTileListsortbychanged()"> </select> </div> <script type="text/javascript"><!-- function recomendationsTileListsortbychanged(){ var value = jQuery("#recomendationsTileListsortbyselectitem_id").val(); if (value.indexOf(";") != 0){ var valParts = value.split(";"); if (valParts[0] != null && valParts[0].length > 0 && valParts[1] != null && valParts[1].length > 0){ (valParts[0],valParts[1]); } else{ (value); } } } function recomendationsTileListsortbyConstructor() { jQuery("#recomendationsTileListsortbyselectitem_id").children().remove(); if(true) jQuery("#recomendationsTileListsortbyselectOneTitle")[0].innerHTML = "Sort By"; this.valueDisplayPairList = ""; this.render = function() { if (this.valueDisplayPairList == null || this.valueDisplayPairList == "") return; if("" != "") { var initialOption = new Option( "", "default", true, true); initialOption.innerText = ""; jQuery("#recomendationsTileListsortbyselectitem_id").append(initialOption); } var valueDisplayPairs = this.valueDisplayPairList.split(","); for (var idx = 0; idx < valueDisplayPairs.length; idx++ ){ var keyVal = valueDisplayPairs[idx].split(":"); var option = new Option( keyVal[0], keyVal[1], true, true); option.innerText = keyVal[0]; // required to make IE7/8 render properly jQuery("#recomendationsTileListsortbyselectitem_id").append(option); } } this.setData = function(data) { this.valueDisplayPairList = data; this.render(); jQuery("#recomendationsTileListsortbyselectitem_id").prop("selectedIndex", 0); } this.render(); jQuery("#recomendationsTileListsortbyselectitem_id").prop("selectedIndex", 0); } recomendationsTileListsortbyInitialized = false; function recomendationsTileListsortbyInitialize() { if (recomendationsTileListsortbyInitialized) return; recomendationsTileListsortbyInitialized = true; recomendationsTileListsortby = new recomendationsTileListsortbyConstructor(); } registerOnloadCallback(recomendationsTileListsortbyInitialize); --></script> </div> </div> <div class="awwsProductListBody"> <div class="awwsProductTileListMask"> <div id="recomendationsTileList_box_tileList" class="awwsProductTileList"> </div> </div> </div> <div class="awwsProductTileListFooter clear"> </div> </div> </div> <script type="text/javascript"><!-- function recomendationsTileList_boxConstructor() { this.drawFlag = false; this.completeSignal = new ComponentSignal(); this.completeSignal.setID("recomendationsTileList_box"); this.timeout = null; this.adjustTimeout = null; this._fireCompleteSignal = function() { window.clearInterval(this.timeout); this.completeSignal.dispatch(); } this._fireAdjustCompleteSignal = function() { window.clearInterval(this.adjustTimeout); this.completeSignal.dispatch(); } this.render = function() { //this._fireCompleteSignal(); this.timeout = window.setTimeout(jQuery.proxy(this._fireCompleteSignal, this), 10); this.adjustTimeout = window.setTimeout(jQuery.proxy(this._fireCompleteSignal, this), 250); } //Set up the signal passed through the signal attribute... if ("recommendationsTab.selected" != "") { var signal = eval("recommendationsTab.selected"); signal.add(this, this.render); } this.setSignal = function(signal) { if (signal == null) return; signal.add(this, this.render); } this.draw = function() { if (this.drawFlag) return; this.drawFlag = true; var selection = jQuery("#recomendationsTileList_boxHTML"); var userAgent = navigator.userAgent; var indexOf = userAgent.indexOf("MSIE"); if (indexOf > -1) { selection.removeClass("webstore-blocks-box"); selection.addClass("webstore-blocks-box-ie"); selection.css("visibility", ""); return; } var rectangle = new Object(); rectangle.top = 100; rectangle.right = 8; rectangle.bottom = 83; rectangle.left = 8; selection.scale9Grid(rectangle, this.completeSignal); selection.css("visibility", ""); } if ("false" == "true") this.draw(); }; recomendationsTileList_boxInitialized = false; function recomendationsTileList_boxInitialize() { if (recomendationsTileList_boxInitialized) return; recomendationsTileList_boxInitialized = true; recomendationsTileList_box = new recomendationsTileList_boxConstructor(); }; registerOnloadCallback(recomendationsTileList_boxInitialize); --></script> </div> <script type="text/javascript"> function recomendationsTileListConstructor() { recomendationsTileList = new ComponentList(); var listSelector = "#recomendationsTileList_box_tileList"; var data = eval("formattedRecommendationsData"); var path = "data"; var template = eval("recommendationsTemplate"); this.list = eval("recomendationsTileList"); this.visible = false; this.populateCompleteHandler = function() { var selection = jQuery("#recomendationsTileListHTML"); var dataObject = data.getProperty("data"); if (dataObject == null) return; var dataObjectLength = dataObject.length; if (dataObjectLength == 0) { if (!this.visible) return; this.visible = false; var cssVisibility = selection.css("visibility"); if (cssVisibility == "hidden") { selection.hide(); selection.css("visibility", ""); } selection.fadeOut(1000); } else { if (this.visible) return; this.visible = true; selection.hide(); selection.css("visibility", ""); selection.fadeIn(1000); } } this.list.setListSelector(listSelector); this.list.setData(data); this.list.setPath(path); this.list.setTemplate(template); this.list.populateComplete.add(this, this.populateCompleteHandler); this.list.update(); recomendationsTileList_box.setSignal(this.list.populateComplete); recomendationsTileList_box.draw(); var sortByCB = eval(""); if (sortByCB == null){ jQuery("#recomendationsTileList_boxsortDiv").css("display", "none"); } }; recomendationsTileListInitialized = false; function recomendationsTileListInitialize() { if (recomendationsTileListInitialized) return; recomendationsTileListInitialized = true; recomendationsTileListTileList = new recomendationsTileListConstructor(); }; registerOnloadCallback(recomendationsTileListInitialize); </script> <!-- --> <!-- Actions --> <!-- --> <!-- contentData.update --> <script type="text/javascript"> distributeReleaseVersionAction1Initialized = false; function distributeReleaseVersionAction1Initialize() { if (distributeReleaseVersionAction1Initialized) return; distributeReleaseVersionAction1Initialized = true; distributeReleaseVersionAction1 = new ComponentAction(); var action = eval("distributeReleaseVersionAction1"); if (action == null) return; var signal = eval("contentData.update"); var signalHandler = function() { var fromData = eval("contentData"); var fromPath = "data"; var fromPropertyPath = "cdDTO.releaseVersion"; var setMethodString = "reviewCatalogueService.setReleaseVersion"; var setMethodExtraction = extract(setMethodString); var setMethodObject = setMethodExtraction.object; var setMethod = setMethodExtraction.property; var data = fromData.getProperty(fromPath); var property = eval("data." + fromPropertyPath); if (setMethod == null) return; if (setMethodObject == null) return; if (property == null) return; setMethod.call(setMethodObject, property); }; action.setSignal(signal); action.setSignalHandler(signalHandler); }; registerOnloadCallback(distributeReleaseVersionAction1Initialize); </script> <script type="text/javascript"> distributeReleaseVersionAction2Initialized = false; function distributeReleaseVersionAction2Initialize() { if (distributeReleaseVersionAction2Initialized) return; distributeReleaseVersionAction2Initialized = true; distributeReleaseVersionAction2 = new ComponentAction(); var action = eval("distributeReleaseVersionAction2"); if (action == null) return; var signal = eval("contentData.update"); var signalHandler = function() { var fromData = eval("contentData"); var fromPath = "data"; var fromPropertyPath = "cdDTO.releaseVersion"; var setMethodString = "reviewTileListRSS.catalogueService.setReleaseVersion"; var setMethodExtraction = extract(setMethodString); var setMethodObject = setMethodExtraction.object; var setMethod = setMethodExtraction.property; var data = fromData.getProperty(fromPath); var property = eval("data." + fromPropertyPath); if (setMethod == null) return; if (setMethodObject == null) return; if (property == null) return; setMethod.call(setMethodObject, property); }; action.setSignal(signal); action.setSignalHandler(signalHandler); }; registerOnloadCallback(distributeReleaseVersionAction2Initialize); </script> <script type="text/javascript"> distributeReleaseVersionAction3Initialized = false; function distributeReleaseVersionAction3Initialize() { if (distributeReleaseVersionAction3Initialized) return; distributeReleaseVersionAction3Initialized = true; distributeReleaseVersionAction3 = new ComponentAction(); var action = eval("distributeReleaseVersionAction3"); if (action == null) return; var signal = eval("contentData.update"); var signalHandler = function() { var fromData = eval("contentData"); var fromPath = "data"; var fromPropertyPath = "cdDTO.releaseVersion"; var setMethodString = "setActionButtonReleaseVersion"; var setMethodExtraction = extract(setMethodString); var setMethodObject = setMethodExtraction.object; var setMethod = setMethodExtraction.property; var data = fromData.getProperty(fromPath); var property = eval("data." + fromPropertyPath); if (setMethod == null) return; if (setMethodObject == null) return; if (property == null) return; setMethod.call(setMethodObject, property); }; action.setSignal(signal); action.setSignalHandler(signalHandler); }; registerOnloadCallback(distributeReleaseVersionAction3Initialize); </script> <script type="text/javascript"> resetReviewsPageActionInitialized = false; function resetReviewsPageActionInitialize() { if (resetReviewsPageActionInitialized) return; resetReviewsPageActionInitialized = true; resetReviewsPageAction = new ComponentAction(); var action = eval("resetReviewsPageAction"); if (action == null) return; var signal = eval("contentData.update"); var value = "1"; var signalHandler = function() { var propertyPath = "reviewsRequestProfile.page"; var propertyPathExtraction = extract(propertyPath); var propertyPathObject = propertyPathExtraction.object; var propertyPathProperty = propertyPathExtraction.property; propertyPathObject[propertyPathProperty] = value; }; action.setSignal(signal); action.setSignalHandler(signalHandler); var immediate = ""; if (immediate == "true"){ signalHandler(); } }; registerOnloadCallback(resetReviewsPageActionInitialize); </script> <script type="text/javascript"> executeLoadReviewsAction1Initialized = false; function executeLoadReviewsAction1Initialize() { if (executeLoadReviewsAction1Initialized) return; executeLoadReviewsAction1Initialized = true; executeLoadReviewsAction1 = new ComponentAction(); var action = eval("executeLoadReviewsAction1"); if (action == null) return; var signal = eval("contentData.update"); var parameters = ""; var signalHandler = function() { var methodPath = "reviewCatalogueService.load"; var methodPathExtraction = extract(methodPath); var methodPathObject = methodPathExtraction.object; var methodPathMethod = methodPathExtraction.property; if (methodPathMethod == null) return; if (methodPathObject == null) return; if (parameters == null) return; methodPathMethod.call(methodPathObject, parameters); }; action.setSignal(signal); action.setSignalHandler(signalHandler); var immediate = ""; if (immediate == "true"){ signalHandler(); } }; registerOnloadCallback(executeLoadReviewsAction1Initialize); </script> <script type="text/javascript"> executeLoadReviewsAction2Initialized = false; function executeLoadReviewsAction2Initialize() { if (executeLoadReviewsAction2Initialized) return; executeLoadReviewsAction2Initialized = true; executeLoadReviewsAction2 = new ComponentAction(); var action = eval("executeLoadReviewsAction2"); if (action == null) return; var signal = eval("contentData.update"); var parameters = ""; var signalHandler = function() { var methodPath = "reviewTileListRSS.refreshRSSURL"; var methodPathExtraction = extract(methodPath); var methodPathObject = methodPathExtraction.object; var methodPathMethod = methodPathExtraction.property; if (methodPathMethod == null) return; if (methodPathObject == null) return; if (parameters == null) return; methodPathMethod.call(methodPathObject, parameters); }; action.setSignal(signal); action.setSignalHandler(signalHandler); var immediate = ""; if (immediate == "true"){ signalHandler(); } }; registerOnloadCallback(executeLoadReviewsAction2Initialize); </script> <script type="text/javascript"> executeLoadRecommendationsActionInitialized = false; function executeLoadRecommendationsActionInitialize() { if (executeLoadRecommendationsActionInitialized) return; executeLoadRecommendationsActionInitialized = true; executeLoadRecommendationsAction = new ComponentAction(); var action = eval("executeLoadRecommendationsAction"); if (action == null) return; var signal = eval("contentData.update"); var parameters = ""; var signalHandler = function() { var methodPath = "recommendationsCatalogueService.load"; var methodPathExtraction = extract(methodPath); var methodPathObject = methodPathExtraction.object; var methodPathMethod = methodPathExtraction.property; if (methodPathMethod == null) return; if (methodPathObject == null) return; if (parameters == null) return; methodPathMethod.call(methodPathObject, parameters); }; action.setSignal(signal); action.setSignalHandler(signalHandler); var immediate = ""; if (immediate == "true"){ signalHandler(); } }; registerOnloadCallback(executeLoadRecommendationsActionInitialize); </script> <!-- reviewsLoadMoreButton.click --> <script type="text/javascript"> executeIncrementReviewsPageActionInitialized = false; function executeIncrementReviewsPageActionInitialize() { if (executeIncrementReviewsPageActionInitialized) return; executeIncrementReviewsPageActionInitialized = true; executeIncrementReviewsPageAction = new ComponentAction(); var action = eval("executeIncrementReviewsPageAction"); if (action == null) return; var signal = eval("reviewsLoadMoreButton.click"); var parameters = ""; var signalHandler = function() { var methodPath = "reviewsRequestProfile.incrementPage"; var methodPathExtraction = extract(methodPath); var methodPathObject = methodPathExtraction.object; var methodPathMethod = methodPathExtraction.property; if (methodPathMethod == null) return; if (methodPathObject == null) return; if (parameters == null) return; methodPathMethod.call(methodPathObject, parameters); }; action.setSignal(signal); action.setSignalHandler(signalHandler); var immediate = ""; if (immediate == "true"){ signalHandler(); } }; registerOnloadCallback(executeIncrementReviewsPageActionInitialize); </script> <script type="text/javascript"> executeLoadMoreReviewsActionInitialized = false; function executeLoadMoreReviewsActionInitialize() { if (executeLoadMoreReviewsActionInitialized) return; executeLoadMoreReviewsActionInitialized = true; executeLoadMoreReviewsAction = new ComponentAction(); var action = eval("executeLoadMoreReviewsAction"); if (action == null) return; var signal = eval("reviewsLoadMoreButton.click"); var parameters = ""; var signalHandler = function() { var methodPath = "reviewCatalogueService.load"; var methodPathExtraction = extract(methodPath); var methodPathObject = methodPathExtraction.object; var methodPathMethod = methodPathExtraction.property; if (methodPathMethod == null) return; if (methodPathObject == null) return; if (parameters == null) return; methodPathMethod.call(methodPathObject, parameters); }; action.setSignal(signal); action.setSignalHandler(signalHandler); var immediate = ""; if (immediate == "true"){ signalHandler(); } }; registerOnloadCallback(executeLoadMoreReviewsActionInitialize); </script> <div style="visibility: hidden; width=962px; height=100px;"></div> <!-- --> <!-- Bread Crumb Leaf --> <!-- --> <script type="text/javascript"> initializedProductDetailsPage = false; function initializeProductDetailsPage() { if (initializedProductDetailsPage) return; initializedProductDetailsPage = true; var hasReviews = function() { if (reviewData == null) return false; var data = reviewData.getProperty("data"); if (data == null) return false; if (data.totalReviews == 0) return false; jQuery("#reviewTileList_boxCount").empty().append(" (" + data.totalReviews + ")"); return true; } var hasRecommendations = function() { if (recommendationsData == null) return false; var data = recommendationsData.getProperty("data"); if (data == null) return false; if (data.length == 0) return false; return true; } //Content data update handler... var formattedContentDataUpdateHandler = function() { var data = formattedContentData.getProperty("data"); //Breadcrumbs... var selection = jQuery("#bcTitle"); selection.empty(); selection.append(nameSpecialCharacterFormatter(data.name, null)); if(isDefined(getValue("cid","wsPreLogin"))){ if(userAuth && compatibleContent(data) == 'ok' && getValue("cid","wsPreLogin") == data.id){ var cid = getValue("cid","wsPreLogin"); var lt = getValue("lt","wsPreLogin"); licenseAction(cid, parseInt(lt), null, null); } deleteCookie("wsPreLogin"); } } formattedContentData.update.add(this, formattedContentDataUpdateHandler); //Review data update handler... var reviewDataAppendHandler = function() { if (hasReviews() == false) return; //Here we have a special case where the reviews CAS call returns an object //instead of an array - the array is actually contained in the reviews property //of the json data - we created a special data object to hand that data to here //for the reviews list to render... var listData = reviewData.getProperty("data").reviews; var appendedListData = reviewData.getAppendedData().reviews; reviewListData.setProperty("data", listData, appendedListData); reviewsTab.addToParent(); } reviewData.append.add(this, reviewDataAppendHandler); //Formatted Review List Data Append Handler... var formattedReviewListDataAppendHandler = function() { var data = reviewData.getProperty("data"); var formattedData = formattedReviewListData.getProperty("data"); if (data.totalReviews == 0 || formattedData.length >= data.totalReviews) { reviewsLoadMoreButton.hide(); } else { reviewsLoadMoreButton.show(); } } formattedReviewListData.append.add(this, formattedReviewListDataAppendHandler); //Recommendations data update handler... var formattedRecommendationsDataUpdateHandler = function() { if (hasRecommendations() == false) return; recommendationsTab.addToParent(); jQuery("#tabListListtabListTab_0").click(); } formattedRecommendationsData.update.add(this, formattedRecommendationsDataUpdateHandler); } registerOnloadCallback(initializeProductDetailsPage); </script> </div><div id="unsupportedOS" style="visibility: hidden;"><div class="rf-pp-shade" id="unsupportedOS_shade" style="z-index:100;"><button class="rf-pp-btn" id="unsupportedOSFirstHref"></button></div><div class="rf-pp-cntr awModalPanel" id="unsupportedOS_container" style="position: fixed; z-index:100; z-index:1000;"><div class="rf-pp-shdw" id="unsupportedOS_shadow"></div><div class="rf-pp-cnt-scrlr" id="unsupportedOS_content_scroller"><div class="rf-pp-cnt" id="unsupportedOS_content" style="z-index:1000;"> <div style="width:420px; height:100%" class="awModalPanelWrapper"> <div class="awModalPanelWrapperInner"> <div id="j_idt541" class="awModalHeader">Unsupported Operating System</div> <form id="unsupportedOS_form" name="unsupportedOS_form" method="post" action="/web/20170302124208/https://appworld.blackberry.com/webstore/content/15725/" enctype="application/x-www-form-urlencoded"> <input type="hidden" name="unsupportedOS_form" value="unsupportedOS_form"/> <table width="380"> <tbody> <tr> <td>You are using an unsupported operating system, and some functionality will be disabled.</td> </tr> <tr> <td> <div class="awDownloadModalButton"> <span id="unsupportedOSbuttonMain" class="awButtonWrapper"> <script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/javax.faces.resource/jsf.js.seam?ln=javax.faces"></script> <a id="unsupportedOS_form:unsupportedOScommandLink" href="#" onclick="jsf.util.chain(this,event,'hideModalPanel(RichFaces.$(\'unsupportedOS\')); window.location = \'http://blackberryid.blackberry.com/bbid/login/?callbackuri=aHR0cHM6Ly9hcHB3b3JsZC5ibGFja2JlcnJ5LmNvbS93ZWJzdG9yZS9teXdvcmxkL3NlY3VyZS9sb2dpbi8%3D&authtype=d2Vic3RvcmU%3D&locale=ZW4%3D&userdata=dXJsPS9jb250ZW50LzE1NzI1LyZjb3VudHJ5Y29kZT1VUyZsYW5nPWVu\'; return false;','mojarra.jsfcljs(document.getElementById(\'unsupportedOS_form\'),{\'unsupportedOS_form:unsupportedOScommandLink\':\'unsupportedOS_form:unsupportedOScommandLink\'},\'\')');return false"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="unsupportedOSLabel" class="awNoArrow">OK </div> </div> <div class="awRightButton"></div> <!-- @@@@TODO <x:conversationPropagation type="none" />--></a> </span> <span id="unsupportedOSbuttonMainDisabled" style="display:none" class="awDisabledButton"> <div class="awLeftButton"></div> <div class="awMiddleButtonWrapper"> <div id="unsupportedOSDisabledLabel" class="awNoArrow">OK</div> </div> <div class="awRightButton"></div> </span> </div></td> </tr> </tbody> </table> <input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="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" autocomplete="off"/> </form> </div> </div></div></div></div><script type="text/javascript">new RichFaces.ui.PopupPanel("unsupportedOS",{"height":0,"width":420} );</script></div><div id="filterHelpMP" style="visibility: hidden;"><div class="rf-pp-shade" id="filterHelpMP_shade" style="z-index:100;"><button class="rf-pp-btn" id="filterHelpMPFirstHref"></button></div><div class="rf-pp-cntr darkMP awModalPanel" id="filterHelpMP_container" style="position: fixed; z-index:100; "><div class="rf-pp-shdw" id="filterHelpMP_shadow"></div><div class="rf-pp-cnt-scrlr" id="filterHelpMP_content_scroller"><div class="rf-pp-cnt" id="filterHelpMP_content"> <div style="width:683px; height:100%" class="awModalPanelWrapper"> <div id="j_idt561" class="awModalPanelWrapperInner"> <div id="j_idt562" style="text-align:right" class="awdarkMPClose"><a href="" onclick="hideModalPanel(RichFaces.$('filterHelpMP')); return false;" class="sitelink"><img src="/web/20170302124208im_/https://appworld.blackberry.com/webstore/img/close.png" height="15px" width="15px"/></a></div> <div class="awFilteringHelpHeader">How to identify your smartphone </div> <p class="awPaddingLeft-Ten">If you are using BlackBerry Device software version 7.1 or older, on the home screen of your device, click the Options icon. Click Device > About Device Versions. If you are using a BlackBerry 10 device, on the home screen of your device, swipe down from the top of the screen and tap Settings > About. </p> <p class="awPaddingLeft-Ten">Or </p> <p class="awPaddingLeft-Ten">If your smartphone cannot be powered on, remove the battery to reveal the BlackBerry model number printed on the label underneath. </p></div> </div></div></div></div><script type="text/javascript">new RichFaces.ui.PopupPanel("filterHelpMP",{"height":261,"width":683} );</script></div> <a href="/web/20170302124208/https://appworld.blackberry.com/webstore/search/tobereplaced/" id="searchLink"></a> <script type="text/javascript"> jQuery.noConflict(true); </script> <script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/js/10.3.2.MR-49/libraries/jQuery/jquery-1.8.2.min.js"></script> <script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/js/10.3.2.MR-49/libraries/jQuery/jquery-ui-1.9.2.custom.min.js"></script> <script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/js/10.3.2.MR-49/libraries/jquery.dotdotdot-1.5.6-packed.js"></script> <script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/js/10.3.2.MR-49/jquery.scale9grid-0.9.3.js"></script> <script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/js/10.3.2.MR-49/libraries/date.format.js"></script> <script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/js/10.3.2.MR-49/catalogueServiceAPI.js"></script> <script type="text/javascript"> initCatalogueService('https://web.archive.org/web/20170302124208/https://appworld.blackberry.com/cas', 'false'); //**********************PAGE STATE INFORMATION 2****************************** var lang='en'; var countryCode='US'; var defaultCountryId='222'; var defaultCountryName='United States'; var platform=''; var userAuth=false; var carrierBillingActive=''; var sessionActive=false; var model=0; var region=0; var os=0; var carrier=0; var psContentType=' '; var psParentId=''; var url=window.location + ''; var urlbase=url.split('?'); var newLocation = ''; if (urlbase[1] != undefined){ var params=urlbase[1].split('&'); for (i=0; i < params.length; i++){ if (params[i].indexOf('model=') > -1){ var keyval = params[i].split('='); if (keyval.length = 2){ model = keyval[1]; } }else if (params[i].indexOf('region=') > -1){ var keyval = params[i].split('='); if (keyval.length = 2){ region = keyval[1]; } }else if (params[i].indexOf('os=') > -1){ var keyval = params[i].split('='); if (keyval.length = 2){ os = keyval[1]; } }else if (params[i].indexOf('carrier=') > -1){ var keyval = params[i].split('='); if (keyval.length = 2){ carrier = keyval[1]; } } } } var rp = new RequestProfile(null,null,null,null,null,null,null,null); rp.loadFromFilteringCookie(); var updaterp=false /******************************************************************************** * Before you save any parameter to the cookie, or use it, you must sanitize it! *********************************************************************************/ if (defaultCountryId != '0' && region == 0 && rp.countryid == null){ updaterp=true; rp.countryid=sanitizeString(defaultCountryId, /[^0-9]/g); rp.countryName=sanitizeString(defaultCountryName, null); } // The cookie should be updated to have a blank language if the URL doesn't have language specified. if (lang != rp.lang){ updaterp=true; rp.lang=sanitizeString(lang, null); } //var model=0; if (model != 0){ updaterp=true; rp.deviceDisplayName = sanitizeString(decodeURIComponent(model), null); rp.model=sanitizeString(decodeURIComponent(getModelDisplayName(decodeURIComponent(model))), null); } //var region=0; if (region != 0){ updaterp=true; rp.countryid=sanitizeString(region, null); } //var os=0; if (os != 0){ updaterp=true; rp.os = sanitizeString(os, /[^a-zA-Z0-9\\.\s]/g); } //var carrier=0; if (carrier!=0){ updaterp=true; rp.carrierid=sanitizeString(carrier, /[^0-9]/g); } if (updaterp==true){ rp.writeToFilteringCookie(); } function getModelDisplayName(model) { if (!isDefined(model)){ model; } var renameListNVPs = "BlackBerry Z10/Imagination GPU,BlackBerry Q10/Imagination GPU,BlackBerry 10/Imagination GPU"; if (isDefined(renameListNVPs)) { var sRenameListNVPSplits = renameListNVPs.split(","); for (var i=0; i < sRenameListNVPSplits.length ; i++) { var nvp = sRenameListNVPSplits[i]; var nvpSplits = nvp.split("/"); if (!isDefined(nvpSplits[0])) { continue; } if (nvpSplits[0].toLowerCase() == model.toLowerCase()) { return nvpSplits[1]; } } } return model; } var omniSavedAppName=''; var studioRenameString = "Walt Disney/Disney"; var studioFilteringMode = "allow"; var studioFilteringAllow = "Disney,ABC"; var studioFilteringDeny = "None"; //**********************END PAGE STATE INFORMATION************************** </script> <script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/js/10.3.2.MR-49/component.js"></script> <script type="text/javascript" src="/web/20170302124208js_/https://appworld.blackberry.com/webstore/js/10.3.2.MR-49/reflection.js"></script> <script type="text/javascript"><!-- var initTemplateComplete = false; initializeTemplate = function() { if (initTemplateComplete) return initTemplateComplete = true; jQuery("#signInLink").click(doLogin); jQuery("#logoutLink").click(doLogout); // add version to footer. var copyrightSelection = $j(".copyright"); if (copyrightSelection != null) { copyrightSelection.append('<div class="copyright-content"><div class="awwsVersionInFooter">WebStore Version: 10.3.2.MR-49</div></div>'); } if(false){ if(getValue("load", "wsDeviceSelectorCookie") === "yes"){ deleteCookie("wsDeviceSelectorCookie"); (eval("userDeviceModal")).show(); } } if(lang == "en" || lang == ""){ jQuery(".awwsDeviceSelectorInfo").css("width","80px"); } } registerOnloadCallback(initializeTemplate); --></script> <script type="text/javascript"> var $j = jQuery.noConflict(); //if(retrieveCookie('deviceCookie') !== null && getValue('platforms', 'deviceCookie') > 1){ // var context = '/webstore'; // var pin = "PIN"; // var nalabel = "Image not available"; // $j('#devicesItem').css("display", "inline"); // populateDeviceSwitch(context, pin, nalabel); //} function doLogin(){ if (checkOS() != WINDOWS && checkOS() != MAC){ showModalPanel(RichFaces.$('unsupportedOS')); } else { window.location = "https://web.archive.org/web/20170302124208/http://blackberryid.blackberry.com/bbid/login/?callbackuri=aHR0cHM6Ly9hcHB3b3JsZC5ibGFja2JlcnJ5LmNvbS93ZWJzdG9yZS9teXdvcmxkL3NlY3VyZS9sb2dpbi8%3D&authtype=d2Vic3RvcmU%3D&locale=ZW4%3D&userdata=dXJsPS9jb250ZW50LzE1NzI1LyZjb3VudHJ5Y29kZT1VUyZsYW5nPWVu"; } return false; } function doLogout() { cleanSession(); window.location = "/webstore/myworld/logout/"; } if (authenticated){ safeInnerHTMLAlternative(document.getElementById("welcome"), decodeCookieValue("displayname")); } function selectDeviceRadioOption(option){ var radioOption = document.getElementById(option); if(radioOption != null && radioOption != undefined){ radioOption.setAttribute('checked','checked'); radioOption.click(); } } function getDeviceFromCustomersDeviceList(selectedDevicePin) { if (!isDefined(selectedDevicePin)) { return null; } if (!isDefined(listOfDevices)) { listOfDevices = getDevices(); } for(i = 0; i < listOfDevices.length; i++){ if (listOfDevices[i].getPin() == selectedDevicePin) { return listOfDevices[i]; } } return null; } function uiDeviceSwitch(){ if(doesKeyExist("deviceSwitch", "deviceCookie")){ var newDevice = getValue("deviceSwitch", "deviceCookie"); var newDeviceDataArray = newDevice.split(":"); var pin = newDeviceDataArray[0]; var os = newDeviceDataArray[1]; var model = newDeviceDataArray[2]; var locale = newDeviceDataArray[3]; var homemnc = newDeviceDataArray[4]; var homemcc = newDeviceDataArray[5]; var currentmcc = newDeviceDataArray[6]; var newPlatform = newDeviceDataArray[7]; var carrier = newDeviceDataArray[8]; var region = newDeviceDataArray[9]; var pageURL = window.location.href; var isPageCached = true; //; var splitURL = pageURL.split("?"); var newParams=""; var hasCarrier = false; var hasRegion = false; //if page is cached we need to update URL if (isPageCached){ var mySplitResult = splitURL[1].split("&"); for(i = 0; i < mySplitResult.length; i++){ try{ var keyval = mySplitResult[i].split("="); if (keyval[0] == 'os'){ mySplitResult[i]='os='+ os; }else if (keyval[0] == 'model'){ mySplitResult[i]='model='+model; }else if (keyval[0] == 'locale'){ mySplitResult[i]='locale='+locale; }else if (keyval[0] == 'homemnc'){ mySplitResult[i]='homemnc='+homemnc; }else if (keyval[0] == 'homemcc'){ mySplitResult[i]='homemcc='+homemcc; }else if (keyval[0] == 'currentmcc'){ mySplitResult[i]='currentmcc='+currentmcc; }else if (keyval[0] == 'carrier'){ hasCarrier = true; if(carrier == null || carrier == undefined){ mySplitResult.remove(mySplitResult[i]); i--; } else { mySplitResult[i]='carrier='+carrier; } }else if (keyval[0] == 'region'){ hasRegion = true; if(region == null || region == undefined){ mySplitResult.remove(mySplitResult[i]); i--; } else { mySplitResult[i]='region='+region; } } }catch(err){ } } // Not sure why carrier and region are pushed on here, removing this for 4.3 /* if(!hasCarrier && carrier != null && carrier != undefined){ mySplitResult.push('carrier=' + carrier); } if(!hasRegion && region != null && region != undefined){ mySplitResult.push('region=' + region); }*/ //reconstruct url (this could be done above however for clarity its here for(i = 0; i < mySplitResult.length; i++){ if (i > 0){ newParams+="&"; } newParams+=mySplitResult[i]; } } addToCookie("userPin", pin); addToCookie("activePlatform", platform, "deviceCookie", false); deleteKey("deviceSwitch","deviceCookie"); deleteCookie("pushedMessages"); var fullUrl = splitURL[0] + "?"; //window.location = fullURL; // TODO Andy - when we fix the caching I commented out above then we need to rework everything above and put in platform. Only platform is here below for now: if (isDefined(splitURL[1]) && newPlatform != platform ) { var mySplitResult = splitURL[1].split("&"); for(i = 0; i < mySplitResult.length; i++){ try{ if (i > 0){ fullUrl+="&"; } var keyval = mySplitResult[i].split("="); if (keyval[0] == 'platform'){ mySplitResult[i]='platform='+ newPlatform; } fullUrl+=mySplitResult[i]; }catch(err){ } } window.location= fullUrl; } else { window.location= pageURL; } } } //registerForConnectionEvent(uiDeviceSwitch, UI_DEVICE_SWITCH); //scrubForm(); var listOfDevices = null; var listOfDevicesPopulated = new ComponentSignal(); //Call this function after the page has loaded. $j(document).ready(function(){ // If the user is authenticated get their devices once. if (authenticated && (listOfDevices === null)) { getDevices(); } if(!authenticated && sessionActive){ resetSession(); } }); function setListOfDevices(listOfDevicesJSON) { this.listOfDevices = convertListOfDevices(listOfDevicesJSON); listOfDevicesPopulated.dispatch(); } function populateDevicePicker() { if (isDefined(listOfDevices) && (listOfDevices.length > 1)) { var context = '/webstore'; var pin = "PIN"; var nalabel = "Image not available"; var activePin = getValue('activePin', 'deviceCookie'); //alert ("PIN is: " + activePin); populateBB10DeviceSwitch(context, pin, nalabel, listOfDevices, activePin); // Make Available Devices link visible $j('#devicesItem').css("display", "inline"); } } </script> <form id="j_idt578" name="j_idt578" method="post" action="/web/20170302124208/https://appworld.blackberry.com/webstore/content/15725/" enctype="application/x-www-form-urlencoded"> <input type="hidden" name="j_idt578" value="j_idt578"/> <span id="j_idt578:j_idt579" style="display: none;"><script type="text/javascript">getDevices=function(){RichFaces.ajax("j_idt578:j_idt579",null,{"incId":"1"} )};</script></span><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="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" autocomplete="off"/> </form> <form id="j_idt580" name="j_idt580" method="post" action="/web/20170302124208/https://appworld.blackberry.com/webstore/content/15725/" enctype="application/x-www-form-urlencoded"> <input type="hidden" name="j_idt580" value="j_idt580"/> <script type="text/javascript"><!-- this.resetSession = function(){ $j.ajax('/webstore/myworld/resetSession/',{ method: 'post', complete: function(transport) {}}); } --></script><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="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" autocomplete="off"/> </form></body> </html><!-- FILE ARCHIVED ON 12:42:08 Mar 02, 2017 AND RETRIEVED FROM THE INTERNET ARCHIVE ON 12:47:02 Nov 25, 2024. JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)). --> <!-- playback timings (ms): captures_list: 0.978 exclusion.robots: 0.058 exclusion.robots.policy: 0.044 esindex: 0.016 cdx.remote: 14.431 LoadShardBlock: 409.404 (3) PetaboxLoader3.datanode: 309.162 (4) PetaboxLoader3.resolve: 234.59 (2) load_resource: 211.616 -->