Annual report pursuant to Section 13 and 15(d)

Shareholders' Equity, Stock Options and Net Income per Share - Stock Option Activity (Details)

v2.4.1.9
Shareholders' Equity, Stock Options and Net Income per Share - Stock Option Activity (Details) (USD $)
In Thousands, except Per Share data, unless otherwise specified
12 Months Ended
Dec. 31, 2014
Dec. 31, 2013
Dec. 31, 2012
Share-based Compensation Arrangement by Share-based Payment Award [Line Items]      
Share-based compensation $ 6,681us-gaap_ShareBasedCompensation $ 6,178us-gaap_ShareBasedCompensation $ 6,050us-gaap_ShareBasedCompensation
Employee Stock Option [Member]      
Share-based Compensation Arrangement by Share-based Payment Award [Line Items]      
Outstanding at beginning of year (shares) 1,732us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
2,874us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
3,363us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
Granted (shares) 106us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
118us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
94us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
Exercise of stock options (in shares) (450)us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
(1,260)us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
(570)us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
Forfeited (shares) (25)us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
0us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
(13)us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
Outstanding at end of year (shares) 1,363us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
1,732us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
2,874us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
Weighted Average Outstanding at beginning of year (per share) $ 27us-gaap_SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
$ 26us-gaap_SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
$ 26us-gaap_SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
Weighted average exercise price for options granted in the period $ 43us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
$ 38us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
$ 37us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
Weighted average exercise price for options exercised in the period $ 28us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
$ 26us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
$ 27us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
Weighted average exercise price for options forfeited in the period $ 37us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresAndExpirationsInPeriodWeightedAverageExercisePrice
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
$ 0us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresAndExpirationsInPeriodWeightedAverageExercisePrice
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
$ 29us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresAndExpirationsInPeriodWeightedAverageExercisePrice
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
Weighted Average Outstanding at end of year (per share) $ 28us-gaap_SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
$ 27us-gaap_SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
$ 26us-gaap_SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
Exercisable at end of year 1,160us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
1,514us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
2,487us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
Weighted average exercise price for options exercisable at year end $ 26us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
$ 26us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
$ 26us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
Weighted-average fair value of options granted during the year (dollars per share) $ 14us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
$ 14us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
$ 13us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
Aggregate intrinsic value of options exercised 7,259us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisesInPeriodTotalIntrinsicValue
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
15,477us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisesInPeriodTotalIntrinsicValue
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
3,924us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisesInPeriodTotalIntrinsicValue
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
Average aggregate intrinsic value for options outstanding 24,425us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingIntrinsicValue
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
   
Average aggregate instrinsic value for exercisable options 23,274us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsExercisableIntrinsicValue1
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
   
Share-based compensation 1,302us-gaap_ShareBasedCompensation
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
1,410us-gaap_ShareBasedCompensation
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
2,585us-gaap_ShareBasedCompensation
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
Tax benefit related to share-based compensation expense 497us-gaap_EmployeeServiceShareBasedCompensationTaxBenefitFromCompensationExpense
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
508us-gaap_EmployeeServiceShareBasedCompensationTaxBenefitFromCompensationExpense
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
713us-gaap_EmployeeServiceShareBasedCompensationTaxBenefitFromCompensationExpense
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
Unrecognized compensation cost 1,632us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
   
Non-employee Director Stock Options [Member]      
Share-based Compensation Arrangement by Share-based Payment Award [Line Items]      
Outstanding at beginning of year (shares) 26us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
29us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
41us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
Exercise of stock options (in shares) (18)us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
(3)us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
(12)us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
Outstanding at end of year (shares) 8us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
26us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
29us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
Weighted Average Outstanding at beginning of year (per share) $ 23us-gaap_SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
$ 23us-gaap_SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
$ 21us-gaap_SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
Weighted average exercise price for options exercised in the period $ 22us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
$ 20us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
$ 16us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
Weighted Average Outstanding at end of year (per share) $ 26us-gaap_SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
$ 23us-gaap_SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
$ 23us-gaap_SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
Aggregate intrinsic value of options exercised 412us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisesInPeriodTotalIntrinsicValue
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
54us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisesInPeriodTotalIntrinsicValue
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
207us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisesInPeriodTotalIntrinsicValue
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
Average aggregate intrinsic value for options outstanding and exercisable $ 151us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsVestedAndExpectedToVestOutstandingAggregateIntrinsicValue
/ us-gaap_AwardTypeAxis
= fwrd_NonEmployeeDirectorStockOptionsMember
   
