XML 89 R85.htm IDEA: XBRL DOCUMENT
v2.4.1.9

Quarterly Data - Summary of Quarterly Financial Data (Detail) (USD $) In Thousands, except Per Share data, unless otherwise specified | 3 Months Ended | 12 Months Ended
--- | --- | ---
Dec. 31, 2014 | Sep. 30, 2014 | Jun. 30, 2014 | Mar. 31, 2014 | Dec. 31, 2013 | Sep. 30, 2013 | Jun. 30, 2013 | Mar. 31, 2013 | Dec. 31, 2014 | Dec. 31, 2013 | Dec. 31, 2012
Quarterly Financial Data [Line Items] |  |  |  |  |  |  |  |  |  |  |
Net sales | $ 102,158 us-gaap_SalesRevenueNet | $ 116,505 us-gaap_SalesRevenueNet | $ 101,988 us-gaap_SalesRevenueNet | $ 82,647 us-gaap_SalesRevenueNet | $ 85,641 us-gaap_SalesRevenueNet | $ 78,527 us-gaap_SalesRevenueNet | $ 87,942 us-gaap_SalesRevenueNet | $ 107,335 us-gaap_SalesRevenueNet | $ 403,298 us-gaap_SalesRevenueNet | $ 359,445 us-gaap_SalesRevenueNet | $ 388,902 us-gaap_SalesRevenueNet
Gross profit | 9,125 us-gaap_GrossProfit | 15,820 us-gaap_GrossProfit | 11,317 us-gaap_GrossProfit | 4,314 us-gaap_GrossProfit | 10,853 us-gaap_GrossProfit | 11,254 us-gaap_GrossProfit | 15,210 us-gaap_GrossProfit | 22,919 us-gaap_GrossProfit | 40,576 us-gaap_GrossProfit | 60,236 us-gaap_GrossProfit | 59,108 us-gaap_GrossProfit
Operating income (loss) | (13,410)us-gaap_OperatingIncomeLoss | 9,331 us-gaap_OperatingIncomeLoss | 5,399 us-gaap_OperatingIncomeLoss | (1,126)us-gaap_OperatingIncomeLoss | 5,679 us-gaap_OperatingIncomeLoss | 5,698 us-gaap_OperatingIncomeLoss | 9,269 us-gaap_OperatingIncomeLoss | 16,889 us-gaap_OperatingIncomeLoss | 194 us-gaap_OperatingIncomeLoss | 37,535 us-gaap_OperatingIncomeLoss | 31,286 us-gaap_OperatingIncomeLoss
Net income (loss) | (13,996)us-gaap_NetIncomeLoss | 5,021 us-gaap_NetIncomeLoss | 3,192 us-gaap_NetIncomeLoss | (12,104)us-gaap_NetIncomeLoss | (17,006)us-gaap_NetIncomeLoss | 1,016 us-gaap_NetIncomeLoss | 5,561 us-gaap_NetIncomeLoss | 9,506 us-gaap_NetIncomeLoss | (17,887)us-gaap_NetIncomeLoss | (923)us-gaap_NetIncomeLoss | 16,244 us-gaap_NetIncomeLoss
Basic earnings (loss) per share |  |  |  |  |  |  |  |  |  |  |
Continuing operations | $ (1.47)us-gaap_IncomeLossFromContinuingOperationsPerBasicShare | $ 0.62 us-gaap_IncomeLossFromContinuingOperationsPerBasicShare | $ 0.34 us-gaap_IncomeLossFromContinuingOperationsPerBasicShare | $ (0.13)us-gaap_IncomeLossFromContinuingOperationsPerBasicShare | $ 0.26 us-gaap_IncomeLossFromContinuingOperationsPerBasicShare | $ 0.29 us-gaap_IncomeLossFromContinuingOperationsPerBasicShare | $ 0.59 us-gaap_IncomeLossFromContinuingOperationsPerBasicShare | $ 1.16 us-gaap_IncomeLossFromContinuingOperationsPerBasicShare | $ (0.65)us-gaap_IncomeLossFromContinuingOperationsPerBasicShare | $ 2.29 us-gaap_IncomeLossFromContinuingOperationsPerBasicShare | $ 1.87 us-gaap_IncomeLossFromContinuingOperationsPerBasicShare
Discontinued operations |  | $ (0.09)us-gaap_DiscontinuedOperationIncomeLossFromDiscontinuedOperationNetOfTaxPerBasicShare |  | $ (1.14)us-gaap_DiscontinuedOperationIncomeLossFromDiscontinuedOperationNetOfTaxPerBasicShare | $ (2.06)us-gaap_DiscontinuedOperationIncomeLossFromDiscontinuedOperationNetOfTaxPerBasicShare | $ (0.18)us-gaap_DiscontinuedOperationIncomeLossFromDiscontinuedOperationNetOfTaxPerBasicShare |  | $ (0.15)us-gaap_DiscontinuedOperationIncomeLossFromDiscontinuedOperationNetOfTaxPerBasicShare | $ (1.23)us-gaap_DiscontinuedOperationIncomeLossFromDiscontinuedOperationNetOfTaxPerBasicShare | $ (2.39)us-gaap_DiscontinuedOperationIncomeLossFromDiscontinuedOperationNetOfTaxPerBasicShare | $ (0.14)us-gaap_DiscontinuedOperationIncomeLossFromDiscontinuedOperationNetOfTaxPerBasicShare
Total | $ (1.47)us-gaap_EarningsPerShareBasic | $ 0.53 us-gaap_EarningsPerShareBasic | $ 0.34 us-gaap_EarningsPerShareBasic | $ (1.27)us-gaap_EarningsPerShareBasic | $ (1.80)us-gaap_EarningsPerShareBasic | $ 0.11 us-gaap_EarningsPerShareBasic | $ 0.59 us-gaap_EarningsPerShareBasic | $ 1.01 us-gaap_EarningsPerShareBasic | $ (1.88)us-gaap_EarningsPerShareBasic | $ (0.10)us-gaap_EarningsPerShareBasic | $ 1.73 us-gaap_EarningsPerShareBasic
Diluted earnings (loss) per share |  |  |  |  |  |  |  |  |  |  |
Continuing operations | $ (1.47)us-gaap_IncomeLossFromContinuingOperationsPerDilutedShare | $ 0.61 us-gaap_IncomeLossFromContinuingOperationsPerDilutedShare | $ 0.33 us-gaap_IncomeLossFromContinuingOperationsPerDilutedShare | $ (0.13)us-gaap_IncomeLossFromContinuingOperationsPerDilutedShare | $ 0.25 us-gaap_IncomeLossFromContinuingOperationsPerDilutedShare | $ 0.29 us-gaap_IncomeLossFromContinuingOperationsPerDilutedShare | $ 0.59 us-gaap_IncomeLossFromContinuingOperationsPerDilutedShare | $ 1.16 us-gaap_IncomeLossFromContinuingOperationsPerDilutedShare | $ (0.65)us-gaap_IncomeLossFromContinuingOperationsPerDilutedShare | $ 2.27 us-gaap_IncomeLossFromContinuingOperationsPerDilutedShare | $ 1.85 us-gaap_IncomeLossFromContinuingOperationsPerDilutedShare
Discontinued operations |  | $ (0.09)us-gaap_DiscontinuedOperationIncomeLossFromDiscontinuedOperationNetOfTaxPerDilutedShare |  | $ (1.14)us-gaap_DiscontinuedOperationIncomeLossFromDiscontinuedOperationNetOfTaxPerDilutedShare | $ (2.03)us-gaap_DiscontinuedOperationIncomeLossFromDiscontinuedOperationNetOfTaxPerDilutedShare | $ (0.18)us-gaap_DiscontinuedOperationIncomeLossFromDiscontinuedOperationNetOfTaxPerDilutedShare |  | $ (0.16)us-gaap_DiscontinuedOperationIncomeLossFromDiscontinuedOperationNetOfTaxPerDilutedShare | $ (1.23)us-gaap_DiscontinuedOperationIncomeLossFromDiscontinuedOperationNetOfTaxPerDilutedShare | $ (2.37)us-gaap_DiscontinuedOperationIncomeLossFromDiscontinuedOperationNetOfTaxPerDilutedShare | $ (0.13)us-gaap_DiscontinuedOperationIncomeLossFromDiscontinuedOperationNetOfTaxPerDilutedShare
Total | $ (1.47)us-gaap_EarningsPerShareDiluted | $ 0.52 us-gaap_EarningsPerShareDiluted | $ 0.33 us-gaap_EarningsPerShareDiluted | $ (1.27)us-gaap_EarningsPerShareDiluted | $ (1.78)us-gaap_EarningsPerShareDiluted | $ 0.11 us-gaap_EarningsPerShareDiluted | $ 0.59 us-gaap_EarningsPerShareDiluted | $ 1.00 us-gaap_EarningsPerShareDiluted | $ (1.88)us-gaap_EarningsPerShareDiluted | $ (0.10)us-gaap_EarningsPerShareDiluted | $ 1.72 us-gaap_EarningsPerShareDiluted
Operating Segments [Member] |  |  |  |  |  |  |  |  |  |  |
Quarterly Financial Data [Line Items] |  |  |  |  |  |  |  |  |  |  |
Operating income (loss) |  |  |  |  |  |  |  |  | 14,813 us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember | 52,286 us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember | 48,339 us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember
Corporate [Member] |  |  |  |  |  |  |  |  |  |  |
Quarterly Financial Data [Line Items] |  |  |  |  |  |  |  |  |  |  |
Operating income (loss) | (4,000)us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_CorporateNonSegmentMember | (3,943)us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_CorporateNonSegmentMember | (3,555)us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_CorporateNonSegmentMember | (3,121)us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_CorporateNonSegmentMember | (3,309)us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_CorporateNonSegmentMember | (3,559)us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_CorporateNonSegmentMember | (4,004)us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_CorporateNonSegmentMember | (3,879)us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_CorporateNonSegmentMember | (14,619)us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_CorporateNonSegmentMember | (14,751)us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_CorporateNonSegmentMember | (17,053)us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_CorporateNonSegmentMember
Water Transmission [Member] | Operating Segments [Member] |  |  |  |  |  |  |  |  |  |  |
Quarterly Financial Data [Line Items] |  |  |  |  |  |  |  |  |  |  |
Net sales | 56,484 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 76,857 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 62,205 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 42,999 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 42,831 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 46,835 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 58,148 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 78,613 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 238,545 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 226,427 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 269,203 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember
Gross profit | 9,883 us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 16,559 us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 11,491 us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 1,668 us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 7,026 us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 7,932 us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 12,125 us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 19,870 us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 39,601 us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 46,953 us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 45,051 us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember
Operating income (loss) | 7,817 us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 14,429 us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 9,543 us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | (299)us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 5,505 us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 6,306 us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 10,499 us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 18,033 us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 31,490 us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 40,343 us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember | 36,278 us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_WaterTransmissionMember
Tubular Products [Member] | Operating Segments [Member] |  |  |  |  |  |  |  |  |  |  |
Quarterly Financial Data [Line Items] |  |  |  |  |  |  |  |  |  |  |
Net sales | 45,674 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | 39,648 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | 39,783 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | 39,648 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | 42,810 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | 31,692 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | 29,794 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | 28,722 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | 164,753 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | 133,018 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | 119,699 us-gaap_SalesRevenueNet / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember
Gross profit | (758)us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | (739)us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | (174)us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | 2,646 us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | 3,827 us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | 3,322 us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | 3,085 us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | 3,049 us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | 975 us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | 13,283 us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | 14,057 us-gaap_GrossProfit / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember
Operating income (loss) | $ (17,227)us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | $ (1,155)us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | $ (589)us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | $ 2,294 us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | $ 3,483 us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | $ 2,951 us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | $ 2,774 us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | $ 2,735 us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | $ (16,677)us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | $ 11,943 us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember | $ 12,061 us-gaap_OperatingIncomeLoss / us-gaap_ConsolidationItemsAxis = us-gaap_OperatingSegmentsMember / us-gaap_StatementBusinessSegmentsAxis = us-gaap_PublicUtilitiesInventoryTubularGoodsMember

