| Note 6 - Capital Stock, Stock Plans, Warrants, and Stock Based Compensation (Details) - Status of Options Under the Company’s Stock Option Plans (USD $)
 | 12 Months Ended | 0 Months Ended | 12 Months Ended | 0 Months Ended |  | 
| Dec. 31, 2014 | Jul. 29, 2003 | Dec. 31, 2013 | Jul. 10, 2014 | Sep. 29, 2010 | Dec. 31, 2012 | 
| Note 6 - Capital Stock, Stock Plans, Warrants, and Stock Based Compensation (Details) - Status of Options Under the Company’s Stock Option Plans [Line Items] |  |  |  |  |  |  |  |  | 
| Shares | 362,800us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber |  |  |  |  |  |  |  | 
| Weighted Average Exercise Price | $ 9.53us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice |  |  |  |  |  |  |  | 
| Shares | 71,800us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross |  |  |  |  |  |  |  | 
| Weighted Average Exercise Price | $ 4.70us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice |  |  |  |  |  |  |  | 
| Exercised | (2,577)us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised |  |  |  |  |  |  |  | 
| Exercised | $ 2.79us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice |  |  |  |  |  |  |  | 
| Exercised | $ 3,705us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisesInPeriodTotalIntrinsicValue |  |  |  |  |  |  |  | 
| Shares | (193,000)us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod |  |  |  |  |  |  |  | 
| Shares | 239,023us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber | [1] |  |  |  |  |  |  | 
| Weighted Average Exercise Price | $ 7.81us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice | [1] |  |  |  |  |  |  | 
| Intrinsic Value (a) | 41,957us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingIntrinsicValue | [1] |  |  |  |  |  |  | 
| Shares | 167,223us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber | [1] |  |  |  |  |  |  | 
| Weighted Average Exercise Price | $ 9.15us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice | [1] |  |  |  |  |  |  | 
| Intrinsic Value (a) | 31,037us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsExercisableIntrinsicValue1 | [1] |  |  |  |  |  |  | 
| The 2003 Outside Directors Stock Plan [Member] |  |  |  |  |  |  |  |  | 
| Note 6 - Capital Stock, Stock Plans, Warrants, and Stock Based Compensation (Details) - Status of Options Under the Company’s Stock Option Plans [Line Items] |  |  |  |  |  |  |  |  | 
| Shares | 169,200us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  | 163,200us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  |  |  | 
| Weighted Average Exercise Price | $ 9.18us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  | $ 10.19us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  |  |  | 
| Shares | 16,800us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  | 30,000us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 | 24,000us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  |  |  | 
| Weighted Average Exercise Price | $ 3.70us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  | $ 2.89us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  |  |  | 
| Exercised | (2,577)us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  |  |  |  |  |  | 
| Exercised | $ 2.79us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  |  |  |  |  |  | 
| Exercised | 3,705us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisesInPeriodTotalIntrinsicValue / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 | [2] |  |  |  |  |  |  | 
| Shares | (14,400)us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  | (18,000)us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  |  |  | 
| Weighted Average Exercise Price | $ 8.50us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresAndExpirationsInPeriodWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  | $ 9.95us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresAndExpirationsInPeriodWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  |  |  | 
| Shares | 169,023us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  | 169,200us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  |  |  | 
| Weighted Average Exercise Price | $ 8.79us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  | $ 9.18us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  |  |  | 
| Intrinsic Value (a) | 41,957us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingIntrinsicValue / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 | [2] |  | 5,850us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingIntrinsicValue / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 | [2] |  |  |  | 
| Shares | 152,223us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  | 145,200us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  |  |  | 
| Weighted Average Exercise Price | $ 9.35us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  | $ 10.22us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2003OutsideDirectorsStockPlanMember
 |  |  |  |  | 
| Intrinsic Value (a) |  | [2] |  |  | [2] |  |  |  | 
| The 2004 Stock Option Plan [Member] |  |  |  |  |  |  |  |  | 
| Note 6 - Capital Stock, Stock Plans, Warrants, and Stock Based Compensation (Details) - Status of Options Under the Company’s Stock Option Plans [Line Items] |  |  |  |  |  |  |  |  | 
| Shares | 133,600us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber / us-gaap_PlanNameAxis
 = pesi_The2004StockOptionPlanMember
 |  |  | 182,100us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber / us-gaap_PlanNameAxis
 = pesi_The2004StockOptionPlanMember
 |  |  |  |  | 