Non-employee Director Activity - Options [Abstract]      
Weighted average remaining contractual term for options outstanding 4 months 11 days    
Term of options issued under the plan 10 years    
Exercise Price Range 22.47 thru 24.98 [Member] | Employee Stock Option [Member]      
Share-based Compensation Arrangement by Share-based Payment Award [Line Items]      
Outstanding at end of year (shares) 672us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange1325Thru1882Member
   
Weighted Average Outstanding at end of year (per share) $ 22.66us-gaap_SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange1325Thru1882Member
   
Exercisable at end of year 672us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange1325Thru1882Member
   
Weighted average exercise price for options exercisable at year end $ 22.66us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange1325Thru1882Member
   
Range of exercise price, lower range limit $ 22.47us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeLowerRangeLimit
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange1325Thru1882Member
   
Range of exercise price, upper range limit $ 24.98us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeUpperRangeLimit
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange1325Thru1882Member
   
Weighted average remaining contractual life 1 year 8 months 11 days    
Exercise Price Range 28.61 thru 29.44 [Member] | Employee Stock Option [Member]      
Share-based Compensation Arrangement by Share-based Payment Award [Line Items]      
Outstanding at end of year (shares) 401us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange2021Thru2944Member
   
Weighted Average Outstanding at end of year (per share) $ 28.95us-gaap_SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange2021Thru2944Member
   
Exercisable at end of year 401us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange2021Thru2944Member
   
Weighted average exercise price for options exercisable at year end $ 28.95us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange2021Thru2944Member
   
Range of exercise price, lower range limit $ 28.61us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeLowerRangeLimit
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange2021Thru2944Member
   
Range of exercise price, upper range limit $ 29.44us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeUpperRangeLimit
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange2021Thru2944Member
   
Weighted average remaining contractual life 10 months 11 days    
Exercise Price Range 36.55 thru 41.80 [Member] | Employee Stock Option [Member]      
Share-based Compensation Arrangement by Share-based Payment Award [Line Items]      
Outstanding at end of year (shares) 184us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange3035Thru3690Member
   
Weighted Average Outstanding at end of year (per share) $ 37.03us-gaap_SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange3035Thru3690Member
   
Exercisable at end of year 87us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange3035Thru3690Member
   
Weighted average exercise price for options exercisable at year end $ 36.90us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange3035Thru3690Member
   
Range of exercise price, lower range limit $ 36.55us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeLowerRangeLimit
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange3035Thru3690Member
   
Range of exercise price, upper range limit $ 41.80us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeUpperRangeLimit
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange3035Thru3690Member
   
Weighted average remaining contractual life 4 years 8 months 11 days    
Exercise Price Range 42.48 thru 45.97 [Member] | Employee Stock Option [Member]      
Share-based Compensation Arrangement by Share-based Payment Award [Line Items]      
Outstanding at end of year (shares) 106us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange42.48thru45.97Member
   
Weighted Average Outstanding at end of year (per share) $ 43.17us-gaap_SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange42.48thru45.97Member
   
Exercisable at end of year 0us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange42.48thru45.97Member
   
Weighted average exercise price for options exercisable at year end $ 0.00us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange42.48thru45.97Member
   
Range of exercise price, lower range limit $ 42.48us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeLowerRangeLimit
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange42.48thru45.97Member
   
Range of exercise price, upper range limit $ 45.97us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeUpperRangeLimit
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange42.48thru45.97Member
   
Weighted average remaining contractual life 6 years 2 months 11 days    
Exercise Price Range 22.47 thru 45.97 [Member] | Employee Stock Option [Member]      
Share-based Compensation Arrangement by Share-based Payment Award [Line Items]      
Outstanding at end of year (shares) 1,363us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange22.47thru45.97Member
   
Weighted Average Outstanding at end of year (per share) $ 28.05us-gaap_SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange22.47thru45.97Member
   
Exercisable at end of year 1,160us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange22.47thru45.97Member
   
Weighted average exercise price for options exercisable at year end $ 25.91us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange22.47thru45.97Member
   
Range of exercise price, lower range limit $ 22.47us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeLowerRangeLimit
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange22.47thru45.97Member
   
Range of exercise price, upper range limit $ 45.97us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeUpperRangeLimit
/ us-gaap_AwardTypeAxis
= us-gaap_EmployeeStockOptionMember
/ us-gaap_ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis
= fwrd_ExercisePriceRange22.47thru45.97Member
   
Weighted average remaining contractual life 2 years 2 months 11 days