X
- Details
Name: | nwpx_QuarterlyFinancialDataLineItems
Namespace Prefix: | nwpx_
Data Type: | xbrli:stringItemType
Balance Type: | na
Period Type: | duration

X
- Definition Per basic share amount, after tax, of income (loss) from the day-to-day business activities of the discontinued operation. + References No definition available. + Details
Name: | us-gaap_DiscontinuedOperationIncomeLossFromDiscontinuedOperationNetOfTaxPerBasicShare
Namespace Prefix: | us-gaap_
Data Type: | num:perShareItemType
Balance Type: | na
Period Type: | duration

X
- Definition Per diluted share amount, after tax, of income (loss) from the day-to-day business activities of the discontinued operation. + References No definition available. + Details
Name: | us-gaap_DiscontinuedOperationIncomeLossFromDiscontinuedOperationNetOfTaxPerDilutedShare
Namespace Prefix: | us-gaap_
Data Type: | num:perShareItemType
Balance Type: | na
Period Type: | duration

X
- Definition The amount of net income (loss) for the period per each share of common stock or unit outstanding during the reporting period. + References Reference 1: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 260 -SubTopic 10 -Section 50 -Paragraph 1 -URI http://asc.fasb.org/extlink&oid=6371337&loc=d3e3550-109257 Reference 2: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 260 -SubTopic 10 -Section 45 -Paragraph 2 -URI http://asc.fasb.org/extlink&oid=7655603&loc=d3e1252-109256 Reference 3: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 260 -SubTopic 10 -Section 55 -Paragraph 52 -URI http://asc.fasb.org/extlink&oid=32703322&loc=d3e4984-109258 Reference 4: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 225 -SubTopic 10 -Section S99 -Paragraph 2 -Subparagraph (SX 210.5-03.21) -URI http://asc.fasb.org/extlink&oid=26872669&loc=d3e20235-122688 Reference 5: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 944 -SubTopic 225 -Section S99 -Paragraph 1 -Subparagraph (SX 210.7-04.19) -URI http://asc.fasb.org/extlink&oid=6879464&loc=d3e573970-122913 Reference 6: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 942 -SubTopic 225 -Section S99 -Paragraph 1 -Subparagraph (SX 210.9-04.23) -URI http://asc.fasb.org/extlink&oid=6879574&loc=d3e536633-122882 Reference 7: http://www.xbrl.org/2003/role/presentationRef -Publisher SEC -Name Regulation S-X (SX) -Number 210 -Section 04 -Paragraph 18 -Article 7 Reference 8: http://www.xbrl.org/2003/role/presentationRef -Publisher SEC -Name Regulation S-X (SX) -Number 210 -Section 03 -Paragraph 20 -Article 5 Reference 9: http://www.xbrl.org/2003/role/presentationRef -Publisher SEC -Name Regulation S-X (SX) -Number 210 -Section 04 -Paragraph 21 -Article 9 + Details
Name: | us-gaap_EarningsPerShareBasic
Namespace Prefix: | us-gaap_
Data Type: | num:perShareItemType
Balance Type: | na
Period Type: | duration