| Weighted Average Exercise Price | $ 10.73us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2004StockOptionPlanMember
 |  |  | $ 10.55us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2004StockOptionPlanMember
 |  |  |  |  | 
| Shares | (118,600)us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod / us-gaap_PlanNameAxis
 = pesi_The2004StockOptionPlanMember
 |  |  | (48,500)us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod / us-gaap_PlanNameAxis
 = pesi_The2004StockOptionPlanMember
 |  |  |  |  | 
| Weighted Average Exercise Price | $ 11.19us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresAndExpirationsInPeriodWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2004StockOptionPlanMember
 |  |  | $ 10.05us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresAndExpirationsInPeriodWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2004StockOptionPlanMember
 |  |  |  |  | 
| Shares | 15,000us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber / us-gaap_PlanNameAxis
 = pesi_The2004StockOptionPlanMember
 |  |  | 133,600us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber / us-gaap_PlanNameAxis
 = pesi_The2004StockOptionPlanMember
 |  |  |  |  | 
| Weighted Average Exercise Price | $ 7.10us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2004StockOptionPlanMember
 |  |  | $ 10.73us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2004StockOptionPlanMember
 |  |  |  |  | 
| Intrinsic Value (a) |  | [2] |  |  | [2] |  |  |  | 
| Shares | 15,000us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber / us-gaap_PlanNameAxis
 = pesi_The2004StockOptionPlanMember
 |  |  | 133,600us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber / us-gaap_PlanNameAxis
 = pesi_The2004StockOptionPlanMember
 |  |  |  |  | 
| Weighted Average Exercise Price | $ 7.10us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2004StockOptionPlanMember
 |  |  | $ 10.73us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2004StockOptionPlanMember
 |  |  |  |  | 
| Intrinsic Value (a) |  | [2] |  |  | [2] |  |  |  | 
| The 2010 Stock Option Plan [Member] |  |  |  |  |  |  |  |  | 
| Note 6 - Capital Stock, Stock Plans, Warrants, and Stock Based Compensation (Details) - Status of Options Under the Company’s Stock Option Plans [Line Items] |  |  |  |  |  |  |  |  | 
| Shares | 60,000us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber / us-gaap_PlanNameAxis
 = pesi_The2010StockOptionPlanMember
 |  |  |  |  |  |  | 60,000us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber / us-gaap_PlanNameAxis
 = pesi_The2010StockOptionPlanMember
 | 
| Weighted Average Exercise Price | $ 7.85us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2010StockOptionPlanMember
 |  |  |  |  |  |  | $ 7.85us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2010StockOptionPlanMember
 | 
| Shares | 55,000us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross / us-gaap_PlanNameAxis
 = pesi_The2010StockOptionPlanMember
 |  |  |  |  | 55,000us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross / us-gaap_PlanNameAxis
 = pesi_The2010StockOptionPlanMember
 | 200,000us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross / us-gaap_PlanNameAxis
 = pesi_The2010StockOptionPlanMember
 |  | 
| Weighted Average Exercise Price | $ 5.00us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2010StockOptionPlanMember
 |  |  |  |  | $ 5.00us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2010StockOptionPlanMember
 |  |  | 
| Shares | (60,000)us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod / us-gaap_PlanNameAxis
 = pesi_The2010StockOptionPlanMember
 |  |  |  |  |  |  |  | 
| Weighted Average Exercise Price | $ 7.85us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresAndExpirationsInPeriodWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2010StockOptionPlanMember
 |  |  |  |  |  |  |  | 
| Shares | 55,000us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber / us-gaap_PlanNameAxis
 = pesi_The2010StockOptionPlanMember
 |  |  |  |  |  |  | 60,000us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber / us-gaap_PlanNameAxis
 = pesi_The2010StockOptionPlanMember
 | 
| Weighted Average Exercise Price | $ 5.00us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2010StockOptionPlanMember
 |  |  |  |  |  |  | $ 7.85us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2010StockOptionPlanMember
 | 
| Intrinsic Value (a) |  | [2] |  |  | [2] |  |  |  | 
| Shares |  |  |  | 40,000us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber / us-gaap_PlanNameAxis
 = pesi_The2010StockOptionPlanMember
 |  |  | 0us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber / us-gaap_PlanNameAxis
 = pesi_The2010StockOptionPlanMember
 |  | 
| Weighted Average Exercise Price |  |  |  | $ 7.85us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice / us-gaap_PlanNameAxis
 = pesi_The2010StockOptionPlanMember
 |  |  |  |  | 
| Intrinsic Value (a) |  | [2] |  |  | [2] |  |  |  | 
|  | 
|  |