"use strict"; function ShowEmbedWidget( ) { $J('#widget_create').show(); $J('#widget_finished').hide(); var $Content = $J('#EmbedModal'); $Content.detach(); $Content.show(); var deferred = new jQuery.Deferred(); var fnOK = function() { deferred.resolve(); }; var Modal = _BuildDialog( "Create Widget to Embed", $Content, [], fnOK, {} ); deferred.always( function() { Modal.Dismiss(); } ); Modal.Show(); // attach the deferred's events to the modal deferred.promise( Modal ); Modal.always( function() { // save it away again for later $Content.hide(); $J(document.body).append( $Content ); } ); } function ShowShareDialog( ) { var $Content = $J('#ShareModal'); $Content.detach(); $Content.show(); ShowAlertDialog( "Share", $Content).always( function() { // if results field exists clear it $Content.find('#shareDialogResult').text(''); // save it away again for later $Content.hide(); $J(document.body).append( $Content ); } ); } function CreateWidget( nAppId ) { $J('#widget_create').hide(); var nSubId = $J('input[name=w_subid]').val(); if( !nSubId ) nSubId = $J('input:radio[name=w_rsubid]:checked').val(); var strDesc = $J('textarea[name=w_text]').val(); var strWidgetURL; if( nSubId ) strWidgetURL = 'https://store.steampowered.com/widget/' + nAppId + '/' + nSubId + '/'; else strWidgetURL = 'https://store.steampowered.com/widget/' + nAppId + '/'; if( strDesc ) strWidgetURL = strWidgetURL + '?t=' + encodeURIComponent( strDesc ); var strWidgetCode = ''; var $iframe = $J(strWidgetCode); $J('#widget_container').empty(); $J('#widget_container').append($iframe); $J('#widget_code').val( strWidgetCode ); $J('#widget_finished').show(); } function InitQueueControls( store_appid, steamworks_appid, next_in_queue_appid, snr ) { var $FollowBtn = $J('.queue_control_button.queue_btn_follow .queue_btn_inactive'); var $UnFollowBtn = $J('.queue_control_button.queue_btn_follow .queue_btn_active'); var $IgnoreBtn = $J('.queue_control_button.queue_btn_ignore .queue_btn_inactive'); var $UnIgnoreBtn = $J('.queue_control_button.queue_btn_ignore .queue_btn_active'); var $IgnoreMenuBtn = $J('#queue_ignore_menu_arrow'); var $IgnoreMenu = $J('#queue_btn_ignore_menu'); var $IgnoreMenuOption_NotInterested = $J('#queue_ignore_menu_option_not_interested' ); var $IgnoreMenuOption_OwnedElsewhere = $J('#queue_ignore_menu_option_owned_elsewhere' ); var funcUpdateIgnoredReasonClasses = function() { $IgnoreMenu.removeClass( "not_interested owned_elsewhere" ); var curIgnoredReason = $IgnoreMenu.data( "ignoredreason" ); if ( curIgnoredReason !== undefined ) { $IgnoreMenuBtn.removeClass( "queue_btn_inactive" ); $IgnoreMenuBtn.addClass( "queue_btn_active" ); switch( curIgnoredReason ) { case 0: $IgnoreMenu.addClass( "not_interested" ); break; case 2: $IgnoreMenu.addClass( "owned_elsewhere" ); break; } } }; funcUpdateIgnoredReasonClasses(); var funcIgnoreGame = function( ignore_reason ) { $J.post( 'https://store.steampowered.com/recommended/ignorerecommendation/', { sessionid: g_sessionID, appid: store_appid, snr: snr, ignore_reason: ignore_reason }).done( function( data ) { $IgnoreBtn.hide(); $UnIgnoreBtn.show(); $IgnoreMenu.data( "ignoredreason", ignore_reason ); funcUpdateIgnoredReasonClasses(); GDynamicStore.InvalidateCache(); if ( data && data.nSaleTaskCompleted ) { NewStickerPackModal( 'Mark something Not Interested' ); } // SummerSale2017 }).fail( function( jqXHR ) { ShowAlertDialog( 'Ignore App', 'There was a problem saving your changes. Please try again later.' ); }); }; $IgnoreBtn.click( function() { funcIgnoreGame( 0 ); } ); $IgnoreMenuOption_NotInterested.click( function() { funcIgnoreGame( 0 ); } ); $IgnoreMenuOption_OwnedElsewhere.click( function() { funcIgnoreGame( 2 ); } ); $UnIgnoreBtn.click( function() { $J.post( 'https://store.steampowered.com/recommended/ignorerecommendation/', { sessionid: g_sessionID, appid: store_appid, snr: snr, remove: 1 }).done( function() { $IgnoreBtn.show(); $UnIgnoreBtn.hide(); $IgnoreMenu.removeClass( "not_interested owned_elsewhere" ); $IgnoreMenuBtn.removeClass( "queue_btn_active" ); $IgnoreMenuBtn.addClass( "queue_btn_inactive" ); GDynamicStore.InvalidateCache(); }).fail( function() { ShowAlertDialog( 'Ignore App', 'There was a problem saving your changes. Please try again later.' ); }); }); $FollowBtn.click( function() { $J.post( 'https://store.steampowered.com/explore/followgame/', { sessionid: g_sessionID, appid: steamworks_appid }).done( function() { $FollowBtn.hide(); $UnFollowBtn.show(); }).fail( function() { ShowAlertDialog( 'Follow', 'There was a problem saving your changes. Please try again later.' ); }); }); $UnFollowBtn.click( function() { $J.post( 'https://store.steampowered.com/explore/followgame/', { sessionid: g_sessionID, appid: steamworks_appid, unfollow: 1 }).done( function() { $FollowBtn.show(); $UnFollowBtn.hide(); }).fail( function() { ShowAlertDialog( 'Follow', 'There was a problem saving your changes. Please try again later.' ); }); }); // discovery queue settings dialog var bQueueIsValid = true; var $NextInQueueBtn = $J('.btn_next_in_queue_trigger'); $NextInQueueBtn.click( function() { if ( bQueueIsValid ) $J('#next_in_queue_form').submit(); else window.location = 'https://store.steampowered.com/explore/startnew'; }); $J('a.dq_settings_link').click( function() { CDiscoveryQueue.ShowCustomizeDialog( function( data ) { if ( data && data.queue && ( data.queue.indexOf( store_appid ) == -1 || ( next_in_queue_appid && data.queue.indexOf( next_in_queue_appid ) == -1 ) ) ) { ShowConfirmDialog( 'Customize Your Discovery Queue', 'We\'ve built you a new Discovery Queue by applying your customizations. What would you like to do?', 'Start exploring the new Queue','Stay here' ).done( function() { window.location = 'https://store.steampowered.com/explore/startnew/' + g_eDiscoveryQueueType + '/'; }); bQueueIsValid = false; } else { bQueueIsValid = true; } }, g_eDiscoveryQueueType ); } ); } function InitAutocollapse() { $J('.game_page_autocollapse').each( function() { var content = this; var $Content = $J(content); $Content.wrap( $J('
', {'class': 'game_page_autocollapse_ctn' } ) ); var $Container = $Content.parent(); var $ReadMore = $J('', {'class': 'game_page_autocollapse_readmore' }).text( 'READ MORE' ); var $Fade = $J('', {'class': 'game_page_autocollapse_fade' } ).append( $ReadMore ); $Container.append( $Fade ); var nInterval = 0; var nMaxHeight = parseInt( $Content.css('max-height') ); var bMaxHeightSet = true; $Content.on( 'gamepage_autocollapse_expand', function() { if ( $Container.hasClass( 'collapsed' ) ) { $Container.removeClass( 'collapsed' ); $Container.addClass( 'expanded' ); if ( bMaxHeightSet ) { $Content.animate( {'max-height': content.scrollHeight + 20 + 'px'}, 'fast', null, function() { $Content.css('max-height', 'none' ); } ); } window.clearInterval( nInterval ); } }); $ReadMore.click( function() { $Content.trigger('gamepage_autocollapse_expand'); } ); var fnCheckHeight = function () { if ( content.scrollHeight > nMaxHeight + 30 ) { $Content.css( 'max-height', nMaxHeight + 'px' ); $Container.addClass( 'collapsed' ); window.clearInterval( nInterval ); bMaxHeightSet = true; } else if ( bMaxHeightSet ) { $Content.css( 'max-height', 'none' ); bMaxHeightSet = false; } }; nInterval = window.setInterval( fnCheckHeight, 250 ); fnCheckHeight(); }); } function DefaultRecScoreFactory( nOwnedPenalty ) { return function DefaultRecScore( i, unAppID ) { if ( GDynamicStore.BIsAppIgnored( unAppID ) ) return null; else if ( GDynamicStore.BIsAppOwned( unAppID, false ) ) return nOwnedPenalty + i; else return i; }; } function ShuffleRecScore( i, unAppID ) { var nScore = 0; var nOwnedPenalty = 5; if ( GDynamicStore.BIsAppIgnored( unAppID ) ) return null; if ( GDynamicStore.BIsAppOwned( unAppID, false ) ) nScore += nOwnedPenalty; // shuffle a little nScore += ( Math.sqrt(i) + 2 ) * Math.random(); nScore += Math.sqrt( i ); return nScore; } function RenderRecommendBlock( rgRecommendedAppIDs, strAppURL, elTarget, fnRecScore ) { var rgRecommendationsToShow = []; var fnScore = fnRecScore || DefaultRecScoreFactory( 3 ); var bUseTabletScreenMode = window.UseTabletScreenMode && window.UseTabletScreenMode(); var strViewAllLink = ""; if ( bUseTabletScreenMode ) { var $elBlock = elTarget.closest( 'div.block' ); var $elAnchor = $elBlock ? $J( 'a.deck_view_all_action_link', $elBlock ) : null; if ( $elAnchor && $elAnchor.attr('href') !== undefined ) strViewAllLink = $elAnchor.attr('href'); } for ( var i = 0; i < rgRecommendedAppIDs.length; i++ ) { var unAppID = rgRecommendedAppIDs[i]; var nScore = fnScore( i, unAppID ); if ( nScore !== null ) rgRecommendationsToShow.push( { score: nScore, appid: unAppID, orig: i } ); } rgRecommendationsToShow.sort( function( a, b ) { return a.score - b.score; } ); rgRecommendationsToShow = rgRecommendationsToShow.slice( 0, 12 ); for ( var i = 0; i < rgRecommendationsToShow.length; i++ ) { var unAppID = rgRecommendationsToShow[i].appid; var rgItemData = GStoreItemData.rgAppData[ unAppID ]; if ( !rgItemData ) continue; var params = {'class': 'small_cap', 'data-ds-appid': unAppID, 'href': GStoreItemData.GetAppURL( unAppID, strAppURL ) }; if ( bUseTabletScreenMode && strViewAllLink !== "" ) { const panelString = '{"onOptionsActionDescription":"View all","onOptionsButton":"window.location=\'%1$s\'"}'; params['data-panel'] = panelString.replace( '%1$s', strViewAllLink ); } if ( rgItemData['steam_deck_compat_category'] !== undefined ) { params['data-ds-steam-deck-compat-category'] = rgItemData['steam_deck_compat_category']; } var $CapCtn = $J('', params ); GStoreItemData.BindHoverEvents( $CapCtn, unAppID, null ); $CapCtn.append( $J('', {src: rgItemData.small_capsulev5, 'class': 'small_cap_img' } ) ); $CapCtn.append( $J('').html( rgItemData.name ) ); $CapCtn.append( $J(rgItemData.discount_block).addClass( 'discount_block_inline') ); elTarget.append( $CapCtn ); } GDynamicStoreHelpers.AddSNRDepthParamsToCapsuleList( elTarget.children() ); GDynamicStore.DecorateDynamicItems( elTarget ); elTarget.append( $J('', { style: 'clear: left;' } ) ); elTarget.trigger('v_contentschanged'); } function RenderMoreLikeThisBlock( rgRecommendedAppIDs, bUseShuffle ) { if ( !rgRecommendedAppIDs || !rgRecommendedAppIDs.length > 0 || !$J('#recommended_block_content').length ) { $J('#recommended_block').hide(); return; } RenderRecommendBlock( rgRecommendedAppIDs, 'recommended', $J('#recommended_block_content'), bUseShuffle ? ShuffleRecScore : DefaultRecScoreFactory( 15 ) ); } function RenderAccessoriesBlock( rgAccessoryAppIDs ) { if ( !rgAccessoryAppIDs || !rgAccessoryAppIDs.length > 0 || !$J('#accessory_block_content').length ) { $J('#accessory_block').hide(); return; } RenderRecommendBlock( rgAccessoryAppIDs, 'accessories', $J('#accessory_block_content') ); function scrollToAccessoriesIfNeeded() { if ( window.location.hash == "#accessories" ) { document.querySelector( "#accessory_block" ).scrollIntoView( { behavior: 'smooth', block: 'center', inline: 'center', } ); document.querySelector( "#accessory_block" ).classList.add( "highlighted" ); } else { document.querySelector( "#accessory_block" ).classList.remove( "highlighted" ); } } window.addEventListener( "hashchange", scrollToAccessoriesIfNeeded, false ); window.addEventListener( "load", scrollToAccessoriesIfNeeded, false ); } function RenderFranchiseAppBlock( rgFranchiseAppIDs ) { rgFranchiseAppIDs = rgFranchiseAppIDs.filter( function( appid ) { return !!GStoreItemData.rgAppData[appid]; } ); if( !rgFranchiseAppIDs || !rgFranchiseAppIDs.length > 0 || !$J('#franchise_app_block_content').length ) { $J('#franchise_block').hide(); return; } RenderRecommendBlock( rgFranchiseAppIDs, 'recommend_franchise', $J('#franchise_app_block_content') ); } function RenderMoreDLCFromBaseGameBlock( rgMoreDLCsFromBaseGameAppIDs ) { if( !rgMoreDLCsFromBaseGameAppIDs || !rgMoreDLCsFromBaseGameAppIDs.length > 0 || !$J('#moredlcfrombasegame_block_content').length ) { $J('#moredlcfrombasegame_block').hide(); return; } RenderRecommendBlock( rgMoreDLCsFromBaseGameAppIDs, 'other_dlc', $J('#moredlcfrombasegame_block_content') ); } function ShowEULA( elLink ) { if ( window.UseTabletScreenMode && window.UseTabletScreenMode() ) { // it's a better user experience on Deck if we navigate to the EULA instead of opening a new window window.location = elLink.href; } else { var win = window.open( elLink.href,'eula','height=584,width=475,resize=yes,scrollbars=yes'); win && win.focus(); } } // formerly user_reviews_store.js var g_recommendationContents = [ 'friend', 'summary', 'recent_short', 'all', 'positive', 'negative', 'recent', 'funny' ]; function OnRecommendationVotedUp( recommendationid ) { for ( var i = 0; i < g_recommendationContents.length; ++i ) { $J( '#RecommendationVoteUpBtn' + g_recommendationContents[i] + recommendationid ).addClass( 'btn_active' ); $J( '#RecommendationVoteDownBtn' + g_recommendationContents[i] + recommendationid ).removeClass( "btn_active" ); $J( '#RecommendationVoteTagBtn' + g_recommendationContents[i] + recommendationid + '_' + 1 ).removeClass( 'btn_active' ); } } function OnRecommendationVotedDown( recommendationid ) { for ( var i = 0; i < g_recommendationContents.length; ++i ) { $J( '#RecommendationVoteUpBtn' + g_recommendationContents[i] + recommendationid ).removeClass( 'btn_active' ); $J( '#RecommendationVoteDownBtn' + g_recommendationContents[i] + recommendationid ).addClass( "btn_active" ); $J( '#RecommendationVoteTagBtn' + g_recommendationContents[i] + recommendationid + '_' + 1 ).removeClass( 'btn_active' ); } } function OnRecommendationVotedTag( recommendationid, tagID, bRateUp ) { for ( var i = 0; i < g_recommendationContents.length; ++i ) { if ( bRateUp ) { $J( '#RecommendationVoteTagBtn' + g_recommendationContents[i] + recommendationid + '_' + tagID ).addClass( 'btn_active' ); $J( '#RecommendationVoteUpBtn' + g_recommendationContents[i] + recommendationid ).removeClass( 'btn_active' ); $J( '#RecommendationVoteDownBtn' + g_recommendationContents[i] + recommendationid ).removeClass( "btn_active" ); } else { $J( '#RecommendationVoteTagBtn' + g_recommendationContents[i] + recommendationid + '_' + tagID ).removeClass( 'btn_active' ); } } } function OnRecommendationAward( recommendationid, award ) { for ( var i = 0; i < g_recommendationContents.length; ++i ) { var review = $J( "#ReviewContent" + g_recommendationContents[i] + recommendationid ); var rewardsCtn = review.find( ".review_award_ctn" ); if ( rewardsCtn.length != 0 ) { var bFoundExisting = false; var rewards = rewardsCtn.find( ".review_award" ); for ( var j = 0; j < rewards.length; ++j ) { var reward = $J( rewards[j] ); if ( reward.data( "reaction" ) == award ) { bFoundExisting = true; var count = parseInt( reward.data( "reactioncount" ) ); var countElem = reward.find( ".review_award_count" ); countElem.text( count + 1 ); reward.data( "reactioncount", count + 1 ); break; } } if ( !bFoundExisting ) { var reward = $J( "This time range has been marked as containing an abnormal set of reviews that we believe are largely unrelated to the likelihood that you would enjoy the product. The reviews within this period are excluded from the Review Score by default.
You can learn more about how these time periods are selected by reading our Steam blog post.
If you want to dig deeper, you can still read the reviews posted within this time period, or edit your preferences to always include off-topic review periods in Review Scores.
' } ) ); var dialog = ShowConfirmDialog( 'Off-topic Review Activity', dialogContent, 'Read the Reviews', 'Cancel', 'Edit Preferences' ); dialog.done( function( type ) { if ( type == 'OK' ) { funcViewReviewsDuringEvent( bCountAllReviews, startDate, endDate ); } else if ( type == 'SECONDARY' ) { EditUserReviewScorePreference(); } } ); } ); } ); } ); } function SetReviewsGraphVisibility( bVisible ) { $J( "#review_histograms_container" ).toggleClass( "collapsed", !bVisible ); $J( "#reviews_filter_options" ).toggleClass( "graph_collapsed", !bVisible ); } function ClearReviewDateFilter() { $J('#review_start_date').val( -1 ); $J('#review_end_date').val( -1 ); $J('#review_date_range_histogram').attr( 'disabled', true ); $J('#review_date_range_exclude_histogram').attr( 'disabled', true ); $J( "#review_selected_histogram_date_range_text" ).hide(); ShowFilteredReviews(); } function OnLoadReviews() { BuildReviewHistogram(); ShowFilteredReviews(); } function UpdateActiveFilters() { var bAnyActiveFilters = false; // type if ( $J( "#review_type_positive" ).attr( "checked" ) ) { bAnyActiveFilters = true; $J( "#reviews_filter_type" ).show(); $J( "#reviews_filter_type" ).text( 'Positive' ); } else if ( $J( "#review_type_negative" ).attr( "checked" ) ) { bAnyActiveFilters = true; $J( "#reviews_filter_type" ).show(); $J( "#reviews_filter_type" ).text( 'Negative' ); } else { $J( "#reviews_filter_type" ).hide(); } // purchase type if ( $J( "#purchase_type_steam" ).attr( "checked" ) ) { bAnyActiveFilters = true; $J( "#reviews_filter_purchase_type" ).show(); $J( "#reviews_filter_purchase_type" ).text( 'Steam Purchasers' ); } else if ( $J( "#purchase_type_non_steam" ).attr( "checked" ) ) { bAnyActiveFilters = true; $J( "#reviews_filter_purchase_type" ).show(); $J( "#reviews_filter_purchase_type" ).text( 'Not Purchased on Steam' ); } else { $J( "#reviews_filter_purchase_type" ).hide(); } // language if ( $J( "#review_language_mine" ).attr( "checked" ) ) { bAnyActiveFilters = true; $J( "#reviews_filter_language" ).show(); $J( "#reviews_filter_language" ).text( 'Your Languages' ); } else if ( false ) { bAnyActiveFilters = true; $J( "#reviews_filter_language" ).show(); $J( "#reviews_filter_language" ).text( 'Simplified Chinese' ); } else { $J( "#reviews_filter_language" ).hide(); } // graph if ( $J( "#review_date_range_histogram" ).attr( "checked" ) ) { bAnyActiveFilters = true; $J( "#reviews_filter_graph" ).show(); $J( "#review_selected_histogram_date_range_prefix" ).text( 'View Only ' ); } else if ( $J( "#review_date_range_exclude_histogram" ).attr( "checked" ) ) { bAnyActiveFilters = true; $J( "#reviews_filter_graph" ).show(); $J( "#review_selected_histogram_date_range_prefix" ).text( 'Exclude ' ); } else { $J( "#reviews_filter_graph" ).hide(); } // off-topic review activity if ( $J( "#user_reviews_offtopic_activity_menu" ).is( ":visible" ) && $J( "#reviews_offtopic_activity_checkbox" ).attr( "checked" ) ) { bAnyActiveFilters = true; $J( "#reviews_filter_offtopic_activity" ).show(); } else { $J( "#reviews_filter_offtopic_activity" ).hide(); } var playtimeFilterMin = $J( "#app_reviews_playtime_range_min" ).val(); var playtimeFilterMax = $J( "#app_reviews_playtime_range_max" ).val(); if ( playtimeFilterMin != 0 || playtimeFilterMax != 0 ) { var elemPlaytimeDesc = $J( "#review_playtime_preset_text" ); if ( playtimeFilterMax == 0 ) { if ( playtimeFilterMin == 1 ) { elemPlaytimeDesc.text( 'Over 1 hour' ); } else { elemPlaytimeDesc.text( 'Over %2$s hours'.replace( "%2$s", playtimeFilterMin ) ); } } else { elemPlaytimeDesc.text( '%1$s hour(s) to %2$s hours'.replace( "%1$s", playtimeFilterMin ).replace( "%2$s", playtimeFilterMax ) ); } bAnyActiveFilters = true; $J( "#reviews_filter_playtime" ).show(); } else { $J( "#reviews_filter_playtime" ).hide(); } $J( "#reviews_filter_title" ).toggle( bAnyActiveFilters ); } function ShowFilteredReviews() { UpdateActiveFilters(); if ( $J( "#review_appid" ).length == 0 ) return; var appid = $J( "#review_appid" ).val(); var context = $J( "#review_context" ).val(); var defaultDayRange = $J( "#review_default_day_range" ).val(); var startDate = $J( "#review_start_date" ).val(); var endDate = $J( "#review_end_date" ).val(); SelectReviews( appid, context, defaultDayRange, startDate, endDate, true ); } function ChangeReviewPurchaseTypeFilter() { var purchaseType = $J('input[name="purchase_type"]:checked').val(); V_SetCookie( "review_purchase_type_filter", purchaseType, purchaseType == 'all' ? 1 : 14, "app/" ); ShowFilteredReviews(); } function OnReviewPlaytimeFilterSliderChanged( hourMin, hourMax, maxHours ) { if ( hourMin == 0 && hourMax == maxHours ) { $J('input[name="review_playtime_preset"][value="0"]').attr( 'checked', true ); } else { $J('input[name="review_playtime_preset"]').attr( 'checked', false ); } ShowFilteredReviews(); } function SelectPlaytimeFilterPreset( playtimeMinHours ) { var maxHours = 100; var maxSeconds = maxHours * 60 * 60; $J("#app_reviews_playtime_slider").slider('values', 0, playtimeMinHours * 60 * 60 ); $J("#app_reviews_playtime_slider").slider('values', 1, maxSeconds ); UpdatePlaytimeFilterValues( playtimeMinHours, maxHours ); ShowFilteredReviews(); } function ChangedOfftopicReviewActivityFilter() { ShowFilteredReviews(); } function ClearOfftopicReviewActivityFilter() { $J('#reviews_offtopic_activity_checkbox').attr( 'checked', false ); ShowFilteredReviews(); } function ClearReviewPlaytimeFilter() { $J('#review_playtime_preset_0').attr( 'checked', true ); SelectPlaytimeFilterPreset( 0 ); } function CollapseLongReviews() { $J('.review_box').each( function(j, i){ if( $J(i).outerHeight() > 400 ) { if ( !$J(i).hasClass('expanded') ) { $J(i).addClass('partial') } } }); } function UpdatePlaytimeFilterValues( hourMin, hourMax ) { var maxHours = 100; $J( "#app_reviews_playtime_range_min" ).val( hourMin ); $J( "#app_reviews_playtime_range_max" ).val( hourMax == maxHours ? 0 : hourMax ); var strHoursMinNumber = v_numberformat( hourMin, 0 ); var strHourMin = hourMin > 0 ? '%1$s hour(s)'.replace( /%1\$s/g, strHoursMinNumber ) : 'No minimum'; $J( "#app_reviews_playtime_range_text_min" ).text( strHourMin ); var strHoursMaxNumber = v_numberformat( hourMax, 0 ); var strHourMax = hourMax > 0 && hourMax != maxHours ? '%1$s hour(s)'.replace( /%1\$s/g, strHoursMaxNumber ) : 'No maximum'; $J( "#app_reviews_playtime_range_text_max" ).text( strHourMax ); } function InitPlaytimeFilterSlider() { var maxHours = 100; var maxSeconds = maxHours * 60 * 60; $J( "#app_reviews_playtime_slider" ).slider({ range: true, min: 0, max: maxSeconds, values: [0, maxSeconds], step: 3600, slide: function (event, ui) { var minSecs = ui.values[0]; var maxSecs = ui.values[1]; var hourMin = parseInt( minSecs / ( 60 * 60 ), 10 ); var hourMax = parseInt( maxSecs / ( 60 * 60 ), 10 ); UpdatePlaytimeFilterValues( hourMin, hourMax ); }, change: function( event, ui ) { if ( event.originalEvent ) { var minSecs = ui.values[0]; var maxSecs = ui.values[1]; var hourMin = parseInt( minSecs / ( 60 * 60 ), 10 ); var hourMax = parseInt( maxSecs / ( 60 * 60 ), 10 ); OnReviewPlaytimeFilterSliderChanged( hourMin, hourMax, maxHours ); } } }); } //formerly app_reporting.js var gReportedApp = false; function ShowReportDialog( nAppId ) { if ( gReportedApp ) { return; } var content = $J('', {'class': 'app_report_dialog' } ); content.append( $J('', {'class': 'app_report_dialog_intro' } ).text('Please choose a reason why you are reporting this product.') ); var rgReportOptions = {"1":"Fraud - This software fraudulently attempts to gather sensitive information, such as your Steam credentials or financial data (e.g. credit card information).<\/span>","2":"Harmful - This software modifies a customer's computer in unexpected or harmful ways (e.g. is malware or a virus)<\/span>","5":"Adult Content - Contains adult content that isn't appropriately labeled and age-gated<\/span>","6":"Defamatory - Contains Libelous or defamatory statements<\/span>","8":"Child Exploitation - Contains content that exploits children in any way<\/span>","11":"Legal Violation - Contains content that violates the laws in your jurisdiction<\/span>","13":"Broken - Does not download, launch, or run correctly, even on a machine that meets the minimum system requirements.<\/span>"}; var rgReportOptionElements = []; for ( var eReportType in rgReportOptions ) { var $ReportOption = $J('', {'class': 'app_report_dialog_option' } ); $ReportOption.append( $J('', {'class': 'app_report_dialog_option_input' }).append( $J('', {'type': 'radio', 'name':'report_type', 'value': eReportType, 'id': 'report_type_' + eReportType } ) ) ); $ReportOption.append( $J('', {'class': 'app_report_dialog_option_text' }).append( $J('', {'for': 'report_type_' + eReportType }).html( rgReportOptions[eReportType] ) ) ); rgReportOptionElements.push( $ReportOption ); } for ( var j, x, i = rgReportOptionElements.length; i; j = parseInt(Math.random() * i), x = rgReportOptionElements[--i], rgReportOptionElements[i] = rgReportOptionElements[j], rgReportOptionElements[j] = x ); for ( var i = 0; i < rgReportOptionElements.length; ++i ) { content.append( rgReportOptionElements[i] ); } var textArea = $J('', { 'class': 'app_report_dialog_reason grey_bevel fullwidth', 'id' : 'ReportReason', 'name' : 'report_reason' } ); var maxReasonLength = 512; textArea.attr( 'maxlength', maxReasonLength ); textArea.bind( "keyup change", function() { var str = $J(this).val() var mx = parseInt($J(this).attr('maxlength')) if (str.length > mx) { $J(this).val(str.substr(0, mx)) return false; } } ); content.append( $J('', {'class': 'app_report_dialog_intro' } ).text('You may enter additional information that you feel is relevant here:') ); content.append( textArea ); content.append( $J('', {'class': 'app_report_dialog_dmca' } ).html('If you\'d like to report Copyright Infringement and are the copyright holder, please proceed to our DMCA compliant notice of copyright infringement form here.') ); content.append( $J('', {'class': 'app_report_dialog_dmca' } ).html('If you\'d like to file a Trademark complaint, please fill out the form here.') ); var dialog = ShowConfirmDialog( 'Report this Product', content, 'Report'); dialog.done( function() { var eReportTypeSelected = content.find( 'input[type=radio]:checked' ).val(); if ( eReportTypeSelected ) { $J.post( 'https://store.steampowered.com/appreport/' + nAppId + '/report/', { 'report_type' : eReportTypeSelected, 'report_reason' : content.find( 'textarea' ).val(), 'sessionid': g_sessionID } ).done( function( json ) { gReportedApp = true; $J( "#ReportAppBtn").addClass( 'btn_active' ); } ).fail( function( jqXHR ) { var json = jqXHR.responseText.evalJSON(); if ( json.success == 29 ) { ShowAlertDialog( 'Error', 'You have already reported this product!' ); gReportedApp = true; $J( "#ReportAppBtn").addClass( 'btn_active' ); } else { ShowAlertDialog( 'Error', 'There was a problem saving your report. Please try again later.' ); } } ); } else { ShowAlertDialog( 'Error', 'You must select a reason you are reporting this product!' ); } }); } function ShowGotSteamModal( strSteamURL, strAppName, strPlayLaunchVerb ) { var $ModalContent = $J("You need to have the Steam desktop application<\/a> installed before you can install and launch <\/strong>. Do you have Steam installed on this computer?<\/p>\r\n\t\t