X
- Details
Name: | us-gaap_EarningsPerShareBasicAbstract
Namespace Prefix: | us-gaap_
Data Type: | xbrli:stringItemType
Balance Type: | na
Period Type: | duration

X
- Definition The amount of net income (loss) for the period available to each share of common stock or common unit outstanding during the reporting period and to each share or unit that would have been outstanding assuming the issuance of common shares or units for all dilutive potential common shares or units outstanding during the reporting period. + References Reference 1: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 260 -SubTopic 10 -Section 45 -Paragraph 2 -URI http://asc.fasb.org/extlink&oid=7655603&loc=d3e1252-109256 Reference 2: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 225 -SubTopic 10 -Section S99 -Paragraph 2 -Subparagraph (SX 210.5-03.21) -URI http://asc.fasb.org/extlink&oid=26872669&loc=d3e20235-122688 Reference 3: http://www.xbrl.org/2003/role/presentationRef -Publisher SEC -Name Regulation S-X (SX) -Number 210 -Section 04 -Paragraph 18 -Article 7 Reference 4: http://www.xbrl.org/2003/role/presentationRef -Publisher SEC -Name Regulation S-X (SX) -Number 210 -Section 03 -Paragraph 20 -Article 5 Reference 5: http://www.xbrl.org/2003/role/presentationRef -Publisher SEC -Name Regulation S-X (SX) -Number 210 -Section 04 -Paragraph 21 -Article 9 + Details
Name: | us-gaap_EarningsPerShareDiluted
Namespace Prefix: | us-gaap_
Data Type: | num:perShareItemType
Balance Type: | na
Period Type: | duration

X
- Details
Name: | us-gaap_EarningsPerShareDilutedAbstract
Namespace Prefix: | us-gaap_
Data Type: | xbrli:stringItemType
Balance Type: | na
Period Type: | duration

X
- Definition Aggregate revenue less cost of goods and services sold or operating expenses directly attributable to the revenue generation activity. + References Reference 1: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 225 -SubTopic 10 -Section S99 -Paragraph 2 -Subparagraph (SX 210.5-03.1,2) -URI http://asc.fasb.org/extlink&oid=26872669&loc=d3e20235-122688 + Details
Name: | us-gaap_GrossProfit
Namespace Prefix: | us-gaap_
Data Type: | xbrli:monetaryItemType
Balance Type: | credit
Period Type: | duration

X
- Definition The amount of net income (loss) from continuing operations per each share of common stock or unit outstanding during the reporting period. + References Reference 1: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 260 -SubTopic 10 -Section 45 -Paragraph 2 -URI http://asc.fasb.org/extlink&oid=7655603&loc=d3e1252-109256 Reference 2: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 225 -SubTopic 10 -Section S99 -Paragraph 2 -Subparagraph (SX 210.5-03.21) -URI http://asc.fasb.org/extlink&oid=26872669&loc=d3e20235-122688 Reference 3: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 944 -SubTopic 225 -Section S99 -Paragraph 1 -Subparagraph (SX 210.7-04.19) -URI http://asc.fasb.org/extlink&oid=6879464&loc=d3e573970-122913 Reference 4: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 942 -SubTopic 225 -Section S99 -Paragraph 1 -Subparagraph (SX 210.9-04.23) -URI http://asc.fasb.org/extlink&oid=6879574&loc=d3e536633-122882 Reference 5: http://www.xbrl.org/2003/role/presentationRef -Publisher SEC -Name Regulation S-X (SX) -Number 210 -Section 04 -Paragraph 18 -Article 7 Reference 6: http://www.xbrl.org/2003/role/presentationRef -Publisher SEC -Name Regulation S-X (SX) -Number 210 -Section 03 -Paragraph 20 -Article 5 Reference 7: http://www.xbrl.org/2003/role/presentationRef -Publisher SEC -Name Regulation S-X (SX) -Number 210 -Section 04 -Paragraph 21 -Article 9 + Details
Name: | us-gaap_IncomeLossFromContinuingOperationsPerBasicShare
Namespace Prefix: | us-gaap_
Data Type: | num:perShareItemType
Balance Type: | na
Period Type: | duration

X
- Definition The amount of net income (loss) derived from continuing operations during the period available to each share of common stock or common unit outstanding during the reporting period and to each share or unit that would have been outstanding assuming the issuance of common shares or units for all dilutive potential common shares or units outstanding during the reporting period. + References Reference 1: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 260 -SubTopic 10 -Section 50 -Paragraph 1 -Subparagraph (a) -URI http://asc.fasb.org/extlink&oid=6371337&loc=d3e3550-109257 Reference 2: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 260 -SubTopic 10 -Section 45 -Paragraph 2 -URI http://asc.fasb.org/extlink&oid=7655603&loc=d3e1252-109256 Reference 3: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 225 -SubTopic 10 -Section S99 -Paragraph 2 -Subparagraph (SX 210.5-03.21) -URI http://asc.fasb.org/extlink&oid=26872669&loc=d3e20235-122688 Reference 4: http://www.xbrl.org/2003/role/presentationRef -Publisher SEC -Name Regulation S-X (SX) -Number 210 -Section 04 -Paragraph 18 -Article 7 Reference 5: http://www.xbrl.org/2003/role/presentationRef -Publisher SEC -Name Regulation S-X (SX) -Number 210 -Section 03 -Paragraph 20 -Article 5 Reference 6: http://www.xbrl.org/2003/role/presentationRef -Publisher SEC -Name Regulation S-X (SX) -Number 210 -Section 04 -Paragraph 21 -Article 9 + Details
Name: | us-gaap_IncomeLossFromContinuingOperationsPerDilutedShare
Namespace Prefix: | us-gaap_
Data Type: | num:perShareItemType
Balance Type: | na
Period Type: | duration

X
- Definition The portion of profit or loss for the period, net of income taxes, which is attributable to the parent. + References Reference 1: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 230 -SubTopic 10 -Section 45 -Paragraph 28 -URI http://asc.fasb.org/extlink&oid=31042434&loc=d3e3602-108585 Reference 2: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 260 -SubTopic 10 -Section 50 -Paragraph 1 -URI http://asc.fasb.org/extlink&oid=6371337&loc=d3e3550-109257 Reference 3: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Glossary Other Comprehensive Income -URI http://asc.fasb.org/extlink&oid=6519514 Reference 4: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Glossary Net Income -URI http://asc.fasb.org/extlink&oid=6518256 Reference 5: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 944 -SubTopic 225 -Section S99 -Paragraph 1 -Subparagraph (SX 210.7-04.19) -URI http://asc.fasb.org/extlink&oid=6879464&loc=d3e573970-122913 Reference 6: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 225 -SubTopic 10 -Section S99 -Paragraph 2 -Subparagraph (SX 210.5-03.18) -URI http://asc.fasb.org/extlink&oid=26872669&loc=d3e20235-122688 Reference 7: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 944 -SubTopic 225 -Section S99 -Paragraph 1 -Subparagraph (SX 210.7-04.22) -URI http://asc.fasb.org/extlink&oid=6879464&loc=d3e573970-122913 Reference 8: http://www.xbrl.org/2003/role/presentationRef -Publisher SEC -Name Regulation S-X (SX) -Number 210 -Section 03 -Paragraph 19 -Article 5 Reference 9: http://www.xbrl.org/2003/role/presentationRef -Publisher SEC -Name Regulation S-X (SX) -Number 210 -Section 04 -Paragraph 20 -Article 9 + Details
Name: | us-gaap_NetIncomeLoss
Namespace Prefix: | us-gaap_
Data Type: | xbrli:monetaryItemType
Balance Type: | credit
Period Type: | duration

X
- Definition The net result for the period of deducting operating expenses from operating revenues. + References No definition available. + Details
Name: | us-gaap_OperatingIncomeLoss
Namespace Prefix: | us-gaap_
Data Type: | xbrli:monetaryItemType
Balance Type: | credit
Period Type: | duration

X
- Definition Total revenue from sale of goods and services rendered during the reporting period, in the normal course of business, reduced by sales returns and allowances, and sales discounts. + References Reference 1: http://www.xbrl.org/2003/role/presentationRef -Publisher FASB -Name Accounting Standards Codification -Topic 225 -SubTopic 10 -Section S99 -Paragraph 2 -Subparagraph (SX 210.5-03.1) -URI http://asc.fasb.org/extlink&oid=26872669&loc=d3e20235-122688 Reference 2: http://www.xbrl.org/2003/role/presentationRef -Publisher SEC -Name Regulation S-X (SX) -Number 210 -Section 03 -Paragraph 1 -Article 5 + Details
Name: | us-gaap_SalesRevenueNet
Namespace Prefix: | us-gaap_
Data Type: | xbrli:monetaryItemType
Balance Type: | credit
Period Type: | duration

X
- Details
Name: | us-gaap_ConsolidationItemsAxis=us-gaap_CorporateNonSegmentMember
Namespace Prefix: |
Data Type: | na
Balance Type: |
Period Type: |

X
- Details
Name: | us-gaap_ConsolidationItemsAxis=us-gaap_OperatingSegmentsMember
Namespace Prefix: |
Data Type: | na
Balance Type: |
Period Type: |

X
- Details
Name: | us-gaap_StatementBusinessSegmentsAxis=us-gaap_PublicUtilitiesInventoryTubularGoodsMember
Namespace Prefix: |
Data Type: | na
Balance Type: |
Period Type: |

X
- Details
Name: | us-gaap_StatementBusinessSegmentsAxis=us-gaap_WaterTransmissionMember
Namespace Prefix: |
Data Type: | na
Balance Type: |
Period Type: |