dtColorArray = [
	{     name : 'Scarlet', cmyk : [0, 100, 85, 5], rgb : [225,25,49], family : 'Red'},
	{     name : 'Ruby', cmyk : [20, 100, 95, 0], rgb : [201,37,48], family : 'Red'},
	{     name : 'Strawberry', cmyk : [0, 100, 82, 32], rgb : [173,12,37], family : 'Red'},
	{     name : 'Cream Rose', cmyk : [0, 12, 4, 0], rgb : [253, 228,229], family : 'Pink'},
	{     name : 'Teaberry', cmyk : [0,17,10,0], rgb : [252,218,213], family : 'Pink'},
	{     name : 'Carnation', cmyk : [0, 32, 10, 0], rgb : [249, 188,196], family : 'Pink'},
	{     name : 'Salmon', cmyk : [0,59,42,0], rgb : [244,135,127], family : 'Pink'},
	{     name : 'Flamingo', cmyk : [0, 59, 0, 0], rgb : [243,137,184], family : 'Pink'},
	{     name : 'Rose', cmyk : [1,50,15,0], rgb : [241,151,170], family : 'Pink'},
	{     name : 'Dusty Rose', cmyk : [0, 54, 22, 4], rgb : [234,138,151], family : 'Pink'},
	{     name : 'Mauve', cmyk : [0, 61, 16, 22], rgb : [197, 107,130], family : 'Pink'},
	{     name : 'Azalea', cmyk : [0, 85, 0, 0], rgb : [238, 77,155], family : 'Pink'},
	{     name : 'Hibiscus', cmyk : [3,85,6,0], rgb : [230,76,147], family : 'Pink'},
	{     name : 'Wine', cmyk : [0, 97, 41, 28], rgb : [181, 21, 76], family : 'Pink'},
	{     name : 'Burgundy', cmyk : [0, 100, 30, 50], rgb : [139, 0,61], family : 'Pink'},
	{     name : 'Pale Peach', cmyk : [0, 6, 20, 0], rgb : [255, 238,206], family : 'Orange'},
	{     name : 'Peach', cmyk : [0, 21, 28, 0], rgb : [253, 207,179], family : 'Orange'},
	{     name : 'Coral', cmyk : [0, 54, 45, 0], rgb : [246, 143,125], family : 'Orange'},
	{     name : 'Carrot', cmyk : [0, 37, 87, 0], rgb : [251, 172,59], family : 'Orange'},
	{     name : 'Sunset', cmyk : [0,48,68,5], rgb : [234,145,91], family : 'Orange'},
	{     name : 'Pumpkin', cmyk : [0, 76, 100, 15], rgb : [209, 86,29], family : 'Orange'},
	{     name : 'Butter', cmyk : [1, 1, 28, 0], rgb : [253, 245,196], family : 'Yellow'},
	{     name : 'Sunbeam', cmyk : [1,3,77,0], rgb : [255,234,90], family : 'Yellow'},
	{     name : 'Sunshine', cmyk : [0, 0, 100, 0], rgb : [255, 242,0], family : 'Yellow'},
	{     name : 'Marigold', cmyk : [0,15,75,0], rgb : [255,214,92], family : 'Yellow'},
	{     name : 'Tea Green', cmyk : [11, 0, 16, 1], rgb : [222, 236,216], family : 'Green'},
	{     name : 'Celadon', cmyk : [27, 0, 23, 0], rgb : [186, 224,205], family : 'Green'},
	{     name : 'Celery', cmyk : [30, 0, 52, 0], rgb : [183, 218,152], family : 'Green'},
	{     name : 'Lime', cmyk : [38,0,78,0], rgb : [168, 209, 102], family : 'Green'},
	{     name : 'Tropic', cmyk : [48,0,53,0], rgb : [137,203,151], family : 'Green'},
	{     name : 'Kiwi', cmyk : [61, 0, 100, 0], rgb : [110, 190,68], family : 'Green'},
	{     name : 'Rainforest', cmyk : [78, 0, 73, 0], rgb : [0, 180,119], family : 'Green'},
	{     name : 'Sage', cmyk : [30, 0, 54, 34], rgb : [129, 156,107], family : 'Green'},
	{     name : 'Olive', cmyk : [35, 0, 80, 64], rgb : [79, 102,42], family : 'Green'},
	{     name : 'Hunter', cmyk : [75, 0, 100, 75], rgb : [0, 72,18], family : 'Green'},
	{     name : 'Ice', cmyk : [11, 1, 0, 0], rgb : [223, 239, 250], family : 'Blue'},
	{     name : 'Sky', cmyk : [25, 2, 0, 0], rgb : [185, 224, 247], family : 'Blue'},
	{     name : 'Bubble', cmyk : [20,0,6,0], rgb : [201,233,238], family : 'Blue'},
	{     name : 'Turquoise', cmyk : [52, 0, 18, 0], rgb : [113, 204,212], family : 'Blue'},
	{     name : 'Breeze', cmyk : [46, 13, 0, 0], rgb : [131, 188,231], family : 'Blue'},
	{     name : 'Rain', cmyk : [45, 11, 18, 0], rgb : [140, 191,201], family : 'Blue'},
	{     name : 'Light Blue', cmyk : [56, 3, 0, 0], rgb : [91, 196,240], family : 'Blue'},
	{     name : 'Cornflower', cmyk : [100, 11, 0, 0], rgb : [0, 159,227], family : 'Blue'},
	{     name : 'Ocean', cmyk : [89, 7, 31, 0], rgb : [0, 167, 181], family : 'Blue'},
	{     name : 'Periwinkle', cmyk : [75, 45, 0, 0], rgb : [68, 127,193], family : 'Blue'},
	{     name : 'Peacock', cmyk : [100, 36, 42, 0], rgb : [0, 128,145], family : 'Blue'},
	{     name : 'Royal', cmyk : [100, 50, 0, 25], rgb : [0, 89,150], family : 'Blue'},
	{     name : 'Denim', cmyk : [100,66,0,18], rgb : [0,80,149], family : 'Blue'},
	{     name : 'Indigo', cmyk : [100, 94, 0, 0], rgb : [40, 58,151], family : 'Blue'},
	{     name : 'Navy', cmyk : [100, 50, 0, 75], rgb : [0, 36, 76], family : 'Blue'},
	{     name : 'Lavender', cmyk : [12, 20, 0, 0], rgb : [218, 202,227], family : 'Purple'},
	{     name : 'Wild Orchid', cmyk : [14,44,0,0], rgb : [212,156,199], family : 'Purple'},
	{     name : 'Orchid', cmyk : [14, 34, 0, 0], rgb : [212, 174,210], family : 'Purple'},
	{     name : 'Lilac', cmyk : [24, 39, 0, 0], rgb : [191, 160,203], family : 'Purple'},
	{     name : 'Violet', cmyk : [24,73,0,0], rgb : [191,101,168], family : 'Purple'},
	{     name : 'Mulberry', cmyk : [42, 77, 24, 8], rgb : [149, 83,127], family : 'Purple'},
	{     name : 'Plum', cmyk : [75, 100, 7, 0], rgb : [103, 45,137], family : 'Purple'},
	{     name : 'Eggplant', cmyk : [30, 76, 0, 62], rgb : [90, 37,82], family : 'Purple'},
	{     name : 'Champagne', cmyk : [6, 9, 19, 0], rgb : [238, 226,205], family : 'Brown'},
	{     name : 'Ashwood', cmyk : [1, 14, 22, 38], rgb : [168, 151,135], family : 'Brown'},
	{     name : 'Latte', cmyk : [0, 23, 36, 56], rgb : [135, 109,88], family : 'Brown'},
	{     name : 'Cinnamon', cmyk : [32, 70, 85, 10], rgb : [165, 94,60], family : 'Brown'},
	{     name : 'Cocoa', cmyk : [0, 65, 97, 57], rgb : [129, 61, 0], family : 'Brown'},
	{     name : 'Chocolate', cmyk : [35, 75, 100, 75], rgb : [66, 27,0], family : 'Brown'},
	{     name : 'White', cmyk : [0, 0, 0, 0], rgb : [255, 255, 255], family : 'Neutral'},
	{     name : 'Ivory', cmyk : [0, 0, 7, 2], rgb : [249, 247, 232], family : 'Neutral'},
	{     name : 'Winter White', cmyk : [3, 2, 6, 4], rgb : [234, 233,227], family : 'Neutral'},
	{     name : 'Silver', cmyk : [5, 2, 3, 12], rgb : [212, 216,216], family : 'Neutral'},
	{     name : 'Gold', cmyk : [0, 13, 45, 15], rgb : [221, 192,135], family : 'Neutral'},
	{     name : 'Charcoal', cmyk : [13, 4, 7, 60], rgb : [111, 118,120], family : 'Neutral'},
	{     name : 'Black', cmyk : [0, 0, 0, 100], rgb : [35, 31, 32], family : 'Neutral'}
];dtFontArray = [

	{ 
		displayName : 'AdageScriptJF Regular',
		faceName : 'AdageScriptJF\tRegular',
		imageName : 'AdageScriptJF!Regular.jpg'
	},
	{ 
		displayName : 'AnnabelleJF Regular',
		faceName : 'AnnabelleJF\tRegular',
		imageName : 'AnnabelleJF!Regular.jpg'
	},
	{ 
		displayName : 'Apollo MT Std Italic',
		faceName : 'Apollo MT Std\tItalic',
		imageName : 'Apollo-MT-Std!Italic.jpg'
	},
	{ 
		displayName : 'Apollo MT Std Regular',
		faceName : 'Apollo MT Std\tRegular',
		imageName : 'Apollo-MT-Std!Regular.jpg'
	},
	{ 
		displayName : 'Apollo MT Std Semibold',
		faceName : 'Apollo MT Std\tSemibold',
		imageName : 'Apollo-MT-Std!Semibold.jpg'
	},
	{ 
		displayName : 'BakerSignet BT Roman',
		faceName : 'BakerSignet BT\tRoman',
		imageName : 'BakerSignet-BT!Roman.jpg'
	},
	{ 
		displayName : 'Bauhaus Std Bold',
		faceName : 'Bauhaus Std\tBold',
		imageName : 'Bauhaus-Std!Bold.jpg'
	},
	{ 
		displayName : 'Bauhaus Std Demi',
		faceName : 'Bauhaus Std\tDemi',
		imageName : 'Bauhaus-Std!Demi.jpg'
	},
	{ 
		displayName : 'Bauhaus Std Heavy',
		faceName : 'Bauhaus Std\tHeavy',
		imageName : 'Bauhaus-Std!Heavy.jpg'
	},
	{ 
		displayName : 'Bauhaus Std Light',
		faceName : 'Bauhaus Std\tLight',
		imageName : 'Bauhaus-Std!Light.jpg'
	},
	{ 
		displayName : 'Bauhaus Std Medium',
		faceName : 'Bauhaus Std\tMedium',
		imageName : 'Bauhaus-Std!Medium.jpg'
	},
	{ 
		displayName : 'Bickham Script Std Bold',
		faceName : 'Bickham Script Std\tBold',
		imageName : 'Bickham-Script-Std!Bold.jpg'
	},
	{ 
		displayName : 'Bickham Script Std Regular',
		faceName : 'Bickham Script Std\tRegular',
		imageName : 'Bickham-Script-Std!Regular.jpg'
	},
	{ 
		displayName : 'Bickham Script Std Semibold',
		faceName : 'Bickham Script Std\tSemibold',
		imageName : 'Bickham-Script-Std!Semibold.jpg'
	},
	{ 
		displayName : 'BookmanSwashBJF Regular',
		faceName : 'BookmanSwashBJF\tRegular',
		imageName : 'BookmanSwashBJF!Regular.jpg'
	},
	{ 
		displayName : 'Bossa Nova MVB Std Regular',
		faceName : 'Bossa Nova MVB Std\tRegular',
		imageName : 'Bossa-Nova-MVB-Std!Regular.jpg'
	},
	{ 
		displayName : 'CavettoRomanJF Regular',
		faceName : 'CavettoRomanJF\tRegular',
		imageName : 'CavettoRomanJF!Regular.jpg'
	},
	{ 
		displayName : 'Charme Std Roman',
		faceName : 'Charme Std\tRoman',
		imageName : 'Charme-Std!Roman.jpg'
	},
	{ 
		displayName : 'Copperplate Gothic Std 29 AB',
		faceName : 'Copperplate Gothic Std\t29 AB',
		imageName : 'Copperplate-Gothic-Std!29-AB.jpg'
	},
	{ 
		displayName : 'Copperplate Gothic Std 29 BC',
		faceName : 'Copperplate Gothic Std\t29 BC',
		imageName : 'Copperplate-Gothic-Std!29-BC.jpg'
	},
	{ 
		displayName : 'Copperplate Gothic Std 30 AB',
		faceName : 'Copperplate Gothic Std\t30 AB',
		imageName : 'Copperplate-Gothic-Std!30-AB.jpg'
	},
	{ 
		displayName : 'Copperplate Gothic Std 30 BC',
		faceName : 'Copperplate Gothic Std\t30 BC',
		imageName : 'Copperplate-Gothic-Std!30-BC.jpg'
	},
	{ 
		displayName : 'Copperplate Gothic Std 31 AB',
		faceName : 'Copperplate Gothic Std\t31 AB',
		imageName : 'Copperplate-Gothic-Std!31-AB.jpg'
	},
	{ 
		displayName : 'Copperplate Gothic Std 31 BC',
		faceName : 'Copperplate Gothic Std\t31 BC',
		imageName : 'Copperplate-Gothic-Std!31-BC.jpg'
	},
	{ 
		displayName : 'Copperplate Gothic Std 32 AB',
		faceName : 'Copperplate Gothic Std\t32 AB',
		imageName : 'Copperplate-Gothic-Std!32-AB.jpg'
	},
	{ 
		displayName : 'Copperplate Gothic Std 32 BC',
		faceName : 'Copperplate Gothic Std\t32 BC',
		imageName : 'Copperplate-Gothic-Std!32-BC.jpg'
	},
	{ 
		displayName : 'Copperplate Gothic Std 33 BC',
		faceName : 'Copperplate Gothic Std\t33 BC',
		imageName : 'Copperplate-Gothic-Std!33-BC.jpg'
	},
	{ 
		displayName : 'Coronet LT Std Bold',
		faceName : 'Coronet LT Std\tBold',
		imageName : 'Coronet-LT-Std!Bold.jpg'
	},
	{ 
		displayName : 'Coronet LT Std Regular',
		faceName : 'Coronet LT Std\tRegular',
		imageName : 'Coronet-LT-Std!Regular.jpg'
	},
	{ 
		displayName : 'Diskus LT Std Bold',
		faceName : 'Diskus LT Std\tBold',
		imageName : 'Diskus-LT-Std!Bold.jpg'
	},
	{ 
		displayName : 'Diskus LT Std Regular',
		faceName : 'Diskus LT Std\tRegular',
		imageName : 'Diskus-LT-Std!Regular.jpg'
	},
	{ 
		displayName : 'Ex Ponto Pro Bold',
		faceName : 'Ex Ponto Pro\tBold',
		imageName : 'Ex-Ponto-Pro!Bold.jpg'
	},
	{ 
		displayName : 'Ex Ponto Pro Light',
		faceName : 'Ex Ponto Pro\tLight',
		imageName : 'Ex-Ponto-Pro!Light.jpg'
	},
	{ 
		displayName : 'Ex Ponto Pro Regular',
		faceName : 'Ex Ponto Pro\tRegular',
		imageName : 'Ex-Ponto-Pro!Regular.jpg'
	},
	{ 
		displayName : 'Gill Sans Std Bold',
		faceName : 'Gill Sans Std\tBold',
		imageName : 'Gill-Sans-Std!Bold.jpg'
	},
	{ 
		displayName : 'Gill Sans Std Bold Condensed',
		faceName : 'Gill Sans Std\tBold Condensed',
		imageName : 'Gill-Sans-Std!Bold-Condensed.jpg'
	},
	{ 
		displayName : 'Gill Sans Std Bold Extra Condensed',
		faceName : 'Gill Sans Std\tBold Extra Condensed',
		imageName : 'Gill-Sans-Std!Bold-Extra-Condensed.jpg'
	},
	{ 
		displayName : 'Gill Sans Std Bold Italic',
		faceName : 'Gill Sans Std\tBold Italic',
		imageName : 'Gill-Sans-Std!Bold-Italic.jpg'
	},
	{ 
		displayName : 'Gill Sans Std Condensed',
		faceName : 'Gill Sans Std\tCondensed',
		imageName : 'Gill-Sans-Std!Condensed.jpg'
	},
	{ 
		displayName : 'Gill Sans Std Extra Bold',
		faceName : 'Gill Sans Std\tExtra Bold',
		imageName : 'Gill-Sans-Std!Extra-Bold.jpg'
	},
	{ 
		displayName : 'Gill Sans Std Extra Bold Display',
		faceName : 'Gill Sans Std\tExtra Bold Display',
		imageName : 'Gill-Sans-Std!Extra-Bold-Display.jpg'
	},
	{ 
		displayName : 'Gill Sans Std Italic',
		faceName : 'Gill Sans Std\tItalic',
		imageName : 'Gill-Sans-Std!Italic.jpg'
	},
	{ 
		displayName : 'Gill Sans Std Light',
		faceName : 'Gill Sans Std\tLight',
		imageName : 'Gill-Sans-Std!Light.jpg'
	},
	{ 
		displayName : 'Gill Sans Std Light Italic',
		faceName : 'Gill Sans Std\tLight Italic',
		imageName : 'Gill-Sans-Std!Light-Italic.jpg'
	},
	{ 
		displayName : 'Gill Sans Std Light Shadowed',
		faceName : 'Gill Sans Std\tLight Shadowed',
		imageName : 'Gill-Sans-Std!Light-Shadowed.jpg'
	},
	{ 
		displayName : 'Gill Sans Std Regular',
		faceName : 'Gill Sans Std\tRegular',
		imageName : 'Gill-Sans-Std!Regular.jpg'
	},
	{ 
		displayName : 'Gill Sans Std Shadowed',
		faceName : 'Gill Sans Std\tShadowed',
		imageName : 'Gill-Sans-Std!Shadowed.jpg'
	},
	{ 
		displayName : 'Gill Sans Std Ultra Bold',
		faceName : 'Gill Sans Std\tUltra Bold',
		imageName : 'Gill-Sans-Std!Ultra-Bold.jpg'
	},
	{ 
		displayName : 'Gill Sans Std Ultra Bold Condensed',
		faceName : 'Gill Sans Std\tUltra Bold Condensed',
		imageName : 'Gill-Sans-Std!Ultra-Bold-Condensed.jpg'
	},
	{ 
		displayName : 'Goudy Oldstyle Std Bold',
		faceName : 'Goudy Oldstyle Std\tBold',
		imageName : 'Goudy-Oldstyle-Std!Bold.jpg'
	},
	{ 
		displayName : 'Goudy Oldstyle Std Bold Italic',
		faceName : 'Goudy Oldstyle Std\tBold Italic',
		imageName : 'Goudy-Oldstyle-Std!Bold-Italic.jpg'
	},
	{ 
		displayName : 'Goudy Oldstyle Std Italic',
		faceName : 'Goudy Oldstyle Std\tItalic',
		imageName : 'Goudy-Oldstyle-Std!Italic.jpg'
	},
	{ 
		displayName : 'Goudy Oldstyle Std Regular',
		faceName : 'Goudy Oldstyle Std\tRegular',
		imageName : 'Goudy-Oldstyle-Std!Regular.jpg'
	},
	{ 
		displayName : 'Italia Std Bold',
		faceName : 'Italia Std\tBold',
		imageName : 'Italia-Std!Bold.jpg'
	},
	{ 
		displayName : 'Italia Std Book',
		faceName : 'Italia Std\tBook',
		imageName : 'Italia-Std!Book.jpg'
	},
	{ 
		displayName : 'Italia Std Medium',
		faceName : 'Italia Std\tMedium',
		imageName : 'Italia-Std!Medium.jpg'
	},
	{ 
		displayName : 'ITC Franklin Gothic Std Book',
		faceName : 'ITC Franklin Gothic Std\tBook',
		imageName : 'ITC-Franklin-Gothic-Std!Book.jpg'
	},
	{ 
		displayName : 'ITC Franklin Gothic Std Book Compressed',
		faceName : 'ITC Franklin Gothic Std\tBook Compressed',
		imageName : 'ITC-Franklin-Gothic-Std!Book-Compressed.jpg'
	},
	{ 
		displayName : 'ITC Franklin Gothic Std Book Compressed Italic',
		faceName : 'ITC Franklin Gothic Std\tBook Compressed Italic',
		imageName : 'ITC-Franklin-Gothic-Std!Book-Compressed-Italic.jpg'
	},
	{ 
		displayName : 'ITC Franklin Gothic Std Book Condensed',
		faceName : 'ITC Franklin Gothic Std\tBook Condensed',
		imageName : 'ITC-Franklin-Gothic-Std!Book-Condensed.jpg'
	},
	{ 
		displayName : 'ITC Franklin Gothic Std Book Condensed Italic',
		faceName : 'ITC Franklin Gothic Std\tBook Condensed Italic',
		imageName : 'ITC-Franklin-Gothic-Std!Book-Condensed-Italic.jpg'
	},
	{ 
		displayName : 'ITC Franklin Gothic Std Book Extra Compressed',
		faceName : 'ITC Franklin Gothic Std\tBook Extra Compressed',
		imageName : 'ITC-Franklin-Gothic-Std!Book-Extra-Compressed.jpg'
	},
	{ 
		displayName : 'ITC Franklin Gothic Std Book Italic',
		faceName : 'ITC Franklin Gothic Std\tBook Italic',
		imageName : 'ITC-Franklin-Gothic-Std!Book-Italic.jpg'
	},
	{ 
		displayName : 'ITC Franklin Gothic Std Demi',
		faceName : 'ITC Franklin Gothic Std\tDemi',
		imageName : 'ITC-Franklin-Gothic-Std!Demi.jpg'
	},
	{ 
		displayName : 'ITC Franklin Gothic Std Demi Compressed',
		faceName : 'ITC Franklin Gothic Std\tDemi Compressed',
		imageName : 'ITC-Franklin-Gothic-Std!Demi-Compressed.jpg'
	},
	{ 
		displayName : 'ITC Franklin Gothic Std Demi Compressed Italic',
		faceName : 'ITC Franklin Gothic Std\tDemi Compressed Italic',
		imageName : 'ITC-Franklin-Gothic-Std!Demi-Compressed-Italic.jpg'
	},
	{ 
		displayName : 'ITC Franklin Gothic Std Demi Condensed',
		faceName : 'ITC Franklin Gothic Std\tDemi Condensed',
		imageName : 'ITC-Franklin-Gothic-Std!Demi-Condensed.jpg'
	},
	{ 
		displayName : 'ITC Franklin Gothic Std Demi Condensed Italic',
		faceName : 'ITC Franklin Gothic Std\tDemi Condensed Italic',
		imageName : 'ITC-Franklin-Gothic-Std!Demi-Condensed-Italic.jpg'
	},
	{ 
		displayName : 'ITC Franklin Gothic Std Demi Extra Compressed',
		faceName : 'ITC Franklin Gothic Std\tDemi Extra Compressed',
		imageName : 'ITC-Franklin-Gothic-Std!Demi-Extra-Compressed.jpg'
	},
	{ 
		displayName : 'ITC Franklin Gothic Std Demi Italic',
		faceName : 'ITC Franklin Gothic Std\tDemi Italic',
		imageName : 'ITC-Franklin-Gothic-Std!Demi-Italic.jpg'
	},
	{ 
		displayName : 'ITC Franklin Gothic Std Heavy',
		faceName : 'ITC Franklin Gothic Std\tHeavy',
		imageName : 'ITC-Franklin-Gothic-Std!Heavy.jpg'
	},
	{ 
		displayName : 'ITC Franklin Gothic Std Heavy Italic',
		faceName : 'ITC Franklin Gothic Std\tHeavy Italic',
		imageName : 'ITC-Franklin-Gothic-Std!Heavy-Italic.jpg'
	},
	{ 
		displayName : 'ITC Franklin Gothic Std Medium',
		faceName : 'ITC Franklin Gothic Std\tMedium',
		imageName : 'ITC-Franklin-Gothic-Std!Medium.jpg'
	},
	{ 
		displayName : 'ITC Franklin Gothic Std Medium Condensed',
		faceName : 'ITC Franklin Gothic Std\tMedium Condensed',
		imageName : 'ITC-Franklin-Gothic-Std!Medium-Condensed.jpg'
	},
	{ 
		displayName : 'ITC Franklin Gothic Std Medium Condensed Italic',
		faceName : 'ITC Franklin Gothic Std\tMedium Condensed Italic',
		imageName : 'ITC-Franklin-Gothic-Std!Medium-Condensed-Italic.jpg'
	},
	{ 
		displayName : 'ITC Franklin Gothic Std Medium Italic',
		faceName : 'ITC Franklin Gothic Std\tMedium Italic',
		imageName : 'ITC-Franklin-Gothic-Std!Medium-Italic.jpg'
	},
	{ 
		displayName : 'ITC Isadora Std Bold',
		faceName : 'ITC Isadora Std\tBold',
		imageName : 'ITC-Isadora-Std!Bold.jpg'
	},
	{ 
		displayName : 'ITC Isadora Std Regular',
		faceName : 'ITC Isadora Std\tRegular',
		imageName : 'ITC-Isadora-Std!Regular.jpg'
	},
	{ 
		displayName : 'Joanna MT Std Bold',
		faceName : 'Joanna MT Std\tBold',
		imageName : 'Joanna-MT-Std!Bold.jpg'
	},
	{ 
		displayName : 'Joanna MT Std Bold Italic',
		faceName : 'Joanna MT Std\tBold Italic',
		imageName : 'Joanna-MT-Std!Bold-Italic.jpg'
	},
	{ 
		displayName : 'Joanna MT Std Extra Bold',
		faceName : 'Joanna MT Std\tExtra Bold',
		imageName : 'Joanna-MT-Std!Extra-Bold.jpg'
	},
	{ 
		displayName : 'Joanna MT Std Italic',
		faceName : 'Joanna MT Std\tItalic',
		imageName : 'Joanna-MT-Std!Italic.jpg'
	},
	{ 
		displayName : 'Joanna MT Std Regular',
		faceName : 'Joanna MT Std\tRegular',
		imageName : 'Joanna-MT-Std!Regular.jpg'
	},
	{ 
		displayName : 'Joanna MT Std Semibold',
		faceName : 'Joanna MT Std\tSemibold',
		imageName : 'Joanna-MT-Std!Semibold.jpg'
	},
	{ 
		displayName : 'Joanna MT Std Semibold Italic',
		faceName : 'Joanna MT Std\tSemibold Italic',
		imageName : 'Joanna-MT-Std!Semibold-Italic.jpg'
	},
	{ 
		displayName : 'JohnAndrewJF Regular',
		faceName : 'JohnAndrewJF\tRegular',
		imageName : 'JohnAndrewJF!Regular.jpg'
	},
	{ 
		displayName : 'MaryHelenJF Regular',
		faceName : 'MaryHelenJF\tRegular',
		imageName : 'MaryHelenJF!Regular.jpg'
	},
	{ 
		displayName : 'Medici Script LT Std Medium',
		faceName : 'Medici Script LT Std\tMedium',
		imageName : 'Medici-Script-LT-Std!Medium.jpg'
	},
	{ 
		displayName : 'Myriad Pro Black',
		faceName : 'Myriad Pro\tBlack',
		imageName : 'Myriad-Pro!Black.jpg'
	},
	{ 
		displayName : 'Myriad Pro Black-Condensed',
		faceName : 'Myriad Pro\tBlack-Condensed',
		imageName : 'Myriad-Pro!Black-Condensed.jpg'
	},
	{ 
		displayName : 'Myriad Pro Black Condensed Italic',
		faceName : 'Myriad Pro\tBlack Condensed Italic',
		imageName : 'Myriad-Pro!Black-Condensed-Italic.jpg'
	},
	{ 
		displayName : 'Myriad Pro Black Italic',
		faceName : 'Myriad Pro\tBlack Italic',
		imageName : 'Myriad-Pro!Black-Italic.jpg'
	},
	{ 
		displayName : 'Myriad Pro Black SemiCondensed',
		faceName : 'Myriad Pro\tBlack SemiCondensed',
		imageName : 'Myriad-Pro!Black-SemiCondensed.jpg'
	},
	{ 
		displayName : 'Myriad Pro Black SemiCondensed Italic',
		faceName : 'Myriad Pro\tBlack SemiCondensed Italic',
		imageName : 'Myriad-Pro!Black-SemiCondensed-Italic.jpg'
	},
	{ 
		displayName : 'Myriad Pro Black SemiExtended',
		faceName : 'Myriad Pro\tBlack SemiExtended',
		imageName : 'Myriad-Pro!Black-SemiExtended.jpg'
	},
	{ 
		displayName : 'Myriad Pro Black SemiExtended Italic',
		faceName : 'Myriad Pro\tBlack SemiExtended Italic',
		imageName : 'Myriad-Pro!Black-SemiExtended-Italic.jpg'
	},
	{ 
		displayName : 'Myriad Pro Bold',
		faceName : 'Myriad Pro\tBold',
		imageName : 'Myriad-Pro!Bold.jpg'
	},
	{ 
		displayName : 'Myriad Pro Bold Condensed',
		faceName : 'Myriad Pro\tBold Condensed',
		imageName : 'Myriad-Pro!Bold-Condensed.jpg'
	},
	{ 
		displayName : 'Myriad Pro Bold Condensed Italic',
		faceName : 'Myriad Pro\tBold Condensed Italic',
		imageName : 'Myriad-Pro!Bold-Condensed-Italic.jpg'
	},
	{ 
		displayName : 'Myriad Pro Bold Italic',
		faceName : 'Myriad Pro\tBold Italic',
		imageName : 'Myriad-Pro!Bold-Italic.jpg'
	},
	{ 
		displayName : 'Myriad Pro Bold SemiCondensed',
		faceName : 'Myriad Pro\tBold SemiCondensed',
		imageName : 'Myriad-Pro!Bold-SemiCondensed.jpg'
	},
	{ 
		displayName : 'Myriad Pro Bold SemiCondensed Italic',
		faceName : 'Myriad Pro\tBold SemiCondensed Italic',
		imageName : 'Myriad-Pro!Bold-SemiCondensed-Italic.jpg'
	},
	{ 
		displayName : 'Myriad Pro Bold SemiExtended',
		faceName : 'Myriad Pro\tBold SemiExtended',
		imageName : 'Myriad-Pro!Bold-SemiExtended.jpg'
	},
	{ 
		displayName : 'Myriad Pro Bold SemiExtended Italic',
		faceName : 'Myriad Pro\tBold SemiExtended Italic',
		imageName : 'Myriad-Pro!Bold-SemiExtended-Italic.jpg'
	},
	{ 
		displayName : 'Myriad Pro Condensed',
		faceName : 'Myriad Pro\tCondensed',
		imageName : 'Myriad-Pro!Condensed.jpg'
	},
	{ 
		displayName : 'Myriad Pro Condensed Italic',
		faceName : 'Myriad Pro\tCondensed Italic',
		imageName : 'Myriad-Pro!Condensed-Italic.jpg'
	},
	{ 
		displayName : 'Myriad Pro Italic',
		faceName : 'Myriad Pro\tItalic',
		imageName : 'Myriad-Pro!Italic.jpg'
	},
	{ 
		displayName : 'Myriad Pro Light',
		faceName : 'Myriad Pro\tLight',
		imageName : 'Myriad-Pro!Light.jpg'
	},
	{ 
		displayName : 'Myriad Pro Light Condensed',
		faceName : 'Myriad Pro\tLight Condensed',
		imageName : 'Myriad-Pro!Light-Condensed.jpg'
	},
	{ 
		displayName : 'Myriad Pro Light Condensed Italic',
		faceName : 'Myriad Pro\tLight Condensed Italic',
		imageName : 'Myriad-Pro!Light-Condensed-Italic.jpg'
	},
	{ 
		displayName : 'Myriad Pro Light Italic',
		faceName : 'Myriad Pro\tLight Italic',
		imageName : 'Myriad-Pro!Light-Italic.jpg'
	},
	{ 
		displayName : 'Myriad Pro Light SemiCondensed',
		faceName : 'Myriad Pro\tLight SemiCondensed',
		imageName : 'Myriad-Pro!Light-SemiCondensed.jpg'
	},
	{ 
		displayName : 'Myriad Pro Light SemiCondensed Italic',
		faceName : 'Myriad Pro\tLight SemiCondensed Italic',
		imageName : 'Myriad-Pro!Light-SemiCondensed-Italic.jpg'
	},
	{ 
		displayName : 'Myriad Pro Light SemiExtended',
		faceName : 'Myriad Pro\tLight SemiExtended',
		imageName : 'Myriad-Pro!Light-SemiExtended.jpg'
	},
	{ 
		displayName : 'Myriad Pro Light SemiExtended Italic',
		faceName : 'Myriad Pro\tLight SemiExtended Italic',
		imageName : 'Myriad-Pro!Light-SemiExtended-Italic.jpg'
	},
	{ 
		displayName : 'Myriad Pro Regular',
		faceName : 'Myriad Pro\tRegular',
		imageName : 'Myriad-Pro!Regular.jpg'
	},
	{ 
		displayName : 'Myriad Pro Semibold',
		faceName : 'Myriad Pro\tSemibold',
		imageName : 'Myriad-Pro!Semibold.jpg'
	},
	{ 
		displayName : 'Myriad Pro Semibold Condensed',
		faceName : 'Myriad Pro\tSemibold Condensed',
		imageName : 'Myriad-Pro!Semibold-Condensed.jpg'
	},
	{ 
		displayName : 'Myriad Pro Semibold Condensed Italic',
		faceName : 'Myriad Pro\tSemibold Condensed Italic',
		imageName : 'Myriad-Pro!Semibold-Condensed-Italic.jpg'
	},
	{ 
		displayName : 'Myriad Pro Semibold Italic',
		faceName : 'Myriad Pro\tSemibold Italic',
		imageName : 'Myriad-Pro!Semibold-Italic.jpg'
	},
	{ 
		displayName : 'Myriad Pro Semibold SemiCondensed',
		faceName : 'Myriad Pro\tSemibold SemiCondensed',
		imageName : 'Myriad-Pro!Semibold-SemiCondensed.jpg'
	},
	{ 
		displayName : 'Myriad Pro Semibold SemiCondensed Italic',
		faceName : 'Myriad Pro\tSemibold SemiCondensed Italic',
		imageName : 'Myriad-Pro!Semibold-SemiCondensed-Italic.jpg'
	},
	{ 
		displayName : 'Myriad Pro Semibold SemiExtended',
		faceName : 'Myriad Pro\tSemibold SemiExtended',
		imageName : 'Myriad-Pro!Semibold-SemiExtended.jpg'
	},
	{ 
		displayName : 'Myriad Pro Semibold SemiExtended Italic',
		faceName : 'Myriad Pro\tSemibold SemiExtended Italic',
		imageName : 'Myriad-Pro!Semibold-SemiExtended-Italic.jpg'
	},
	{ 
		displayName : 'Myriad Pro SemiCondensed',
		faceName : 'Myriad Pro\tSemiCondensed',
		imageName : 'Myriad-Pro!SemiCondensed.jpg'
	},
	{ 
		displayName : 'Myriad Pro SemiCondensed Italic',
		faceName : 'Myriad Pro\tSemiCondensed Italic',
		imageName : 'Myriad-Pro!SemiCondensed-Italic.jpg'
	},
	{ 
		displayName : 'Myriad Pro SemiExtended',
		faceName : 'Myriad Pro\tSemiExtended',
		imageName : 'Myriad-Pro!SemiExtended.jpg'
	},
	{ 
		displayName : 'Myriad Pro SemiExtended Italic',
		faceName : 'Myriad Pro\tSemiExtended Italic',
		imageName : 'Myriad-Pro!SemiExtended-Italic.jpg'
	},
	{ 
		displayName : 'Nuptial Script LT Std Medium',
		faceName : 'Nuptial Script LT Std\tMedium',
		imageName : 'Nuptial-Script-LT-Std!Medium.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std Bold',
		faceName : 'Ocean Sans Std\tBold',
		imageName : 'Ocean-Sans-Std!Bold.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std Bold Extended',
		faceName : 'Ocean Sans Std\tBold Extended',
		imageName : 'Ocean-Sans-Std!Bold-Extended.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std Bold Extended Italic',
		faceName : 'Ocean Sans Std\tBold Extended Italic',
		imageName : 'Ocean-Sans-Std!Bold-Extended-Italic.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std Bold Italic',
		faceName : 'Ocean Sans Std\tBold Italic',
		imageName : 'Ocean-Sans-Std!Bold-Italic.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std Bold SemiExtended',
		faceName : 'Ocean Sans Std\tBold SemiExtended',
		imageName : 'Ocean-Sans-Std!Bold-SemiExtended.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std Bold SemiExtended Italic',
		faceName : 'Ocean Sans Std\tBold SemiExtended Italic',
		imageName : 'Ocean-Sans-Std!Bold-SemiExtended-Italic.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std Book',
		faceName : 'Ocean Sans Std\tBook',
		imageName : 'Ocean-Sans-Std!Book.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std Book Extended',
		faceName : 'Ocean Sans Std\tBook Extended',
		imageName : 'Ocean-Sans-Std!Book-Extended.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std Book Extended Italic',
		faceName : 'Ocean Sans Std\tBook Extended Italic',
		imageName : 'Ocean-Sans-Std!Book-Extended-Italic.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std Book Italic',
		faceName : 'Ocean Sans Std\tBook Italic',
		imageName : 'Ocean-Sans-Std!Book-Italic.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std Book SemiExtended',
		faceName : 'Ocean Sans Std\tBook SemiExtended',
		imageName : 'Ocean-Sans-Std!Book-SemiExtended.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std Book SemiExtended Italic',
		faceName : 'Ocean Sans Std\tBook SemiExtended Italic',
		imageName : 'Ocean-Sans-Std!Book-SemiExtended-Italic.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std ExtraBold',
		faceName : 'Ocean Sans Std\tExtraBold',
		imageName : 'Ocean-Sans-Std!ExtraBold.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std ExtraBold Extended',
		faceName : 'Ocean Sans Std\tExtraBold Extended',
		imageName : 'Ocean-Sans-Std!ExtraBold-Extended.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std ExtraBold Extended Italic',
		faceName : 'Ocean Sans Std\tExtraBold Extended Italic',
		imageName : 'Ocean-Sans-Std!ExtraBold-Extended-Italic.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std ExtraBold Italic',
		faceName : 'Ocean Sans Std\tExtraBold Italic',
		imageName : 'Ocean-Sans-Std!ExtraBold-Italic.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std Light',
		faceName : 'Ocean Sans Std\tLight',
		imageName : 'Ocean-Sans-Std!Light.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std Light Extended',
		faceName : 'Ocean Sans Std\tLight Extended',
		imageName : 'Ocean-Sans-Std!Light-Extended.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std Light Extended Italic',
		faceName : 'Ocean Sans Std\tLight Extended Italic',
		imageName : 'Ocean-Sans-Std!Light-Extended-Italic.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std Light Italic',
		faceName : 'Ocean Sans Std\tLight Italic',
		imageName : 'Ocean-Sans-Std!Light-Italic.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std Semibold',
		faceName : 'Ocean Sans Std\tSemibold',
		imageName : 'Ocean-Sans-Std!Semibold.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std Semibold Extended',
		faceName : 'Ocean Sans Std\tSemibold Extended',
		imageName : 'Ocean-Sans-Std!Semibold-Extended.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std Semibold Extended Italic',
		faceName : 'Ocean Sans Std\tSemibold Extended Italic',
		imageName : 'Ocean-Sans-Std!Semibold-Extended-Italic.jpg'
	},
	{ 
		displayName : 'Ocean Sans Std Semibold Italic',
		faceName : 'Ocean Sans Std\tSemibold Italic',
		imageName : 'Ocean-Sans-Std!Semibold-Italic.jpg'
	},
	{ 
		displayName : 'Optima LT Std Black',
		faceName : 'Optima LT Std\tBlack',
		imageName : 'Optima-LT-Std!Black.jpg'
	},
	{ 
		displayName : 'Optima LT Std Black Italic',
		faceName : 'Optima LT Std\tBlack Italic',
		imageName : 'Optima-LT-Std!Black-Italic.jpg'
	},
	{ 
		displayName : 'Optima LT Std Bold',
		faceName : 'Optima LT Std\tBold',
		imageName : 'Optima-LT-Std!Bold.jpg'
	},
	{ 
		displayName : 'Optima LT Std Bold Italic',
		faceName : 'Optima LT Std\tBold Italic',
		imageName : 'Optima-LT-Std!Bold-Italic.jpg'
	},
	{ 
		displayName : 'Optima LT Std Demi',
		faceName : 'Optima LT Std\tDemi',
		imageName : 'Optima-LT-Std!Demi.jpg'
	},
	{ 
		displayName : 'Optima LT Std Demi Italic',
		faceName : 'Optima LT Std\tDemi Italic',
		imageName : 'Optima-LT-Std!Demi-Italic.jpg'
	},
	{ 
		displayName : 'Optima LT Std Extra Black',
		faceName : 'Optima LT Std\tExtra Black',
		imageName : 'Optima-LT-Std!Extra-Black.jpg'
	},
	{ 
		displayName : 'Optima LT Std Extra Black Italic',
		faceName : 'Optima LT Std\tExtra Black Italic',
		imageName : 'Optima-LT-Std!Extra-Black-Italic.jpg'
	},
	{ 
		displayName : 'Optima LT Std Italic',
		faceName : 'Optima LT Std\tItalic',
		imageName : 'Optima-LT-Std!Italic.jpg'
	},
	{ 
		displayName : 'Optima LT Std Medium',
		faceName : 'Optima LT Std\tMedium',
		imageName : 'Optima-LT-Std!Medium.jpg'
	},
	{ 
		displayName : 'Optima LT Std Medium Italic',
		faceName : 'Optima LT Std\tMedium Italic',
		imageName : 'Optima-LT-Std!Medium-Italic.jpg'
	},
	{ 
		displayName : 'Optima LT Std Roman',
		faceName : 'Optima LT Std\tRoman',
		imageName : 'Optima-LT-Std!Roman.jpg'
	},
	{ 
		displayName : 'Parisian Std Medium',
		faceName : 'Parisian Std\tMedium',
		imageName : 'Parisian-Std!Medium.jpg'
	},
	{ 
		displayName : 'Scriptina Regular',
		faceName : 'Scriptina\tRegular',
		imageName : 'Scriptina!Regular.jpg'
	},
	{ 
		displayName : 'Script MT Std Bold',
		faceName : 'Script MT Std\tBold',
		imageName : 'Script-MT-Std!Bold.jpg'
	},
	{ 
		displayName : 'StanzieJF Regular',
		faceName : 'StanzieJF\tRegular',
		imageName : 'StanzieJF!Regular.jpg'
	},
	{ 
		displayName : 'TamarilloJF Regular',
		faceName : 'TamarilloJF\tRegular',
		imageName : 'TamarilloJF!Regular.jpg'
	},
	{ 
		displayName : 'University Std Roman',
		faceName : 'University Std\tRoman',
		imageName : 'University-Std!Roman.jpg'
	},
	{ 
		displayName : 'ValentinaJoyJF Regular',
		faceName : 'ValentinaJoyJF\tRegular',
		imageName : 'ValentinaJoyJF!Regular.jpg'
	},
	{ 
		displayName : 'Voluta Script Pro Regular',
		faceName : 'Voluta Script Pro\tRegular',
		imageName : 'Voluta-Script-Pro!Regular.jpg'
	},
	{ 
		displayName : 'Wendy LP Std Bold',
		faceName : 'Wendy LP Std\tBold',
		imageName : 'Wendy-LP-Std!Bold.jpg'
	},
	{ 
		displayName : 'Wendy LP Std Light',
		faceName : 'Wendy LP Std\tLight',
		imageName : 'Wendy-LP-Std!Light.jpg'
	},
	{ 
		displayName : 'Wendy LP Std Medium',
		faceName : 'Wendy LP Std\tMedium',
		imageName : 'Wendy-LP-Std!Medium.jpg'
	},
	{ 
		displayName : 'Zapfino Extra LTX Pro Regular',
		faceName : 'Zapfino Extra LTX Pro\tRegular',
		imageName : 'Zapfino-Extra-LTX-Pro!Regular.jpg'
	},
	{ 
		displayName : 'Zapfino Forte LT Pro Regular',
		faceName : 'Zapfino Forte LT Pro\tRegular',
		imageName : 'Zapfino-Forte-LT-Pro!Regular.jpg'
	}

];




// Global variables
dtContainerId = "";
dtSessionId = "";
dtDocList = new Array();

dtDoc = null;

dtCurrentDocumentIndex = 0;
dtCurrentPageNumber = 1;
dtNoticeList = new Array();
dtViewedMultiplePages = false;
dtRecentFontsArray = [];
dtRecentColorsArray = [];
dtUseCartIntegration = false;
dtMarketId = 517;
dtHasSaved = false;
dtLoginPanel = null;

// internal objects for state keeping
_dtHoverRegionList = new Array();
_dtPreviewImageTop = null;
_dtPreviewImageBottom = null;
_dtLoadingImageId = 'dtLoadingImage';
_dtStockNoteImageId = 'dtStockNoteImage';
_dtFinishCallback = null;

_dtDocumentRequestUpdate = false;
_dtDocumentCurrentlyInUpdate = false;
setInterval("dtDocumentUpdateTimer()", 250);

_dtTemplateSwatchEditorModule = null;
_dtDocNavigator = null;
_dtImprintEditor = null;
_dtSkipViewStateValidation = null;

/*
	docList
		itemType (DOL, IMPRINT, STOCK)
		documentId
		shoppingItemId
		shoppingItemParentId
		productName
		productStylecode
		templateStylecode
		productSize
		focus
		xsImageSrc 
		previewSrc
		userApprovalInitials
		userDesignNotes
		
		_dtDocData
		_imprintFormData
		_isDeleted
		_imprintEditorState
		_viewedState
		_imprintFormReviewData

*/

// Initializes the DesignTools client 

function dtInit(containerId, sessionId, docList, useCartIntegration, finishCallback, marketId, skipViewStateValidation) {

	if (!sessionId.match(/[0-9]{8}-[A-F0-9]{32}/)) {

		var panel = new DTExceptionPanel(
			'errorPanel', 
			null, 
			'The initializing session ID is invalid.', 
			sessionId);
		panel.showPanel();
	
		return;
	}

	if (!dtValidateDocList(docList)) {
	
		var panel = new DTExceptionPanel(
			'errorPanel', 
			null, 
			'The initializing document list contains invalid data.', 
			YAHOO.lang.JSON.stringify(docList));
		panel.showPanel();
	
		return;
	}

	try {
		_dtInit(containerId, sessionId, docList, useCartIntegration, finishCallback, marketId, skipViewStateValidation);
	} catch (err) {
		var panel = new DTExceptionPanel('errorPanel', err, 'General JavaScript Error', YAHOO.lang.JSON.stringify(docList));
		panel.showPanel();
	}
	
	
}

function _dtInit(containerId, sessionId, docList, useCartIntegration, finishCallback, marketId, skipViewStateValidation) {

	window.onbeforeunload =
		function ()
		{
		  return 	"You are attempting to leave this page which will cause your " + 
		  			"Design Studio changes to be lost.  Are you sure you want to continue?";
		};


	// Initial all the global variables in case we are running this a second time on a page
	{
		dtContainerId = "";
		dtSessionId = "";
		dtDocList = new Array();
		
		dtDoc = null;
		
		dtCurrentDocumentIndex = 0;
		dtCurrentPageNumber = 1;
		dtNoticeList = new Array();
		dtViewedMultiplePages = false;
		dtRecentFontsArray = [];
		dtRecentColorsArray = [];
		dtUseCartIntegration = false;
		dtMarketId = 517;
		dtHasSaved = false;
		dtLoginPanel = null;
				
		// internal objects for state keeping
		_dtHoverRegionList = new Array();
		_dtPreviewImageTop = null;
		_dtPreviewImageBottom = null;
		_dtLoadingImageId = 'dtLoadingImage';
		_dtStockNoteImageId = 'dtStockNoteImage';
		_dtFinishCallback = null;
		
		_dtDocumentRequestUpdate = false;
		_dtDocumentCurrentlyInUpdate = false;
		setInterval("dtDocumentUpdateTimer()", 250);
		
		_dtTemplateSwatchEditorModule = null;
		_dtDocNavigator = null;
		_dtImprintEditor = null;
		_dtSkipViewStateValidation = skipViewStateValidation;

	}

	// Set up the DND mode
	YAHOO.util.DragDropMgr.mode = YAHOO.util.DragDropMgr.INTERSECT;

	// Arguments are sessionId, docList, action
	_dtFinishCallback = finishCallback;
	
	// Initialize the global vars
	dtContainerId = containerId;
	dtSessionId = sessionId;
	dtDocList = docList;
	dtViewedMultiplePages = false;
	dtUseCartIntegration = useCartIntegration;
	if (marketId != null) dtMarketId = marketId;
	
	// Set the parent ids properly
	for (var di = 0; di < dtDocList.length; di++) {
		if (dtDocList[di].shoppingItemParentId == null || dtDocList[di].shoppingItemParentId == -1) {
			dtDocList[di].shoppingItemParentId = dtDocList[di].shoppingItemId;
		}
	}
			
	// Add some variables to the dtDocList items and set the current document
	for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) {
	
		dtDocList[docIndex]._dtDocData = null;
		dtDocList[docIndex]._imprintFormData = "";
		dtDocList[docIndex]._imprintFormReviewData = "";
		dtDocList[docIndex]._isDeleted = false;
		dtDocList[docIndex]._imprintEditorState = "Open";
		dtDocList[docIndex]._viewedState = [_dtSkipViewStateValidation];
		if (dtDocList[docIndex].focus == true) dtCurrentDocumentIndex = docIndex;
		if (dtDocList[docIndex].templateStylecode == null || dtDocList[docIndex].templateStylecode == "") 
			dtDocList[docIndex].templateStylecode = dtDocList[docIndex].productStylecode;
	}
		
	// Get the session setting objects
	dtGetSettingsFile("dtRecentFontsArray.json", 
		function(data) {
			try {
			 	dtRecentFontsArray = YAHOO.lang.JSON.parse(data);
			} catch (x) {}
		} 
	);
	dtGetSettingsFile("dtRecentColorsArray.json", 
		function(data) {
			try {
			 	dtRecentColorsArray = YAHOO.lang.JSON.parse(data);
			} catch (x) {}
		} 
	);
		
	// Get the document data object - this will initialize the rest of the UI
	dtGetDocumentList();
}

function dtLoadMainInterface() {

	// Create the main UI elements
	_dtDocNavigator = new DTDocNavigatorOverlay('docNav', dtContainerId, 5, 5, 325, 227);

	dtToolsCoordY = 238;
	dtTools = new DTToolsOverlay('mainTools', dtContainerId,
		['dtColorsTab', 'dtPhotosTab', 'dtHelpTab'], 
		5, dtToolsCoordY, 325, 595 - dtToolsCoordY, 595 - 80 - dtToolsCoordY);

	_dtImprintEditor = new DTImprintEditorOverlay('_imprintEditor', dtContainerId, 340, 5, 505, 590);

	// Configure the main UI elements
	_dtDocNavigator.loadButtons(_dtDocNavigator);
	_dtDocNavigator.loadThumbnails(_dtDocNavigator);
	_dtDocNavigator.loadDocDetails();

	dtTools.setupEvents(dtTools);
	dtTools.showTab('dtHelpTab');
	
	_dtImprintEditor.loadButtons(_dtImprintEditor);
	_dtImprintEditor.loadDocImprintForms();
	_dtImprintEditor.loadDocImprints(_dtImprintEditor);
	
	document.getElementById(dtTools.getTabHeaderId('dtColorsTab')).innerHTML = '&nbsp;&nbsp;&nbsp;Colors';
	document.getElementById(dtTools.getTabHeaderId('dtPhotosTab')).innerHTML = '&nbsp;&nbsp;&nbsp;Photo Gallery';
	document.getElementById(dtTools.getTabHeaderId('dtHelpTab')).innerHTML = '&nbsp;&nbsp;&nbsp;Help&nbsp;&nbsp;<img align="absmiddle" src="/designtools/webimages/help.gif">';
		
	_dtTemplateSwatchEditorModule = new DTTemplateSwatchEditorModule('dtColorsTabModule', dtTools.getTabBodyId('dtColorsTab'), 595 - 80 - 64 - dtToolsCoordY);
	var imageLibraryModule = new DTImageLibraryModule('dtPhotosTabModule', dtTools.getTabBodyId('dtPhotosTab'), 595 - 80 - 64 - dtToolsCoordY);
	var helpModule = new DTHelpModule('dtHelpTabModule', dtTools.getTabBodyId('dtHelpTab'));


	// Create a loading image
	dtLoadingImageInit(dtContainerId, 590, 250);
	dtStockNoteImageInit(dtContainerId, 400, 40);
}

function dtBtnOpenSwatchListOnClick() {
	var panel = new DTTemplateSwatchEditorPanel('_templateSwatchEditorPanel');
	panel.showPanel();
}

function dtBtnHelpOnClick() {
	var panel = new DTHtmlContentPanel("_helpPanel");
	panel.showPanel("/designtools/html/help_index.html");
}

function dtBtnOpenImageLibrary() {

	if (dtSessionId == 'INTERNAL') {
		alert("You cannot use the photo library on an internal order at this time.");
		return;
	}

	var panel = new DTImageLibraryPanel('_imageLibraryPanel');
	panel.setImageSelectedCallback(
		function (imageName) { 
			//alert('picked ' + imageName);
		} 
	);
	panel.showPanel(false);
}

function dtBtnCancelDesignOnClick() {

	dtWriteSettingsFiles();

	// Confirm with the user to delete the image
	var qPanel = new DTQuestionPanel('_qPanelCancelDesign', 380);
	
	qPanel.setChoice1Callback(
		function () {
			dtSaveDocuments(true, function() { dtCloseInterface('Save'); } );
		}
	);
	
	qPanel.setChoice2Callback(
		function () {
			if (dtHasSaved) {
				dtCloseInterface('Save');
			} else {
				dtCloseInterface('Cancel');			
			}
		}
	);
	
	qPanel.setChoice3Callback(
		function () {
		}
	);
	
	qPanel.showPanel(
		"Cancel Design?",		
		"You are about to exit the Design Studio. Any unsaved work will be lost.  What do you want to do?",
		'<!-- <img src="/designtools/images/ds/0174_savequit.png"> -->', 
		'<img src="/designtools/images/ds/0174_exitdesignstudio.png">', 
		'<img src="/designtools/images/ds/0174_cancel.png">'
	);


}


function dtCloseInterface(action) {
		
	window.onbeforeunload = function () {};
	_dtFinishCallback(dtSessionId, dtGetStripedDocList(), action);
}

function dtBtnDeleteCurrentShoppingItemOnClick() {
	
	// Confirm with the user to delete the image
	var qPanel = new DTQuestionPanel('_qPanelDeleteItem', 480);
	
	qPanel.setChoice1Callback(
		function () {
		}
	);
	
	qPanel.setChoice2Callback(
		function () {
			dtBtnDeleteCurrentShoppingItemFinalize();
		}
	);
	
	qPanel.setChoice3Callback(
		function () {
		}
	);
	
	qPanel.showPanel(
		"Remove",		
		'<img src="/designtools/images/ds/sign_warning.png" vspace="30" hspace="20" align="left"> ' +
			'You are about to remove the product(s) from the Design Studio<p> ' +
			'If this product contains multiple pieces, all pieces of the product will ' +
			'be removed from the Design Studio.  What do you want to do? ',
		'<img src="/designtools/images/ds/0174_donotremove.png">', 
		'<img src="/designtools/images/ds/0174_remove.png">', ''
	);

}

function dtBtnDeleteCurrentShoppingItemFinalize() {

	var currentParentId = dtDocList[dtCurrentDocumentIndex].shoppingItemParentId;
	for (var docIndex = dtDocList.length - 1; docIndex >= 0; docIndex--) { 
	
		if (dtDocList[docIndex].shoppingItemParentId == currentParentId) {
		
			var callbackPostDoc = 
			{
				cache:false,
				success: function(o) {		
				},
				failure: function(o) {
				 	alert("There was an error connecting to the server to delete your document.  Please try again.\r\n\r\nMessage: " + o.statusText);
				},
				argument: {}	
			}
		
			// Make the call
			var postDocUrl = "/store/cartDeleteItem/market/" + dtMarketId + "/itemId/" + dtDocList[docIndex].shoppingItemId;
			var postDocRequest = YAHOO.util.Connect.asyncRequest('POST', postDocUrl, callbackPostDoc, ""); 	
		
			// Remove the imprint form
			_dtImprintEditor.deleteImprintForm(dtDocList[docIndex]._imprintFormDivId);
		
			// Remove the item from the array
			dtDocList.remove(docIndex);
	
		}
	}
	
	// Check to see if there are any more items in the doc list and return if not
	if (dtDocList.length <= 0) {
		dtCloseInterface('Cancel');
		return;
	}
	
	// Reload the doc navigator
	_dtDocNavigator.loadThumbnails(_dtDocNavigator);	
	dtLoadDocumentPage(null, {"docIndex":0, "pageNumber":1});
}


function dtBtnEditDesignerNotesOnClick() {
	
	var panel = new DTDesignerNotesEditorPanel('_designerNotesPanel', dtCurrentDocumentIndex);
	panel.showPanel();
}

function dtBtnApproveOnClick() {

	dtWriteSettingsFiles();

	var allViewed = true;
	for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) {
	
		if (dtDocList[docIndex].itemType == 'STOCK') continue;
		var viewStateArray = dtDocList[docIndex]._viewedState;
		for (var vsIndex = 0; vsIndex < viewStateArray.length; vsIndex++) {
			if (!viewStateArray[vsIndex]) allViewed = false;		
		}
	}
	
	if (!allViewed) {
	
		var qPanel = new DTQuestionPanel('_qPanelViewAllPages', 480);
	
		qPanel.setChoice1Callback(
			function () {
			}
		);
		
		qPanel.setChoice2Callback(
			function () {
			}
		);
		
		qPanel.setChoice3Callback(
			function () {
			}
		);
		
		qPanel.showPanel(
			"Personalize Products",		
			'<img src="/designtools/images/ds/sign_stop.png" align="left" vspace="30" hspace="20"> ' + 
			'<b>Products need to be personalized</b><p> ' + 
			'You have products that still need to be personalized. If you no longer  ' + 
			'want these products, use the remove [<img src="/designtools/images/ds/nav_btn_delete.gif">] ' + 
			'option to remove them from the Design Studio to continue. ',
			'<img src="/designtools/webimages/0179_ok.png">', '', ''
		);
		
		return;
	
	}
	
	
	var progressPanel = new DTProgressPanel(
		'_generateProofsPanel', 
		300, 
		"Generating proofs", 
		'<center><img src="/designtools/images/ds/icon_generate_proofs.jpg"><p><b>Generating proofs</b><br>Please wait</center>');
		
	progressPanel.showPanel();
	progressPanel.setProgress(0);

	var successfulRequests = 0;
	var totalRequests = 0;

	// Calculate the number for DOL requests and imprint form requests
	for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) { 
		if (dtUseCartIntegration && dtDocList[docIndex]._imprintFormData != null && dtDocList[docIndex]._imprintFormData != "")
			totalRequests++; 						// This is for the text and graphics imprint request
		if (dtDocList[docIndex].itemType == 'DOL')  totalRequests++;	// This is for the dol request
	}
	
	// If the total requests is 0, return
	if (totalRequests == 0) {
		dtBtnApproveOnClickFinalize();
		progressPanel.hidePanel();
		return;
	}
	
	// Make the requests to generate the proofs
	for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) { 
	
		// Create a loading callback
		var callbackPostDoc = 
		{
			cache:false,
			success: function(o) {
				try {
					successfulRequests++;
					progressPanel.setProgress(successfulRequests * 100 / totalRequests);
					if (successfulRequests == totalRequests) {
						dtBtnApproveOnClickFinalize();
						progressPanel.hidePanel();
					}
				} catch (x) {
								
					var errorPanel = new DTExceptionPanel('errorPanel', x, 
						"Failed to generate the proof for the requested document (" + 
						dtSessionId + ":" + dtDocList[o.argument].documentId + 
						").  Please try again or contact Customer Support.", 
						YAHOO.lang.JSON.stringify(dtDocList));
					errorPanel.showPanel();

					progressPanel.hidePanel();

				}
			},
			failure: function(o) {
			
			 	alert("Could not generate the proof for the document(" + 
						dtSessionId + ":" + dtDocList[o.argument].documentId + 
						").  Please try again later.  Message: " + o.statusText);	
				
				progressPanel.hidePanel();
					
			},
			argument: docIndex + ""
		}
				
		// Make the call to save the DOL data
		if (dtDocList[docIndex].itemType == 'DOL') {
			var r = new Date();
			r = r.getTime() + ":" + Math.random();
			var postDocUrl = "/designtools/main/ajaxUpdateDTDoc/dtSessionId/" + dtSessionId + "/dtDocumentId/" +  dtDocList[docIndex].documentId +  
				"/dtSaveChanges/false/dtGeneratePreview/false/dtGenerateProof/false/dtGenerateJPGProof/true/r/" + r;
			var postData = "dtDocData=" + escape(YAHOO.lang.JSON.stringify(dtDocList[docIndex]._dtDocData));
			var postDocRequest = YAHOO.util.Connect.asyncRequest('POST', postDocUrl, callbackPostDoc, postData); 	
		}		



		// Create an imprint callback
		if (dtUseCartIntegration) {
		
			var callbackSaveImprintData = 
			{
				cache:false,
				success: function(o) {
					try {
					
						var content = o.responseText;
						dtDocList[o.argument]._imprintFormReviewData = content;
					
						successfulRequests++;
						progressPanel.setProgress(successfulRequests * 100 / totalRequests);
						if (successfulRequests == totalRequests) {
							dtBtnApproveOnClickFinalize();
							progressPanel.hidePanel();
						}
					} catch (x) {
									
						var errorPanel = new DTExceptionPanel('errorPanel', x, 
							"Failed to generate the imprint review data for item " + dtDocList[o.argument].shoppingItemId + 
							").  Please try again or contact Customer Support.", 
							YAHOO.lang.JSON.stringify(dtDocList));
						errorPanel.showPanel();
	
						progressPanel.hidePanel();
	
					}
				},
				failure: function(o) {

				 	alert("Could not generate the imprint review data for item (" + 
							dtDocList[o.argument].shoppingItemId +
							").  Please try again later.  Message: " + o.statusText);		

					progressPanel.hidePanel();

				},
				argument: docIndex + ""
			}		
			
			if (dtDocList[docIndex]._imprintFormData != null && dtDocList[docIndex]._imprintFormData != "") {
			
				var jsonFormData = "";
				jsonFormData += dtCreateJSONObjectFromForm("ImprintTextForm" + dtDocList[docIndex].shoppingItemId, dtDocList[docIndex].shoppingItemId);
				jsonFormData += dtCreateJSONObjectFromForm("ImprintGraphicsForm" + dtDocList[docIndex].shoppingItemId, dtDocList[docIndex].shoppingItemId);
				jsonFormData += dtCreateJSONImagesFromImprintList(dtDocList[docIndex]._imprintFormData);
				jsonFormData = "[{" + jsonFormData + "}]";
			
				var saveImprintUrl = 
					"/store/showProductImprints/market/" + dtMarketId + 
					"/shoppingItemId/" + dtDocList[docIndex].shoppingItemId + 
					"?productImprints=" + escape(jsonFormData);
					
				var saveImprintRequest = YAHOO.util.Connect.asyncRequest('POST', saveImprintUrl, callbackSaveImprintData); 
			}	
				
		}

	}	
}

function dtBtnApproveOnClickFinalize() {
	var panel = new DTReviewAndApprovePanel('_approvePanel');
	panel.showPanel();	
}



function dtSaveDocuments(moveToIceBox, finishCallback) {

	// Test to see if logged in
	if (moveToIceBox) {
	
		var callbackPostDoc = 
		{
			cache:false,
			success: function(o) {
			
				var isLoggedIn = false;
				try {
					var resp = YAHOO.lang.JSON.parse(o.responseText);
					isLoggedIn = resp.isLoggedIn;
				} catch (e) {};
				
				dtSaveDocumentsFinalize(moveToIceBox, isLoggedIn, finishCallback);
			},
			failure: function(o) {
			 	alert("There was an error connecting to the server.  Error calling isLoggedIn.\r\n\r\nMessage: " + o.statusText);
			},
			argument: {}	
		}
	
		// Make the call
		var postDocUrl = "/store/isLoggedIn/market/" + dtMarketId;
		var postDocRequest = YAHOO.util.Connect.asyncRequest('POST', postDocUrl, callbackPostDoc); 		
	
	} else {
	
		dtSaveDocumentsFinalize(moveToIceBox, false, finishCallback);
	}
		
}

function dtSaveDocumentsFinalize(moveToIceBox, isLoggedIn, finishCallback) {

	if (moveToIceBox) {
	
		if (isLoggedIn) {
		
			// Create a callback for the async request
			var callbackPostDoc = 
			{
				cache:false,
				success: function(o) {
				},
				failure: function(o) {
				 	alert("There was an error connecting to the server to save your document.  Error moving item to the ice box.\r\n\r\nMessage: " + o.statusText);
				},
				argument: {}	
			}
		
			// Create the json object
			var json = "[{itemsToMoveIds:'";
			for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) { 
				if (docIndex > 0) json += ',';
				json += dtDocList[docIndex].shoppingItemId;
			}
			json += "'}]";
			
			// Make the call
			var postDocUrl = "/store/moveItemsToIcebox/market/" + dtMarketId + "?itemsToMoveJSONArray=" + json;
			var postDocRequest = YAHOO.util.Connect.asyncRequest('POST', postDocUrl, callbackPostDoc, ""); 		
		
		} else {
		
			dtLoginPanel = new DTLoginPanel("_dtLoginPanel");
			dtLoginPanel.showPanel();
			return;
		}	
	
	} else { 
	
		// Move the items to the shopping cart
		if (dtUseCartIntegration) {
		
			var callbackPostDoc = 
			{
				cache:false,
				success: function(o) {
				},
				failure: function(o) {
				 	alert("There was an error connecting to the server to save your document.  Error moving item to the shopping cart.\r\n\r\nMessage: " + o.statusText);
				},
				argument: {}	
			}
		
			// Create the json object
			var json = "[{itemsToMoveIds:'";
			for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) { 
				if (docIndex > 0) json += ',';
				json += dtDocList[docIndex].shoppingItemId;
			}
			json += "'}]";
			
			// Make the call
			var postDocUrl = "/store/moveItemsToCart/market/" + dtMarketId + "?itemsToMoveJSONArray=" + json;
			var postDocRequest = YAHOO.util.Connect.asyncRequest('POST', postDocUrl, callbackPostDoc, ""); 		
			
		}
		
	}
	
	// If the login panel exists, try to close it
	if (dtLoginPanel != null) {
		dtLoginPanel.hidePanel();
		dtLoginPanel = null;
	}
	
	// Save the DS settings files
	dtWriteSettingsFiles();
	
	// Save the additional cart data like design instructions and initials
	if (dtUseCartIntegration) {
		dtUpdateDOLCartItems();
	}
	
	// Save the DOL/IMPRINT items now
	var progressContent =
		'<center><img src="/designtools/images/ds/icon_saving.jpg"><p>' +
		'Saving documents to the<br>' +
		'<b>Shopping Cart</b><br>' +
		'Please wait</center>';
	
	if (moveToIceBox) {
		progressContent =
			'<center><img src="/designtools/images/ds/icon_saving.jpg"><p>' +
			'Saving documents to<br>' +
			'<b><font color="blue">My Saved Work</font> in My Account</b><br>' +
			'Please wait</center>';
	}
	
	// Create a progress panel
	var progressPanel = new DTProgressPanel(
		"_savingPanel", 
		300, 
		"Saving documents", 
		progressContent);
	progressPanel.showPanel();
	progressPanel.setProgress(0);
	
	// Flag that the session has been saved
	dtHasSaved = true;

	// Calculate the number for DOL requests and imprint form requests
	var successfulRequests = 0;
	var totalRequests = 0;
	for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) { 
		if (dtUseCartIntegration && dtDocList[docIndex]._imprintFormData != null && dtDocList[docIndex]._imprintFormData != "")
			totalRequests++; 						// This is for the text and graphics imprint request
		if (dtDocList[docIndex].itemType == 'DOL')  totalRequests++;	// This is for the dol request
	}
	
	for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) { 
			
		// Create a callback for the async request to save the DOL item
		var callbackPostDoc = 
		{
			cache:false,
			success: function(o) {
			
				var docSaved = false;
				
				try {
					// Get the notice list that is passed back
					var noticeList = YAHOO.lang.JSON.parse(o.responseText);
					
					// Find the relevent notice to ensure the document was saved
					for (var nlCnt = 0; nlCnt < noticeList.length; nlCnt++) {
						var notice = noticeList[nlCnt];
						if (notice.type == 'documentSaved') {
							docSaved = true;
						}	
					}	
			 	} catch (e) {}
			
				if (docSaved) {

					successfulRequests++;
					progressPanel.setProgress(successfulRequests * 100 / totalRequests);
					if (successfulRequests == totalRequests) {
						progressPanel.hidePanel();
						finishCallback();
					}
					
				} else {
					progressPanel.hidePanel();
				 	alert("There was an error trying to save your document.  Please try again.\r\n\r\nMessage: A confirmation message was not received from the server.");					
				}
			
			},
			failure: function(o) {
				progressPanel.hidePanel();
			 	alert("There was an error connecting to the server to save your document.  Please try again.\r\n\r\nMessage: " + o.statusText);
			},
			argument: {}	
		}
	
		// Make the call to save the DOL data
		if (dtDocList[docIndex].itemType == 'DOL') {
			var postDocUrl = "/designtools/main/ajaxUpdateDTDoc/dtSessionId/" + dtSessionId + 
				"/dtDocumentId/" + dtDocList[docIndex].documentId + 
				"/dtSaveChanges/true/dtGeneratePreview/true/dtGenerateProof/true/";
			var postData = "dtDocData=" + escape(YAHOO.lang.JSON.stringify(dtDocList[docIndex]._dtDocData));
			var postDocRequest = YAHOO.util.Connect.asyncRequest('POST', postDocUrl, callbackPostDoc, postData); 	
		}

		// Create an imprint callback
		if (dtUseCartIntegration) {
		
			var callbackSaveImprintData = 
			{
				cache:false,
				success: function(o) {
					try {
						successfulRequests++;
						progressPanel.setProgress(successfulRequests * 100 / totalRequests);
						if (successfulRequests == totalRequests) {
							progressPanel.hidePanel();
							finishCallback();
						}
					} catch (x) {
					
						var errorPanel = new DTExceptionPanel('errorPanel', x, 
							"Failed to save the required imprints (" + 
							dtDocList[o.argument].productId + ":" + dtDocList[o.argument].shoppingItemId + 
							").  Please try again or contact Customer Support.",
							YAHOO.lang.JSON.stringify(dtDocList));
						errorPanel.showPanel();				
	
						progressPanel.hidePanel();

					}
				},
				failure: function(o) {

				 	alert("Could not save imprints (" + 
							dtDocList[o.argument].productId + ":" + dtDocList[o.argument].shoppingItemId + 
							").  Please try again later.  Message: " + o.statusText);		

					progressPanel.hidePanel();

				},
				argument: docIndex + ""
			}		
			
			if (dtDocList[docIndex]._imprintFormData != null && dtDocList[docIndex]._imprintFormData != "") {
			
				var jsonFormData = "";
				jsonFormData += dtCreateJSONObjectFromForm("ImprintTextForm" + dtDocList[docIndex].shoppingItemId, dtDocList[docIndex].shoppingItemId);
				jsonFormData += dtCreateJSONObjectFromForm("ImprintGraphicsForm" + dtDocList[docIndex].shoppingItemId, dtDocList[docIndex].shoppingItemId);
				jsonFormData += dtCreateJSONImagesFromImprintList(dtDocList[docIndex]._imprintFormData);
				jsonFormData = "[{" + jsonFormData + "}]";
			
				var saveImprintUrl = 
					"/store/saveProductImprints/market/" + dtMarketId + 
					"/shoppingItemId/" + dtDocList[docIndex].shoppingItemId + 
					"?productImprints=" + escape(jsonFormData);
					
				var saveImprintRequest = YAHOO.util.Connect.asyncRequest('POST', saveImprintUrl, callbackSaveImprintData); 
			}	
				
		}
	}

}




function dtBtnViewLargerOnClick() {
	var panel = new DTZoomPanel('_zoomPanel');
	panel.showPanel();
}

function dtBtnShowEditableRegionsOnClick() {
	
	for (var i = 0; i < _dtHoverRegionList.length; i++) {
		var r = _dtHoverRegionList[i];
		var rElement = document.getElementById(r.id);
		if (rElement.className == 'dtHoverRegionImage') continue;
	
		YAHOO.util.Dom.setStyle(rElement, "opacity", "0.8");
		var attributes = {
			opacity: {
				to: (rElement.className == 'dtHoverRegionTextOverflow' ? 0.65 : 0.0)
			}
		};
		var anim = new YAHOO.util.Anim(rElement, attributes, 2.5, YAHOO.util.Easing.easeOut); 
		anim.animate();	

	}	
}

function dtBtnMarginsOnClick() {
	
	// Set the name of the div
	var margin1Id = 'marginsBox1';
	var margin2Id = 'marginsBox2';
	
	// Try to get the div - if it is there, delete and return
	var r = document.getElementById(margin1Id);
	if (r != null) {
		r.parentNode.removeChild(r);
		try {
			document.getElementById(margin2Id).parentNode.removeChild(document.getElementById(margin2Id));
		} catch (e) {};
		return;
	}
	
	// Get the container and return if it doesn't exist
	var container = document.getElementById(dtContainerId);
	if (container == null) return;
	
	// Create a new div with the correct properties and add it to the container
	var region = document.createElement('div');
	region.id = margin1Id;
	region.style.position = 'absolute';
	region.style.opacity = '0.5';
	region.style.filter = 'alpha(opacity=50)';
	container.appendChild(region);
	YAHOO.util.Dom.setStyle(margin1Id, "border", "2px dotted black");
	YAHOO.util.Dom.setStyle(margin1Id, "z-index", "50");
	
	// Position the margin box .125 inches around 
	var xy = YAHOO.util.Dom.getXY(_dtPreviewImageBottom);
	xy[0] += (dtDoc.previewDPI * 0.125);
	xy[1] += (dtDoc.previewDPI * 0.125);
	var w = (dtDoc.pageWidth - 0.25) * dtDoc.previewDPI;
	var h = (dtDoc.pageHeight - 0.25) * dtDoc.previewDPI;
	YAHOO.util.Dom.setXY(margin1Id, xy);
	YAHOO.util.Dom.setStyle(margin1Id, "width", w + "px");
	YAHOO.util.Dom.setStyle(margin1Id, "height", h + "px");
	
	// Create a new div with the correct properties and add it to the container
	region = document.createElement('div');
	region.id = margin2Id;
	region.style.position = 'absolute';
	region.style.opacity = '0.5';
	region.style.filter = 'alpha(opacity=50)';
	container.appendChild(region);
	YAHOO.util.Dom.setStyle(margin2Id, "border", "2px dotted white");
	YAHOO.util.Dom.setStyle(margin2Id, "z-index", "50");
	
	// Position the margin box .125 inches around 
	xy = YAHOO.util.Dom.getXY(_dtPreviewImageBottom);
	xy[0] += (dtDoc.previewDPI * 0.125) + 2;
	xy[1] += (dtDoc.previewDPI * 0.125) + 2;
	w = (dtDoc.pageWidth - 0.25) * dtDoc.previewDPI;
	h = (dtDoc.pageHeight - 0.25) * dtDoc.previewDPI;
	w -= 4;
	h -= 4;
	YAHOO.util.Dom.setXY(margin2Id, xy);
	YAHOO.util.Dom.setStyle(margin2Id, "width", w + "px");
	YAHOO.util.Dom.setStyle(margin2Id, "height", h + "px");
	
}



function dtGetDocumentList() {

	var panel = new DTProgressPanel(
		'_startPanel', 
		300, 
		"Loading documents", 
		'<center><img src="/designtools/images/ds/icon_loading.jpg"><p><b>Loading documents</b><br>Please wait</center>'
	);
	panel.showPanel();
	panel.setProgress(0);

	var containerWidth = Number(YAHOO.util.Dom.getStyle(dtContainerId, "width").replace("px", ""));
	var containerHeight = Number(YAHOO.util.Dom.getStyle(dtContainerId, "height").replace("px", ""));
	containerWidth -= 350;
	containerHeight -= 45;

	// Calculate the number for DOL requests and imprint form requests
	var successfulRequests = 0;
	var totalRequests = 0;
	for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) { 
		if (dtUseCartIntegration) totalRequests++; 							// This is for the imprint request
		if (dtDocList[docIndex].itemType == 'DOL')  totalRequests++;	// This is for the dol request
	}

	for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) { 

		// Create a DOL callback
		var callbackGetDocData = 
		{
			cache:false,
			success: function(o) {
				try {
					dtDocList[o.argument]._dtDocData = YAHOO.lang.JSON.parse(o.responseText);
					
					dtDocList[o.argument]._viewedState = new Array(dtDocList[o.argument]._dtDocData.pageCount);
					for (var i = 0; i < dtDocList[o.argument]._viewedState.length; i++) {
						dtDocList[o.argument]._viewedState[i] = _dtSkipViewStateValidation;
					}
										
					successfulRequests++;
					panel.setProgress(successfulRequests * 100 / totalRequests);
					if (successfulRequests == totalRequests) {
						// Finalize the loading process
						dtGetDocumentListFinalize();
						panel.hidePanel();
					}
				} catch (x) {
				
					var errorPanel = new DTExceptionPanel('errorPanel', x, 
						"Failed to get the requested document (" + 
						dtSessionId + ":" + dtDocList[o.argument].documentId + 
						").  Please try again or contact Customer Support.",
						YAHOO.lang.JSON.stringify(dtDocList));
					errorPanel.showPanel();
					
					dtCloseInterface('Error');

				}
			},
			failure: function(o) {
						
			 	alert("There was a connection problem while accessing the document (" + 
						dtSessionId + ":" + dtDocList[o.argument].documentId + 
						").  Please try again later.  Message: " + o.statusText);		
				
				dtCloseInterface('Error');
				
			},
			argument: docIndex + ""
		}
		
		// Make the DOL call
		if (dtDocList[docIndex].itemType == 'DOL') { 
			var getDocUrl = "/designtools/main/ajaxGetDTDoc/dtSessionId/" + 
				dtSessionId + "/dtDocumentId/" + dtDocList[docIndex].documentId + "/dtCanvasHeight/" + 
				containerHeight + "/dtCanvasWidth/" + containerWidth;
			var getDocRequest = YAHOO.util.Connect.asyncRequest('POST', getDocUrl, callbackGetDocData); 		
		}

		// Create an imprint callback
		if (dtUseCartIntegration) {
		
			var callbackGetImprintData = 
			{
				cache:false,
				success: function(o) {
					try {
						
						var ifData = o.responseText;
						if (ifData == null) ifData = "";
						ifData = ifData.replace(/^\s+$/,"");
						ifData = ifData.replace(/editTextForm/g, "ImprintTextForm" + dtDocList[o.argument].shoppingItemId);
						ifData = ifData.replace(/GraphicElementsForm/g, "ImprintGraphicsForm" + dtDocList[o.argument].shoppingItemId);
						dtDocList[o.argument]._imprintFormData = ifData;
						
						successfulRequests++;
						panel.setProgress(successfulRequests * 100 / totalRequests);
						if (successfulRequests == totalRequests) {
							// Finalize the loading process
							dtGetDocumentListFinalize();
							panel.hidePanel();
						}
					} catch (x) {
					
						var errorPanel = new DTExceptionPanel('errorPanel', x, 
							"Failed to get the requested imprints (" + 
							dtDocList[o.argument].productId + ":" + dtDocList[o.argument].shoppingItemId + 
							").  Please try again or contact Customer Support.",
							YAHOO.lang.JSON.stringify(dtDocList));
						errorPanel.showPanel();
						
						dtCloseInterface('Error');

					}
				},
				failure: function(o) {
				 	
				 	alert("There was a connection problem while getting imprints (" + 
							dtDocList[o.argument].productId + ":" + dtDocList[o.argument].shoppingItemId + 
							").  Please try again later.  Message: " + o.statusText);	
							
					dtCloseInterface('Error');	

				},
				argument: docIndex + ""
			}		
			
			var getImprintUrl = "/store/getProductImprints/market/" + dtMarketId + "/shoppingItemId/" + dtDocList[docIndex].shoppingItemId;
			var getImprintRequest = YAHOO.util.Connect.asyncRequest('POST', getImprintUrl, callbackGetImprintData); 	
				
		}
		
	}	
}

function dtGetDocumentListFinalize() {

	dtLoadMainInterface();
	dtLoadDocumentPage(null, {"docIndex":0, "pageNumber":1});
}


function dtLoadDocumentPage(e, args) {

	var maxPageCount = 1;
	if (dtDocList[args.docIndex]._dtDocData != null) maxPageCount = dtDocList[args.docIndex]._dtDocData.pageCount;

	if (args.docIndex < 0 || args.docIndex >= dtDocList.length) return;
	if (args.pageNumber <= 0 || args.pageNumber > maxPageCount) return;
	
	var docChanged = false;
	if (dtCurrentDocumentIndex != args.docIndex) {
		docChanged = true;
	}
	
	var pageChanged = false;
	if (dtCurrentPageNumber != args.pageNumber) {
		pageChanged = true;
	}
	
	dtCurrentDocumentIndex = args.docIndex;
	dtCurrentPageNumber = args.pageNumber;

	if (pageChanged || docChanged) {
		_dtDocNavigator.loadDocDetails();
	}
	
	if (docChanged) {
		_dtTemplateSwatchEditorModule.refreshContent(_dtTemplateSwatchEditorModule);
		_dtImprintEditor.loadDocImprints(_dtImprintEditor);
		
		if (dtDocList[dtCurrentDocumentIndex].itemType == 'DOL') {
			dtTools.setDisabledTab('dtColorsTab', false);
			dtTools.setDisabledTab('dtPhotosTab', false);
		}
		
		if (dtDocList[dtCurrentDocumentIndex].itemType == 'IMPRINT') {
			dtTools.setDisabledTab('dtColorsTab', true);
			dtTools.setDisabledTab('dtPhotosTab', false);
			dtTools.showTab('dtPhotosTab');
		}
		
		if (dtDocList[dtCurrentDocumentIndex].itemType == 'STOCK') {
			dtTools.setDisabledTab('dtColorsTab', true);
			dtTools.setDisabledTab('dtPhotosTab', true);
			dtTools.showTab('dtHelpTab');
		}
	}

	// Start the loading image amination
	var fadeInAnim = new YAHOO.util.Anim(
		_dtLoadingImageId, 
		{
			opacity: {
				to: 1.0
			}
		}, 
		0.5, 
		YAHOO.util.Easing.easeNone
	);
	fadeInAnim.animate();

	// Refresh the preview image
	// This will automatically create an image element if one doesn't exist.  
	// This is needed for the hover regions to be placed properly.
	dtPreviewImageRefresh();

	// Refresh the hover regions
	dtHoverRegionRefresh();

}



function dtUpdateDocument() {

	// Change the state so that the UI is currently updating
	_dtDocumentCurrentlyInUpdate = true;

	// Create some animation effects for the loading image
	var fadeOutAnim = new YAHOO.util.Anim(
		_dtLoadingImageId, 
		{
			opacity: {
				to: 0.0
			}
		}, 
		0.5, 
		YAHOO.util.Easing.easeNone
	);

	var fadeInAnim = new YAHOO.util.Anim(
		_dtLoadingImageId, 
		{
			opacity: {
				to: 1.0
			}
		}, 
		0.5, 
		YAHOO.util.Easing.easeNone
	);

	// Create a callback for the async request
	var callbackPostDoc = 
	{
		cache:false,
		success: function(o) {
			try {
				dtNoticeList = YAHOO.lang.JSON.parse(o.responseText);
		 	} catch (e) {}
		 	dtPreviewImageRefresh();
		 	dtHoverRegionRefresh();
		},
		failure: function(o) {
		 	alert("Error updating document: " + o.statusText);
		 	fadeOutAnim.animate();
		 	_dtDocumentCurrentlyInUpdate = false;
		},
		argument: {}
	}
	
	// Start the animation
	fadeInAnim.animate();
	
	// Make the call
	var postDocUrl = "/designtools/main/ajaxUpdateDTDoc/dtSessionId/" + dtSessionId + "/dtDocumentId/" + 
		dtDocList[dtCurrentDocumentIndex].documentId  + 
		"/dtSaveChanges/false/dtGeneratePreview/true/dtGenerateProof/false/";
	var postData = "dtDocData=" + escape(YAHOO.lang.JSON.stringify(dtDocList[dtCurrentDocumentIndex]._dtDocData));
	var postDocRequest = YAHOO.util.Connect.asyncRequest('POST', postDocUrl, callbackPostDoc, postData); 	

}

// The timer callback function to update the document
function dtDocumentUpdateTimer() {
	if (_dtDocumentRequestUpdate && !_dtDocumentCurrentlyInUpdate) {
		_dtDocumentRequestUpdate = false;
		dtUpdateDocument();
	}
}


function dtPreviewImageRefresh() {	

	// Get the container and return if it doesn't exist
	var container = document.getElementById(dtContainerId);
	if (container == null) return;

	// Remove the current bottom image if it exists
	if (_dtPreviewImageBottom != null) {
		_dtPreviewImageBottom.parentNode.removeChild(_dtPreviewImageBottom);
		_dtPreviewImageBottom = null;
	}

	// Make the top image the bottom image
	_dtPreviewImageBottom = _dtPreviewImageTop;
	_dtPreviewImageTop = null;

	// Create a new top image
	_dtPreviewImageTop = new Image();
	_dtPreviewImageTop.style.position = 'absolute';
	_dtPreviewImageTop.style.opacity = '0.0';
	_dtPreviewImageTop.style.filter = 'alpha(opacity=0)';
	container.appendChild(_dtPreviewImageTop);
	YAHOO.util.Dom.setStyle(_dtPreviewImageTop, "border", "1px solid #AAAAAA");
	
	// create the preview image width
	var previewWidth = 0
	if (dtDocList[dtCurrentDocumentIndex].itemType == 'DOL') {
		previewWidth = dtDocList[dtCurrentDocumentIndex]._dtDocData.pageWidth * 
			dtDocList[dtCurrentDocumentIndex]._dtDocData.previewDPI;
	} else {
		previewWidth = 420;
	}

	// Create the offset from the top of the container
	var topOffset = 30;
	if (dtDocList[dtCurrentDocumentIndex].itemType != 'DOL') topOffset = 100;

	// position the new top image properly
	var containerWidth = Number(YAHOO.util.Dom.getStyle(dtContainerId, "width").replace("px", ""));
	var xy = YAHOO.util.Dom.getXY(dtContainerId);
	xy[0] = xy[0] + ((containerWidth - previewWidth - 330) / 2) + 330;
	xy[1] = xy[1] + topOffset;
	YAHOO.util.Dom.setXY(_dtPreviewImageTop, xy);
	
	// Add an event listener to animate the image once it has loaded
	YAHOO.util.Event.addListener(_dtPreviewImageTop, "load", dtPreviewImageOnLoadAnimate);
	
	// Set the source of the top image to a new URL to make sure it pulls from the server
	if (dtDocList[dtCurrentDocumentIndex].itemType == 'DOL') {
		var r = new Date();
		r = r.getTime() + ":" + Math.random();
		_dtPreviewImageTop.src = "/designtools/main/ajaxGetDTDocPreviewImage/dtSessionId/" + 
			dtSessionId + "/dtDocumentId/" + dtDocList[dtCurrentDocumentIndex].documentId + "/dtPageNumber/" + dtCurrentPageNumber + "/r/" + r;
	} else {
		_dtPreviewImageTop.src = dtDocList[dtCurrentDocumentIndex].previewSrc;
	}
		
	// Set up the note images depending on type of product
	if (dtDocList[dtCurrentDocumentIndex].itemType == 'STOCK') document.getElementById(_dtStockNoteImageId).src = "/designtools/images/ds/note_product_stock.gif";
	if (dtDocList[dtCurrentDocumentIndex].itemType == 'IMPRINT') document.getElementById(_dtStockNoteImageId).src = "/designtools/images/ds/note_product_imprint.gif";
	YAHOO.util.Dom.setStyle(_dtStockNoteImageId, "opacity", dtDocList[dtCurrentDocumentIndex].itemType == 'DOL' ? 0.0 : 1.0);	
}

function dtPreviewImageOnLoadResize(e, o) {


}

function dtPreviewImageOnLoadAnimate() {

/*
	var bottomImg = document.getElementById(_dtPreviewImageBottomId);
	var topImg = document.getElementById(_dtPreviewImageTopId);

	var newBottomImg = new Image();
	newBottomImg.src = bottomImg.src;
	
	var newTopImg = new Image();
	newTopImg.src = topImg.src;	

	YAHOO.util.Dom.setStyle(_dtPreviewImageBottomId, "height", newBottomImg.height);		
	YAHOO.util.Dom.setStyle(_dtPreviewImageBottomId, "width", newBottomImg.width);

	YAHOO.util.Dom.setStyle(_dtPreviewImageTopId, "height", newTopImg.height);		
	YAHOO.util.Dom.setStyle(_dtPreviewImageTopId, "width", newTopImg.width);

*/

/*
	YAHOO.util.Dom.setStyle(_dtPreviewImageBottomId, "height", "");		
	YAHOO.util.Dom.setStyle(_dtPreviewImageBottomId, "width", "");

	YAHOO.util.Dom.setStyle(_dtPreviewImageTopId, "height", "");		
	YAHOO.util.Dom.setStyle(_dtPreviewImageTopId, "width", "");
*/

	// Create an animtaion to hide the loading images
	var fadeOutAnim = new YAHOO.util.Anim(
		_dtLoadingImageId, 
		{
			opacity: {
				to: 0.0
			}
		}, 
		0.5, 
		YAHOO.util.Easing.easeNone
	);
 	fadeOutAnim.animate();
 	
 	// Set the updating state to not in update
 	_dtDocumentCurrentlyInUpdate = false;


	// Create an animation to hide the lower image
	var lowerAttr = {
		opacity: {
			to: 0	
		}
	};
	var lowerAnim = new YAHOO.util.Anim(_dtPreviewImageBottom, lowerAttr, 0.5, YAHOO.util.Easing.easeOut); 
	lowerAnim.animate();	

	// Create an animation to show the upper image
	var upperAttr = {
		opacity: {
			to: 1	
		}
	};
	var upperAnim = new YAHOO.util.Anim(_dtPreviewImageTop, upperAttr, 0.5, YAHOO.util.Easing.easeOut); 
	upperAnim.animate();		
}

function dtLoadingImageInit(containerId, x, y) {

	// Get the container and return if it doesn't exist
	var container = document.getElementById(containerId);
	if (container == null) return;
	
	// Create a new image with the correct properties and add it to the container
	var img = new Image();
	img.src = "/designtools/webimages/progress_indicator.gif";
	img.id = _dtLoadingImageId;
	img.style.position = 'absolute';
	img.style.opacity = '0.0';
	img.style.filter = 'alpha(opacity=0)';
	//img.style.width = "16px";
	//img.style.height = "16px";
	container.appendChild(img);
	//YAHOO.util.Dom.setStyle(img, "border", "2px solid #777777");

	// Set the position of the image relative to the container
	xy = YAHOO.util.Dom.getXY(containerId);
	xy[0] = xy[0] + x;
	xy[1] = xy[1] + y;
	YAHOO.util.Dom.setXY(_dtLoadingImageId, xy);
	YAHOO.util.Dom.setStyle(_dtLoadingImageId, 'z-index', '35');

}

function dtStockNoteImageInit(containerId, x, y) {

	// Get the container and return if it doesn't exist
	var container = document.getElementById(containerId);
	if (container == null) return;
	
	// Create a new image with the correct properties and add it to the container
	var img = new Image();
	img.src = "/designtools/images/ds/note_product_stock.gif";
	img.id = _dtStockNoteImageId;
	img.style.position = 'absolute';
	img.style.opacity = '0.0';
	img.style.filter = 'alpha(opacity=0)';
	container.appendChild(img);

	// Set the position of the image relative to the container
	xy = YAHOO.util.Dom.getXY(containerId);
	xy[0] = xy[0] + x;
	xy[1] = xy[1] + y;
	YAHOO.util.Dom.setXY(_dtStockNoteImageId, xy);
	YAHOO.util.Dom.setStyle(_dtStockNoteImageId, 'z-index', '35');
	
}


function dtImageButtonCreate(buttonId, containerId, baseSource, hoverSource, x, y, onClickHandler, handlerArgs, borderStyle) {

	// Get the container and return if it doesn't exist
	var container = document.getElementById(containerId);
	if (container == null) return;
	
	// Create a new image with the correct properties and add it to the container
	var img = new Image();
	img.src = baseSource;
	img.id = buttonId;
	img.style.position = 'absolute';
	if (borderStyle != null) img.style.border = borderStyle;
	container.appendChild(img);

	// Set the position of the image relative to the container
	xy = YAHOO.util.Dom.getXY(containerId);
	xy[0] = xy[0] + x;
	xy[1] = xy[1] + y;
	YAHOO.util.Dom.setXY(buttonId, xy);

	// Add some event handlers for animating the image and handling the onClick event
	YAHOO.util.Event.addListener(buttonId, "mouseover", dtImageButtonChangeSource, hoverSource); 
	YAHOO.util.Event.addListener(buttonId, "mouseout", dtImageButtonChangeSource, baseSource); 
	if (onClickHandler != null)	YAHOO.util.Event.addListener(buttonId, "click", onClickHandler, handlerArgs); 

}

function dtImageButtonChangeSource(e, source) {
	this.src = source;
}

function dtHoverRegionRefresh() {

	// Get rid of the current hover regions
	dtHoverRegionRemoveAll();
	
	// Check the make sure this is a DOL item
	if (dtDocList[dtCurrentDocumentIndex].itemType != 'DOL') return;
	
	// Get a shortcut to the docData object
	var docData = dtDocList[dtCurrentDocumentIndex]._dtDocData;
	
	// Create the hover regions for each image box
	// Iterate backwards because the first elements need to go on top
	for (var i = docData.imageBoxes.length - 1; i >= 0; i--) {
		
		var imageBox = docData.imageBoxes[i];
		var regionId = "dtHoverRegionImageBox" + i;
		
		// Skip if this image box is not within the cutlines
		if (!dtIsObjectOnPage(imageBox.left, imageBox.right, 
			imageBox.top, imageBox.bottom, docData.pageWidth, docData.pageHeight)) continue;
		
		// Implement pages for image boxes
		// Skip if this image box in not on the right page of the document
		if (imageBox.page != (dtCurrentPageNumber - 1)) continue;
		
		// Round the coordinates to integers
		var x = Math.round(imageBox.left * docData.previewDPI);
		var y = Math.round(imageBox.top * docData.previewDPI);
		var w = Math.round((imageBox.right - imageBox.left) * docData.previewDPI);
		var h = Math.round((imageBox.bottom - imageBox.top) * docData.previewDPI);
		
		// Keep the hover regions inside the image
		if (x < 0) {
			w += x;
			x = 0;
		}
		
		if (y < 0) {
			h += y;
			y = 0;
		}
			
		var previewWidth = docData.pageWidth * docData.previewDPI;
		var previewHeight = docData.pageHeight * docData.previewDPI;
		if (x + w > previewWidth) w -= x + w - previewWidth;
		if (y + h > previewHeight) h -= y + h - previewHeight;
		
		// create the hover region
		dtHoverRegionCreate(regionId, dtContainerId, x, y, w, h, 40, 'dtHoverRegionImage', false, dtHoverRegionOnClick);
		
		// Since this is an image box, make it a ddtarget
		var ddt = new YAHOO.util.DDTarget(regionId, 'dtDndPhotoGroup'); 			
	}

	// Create the hover regions for each text box
	// Iterate backwards because the first elements need to go on top
	for (var i = docData.textBoxes.length - 1; i >= 0; i--) {
		
		var textBox = docData.textBoxes[i];
		var regionId = "dtHoverRegionTextBox" + i;
		
		// Skip if this text box is not within the cutlines
		if (!dtIsObjectOnPage(textBox.left, textBox.right, 
			textBox.top, textBox.bottom, docData.pageWidth, docData.pageHeight)) continue;
		
		// Skip if this text box in not on the right page of the document
		if (textBox.page != (dtCurrentPageNumber - 1)) continue;
		
		// Check the dtNoticeList to see if there are any server notices for this text box
		var className = 'dtHoverRegionText';
		var overflow = false;
		for (var nlCnt = 0; nlCnt < dtNoticeList.length; nlCnt++) {
		
			var notice = dtNoticeList[nlCnt];
			if (notice.type == 'textBoxOverflow' &&
				notice.page == textBox.page &&
				notice.place == textBox.place) {
				overflow = true;
				className = 'dtHoverRegionTextOverflow';
			}	
		}
	
		// Round the coordinates to integers
		var x = Math.round(textBox.left * docData.previewDPI);
		var y = Math.round(textBox.top * docData.previewDPI);
		var w = Math.round((textBox.right - textBox.left) * docData.previewDPI);
		var h = Math.round((textBox.bottom - textBox.top) * docData.previewDPI);
		
		// create the hover region
		dtHoverRegionCreate(regionId, dtContainerId, x, y, w, h, 50, className, overflow, dtHoverRegionOnClick);
	}
}

function dtHoverRegionCreate(regionId, containerId, x, y, w, h, zIndex, classId, isOverflowing, onClickHandler) {

	// Get the container and return if it doesn't exist
	var container = document.getElementById(containerId);
	if (container == null) return;
	
	// Create a new div with the correct properties and add it to the container
	var region = document.createElement('div');
	region.id = regionId;
	region.style.position = 'absolute';
	region.style.opacity = isOverflowing ? '0.65' : '0.0';
	region.style.filter = isOverflowing ? 'alpha(opacity=45)' : 'alpha(opacity=0)';
	container.appendChild(region);

	// Set some other styles on it - this is probably better done in a CSS file 
	region.className = classId;
	YAHOO.util.Dom.setStyle(regionId, "z-index", zIndex);
	
	// Position the region on top of the preview image
	
	xy = YAHOO.util.Dom.getXY(_dtPreviewImageTop);
	xy[0] = xy[0] + x;
	xy[1] = xy[1] + y;
	YAHOO.util.Dom.setXY(regionId, xy);
	YAHOO.util.Dom.setStyle(regionId, "width", w + "px");
	YAHOO.util.Dom.setStyle(regionId, "height", h + "px");
	
	// Create the show/hide listeners
	YAHOO.util.Event.addListener(regionId, "mouseover", dtHoverRegionShow, isOverflowing); 
	YAHOO.util.Event.addListener(regionId, "mouseout", dtHoverRegionHide, isOverflowing); 
		
	// Create the click handler if not null
	if (onClickHandler != null) {
		var region = YAHOO.util.Dom.get(regionId);
		YAHOO.util.Event.addListener(regionId, "click", onClickHandler, region); 
	}
	
	// Put it into the global list
	_dtHoverRegionList.push(region);
}

function dtHoverRegionShow(o, isOverflowing) {

	var attributes = {
		opacity: {
			to:  (isOverflowing ? 0.85 : 0.65)
		}
	};
	var anim = new YAHOO.util.Anim(this, attributes, 0.25, YAHOO.util.Easing.easeOut); 
	anim.animate();
}

function dtHoverRegionHide(o, isOverflowing) {

	var attributes = {
		opacity: {
			to: (isOverflowing ? 0.65 : 0.0)
		}
	};
	var anim = new YAHOO.util.Anim(this, attributes, 0.25, YAHOO.util.Easing.easeOut); 
	anim.animate();		
}


function dtHoverRegionOnClick(e, region) {

	// Handle text box regions
	if (region.id.indexOf('dtHoverRegionTextBox') == 0) {
	
		// Get the dtTextBox that the region represents
		var index = Number(region.id.replace('dtHoverRegionTextBox', ''));
		var textBox = dtDocList[dtCurrentDocumentIndex]._dtDocData.textBoxes[index];
		
		// Determine if there is a text overflow notice for this box
		var overflow = false;
		for (var nlCnt = 0; nlCnt < dtNoticeList.length; nlCnt++) {		
			var notice = dtNoticeList[nlCnt];
			if (notice.type == 'textBoxOverflow' &&
				notice.page == textBox.page &&
				notice.place == textBox.place) {
				overflow = true;
			}	
		}	
			
		var panel = new DTTextBoxEditorPanel("someid", overflow);
		panel.setTextBoxModifiedCallback(
			function(content, scaling, color, type) {
				dtDocList[dtCurrentDocumentIndex]._dtDocData.textBoxes[index].content = content;
				dtDocList[dtCurrentDocumentIndex]._dtDocData.textBoxes[index].selectedFontScaling = scaling;
				dtDocList[dtCurrentDocumentIndex]._dtDocData.textBoxes[index].selectedFontColor = color;
				dtDocList[dtCurrentDocumentIndex]._dtDocData.textBoxes[index].selectedFontFace = type;
				dtDocList[dtCurrentDocumentIndex]._dtDocData.textBoxes[index].modified = true;	
				_dtDocumentRequestUpdate = true;
			}
		);
		panel.setTextBoxResetCallback(
			function() {
				dtDocList[dtCurrentDocumentIndex]._dtDocData.textBoxes[index].content = 
					dtDocList[dtCurrentDocumentIndex]._dtDocData.textBoxes[index].defaultContent;
				dtDocList[dtCurrentDocumentIndex]._dtDocData.textBoxes[index].selectedFontScaling = 0;
				dtDocList[dtCurrentDocumentIndex]._dtDocData.textBoxes[index].selectedFontColor = null;
				dtDocList[dtCurrentDocumentIndex]._dtDocData.textBoxes[index].selectedFontFace = '';
				dtDocList[dtCurrentDocumentIndex]._dtDocData.textBoxes[index].modified = false;	
				_dtDocumentRequestUpdate = true;
			}
		);
		panel.showPanel(textBox);
	}	
	
	// Handle image box regions
	if (region.id.indexOf('dtHoverRegionImageBox') == 0) {
	
		// Get the dtImageBox that the region represents
		var index = Number(region.id.replace('dtHoverRegionImageBox', ''));
		var imageBox = dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index];
		
		var panel = new DTImageBoxPositionEditorPanel("someid");
		panel.showPanel(imageBox, index);
	}	
}


function dtHoverRegionRemoveAll() {

	for (var i = 0; i < _dtHoverRegionList.length; i++) {
		var r = _dtHoverRegionList[i];
		var rElement = document.getElementById(r.id);
		rElement.parentNode.removeChild(rElement);
	}
	
	_dtHoverRegionList = new Array();
}

function dtIsObjectOnPage(left, right, top, bottom, canvasWidth, canvasHeight) {
	return (left < canvasWidth && top < canvasHeight && right > 0 && bottom > 0);
}

function dtOpenHelp() {
	try {
		openHelp();
	} catch (e) {
		alert("The help system is not available on this server.");
	}
}


function dtSaveSettingsFile(settingsFileName, data) {

	// Create a callback for the async request
	var callback = 
	{
		cache:false,
		success: function(o) {
		},
		failure: function(o) {
		},
		argument: {}
	}
	
	// Make the call
	var postUrl = "/designtools/main/ajaxSaveDTSessionSettings/dtSessionId/" + dtSessionId +  
		"/dtSettingsFileName/" + settingsFileName;
	var postData = "dtFileData=" + escape(data);
	var postRequest = YAHOO.util.Connect.asyncRequest('POST', postUrl, callback, postData); 	

}

function dtGetSettingsFile(settingsFileName, cbFunc) {

	// Create a callback for the async request
	var callback = 
	{
		cache:false,
		success: function(o) {
			try {
				cbFunc(o.responseText);
			} catch (x) {}
		},
		failure: function(o) {		
		},
		argument: {}
	}
	
	// Make the call
	var url = "/designtools/main/ajaxGetDTSessionSettings/dtSessionId/" + dtSessionId +  
		"/dtSettingsFileName/" + settingsFileName;
	var postRequest = YAHOO.util.Connect.asyncRequest('POST', url, callback); 	

}

function dtWriteSettingsFiles() {
	dtSaveSettingsFile("dtRecentFontsArray.json", YAHOO.lang.JSON.stringify(dtRecentFontsArray));
	dtSaveSettingsFile("dtRecentColorsArray.json", YAHOO.lang.JSON.stringify(dtRecentColorsArray));
}
		
// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
   var rest = this.slice((to || from) + 1 || this.length);
   this.length = from < 0 ? this.length + from : from;
   return this.push.apply(this, rest);
};
 
 
function dtCreateJSONObjectFromForm(formId, itemId){
 
    var formObj = document.getElementById(formId);
    var formInputs = null;
    
    if (formObj != null) formInputs = formObj.elements;
    if (formInputs == null) return "";
    var formStr = '';
  
    for(var j = 0; j < formInputs.length; j++){
        
        var tempInput = formInputs[j];
        var name = tempInput.name;
        var value = tempInput.value;
        
        // Skip unchecked radio buttons
        if (tempInput.type == 'radio' && !tempInput.checked) continue; 
        
        // set the item id correctly
        if (name == "itemId") value = itemId;
        
        // Escape the " character as that is the correct format for json
        value = value.replace(/"/g, '\\"');
        formStr += name + ':"' + value + '",';
    }

 	return formStr;
}

function dtCreateJSONImagesFromImprintList(imprintHTML) {

	var jsonData = "";

	var matchArray = imprintHTML.match(/dtImageNameImage_[0-9]+_[0-9]+/g);
	if (matchArray) {	
		for (var i = 0; i < matchArray.length; i++) {
		
			var imageId = matchArray[i];
			var imageSrc = "";
			var image = document.getElementById(imageId);
			if (image != null) imageSrc = image.src;
			if (imageSrc.match(/dtImageBaseName/)) {
				if (jsonData != "") jsonData += ","; 
				jsonData += imageId + ':"' + imageSrc + '"';
			}
			
		}
	}

	return jsonData;
}

function dtGetStripedDocList() {

	// Duplicate the dtDocList object
	var newDocListString = YAHOO.lang.JSON.stringify(dtDocList);
	var newDocList = YAHOO.lang.JSON.parse(newDocListString);

	// Strip out the fields that don't need to be posted 
	for (var di = 0; di < newDocList.length; di++) { 	
		newDocList[di]._imprintFormData = null;
		newDocList[di]._dtDocData = null;
		newDocList[di]._imprintFormReviewData = null;
	}

	return newDocList;
}

function dtUpdateDOLCartItems() {

	// Create a callback for the async request
	var callback = 
	{
		cache:false,
		success: function(o) {
		},
		failure: function(o) {
			alert("Failed to update shopping cart: " + o.statusText);
		},
		argument: {}
	}
	
	// Create the url
	var updateItemDOLUrl = "/store/updateItemDOL";
	updateItemDOLUrl += "/market/" + dtMarketId;
	var postData = "dolJSONArray=" + escape(YAHOO.lang.JSON.stringify(dtGetStripedDocList()));
	
	// Make the call
	var postRequest = YAHOO.util.Connect.asyncRequest('POST', updateItemDOLUrl, callback, postData); 	
}

function dtValidateDocList(dl) {

	var isValid = true;
	for (var i = 0; i < dl.length; i++) {
	
		if (dl[i].itemType == 'DOL') {
			
			if (dl[i].documentId == null) {
				return false;
			}
			
			if (!dl[i].documentId.match(/[A-F0-9]{32}/)) {
				return false;
			}
		}
	}
	
	return isValid;
}

// Constructor method
DTApprovePanel = function(id) {

	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				xy: [200, 50],
				width: "900px", 
				visible: false, 
				draggable: true, 
				fixedcenter: false,  
				close: false, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 100
			} 
		);
		
	// Build out the panel content
	var body = 			
		'<table class="test" align="center" width="100%"><tr><td> ' +
		'	<div class="dtPanelBorder" style="font-size: 12px; height: 550px; width: 100%"> ' + 
		'		<table width="100%"><tr><td valign="top" width="300"> ' +
		'			<b>Final Review</b><p> ' +
		'			Your design will <b>print as you see</b> it on your computer screen. ' +
		'			Please note that the colors on a computer screen may vary from those ' +
		'			printed due to various computer settings.<p> ' +
		'			MagnetStreet has a team of professionals that will review your order ' +
		'			to insure the best possible product for you.  However, we strongly ' +
		'			encourage you to print out your proof at actual size for the best ' +
		'			possible review of your product.<p> ' +
		'			Some final questions to ask yourself: ' +
		'			<ul> ' +
		'			<li>Are all <b>sides of the product</b> personalized? ' +
		'			<li>Have all <b>spelling</b> and <b>dates</b> been checked? ' +
		'			<li>Are <b>photos positioned</b> as desired? ' +
		'			<li>Is the <b>photo quality</b> good for printing? ' +
		'			<li>Can you <b>read the text clearly</b>? ' +
		'			</ul>' +
		'			<a id="DTApprovalPanelSpec">Add Special Design Instructions</a><br><br> ' +
		'			<div id="DTApprovalPanelSpecDiv" style="font-size: 11px; visibility: hidden; "> ' +
		'				If you have additional design adjustments you need assistance on, ' +
		'				enter specific instructions here. ' +
		'				Note: depending on your request a fee may be required, in which ' +
		'				case you will be contacted.<br> ' +
		'				<textarea cols=25 rows=2 id="DTApprovalPanelSpecTextArea"></textarea> ' +
		'			</div>' +
		'		</td><td align="center" valign="top" width="600"> ' +
		'			<div id="_pdfContent" style="height: 535px; width: 100%"></div>' +
		'		</td></tr></table>' +
		'	</div>' +
		'</td></tr><tr><td align="right">' +
		' 	<img src="/designtools/webimages/0173_cancel.png" id="DTApprovalPanelCancel">' +
		' 	<img src="/designtools/webimages/0173_continue.png" id="DTApprovalPanelApprove">' +
		'</td></tr></table>';
		
	// Render the panel
	this._panel.setHeader("Complete Design Process");
	this._panel.setBody(body);
	this._panel.render(document.body);

	YAHOO.util.Event.addListener('DTApprovalPanelSpec', "click", this._showSpec, this ); 

	new DTImageButton('DTApprovalPanelApprove', 
		'/designtools/webimages/0173_continue.png', 
		'/designtools/webimages/0173_continue_on.png', 
		this._signTerms, this);
		
	new DTImageButton('DTApprovalPanelCancel', 
		'/designtools/webimages/0173_cancel.png', 
		'/designtools/webimages/0173_cancel_on.png', 
		this._cancel, this);
}

// Public methods
DTApprovePanel.prototype.showPanel = function() {
	this._panel.show();
	
	document.getElementById('_pdfContent').innerHTML = 
		'<h1>Loading.  Please wait...</h1>' +
		'<img src="f">';
		
	this._getProof(this);
}

// Private methods
DTApprovePanel.prototype._signTerms = function(e, o) {

	// blank out the PDF
	document.getElementById('_pdfContent').innerHTML = '';

	var panel = new DTApproveTermsPanel('_approveTermsPanel');
	panel.setApproveCallback(
		function (initials) {
			o._approve(null, o, initials);
		}
	);
	panel.setCancelCallback(
		function () {
			o._loadProofFile();
		}
	);
	panel.showPanel();

}

DTApprovePanel.prototype._approve = function(e, o, initials) {

	YAHOO.util.Dom.setStyle('DTApprovalPanelSpecDiv', "visibility", "hidden");
	var notes = document.getElementById('DTApprovalPanelSpecTextArea').value;
	o._panel.hide();
	o._panel.destroy();
	
	var waitPanel = new DTWaitPanel("_waitingPanel");
	waitPanel.showPanel("Saving.  Please wait...");

	// Create a callback for the async request
	var callbackPostDoc = 
	{
		cache:false,
		success: function(o) {
		
			var docSaved = false;
			
			try {
				// Get the notice list that is passed back
				var noticeList = YAHOO.lang.JSON.parse(o.responseText);
				
				// Find the relevent notice to ensure the document was saved
				for (var nlCnt = 0; nlCnt < noticeList.length; nlCnt++) {
					var notice = noticeList[nlCnt];
					if (notice.type == 'documentSaved') {
						docSaved = true;
					}	
				}	
		 	} catch (e) {}
		
			waitPanel.hidePanel();
			if (docSaved) {
				_dtFinishCallback(dtSessionId, dtDocumentId, 'Approve', notes, initials);			
			} else {
			 	alert("There was an error trying to save your document.  Please try again.\r\n\r\nMessage: A confirmation message was not received from the server.");					
			}
		
		},
		failure: function(o) {
			waitPanel.hidePanel();
		 	alert("There was an error connecting to the server to save your document.  Please try again.\r\n\r\nMessage: " + o.statusText);
		},
		argument: {}	
	}

	// Make the call
	var postDocUrl = "/designtools/main/ajaxUpdateDTDoc/dtSessionId/" + dtSessionId + "/dtDocumentId/" + dtDocumentId + 
		"/dtSaveChanges/true/dtGeneratePreview/true/dtGenerateProof/true/";
	var postData = "dtDocData=" + escape(YAHOO.lang.JSON.stringify(dtDoc));
	var postDocRequest = YAHOO.util.Connect.asyncRequest('POST', postDocUrl, callbackPostDoc, postData); 	
}



DTApprovePanel.prototype._cancel = function(e, o) {

	YAHOO.util.Dom.setStyle('DTApprovalPanelSpecDiv', "visibility", "hidden");
	o._panel.hide();
	o._panel.destroy();
	
}

DTApprovePanel.prototype._showSpec = function(e, o) {

	YAHOO.util.Dom.setStyle('DTApprovalPanelSpecDiv', "visibility", "visible");
}

DTApprovePanel.prototype._getProof = function(obj) {

	// Create a callback for the async request
	var callbackPostDoc = 
	{
		cache:false,
		success: function(o) {
			obj._loadProofFile();
		},
		failure: function(o) {
		 	alert("Error updating document: " + o.statusText);
		},
		argument: {}
	}
	
	// Make the call
	var r = new Date();
	r = r.getTime() + ":" + Math.random();
	var postDocUrl = "/designtools/main/ajaxUpdateDTDoc/dtSessionId/" + dtSessionId + "/dtDocumentId/" + dtDocumentId + 
		"/dtSaveChanges/false/dtGeneratePreview/false/dtGenerateProof/true/r/" + r;
	var postData = "dtDocData=" + escape(YAHOO.lang.JSON.stringify(dtDoc));
	var postDocRequest = YAHOO.util.Connect.asyncRequest('POST', postDocUrl, callbackPostDoc, postData); 	
}

DTApprovePanel.prototype._loadProofFile = function() {

	var r = new Date();
	r = r.getTime() + ":" + Math.random();
	var proofSrc = "/designtools/main/ajaxGetDTDocJPGProofFile/dtSessionId/" + 
		dtSessionId + "/dtDocumentId/" + dtDocumentId + "/dtPageNumber/" +  + "/r/" + r;
	var pdfContent = 
		'<iframe src="' + proofSrc + '" width="100%" height="100%">';
	document.getElementById('_pdfContent').innerHTML = pdfContent;
	
}
// Constructor method
DTApproveRequestChangesPanel = function(id) {

	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				xy: [200, 50],
				width: "400px", 
				visible: false, 
				draggable: true, 
				fixedcenter: false,  
				close: false, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 100
			} 
		);
		
	// Build out the panel content
	var body = 	
		'<b>Enter your changes in the field below: </b><br><textarea cols=40 rows=6></textarea><p>' + 
		'<center>' + 
		'<img vspace=5 hspace=3 id="DTApproveRequestChangesPanelApprove" src="/designtools/images/buttons/btn_wide_approve_design.gif"> ' + 
		'<img vspace=5 hspace=6 id="DTApproveRequestChangesPanelCancel" src="/designtools/images/buttons/btn_wide_cancel.gif">' + 
		'</center>';	
		
	// Render the panel
	this._panel.setHeader("Approve With Changes...");
	this._panel.setBody(body);
	this._panel.render(document.body);

	YAHOO.util.Event.addListener('DTApproveRequestChangesPanelApprove', "click", this._approve, this ); 
	YAHOO.util.Event.addListener('DTApproveRequestChangesPanelCancel', "click", this._cancel, this ); 
	
}

// Public methods
DTApproveRequestChangesPanel.prototype.showPanel = function() {
	this._panel.show();
}

DTApproveRequestChangesPanel.prototype.setApproveCallback = function(cb) {
	this._approveCallback = cb;
}


// Private methods

DTApproveRequestChangesPanel.prototype._approve = function(e, o) {
	o._approveCallback();
	o._panel.hide();	
	o._panel.destroy();

}

DTApproveRequestChangesPanel.prototype._cancel = function(e, o) {
	o._panel.hide();
	o._panel.destroy();

}

// Constructor method
DTApproveTermsPanel = function(id) {

	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				xy: [200, 50],
				width: "550px", 
				visible: false, 
				draggable: true, 
				fixedcenter: false,  
				close: false, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 120
			} 
		);
		
	// Build out the panel content
	var body = 	
		'<table align="center" width="100%"><tr><td> ' +
		'	<div class="dtPanelBorder" style="text-align: left; height: 300px; width: 100%"> ' + 
		'		<table><tr><td> ' + 
		'			<img src="/designtools/webimages/seal-of-approval.png" align="left" hspace="20" vspace="5"> ' +
		'			<ul> ' +
		'			<li>I have read, understand and agree to all <a href="/pdfs/tou.pdf" target="_blank">terms of use</a> of this order. ' +
		'			<li>I understand that my product will print as designed by me and I will NOT receive an emailed proof.* ' +
		'			</ul><br><br> ' +
		'			Initial to indicate your approval: <input type="text" id="DTApproveTermsInitials" size=4> ' +
		'		</td></tr><tr><td>' +
		'			<small>*If you added special design instructions, our designers will make the changes you asked, ' + 
		'			and in most cases email you a proof for approval. If you want to make sure you receive a ' + 
		'			proof in this instance, request one in the notes for designer section of your order.</small> ' + 
		'		</td></tr></table> ' +
		'	</div> ' +
		'</td></tr><tr><td align="right">' +
		' 	<img src="/designtools/webimages/0173_cancel.png" id="DTApproveTermsPanelCancel">' +
		' 	<img src="/designtools/webimages/0173_done.png" id="DTApproveTermsPanelApprove">' +
		'</td></tr></table>';

	
	// Render the panel
	this._panel.setHeader("Approval");
	this._panel.setBody(body);
	this._panel.render(document.body);

	new DTImageButton('DTApproveTermsPanelApprove', 
		'/designtools/webimages/0173_done.png', 
		'/designtools/webimages/0173_done_on.png', 
		this._approve, this);
		
	new DTImageButton('DTApproveTermsPanelCancel', 
		'/designtools/webimages/0173_cancel.png', 
		'/designtools/webimages/0173_cancel_on.png', 
		this._cancel, this);	
}

// Public methods
DTApproveTermsPanel.prototype.showPanel = function() {
	this._panel.show();
}

DTApproveTermsPanel.prototype.setApproveCallback = function(cb) {
	this._approveCallback = cb;
}

DTApproveTermsPanel.prototype.setCancelCallback = function(cb) {
	this._cancelCallback = cb;
}

// Private methods

DTApproveTermsPanel.prototype._approve = function(e, o) {

	// get the initials
	var initials = document.getElementById('DTApproveTermsInitials').value;
		
	// make sure they added initials
	initials = initials.replace(/^\s+|\s+$/g,"");
	if (initials == '') {
	
		// Prompt the user to enter their initials
		var qPanel = new DTQuestionPanel('_qPanelEnterInitials', 280);
		
		qPanel.setChoice1Callback(
			function () {
			}
		);
		
		qPanel.setChoice2Callback(
			function () {
			}
		);
		
		qPanel.setChoice3Callback(
			function () {
			}
		);
		
		qPanel.showPanel(
			"Enter Your Initials",		
			"Please enter your initials before approving your design.",
			'<img src="/designtools/webimages/0179_ok.png">', '', ''
		);
	
		return;
	}

	o._approveCallback(initials);
	o._panel.hide();	
	o._panel.destroy();

}

DTApproveTermsPanel.prototype._cancel = function(e, o) {
	o._cancelCallback();
	o._panel.hide();	
	o._panel.destroy();

}

// Constructor method
DTColorPickerPanel = function(id, cmykDefaults) {
	
	this._cmykDefaults = cmykDefaults;
	if (this._cmykDefaults == null) this._cmykDefaults = [0, 0, 0, 0];

	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				xy: [200, 50],
				width: "550px", 
				visible: false, 
				draggable: true, 
				fixedcenter: false,  
				close: false, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 100
			} 
		);
		
		
	var panelBody = 
		'<table align="center" width="100%"><tr><td> ' +
		'	<div class="dtPanelBorder" style="height: 510px; width: 100%"> ' +
		'		<div id="DTColorPickerPanelTabView" style="padding: 20px;"></div> ' + 
		'	</div>' +
		'</td></tr><tr><td>' +
		'	<table width="100%"><tr>' +
		'		<td><img src="/designtools/webimages/help.png" id="DTColorPickerPanelHelpButton"> ' +
		'			<a id="DTColorPickerPanelHelpLink">Help</a></td>' +
		'		<td><div align="right">' +
		' 	<img src="/designtools/webimages/0179_cancel.png" id="_colorSelectorCancel">' +
		' 	<img src="/designtools/webimages/0179_reset.png" id="_colorSelectorReset">' +
		' 	<img src="/designtools/webimages/0179_choose.png" id="_colorSelectorChoose">' +
		'			</div>' +
		'	</td></tr></table>' +
		'</td></tr></table>';	
	
	// Render the panel
	this._panel.setHeader("Color Editor");
	this._panel.setBody(panelBody);
	this._panel.render(document.body);
			
	// Build the standard colors content
	var standardColorsMarkup = "<table><tr>";
	var colorFamily = '';
	var colPos = 0;
	for (var i = 0; i < dtColorArray.length; i++) {

		var color = dtColorArray[i];
		var palletId = 'dtColorPalletIndex' + i;
		var palletCellId = 'dtColorPalletCellIndex' + i;
		
		if (color.family != colorFamily) {
			colorFamily = color.family;
			standardColorsMarkup += 
				'</tr><tr><td colspan=5 align="center"><b>&bull; ' + colorFamily + ' &bull;</b></td></tr><tr>';
			colPos = 0;
		}
		
		var item = 
			'<td id="' + palletCellId + '" style="width: 110px; height: 90px; vertical-align: top;">' + 
			'<center><div  id="' + palletId + '" style="margin-bottom: 5px; margin-top: 10px; border: 1px solid black; width: 60px; height: 60px; background: #' + 
			DTUtilsGetRgbInHex(color.rgb) + '"></div>' + 
			color.name + '</center></td>';
		
		standardColorsMarkup += item;	
		colPos++;
		if (colPos >= 5) {
			standardColorsMarkup += '</tr><tr>';	
			colPos = 0;	
		}
		
	}	
	standardColorsMarkup += '</tr></table>';	
	standardColorsMarkup = 
		'<div id="_standardColorsContent" style="background: #ffffff; overflow: scroll; height: 420px; width: 100%;">' + standardColorsMarkup + '</div>';		
	
	var customColorHTML = 
		'<div class="dtPanelBorder"><table width="100%"><tr>' +
			'<td align="center">Cyan</td>' + 
			'<td>' +
			'	<div id="DTColorPickerPanel-cyan-slider-bg" tabindex="-1" title="Cyan">' + 
		  		'<div id="DTColorPickerPanel-cyan-slider-thumb"><img src="/designtools/images/sliders/thumb-n.gif"></div> ' + 
			'</div></td>' +
			'<td align="center"><input type="text" size=3 id="DTColorPickerPanel-cyan-Text" value="' + this._cmykDefaults[0] + '" readonly></td>' +
			'<td rowspan=4 valign="middle" align="center" width="150"><div id="DTColorPickerPanel-previewbox" ' + 
			'		style="height: 70px; width: 70px; border: 1px solid black;"></div></td>' +			
		'</tr><tr>' +				
			'<td align="center">Magenta</td>' + 
			'<td>' +
			'	<div id="DTColorPickerPanel-magenta-slider-bg" tabindex="-1" title="Magenta">' + 
		  		'<div id="DTColorPickerPanel-magenta-slider-thumb"><img src="/designtools/images/sliders/thumb-n.gif"></div> ' + 
			'</div></td>' +
			'<td align="center"><input type="text" size=3 id="DTColorPickerPanel-magenta-Text" value="' + this._cmykDefaults[1] + '" readonly></td>' +
		'</tr><tr>' +				
			'<td align="center">Yellow</td>' + 
			'<td>' +
			'	<div id="DTColorPickerPanel-yellow-slider-bg" tabindex="-1" title="Yellow">' + 
		  		'<div id="DTColorPickerPanel-yellow-slider-thumb"><img src="/designtools/images/sliders/thumb-n.gif"></div> ' + 
			'</div></td>' +
			'<td align="center"><input type="text" size=3 id="DTColorPickerPanel-yellow-Text" value="' + this._cmykDefaults[2] + '" readonly></td>' +			
		'</tr><tr>' +				
			'<td align="center">Black</td>' + 
			'<td>' +
			'	<div id="DTColorPickerPanel-black-slider-bg" tabindex="-1" title="Black">' + 
		  		'<div id="DTColorPickerPanel-black-slider-thumb"><img src="/designtools/images/sliders/thumb-n.gif"></div> ' + 
			'</div></td>' +
			'<td align="center"><input type="text" size=3 id="DTColorPickerPanel-black-Text" value="' + this._cmykDefaults[3] + '" readonly></td>' +
		'</tr></table></div>';
			
	// Build the recently used colors content
	var recentColorsMarkup = "<table><tr>";
	var colPos = 0;
	for (var i = 0; i < dtRecentColorsArray.length; i++) {

		var color = dtRecentColorsArray[i];
		var palletId = 'dtRecentColorPalletIndex' + i;
		var palletCellId = 'dtRecentColorPalletCellIndex' + i;
		
		var item = 
			'<td id="' + palletCellId + '" style="width: 110px; height: 90px; vertical-align: top;">' + 
			'<center><div  id="' + palletId + '" style="margin-bottom: 5px; margin-top: 10px; border: 1px solid black; width: 60px; height: 60px; background: #' + 
			DTUtilsGetRgbInHex(color.rgb) + '"></div>' + 
			color.name + '</center></td>';
		
		recentColorsMarkup += item;	
		colPos++;
		if (colPos >= 5) {
			recentColorsMarkup += '</tr><tr>';	
			colPos = 0;	
		}
		
	}	
	recentColorsMarkup += '</tr></table>';	
	recentColorsMarkup = 
		'<div id="_recentColorsContent" style="background: #ffffff; overflow: scroll; height: 420px; width: 100%;">' + recentColorsMarkup + '</div>';		
				
			
			
			
	// Create the tab view
	this._colorPickerTabView = new YAHOO.widget.TabView(); 
	
	this._standardColorsTab = new YAHOO.widget.Tab({ 
	    label: 'Standard Colors', 
	    content: standardColorsMarkup,
	    active: true 
	});
	this._colorPickerTabView.addTab(this._standardColorsTab); 
	 	 
	this._customColorsTab = new YAHOO.widget.Tab({ 
	    label: 'Custom Colors', 
	    content: '<div id="_cmykValuesContent" style="height: 420px;">' + customColorHTML + '</div>'
	});
	this._colorPickerTabView.addTab(this._customColorsTab); 

	this._recentColorsTab = new YAHOO.widget.Tab({ 
	    label: 'Recently Used Colors', 
	    content: recentColorsMarkup
	});
	this._colorPickerTabView.addTab(this._recentColorsTab); 
	
	this._colorPickerTabView.appendTo('DTColorPickerPanelTabView'); 
				
	// add event listeners to color selection
	for (var i = 0; i < dtColorArray.length; i++) {
		var palletId = 'dtColorPalletIndex' + i;
		YAHOO.util.Event.addListener(palletId, "click", this._colorSelected, 
			{me: this, color : dtColorArray[i], colorId: palletId} ); 
		YAHOO.util.Event.addListener(palletId, "dblclick", this._colorDoubleClick, 
			{me: this, color : dtColorArray[i], colorId: palletId} ); 	
	}

	for (var i = 0; i < dtRecentColorsArray.length; i++) {
		var palletId = 'dtRecentColorPalletIndex' + i;
		YAHOO.util.Event.addListener(palletId, "click", this._recentColorSelected, 
			{me: this, color : dtRecentColorsArray[i], colorId: palletId} ); 
		YAHOO.util.Event.addListener(palletId, "dblclick", this._colorDoubleClick, 
			{me: this, color : dtRecentColorsArray[i], colorId: palletId} ); 	
	}
	this._selectedColor = null;
	
	new DTImageButton('_colorSelectorCancel', 
		'/designtools/webimages/0179_cancel.png', 
		'/designtools/webimages/0179_cancel_on.png', 
		this._cancel, {me: this});
		
	new DTImageButton('_colorSelectorReset', 
		'/designtools/webimages/0179_reset.png', 
		'/designtools/webimages/0179_reset_on.png', 
		this._resetColor, {me: this});
		
	new DTImageButton('_colorSelectorChoose', 
		'/designtools/webimages/0179_choose.png', 
		'/designtools/webimages/0179_choose_on.png', 
		this._chooseColor, {me: this});
		
	YAHOO.util.Event.addListener('DTColorPickerPanelHelpButton', "click", dtOpenHelp ); 
	YAHOO.util.Event.addListener('DTColorPickerPanelHelpLink', "click", dtOpenHelp ); 
	
	this._customColorsTabInit = false;
	this._colorPickerTabView.addListener('activeTabChange', 
		function(ev) {
			if (!this._customColorsTabInit && ev.newValue == this._customColorsTab) {
	
				this._cyanSlider = YAHOO.widget.Slider.getHorizSlider(
						'DTColorPickerPanel-cyan-slider-bg',  
				        'DTColorPickerPanel-cyan-slider-thumb', 0, 200, 2);        
				this._cyanSlider.subscribe("change", this._refreshCustomColor, this); 	
					
				this._magentaSlider = YAHOO.widget.Slider.getHorizSlider(
						'DTColorPickerPanel-magenta-slider-bg',  
				        'DTColorPickerPanel-magenta-slider-thumb', 0, 200, 2);         
				this._magentaSlider.subscribe("change", this._refreshCustomColor, this); 	
			
				this._yellowSlider = YAHOO.widget.Slider.getHorizSlider(
						'DTColorPickerPanel-yellow-slider-bg',  
				        'DTColorPickerPanel-yellow-slider-thumb', 0, 200, 2);         
				this._yellowSlider.subscribe("change", this._refreshCustomColor, this); 	
			
				this._blackSlider = YAHOO.widget.Slider.getHorizSlider(
						'DTColorPickerPanel-black-slider-bg',  
				        'DTColorPickerPanel-black-slider-thumb', 0, 200, 2);         
				this._blackSlider.subscribe("change", this._refreshCustomColor, this); 	
			
				this._cyanSlider.setValue(this._cmykDefaults[0] * 2, true);
				this._magentaSlider.setValue(this._cmykDefaults[1] * 2, true);
				this._yellowSlider.setValue(this._cmykDefaults[2] * 2, true);
				this._blackSlider.setValue(this._cmykDefaults[3] * 2, true);
			
				this._customColorsTabInit = true;
	
			}
		}, this, this
	); 
	
	
	
	
}

// Public methods
DTColorPickerPanel.prototype.showPanel = function() {

/*
	this._panel.showEvent.subscribe(function(ev) { 
		this._colorPickerTabView.set("activeTab", this._standardColorsTab);
	}, this, true);
*/

	this._panel.show();     
	//this._colorPickerTabView.set("activeTab", this._standardColorsTab);
}

DTColorPickerPanel.prototype.setColorSelectedCallback = function(cb) {
	this._colorSelectedCallback = cb;
}

DTColorPickerPanel.prototype.setColorResetCallback = function(cb) {
	this._colorResetCallback = cb;
}

// Private methods
DTColorPickerPanel.prototype._colorSelected = function(e, o) {
		
	for (var i = 0; i < dtColorArray.length; i++) {
		var palletId = 'dtColorPalletIndex' + i;
		var palletCellId = 'dtColorPalletCellIndex' + i;
		YAHOO.util.Dom.setStyle(palletId, "border", "1px solid black");
		YAHOO.util.Dom.setStyle(palletCellId, "background", "#ffffff");		
	}

	var palletCellId = o.colorId.replace('dtColorPalletIndex', 'dtColorPalletCellIndex');
	YAHOO.util.Dom.setStyle(o.colorId, "border", "1px dashed black");
	YAHOO.util.Dom.setStyle(palletCellId, "background", "#cccccc");
	o.me._selectedColor = o.color;
}

DTColorPickerPanel.prototype._recentColorSelected = function(e, o) {
		
	for (var i = 0; i < dtRecentColorsArray.length; i++) {
		var palletId = 'dtRecentColorPalletIndex' + i;
		var palletCellId = 'dtRecentColorPalletCellIndex' + i;
		YAHOO.util.Dom.setStyle(palletId, "border", "1px solid black");
		YAHOO.util.Dom.setStyle(palletCellId, "background", "#ffffff");		
	}

	var palletCellId = o.colorId.replace('dtRecentColorPalletIndex', 'dtRecentColorPalletCellIndex');
	YAHOO.util.Dom.setStyle(o.colorId, "border", "1px dashed black");
	YAHOO.util.Dom.setStyle(palletCellId, "background", "#cccccc");
	o.me._selectedColor = o.color;
}

DTColorPickerPanel.prototype._colorDoubleClick = function(e, o) {
	o.me._selectedColor = o.color;
	o.me._chooseColor(e, o);
}

DTColorPickerPanel.prototype._chooseColor = function(e, o) {

	var useStandardColor = false;
	var useCustomColor = false;
	var useRecentColor = false;
	
	var activeTab = o.me._colorPickerTabView.get('activeTab');
	if (activeTab == o.me._standardColorsTab) useStandardColor = true;
	if (activeTab == o.me._customColorsTab) useCustomColor = true;
	if (activeTab == o.me._recentColorsTab) useRecentColor = true;
	
	
	if (useStandardColor || useRecentColor) {
		
		if (o.me._selectedColor == null) {
		
			var qPanel = new DTQuestionPanel('_qPanel1', 280);
			
			qPanel.setChoice1Callback(
				function () {
				}
			);
			
			qPanel.setChoice2Callback(
				function () {
				}
			);
			
			qPanel.setChoice3Callback(
				function () {
				}
			);
			
			qPanel.showPanel(
				"No Color Selected",		
				"You have not selected a color yet.  Please click on a color to select it.",
				'<img src="/designtools/webimages/0179_ok.png">' 
			);
		
			return;
		}
		
		o.me._panel.hide();
		o.me._panel.destroy();
		
		var dtColor = {
			colorSpace : 'CMYK',
			redValue : o.me._selectedColor.rgb[0], 
			greenValue : o.me._selectedColor.rgb[1], 
			blueValue : o.me._selectedColor.rgb[2], 
			cyanValue : o.me._selectedColor.cmyk[0], 
			magentaValue : o.me._selectedColor.cmyk[1], 
			yellowValue : o.me._selectedColor.cmyk[2], 
			blackValue : o.me._selectedColor.cmyk[3] 
		};
		
		o.me._colorSelectedCallback(dtColor);		
		
		// add this to the recently used colors list if it is a standard color
		if (useStandardColor) {
			o.me._addToRecentList(o.me._selectedColor);
		}
	}
	
	
	if (useCustomColor) {
	
		var c = o.me._cyanSlider.getValue() / 2;
		var m = o.me._magentaSlider.getValue() / 2;
		var y = o.me._yellowSlider.getValue() / 2;
		var k = o.me._blackSlider.getValue() / 2;
		var rgbValues = DTUtilsConvertCmykToRgb(c, m, y, k);
	
		o.me._panel.hide();
		o.me._panel.destroy();
		
		var dtColor = {
			colorSpace : 'CMYK',
			redValue : rgbValues[0], 
			greenValue : rgbValues[1], 
			blueValue : rgbValues[2], 
			cyanValue : c, 
			magentaValue : m, 
			yellowValue : y, 
			blackValue : k 
		};
		
		o.me._colorSelectedCallback(dtColor);
		
		// Add this color to the recently used colors list
		o.me._addToRecentList(
			{
				name : 'Custom Color', 
				cmyk : [c, m, y, k], 
				rgb : rgbValues, 
				family : 'Custom'
			}
		);
	}

}

DTColorPickerPanel.prototype._addToRecentList = function(newColor) {
	
	for (var i = 0; i < dtRecentColorsArray.length; i++) {
		var color = dtRecentColorsArray[i];
		if (color.name == newColor.name && color.cmyk == newColor.cmyk) 
			dtRecentColorsArray.splice(i, 1);
	}
		
	dtRecentColorsArray.reverse();
	dtRecentColorsArray.push(newColor);
	dtRecentColorsArray.reverse();

	while (dtRecentColorsArray.length > 25) {
		dtRecentColorsArray.pop();
	}
}

DTColorPickerPanel.prototype._cancel = function(e, o) {
	o.me._panel.hide();
	o.me._panel.destroy();
}

DTColorPickerPanel.prototype._resetColor = function(e, o) {
	o.me._panel.hide();
	o.me._panel.destroy();
	o.me._colorResetCallback();	
}

DTColorPickerPanel.prototype._refreshCustomColor = function(e, o) {
	
	var c = o._cyanSlider.getValue();
	var m = o._magentaSlider.getValue();
	var y = o._yellowSlider.getValue();
	var k = o._blackSlider.getValue();

	c = c / 2;
	m = m / 2;
	y = y / 2;
	k = k / 2;
	
	document.getElementById('DTColorPickerPanel-cyan-Text').value = c;
	document.getElementById('DTColorPickerPanel-magenta-Text').value = m;
	document.getElementById('DTColorPickerPanel-yellow-Text').value = y;
	document.getElementById('DTColorPickerPanel-black-Text').value = k;
	
	var color = DTUtilsConvertCmykToRgbHex(c, m, y, k);
	YAHOO.util.Dom.setStyle('DTColorPickerPanel-previewbox', "background", '#' + color);
}
 
// Constructor method
DTDesignerNotesEditorPanel = function(id, docIndex) {

	this._docIndex = docIndex;
	
	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				xy: [200, 50],
				width: "540px", 
				visible: false, 
				draggable: true, 
				fixedcenter: false,  
				close: false, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 100
			} 
		);
		
	// Lay out the panel with basic HTML holders for the different widgets
	var panelBody = 
		'<table align="center" width="100%"><tr><td> ' +
		'	<div class="dtPanelBorder" style="text-align: left; width: 100%"><div style="padding: 15px;">' + 
		'		<center><b>Special Design Instructions</b>' + 
		'		<table><tr><td><img valign="absmiddle" hspace="10" vspace="10" src="/designtools/images/ds/icon_designer_notes.gif"></td><td>' +
		'		<br>If you have additional design adjustments to communicate to the designer, ' +
		'		enter specific instructions here.<p>' +
		'		Note: Depending on your request a fee may be required, in which case you will be contacted.<br>' +
		'		</td></tr></table>' +
		'		<textarea id="DTDesignerNotesEditorPanelTextArea" cols=50 rows=5 WRAP=OFF></textarea>' +
		'		</center>' +
		'	</div></div>' +
		'</td></tr><tr><td>' +
		'	<table width="100%"><tr>' +
		'		<td><img src="/designtools/webimages/help.png" id="DTDesignerNotesEditorPanelHelpButton"> ' +
		'			<a id="DTDesignerNotesEditorPanelHelpLink">Help</a></td>' +
		'		<td><div align="right">' +
		'				<img src="/designtools/webimages/0179_cancel.png" id="DTDesignerNotesEditorPanelCancelButton">' +
		'				<img src="/designtools/webimages/0179_ok.png" id="DTDesignerNotesEditorPanelSaveButton">' +
		'			</div>' +
		'	</td></tr></table>' +
		'</td></tr></table>';

	// Render the panel
	this._panel.setHeader("Special Design Instructions");
	this._panel.setBody(panelBody);
	this._panel.render(document.body);
		
	new DTImageButton('DTDesignerNotesEditorPanelCancelButton', 
		'/designtools/webimages/0179_cancel.png', 
		'/designtools/webimages/0179_cancel_on.png', 
		this._cancel, this);

	new DTImageButton('DTDesignerNotesEditorPanelSaveButton', 
		'/designtools/webimages/0179_ok.png', 
		'/designtools/webimages/0179_ok_on.png', 
		this._saveChanges, this);

	YAHOO.util.Event.addListener('DTDesignerNotesEditorPanelHelpButton', "click", dtOpenHelp ); 
	YAHOO.util.Event.addListener('DTDesignerNotesEditorPanelHelpLink', "click", dtOpenHelp ); 


}

// Public methods
DTDesignerNotesEditorPanel.prototype.showPanel = function(callback) {
	this._panel.show();
	this._saveCallbackFunc = callback;
	var ta = document.getElementById('DTDesignerNotesEditorPanelTextArea');
	ta.value = dtDocList[this._docIndex].userDesignNotes;
	ta.focus();
}

// Private methods
DTDesignerNotesEditorPanel.prototype._saveChanges = function(e, o) {
	var content = document.getElementById('DTDesignerNotesEditorPanelTextArea').value;
	dtDocList[o._docIndex].userDesignNotes = content;
	_dtImprintEditor.loadDocImprints(_dtImprintEditor);
	o._panel.hide();
	o._panel.destroy();	
	try {
	 	o._saveCallbackFunc();
	 } catch (e) {}
}

DTDesignerNotesEditorPanel.prototype._cancel = function(e, o) {
	o._panel.hide();
	o._panel.destroy();
}




 
// Constructor method
DTDocNavigatorOverlay = function(id, containerId, locX, locY, locW, locH) {

	this._id = id;
	
	// Create the content		
	var html = 	
		'<div id="' + id + '" style="position: absolute; height: ' + locH + 'px; width: ' + locW + 'px;"> ' +
		'	<table width="100%" style="border-collapse: collapse; padding: 0px; margin: 0px;">' +
		'		<tr style="padding: 0px; margin: 0px;">' +
		'			<td class="dtDocNavigatorOverlayHeader">&nbsp;&nbsp;&nbsp;Design Studio</td>' +
		'			<td class="dtDocNavigatorOverlayHeader"><div id="DTDocNavigatorOverlayProductQuantityTag"></div></td>' +
		'		</tr>' +
		'	</table>' +
		'	<table width="100%">' +
		'		<tr>' +
		'			<td class="dtDovNavigatorOverlayBtnBar">' +
		'				<img id="_DTDocNavigatorOverlayBtnReview" src="/designtools/images/ds/0174_review.png" align="right"> ' +
		'				<img id="_DTDocNavigatorOverlayBtnQuit" src="/designtools/images/ds/nav_btn_quit.gif"> ' +
		'				<!-- <img id="_DTDocNavigatorOverlayBtnStoreToCart" src="/designtools/images/ds/nav_btn_save.gif"> --> ' + 
		'			</td>' +
		'		</tr>' +
		'	</table>' +
		'	<div style="overflow: scroll; height: 90px; width: 325px;" id="DTDocNavigatorOverlayThumbnailContainer">zgagadfg</div>' +
		'	<table id="DTDocNavigatorOverlayLowerTable" width="100%">' +
		'		<tr>' +
		'			<td><img id="_DTDocNavigatorOverlayPrevProductBtn" src="/designtools/images/ds/0267_back.jpg"></td>' +
		'			<td width="100%"><table id="DTDocNavigatorOverlayInfoTable" width="100%" style="height: 73px;">' +
		'					<tr>' +
		'						<td colspan=4><div id="DTDocNavigatorOverlaySelectedProductDescTag"></div></td>' +
		'					</tr><tr>' +
		'						<td colspan=4><div id="DTDocNavigatorOverlaySelectedProductStyleTag"></div></td>' +
		'					</tr><tr>' +
		'						<td colspan=4><div id="DTDocNavigatorOverlaySelectedProductSizeTag"></div></td>' +
		'					</tr><tr>' +
		'						<td width="180"><div id="DTDocNavigatorOverlaySelectedProductInfoBtn"><img id="DTDocNavigatorOverlaySelectedProductInfoBtnImg" title="More Info" src="/designtools/images/ds/btn_view_info.gif"></div></td> ' +
		'						<td width="22"><div id="DTDocNavigatorOverlaySelectedProductZoomBtn"><img id="DTDocNavigatorOverlaySelectedProductZoomBtnImg" title="Preview Larger Design" src="/designtools/images/ds/nav_btn_zoom.gif"></div></td>						' +
		'						<td width="22"><div id="DTDocNavigatorOverlaySelectedProductHighlightTextBtn"><img title="Highlight Editable Text" src="/designtools/images/ds/nav_btn_highlight_text.gif"></div></td>						' +
		'						<td width="22"><div id="DTDocNavigatorOverlaySelectedProductDeleteItemBtn"><img title="Delete Current Item" src="/designtools/images/ds/nav_btn_delete.gif"></div></td>				' +		
		'					<tr>' +
		'				</table></td>' +
		'			<td><img id="_DTDocNavigatorOverlayNextProductBtn" src="/designtools/images/ds/0267_next.jpg"></td>' +
		'		</tr>' +
		'	</table>' +
		'</div>';
	
	var con = document.getElementById(containerId);
	con.innerHTML += html;
	
	var xy = YAHOO.util.Dom.getXY(containerId);
	xy[0] = xy[0] + locX;
	xy[1] = xy[1] + locY;
	YAHOO.util.Dom.setXY(id, xy);
}

DTDocNavigatorOverlay.prototype.loadThumbnails = function(o) {

	// Create the quantity header
	document.getElementById('DTDocNavigatorOverlayProductQuantityTag').innerHTML = 
		dtDocList.length + " item" + ((dtDocList.length == 1) ? "" : "s") + "&nbsp;&nbsp;&nbsp;";

	// Create the thumbnail table html
	var thumbHTML = '';
	for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) { 
		
		// Handle DOL items
		if (dtDocList[docIndex].itemType == 'DOL') {
			for (var i = 1; i <= dtDocList[docIndex]._dtDocData.pageCount; i++) {

				var src = "/designtools/main/ajaxGetDTDocXSImage/dtSessionId/" + 
					dtSessionId + "/dtDocumentId/" + dtDocList[docIndex].documentId + "/dtPageNumber/" + i;
			
				var anchor = '_thumbDocAnchor' + docIndex + 'Page' + i;
				var cellId = '_thumbDocCell' + docIndex + 'Page' + i;
				var imagePointerId = '_thumbDocPointer' + docIndex + 'Page' + i;
				var imageId = '_thumbDoc' + docIndex + 'Page' + i;
			
				thumbHTML += 
					'<td style="padding: 0px; margin: 0px;" id="' + cellId + '"><center><a name="' + anchor + '">' + 
					'<img id="' + imageId + '" hspace="4" vspace="4" src="' + src + '"><br>' + 
					'<img id="' + imagePointerId + '" hspace="2" vspace="1" src="/designtools/images/ds/nav_arrow.gif">' + 
					'</center></td>'; 
			}		
		}
	
		// Handle IMPRINT and STOCK items
		if (dtDocList[docIndex].itemType == 'IMPRINT' || dtDocList[docIndex].itemType == 'STOCK') {
		
			var src = dtDocList[docIndex].xsImageSrc;	
			var anchor = '_thumbDocAnchor' + docIndex + 'Page1';
			var cellId = '_thumbDocCell' + docIndex + 'Page1';
			var imagePointerId = "_thumbDocPointer" + docIndex + "Page1";
			var imageId = "_thumbDoc" + docIndex + "Page1";
			
			thumbHTML += 
				'<td style="padding: 0px; margin: 0px;" id="' + cellId + '"><center><a name="' + anchor + '">' + 
				'<img id="' + imageId + '" hspace="4" vspace="4" src="' + src + '"><br>' +
				'<img id="' + imagePointerId + '" hspace="2" vspace="1" src="/designtools/images/ds/nav_arrow.gif">' + 
				'</center></td>'; 
		}
	}
	document.getElementById('DTDocNavigatorOverlayThumbnailContainer').innerHTML = 
		'<table style="border-collapse: collapse; padding: 0px; margin: 0px;"><tr>' + thumbHTML + '</tr></table>';
	
	// Create the click events
	for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) { 
		
		// Handle DOL items
		if (dtDocList[docIndex].itemType == 'DOL') {
			for (var i = 1; i <= dtDocList[docIndex]._dtDocData.pageCount; i++) {

				var src = "/designtools/main/ajaxGetDTDocXSImage/dtSessionId/" + 
					dtSessionId + "/dtDocumentId/" + dtDocList[docIndex].documentId + "/dtPageNumber/" + i;

				var imageId = '_thumbDoc' + docIndex + 'Page' + i;
				
				new DTImageButton(imageId, src, src, dtLoadDocumentPage, {"docIndex":docIndex, "pageNumber":i} ); 
/*
				YAHOO.util.Event.addListener(imageId, "mouseover", o._onThumbnailMouseOver, {me: o, docIndex: docIndex, pageNumber:i} ); 
				YAHOO.util.Event.addListener(imageId, "mouseout", o._onThumbnailMouseOut, {me: o, docIndex: docIndex, pageNumber:i} ); 
*/
			}		
		}
	
		// Handle IMPRINT and STOCK items
		if (dtDocList[docIndex].itemType == 'IMPRINT' || dtDocList[docIndex].itemType == 'STOCK') {

			var src = dtDocList[docIndex].xsImageSrc;	


			var imageId = "_thumbDoc" + docIndex + "Page1";

			new DTImageButton(imageId, src, src, dtLoadDocumentPage, {"docIndex":docIndex, "pageNumber":1} ); 

/*
			YAHOO.util.Event.addListener(imageId, "mouseover", o._onThumbnailMouseOver, {me: o, docIndex: docIndex, pageNumber:1} ); 
			YAHOO.util.Event.addListener(imageId, "mouseout", o._onThumbnailMouseOut, {me: o, docIndex: docIndex, pageNumber:1} ); 		
*/

		}
	}		

}

DTDocNavigatorOverlay.prototype.loadDocDetails = function() {

	// Clear out any highlighted thumbnails
	for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) { 
		
		var bgColor = '#ffffff';
		//if (docIndex % 2 == 1) bgColor = "#eeeeee";
		
		// Handle DOL items
		if (dtDocList[docIndex].itemType == 'DOL') {
			for (var i = 1; i <= dtDocList[docIndex]._dtDocData.pageCount; i++) {			

				var cellId = '_thumbDocCell' + docIndex + 'Page' + i;
				var imagePointerId = '_thumbDocPointer' + docIndex + 'Page' + i;
				
				YAHOO.util.Dom.setStyle(cellId, "background", bgColor);
				YAHOO.util.Dom.setStyle(imagePointerId, "visibility", "hidden");
				

			}		
		}
	
		// Handle IMPRINT and STOCK items
		if (dtDocList[docIndex].itemType == 'IMPRINT' || dtDocList[docIndex].itemType == 'STOCK') {
					
			var cellId = '_thumbDocCell' + docIndex + 'Page1';
			var imagePointerId = "_thumbDocPointer" + docIndex + "Page1";

			YAHOO.util.Dom.setStyle(cellId, "background", bgColor);
			YAHOO.util.Dom.setStyle(imagePointerId, "visibility", "hidden");
			

		}
	}

	// highlight the current page
	var highlightColor = '#b8cffe';
	var anchor = '_thumbDocAnchor' + dtCurrentDocumentIndex + 'Page' + dtCurrentPageNumber;
	var cellId = '_thumbDocCell' + dtCurrentDocumentIndex + 'Page' + dtCurrentPageNumber;
	var imagePointerId = '_thumbDocPointer' + dtCurrentDocumentIndex + 'Page' + dtCurrentPageNumber;
	YAHOO.util.Dom.setStyle(cellId, "background", highlightColor);
	YAHOO.util.Dom.setStyle(imagePointerId, "visibility", "visible");
	
	// Scroll to the current page
	document.getElementById('DTDocNavigatorOverlayThumbnailContainer').scrollLeft = document.getElementById(cellId).offsetLeft;

	// highlight the group surrounding the page
	var parentItemId = dtDocList[dtCurrentDocumentIndex].shoppingItemParentId;
	if (parentItemId != null) {
		for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) {	
			if (dtDocList[docIndex].shoppingItemParentId == parentItemId) {
				if (dtDocList[docIndex].itemType == 'DOL') {
					for (var i = 1; i <= dtDocList[docIndex]._dtDocData.pageCount; i++) {			
						var cellId = '_thumbDocCell' + docIndex + 'Page' + i;
						YAHOO.util.Dom.setStyle(cellId, "background", highlightColor);
					}		
				} else {				
					var cellId = '_thumbDocCell' + docIndex + 'Page1';
					YAHOO.util.Dom.setStyle(cellId, "background", highlightColor);
				}
			}
		}
	}

	// Update the info area
	var doc = dtDocList[dtCurrentDocumentIndex];

	var productName = doc.productName;
	if (doc._dtDocData != null && doc._dtDocData.pageCount > 1) productName += " (Page " + dtCurrentPageNumber + ")";
	document.getElementById('DTDocNavigatorOverlaySelectedProductDescTag').innerHTML = productName;
	document.getElementById('DTDocNavigatorOverlaySelectedProductStyleTag').innerHTML = "Style: " + doc.productStylecode;
	document.getElementById('DTDocNavigatorOverlaySelectedProductSizeTag').innerHTML = "Size: " + doc.productSize;
	
	var showEditNotes = true;
	var showZoom = true;
	var showHighlight = true;
	var showDeleteItem = true;
	
	if (doc.itemType == 'DOL') {	
	}
	
	if (doc.itemType == 'IMPRINT') {
		showHighlight = false;
	}
		
	if (doc.itemType == 'STOCK') {
		showHighlight = false;
		showEditNotes = false;
	}

	var showInfo = false;
	if (doc._dtDocData != null && doc._dtDocData.templateInfo != "") showInfo = true;
		
	YAHOO.util.Dom.setStyle('DTDocNavigatorOverlaySelectedProductZoomBtn', "visibility", showZoom ? "visible" : "hidden");
	YAHOO.util.Dom.setStyle('DTDocNavigatorOverlaySelectedProductHighlightTextBtn', "visibility", showHighlight ? "visible" : "hidden");
	YAHOO.util.Dom.setStyle('DTDocNavigatorOverlaySelectedProductDeleteItemBtn', "visibility", showDeleteItem ? "visible" : "hidden");
	YAHOO.util.Dom.setStyle('DTDocNavigatorOverlaySelectedProductInfoBtn', "visibility", showInfo ? "visible" : "hidden");
	
	// Set the viewed state
	dtDocList[dtCurrentDocumentIndex]._viewedState[dtCurrentPageNumber - 1] = true;
}

DTDocNavigatorOverlay.prototype.loadButtons = function(o) {

	new DTImageButton('_DTDocNavigatorOverlayBtnQuit', 
						'/designtools/images/ds/nav_btn_quit.gif', 
						'/designtools/images/ds/nav_btn_quit_on.gif', 
						dtBtnCancelDesignOnClick); 
						
	new DTImageButton('_DTDocNavigatorOverlayBtnStoreToCart', 
						'/designtools/images/ds/nav_btn_save.gif', 
						'/designtools/images/ds/nav_btn_save_on.gif', 
						o._saveToCart); 
						
	new DTImageButton('_DTDocNavigatorOverlayBtnReview', 
						'/designtools/images/ds/0174_review.png', 
						'/designtools/images/ds/0174_review_on.png', 
						dtBtnApproveOnClick); 

	new DTImageButton('_DTDocNavigatorOverlayPrevProductBtn', 
						'/designtools/images/ds/0267_back.jpg', 
						'/designtools/images/ds/0267_back_on.jpg', 
						o._loadPrevPage); 
						
	new DTImageButton('_DTDocNavigatorOverlayNextProductBtn', 
						'/designtools/images/ds/0267_next.jpg', 
						'/designtools/images/ds/0267_next_on.jpg', 
						 o._loadNextPage); 


	YAHOO.util.Event.addListener('DTDocNavigatorOverlaySelectedProductZoomBtn', "click", dtBtnViewLargerOnClick); 
	YAHOO.util.Event.addListener('DTDocNavigatorOverlaySelectedProductHighlightTextBtn', "click", dtBtnShowEditableRegionsOnClick); 
	YAHOO.util.Event.addListener('DTDocNavigatorOverlaySelectedProductDeleteItemBtn', "click", dtBtnDeleteCurrentShoppingItemOnClick); 
											
	YAHOO.util.Event.addListener('DTDocNavigatorOverlaySelectedProductInfoBtn', "mouseover", o._onInfoMouseOver, {me: o} ); 
	YAHOO.util.Event.addListener('DTDocNavigatorOverlaySelectedProductInfoBtn', "mouseout", o._onInfoMouseOut, {me: o} ); 		
										
}


DTDocNavigatorOverlay.prototype._toggleAdditionalOptions = function(e, o) {

	_dtImprintEditor.toggle(null, _dtImprintEditor);

}

DTDocNavigatorOverlay.prototype._loadPrevPage = function(e, o) {

	// Check for lower bounds
	if (dtCurrentDocumentIndex <= 0 && dtCurrentPageNumber <= 1) return;

	var newDocIndex = dtCurrentDocumentIndex;
	var newPageNumber = dtCurrentPageNumber;
	 
	if (dtCurrentPageNumber > 1) {
		newPageNumber--;
	} else {
		newDocIndex--;
		newPageNumber = 1;
		if (dtDocList[newDocIndex].itemType == 'DOL') newPageNumber = dtDocList[newDocIndex]._dtDocData.pageCount;		
	}
	
	dtLoadDocumentPage(e, {"docIndex":newDocIndex, "pageNumber":newPageNumber } );					
}

DTDocNavigatorOverlay.prototype._loadNextPage = function(e, o) {

	// Check for upper bounds
	if (dtCurrentDocumentIndex >= dtDocList.length - 1 && 
		dtDocList[dtCurrentDocumentIndex].itemType == 'DOL' && 
		dtCurrentPageNumber >= dtDocList[dtCurrentDocumentIndex]._dtDocData.pageCount) return;

	if (dtCurrentDocumentIndex >= dtDocList.length - 1 && 
		dtDocList[dtCurrentDocumentIndex].itemType != 'DOL' && 
		dtCurrentPageNumber >= 1) return;
	
	var newDocIndex = dtCurrentDocumentIndex;
	var newPageNumber = dtCurrentPageNumber;
	 
	if (dtDocList[newDocIndex].itemType == 'DOL' && newPageNumber < dtDocList[newDocIndex]._dtDocData.pageCount) {
		newPageNumber++;
	} else {
		newPageNumber = 1;
		newDocIndex++;	
	}
	
	dtLoadDocumentPage(e, {"docIndex":newDocIndex, "pageNumber":newPageNumber } );		
}


/*
DTDocNavigatorOverlay.prototype._onThumbnailMouseOver = function(e, o) {

	var templateInfo = '';
	if (dtDocList[o.docIndex]._dtDocData != null) 
		templateInfo = dtDocList[o.docIndex]._dtDocData.templateInfo;

	var productName = dtDocList[o.docIndex].productName;
	if (dtDocList[o.docIndex]._dtDocData != null && dtDocList[o.docIndex]._dtDocData.pageCount > 1) productName += " (Page " + o.pageNumber + ")";

	var content = 
		"<b>" + productName + "</b><br>" + 
		"<b>Layout:</b> " + dtDocList[o.docIndex].productStylecode + "<br>" + 
		"<b>Size:</b> " + dtDocList[o.docIndex].productSize + "<br>";
		
	if (templateInfo != "") 
		content += "<br><b>Special Notes:</b> " + templateInfo;
	
	o.me._infoPanel = new DTInfoPanel('productInfoPanel', 340, 5, 320, content, false, false);
	o.me._infoPanel.showPanel();
}

DTDocNavigatorOverlay.prototype._onThumbnailMouseOut = function(e, o) {
	if (o.me._infoPanel != null) o.me._infoPanel.hidePanel();
}
*/

DTDocNavigatorOverlay.prototype._onInfoMouseOver = function(e, o) {

	var templateInfo = '';
	if (dtDocList[dtCurrentDocumentIndex]._dtDocData != null) 
		templateInfo = dtDocList[dtCurrentDocumentIndex]._dtDocData.templateInfo;

	var content = "<b>Special Notes:</b> " + templateInfo;
	
	o.me._infoPanel = new DTInfoPanel('productInfoPanel', 80, 265, 320, content, false, false);
	o.me._infoPanel.showPanel();
}

DTDocNavigatorOverlay.prototype._onInfoMouseOut = function(e, o) {
	if (o.me._infoPanel != null) o.me._infoPanel.hidePanel();
}


DTDocNavigatorOverlay.prototype._saveToCart = function(e, o) {
	dtSaveDocuments(true, function() {});
}
// Constructor method
DTExceptionPanel = function(id, expObj, message, optDebugInfo) {

	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				width: "450px", 
				visible: true, 
				draggable: true, 
				fixedcenter: false, 
				close: true, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 2000
			} 
		);
		
	
	// Build the exception debug content from the message and the exception object	
	var debugString = "";
	if (expObj != null) {
		debugString = "Message: " + expObj.toString() + "\n\n";
	    for (var prop in expObj) { 
	       debugString += "[" + prop + "]: {"+ expObj[prop]+ "}\n";
	    }
    }
		
		
	// Build the content of the error
	var content = 
		'<div style="width: 440px; height:250px; overflow:scroll;">' +
		'<b>' + message + '</b><br><br><br>' + 
		'<pre>' + debugString + '</pre><br><br><br>' +
		'<pre>' + optDebugInfo + '</pre></div>';
			
	// Render the panel
	this._panel.setHeader('Error!');
	this._panel.setBody(content);
	this._panel.render(document.body);
	
	
	// Post an ajax call with the content to the server for logging
	var postUrl = "/designtools/main/ajaxLogDebugMessage";
	var postData = "debugData=" + escape(content);
	YAHOO.util.Connect.asyncRequest('POST', postUrl, null, postData); 
	
}

DTExceptionPanel.prototype.showPanel = function() {
	this._panel.show();
}






// Constructor method
DTFontFacePickerPanel = function(id) {

	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				xy: [200, 50],
				width: "720px", 
				visible: false, 
				fixedcenter: false,
				draggable: true, 
				close: false, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 100
			} 
		);
		
	// Build out the panel content
	
	var speedlinks = 
		'<center>' +
		'<a href="#sec-A">A</a> ' +
		'<a href="#sec-B">B</a> ' +
		'<a href="#sec-C">C</a> ' +
		'<a href="#sec-D">D</a> ' +
		'<a href="#sec-E">E</a> ' +
		'F ' +
		'<a href="#sec-G">G</a> ' +
		'H ' +
		'<a href="#sec-I">I</a> ' +
		'<a href="#sec-J">J</a> ' +
		'K ' +
		'L ' +
		'<a href="#sec-M">M</a> ' +
		'<a href="#sec-N">N</a> ' +
		'<a href="#sec-O">O</a> ' +
		'<a href="#sec-P">P</a> ' +
		'Q ' +
		'R ' +
		'<a href="#sec-S">S</a> ' +
		'<a href="#sec-T">T</a> ' +
		'<a href="#sec-U">U</a> ' +
		'<a href="#sec-V">V</a> ' +
		'<a href="#sec-W">W</a> ' +
		'X ' +
		'Y ' +
		'<a href="#sec-Z">Z</a></center><br>';		
	
	var standardFontsMarkup = speedlinks + '<div style="height: 420px; overflow: scroll;">';	
	for (var i = 0; i < dtFontArray.length; i++) {
		var font = dtFontArray[i];
		var fontId = 'dtFontIndex' + i;
		var fontName = font.displayName.replace(/ /g, '&nbsp;');
		var sectionName = 'sec-' + fontName.substring(0, 1).toUpperCase();
		var item = 
			'<a name="' + sectionName + '"/>' + 
			'	<img style="border:2px solid white;" id="' + fontId + '" alt="' + fontName + '" src="/designtools/images/fonts/names/' + font.imageName + '">' +
			'<br>';	
		standardFontsMarkup += item;	
	}	
	standardFontsMarkup += '</div>';
 
 	
  	var recentFontsMarkup = '<div style="height: 420px; overflow: scroll;">';
  	for (var i = 0; i < dtRecentFontsArray.length; i++) {
		var font = dtRecentFontsArray[i];
		var fontId = 'dtRecentFontIndex' + i;
		var fontName = font.displayName.replace(/ /g, '&nbsp;');
		var sectionName = 'sec-' + fontName.substring(0, 1).toUpperCase();
		var item = 
			'<a name="' + sectionName + '"/>' + 
			'	<img style="border:2px solid white;" id="' + fontId + '" alt="' + fontName + '" src="/designtools/images/fonts/names/' + font.imageName + '">' +
			'<br>';	
		recentFontsMarkup += item;	
	}	
	recentFontsMarkup += '</div>';
  	
  	
 
	body = 
		'<table align="center" width="100%"><tr><td>' + 
		'	<div class="dtPanelBorder">' +
		'		<div id="DTFontPickerPanelTabView" style="padding: 20px;"></div> ' + 
		'	</div>' +
		'</td></tr><tr><td>' +
		'	<table width="100%"><tr>' +
		'		<td><img src="/designtools/webimages/help.png" id="DTFontFacePickerPanelHelpButton"> ' +
		'			<a id="DTFontFacePickerPanelHelpLink">Help</a></td>' +
		'		<td><div align="right">' +
		'				<img src="/designtools/webimages/0179_cancel.png" id="_fontSelectorCancel">' +
		'				<img src="/designtools/webimages/0179_reset.png" id="_fontSelectorResetFont">' +
		'				<img src="/designtools/webimages/0179_choose.png" id="_fontSelectorChooseFont">' +
		'			</div>' +
		'	</td></tr></table>' +
		'</td></tr></table>';
		
	// Render the panel
	this._panel.setHeader('Font Chooser');
	this._panel.setBody(body);
	this._panel.render(document.body);

	this._fontPickerTabView = new YAHOO.widget.TabView(); 
	
	this._standardFontsTab = new YAHOO.widget.Tab({ 
	    label: 'Standard Fonts', 
	    content: standardFontsMarkup,
	    active: true 
	});
	this._fontPickerTabView.addTab(this._standardFontsTab); 
	 	 
	this._recentFontsTab = new YAHOO.widget.Tab({ 
	    label: 'Recently Used Fonts', 
	    content: recentFontsMarkup
	});
	this._fontPickerTabView.addTab(this._recentFontsTab); 
	
	this._fontPickerTabView.appendTo('DTFontPickerPanelTabView'); 



	// add event listeners to font selection
	for (var i = 0; i < dtFontArray.length; i++) {
		var fontId = 'dtFontIndex' + i;
		YAHOO.util.Event.addListener(fontId, "click", this._selectFont, 
			{me: this, fontId : fontId, font : dtFontArray[i]} ); 
		YAHOO.util.Event.addListener(fontId, "dblclick", this._fontDoubleClick, 
			{me: this, fontId : fontId, font : dtFontArray[i]} ); 			
	}
	for (var i = 0; i < dtRecentFontsArray.length; i++) {
		var fontId = 'dtRecentFontIndex' + i;
		YAHOO.util.Event.addListener(fontId, "click", this._selectFont, 
			{me: this, fontId : fontId, font : dtRecentFontsArray[i]} ); 
		YAHOO.util.Event.addListener(fontId, "dblclick", this._fontDoubleClick, 
			{me: this, fontId : fontId, font : dtRecentFontsArray[i]} ); 			
	}
	
	this._selectedFont = null;
	
	new DTImageButton('_fontSelectorCancel', 
		'/designtools/webimages/0179_cancel.png', 
		'/designtools/webimages/0179_cancel_on.png', 
		this._cancel, {me: this});

	new DTImageButton('_fontSelectorResetFont', 
		'/designtools/webimages/0179_reset.png', 
		'/designtools/webimages/0179_reset_on.png', 
		this._fontFaceReset, {me: this});

	new DTImageButton('_fontSelectorChooseFont', 
		'/designtools/webimages/0179_choose.png', 
		'/designtools/webimages/0179_choose_on.png', 
		this._fontFaceSelected, {me: this});

	YAHOO.util.Event.addListener('DTFontFacePickerPanelHelpButton', "click", dtOpenHelp ); 
	YAHOO.util.Event.addListener('DTFontFacePickerPanelHelpLink', "click", dtOpenHelp ); 
}

// Public methods
DTFontFacePickerPanel.prototype.showPanel = function() {
	this._panel.show();	
}

DTFontFacePickerPanel.prototype.setFontFaceSelectedCallback = function(cb) {
	this._fontFaceSelectedCallback = cb;
}

DTFontFacePickerPanel.prototype.setFontFaceResetCallback = function(cb) {
	this._fontFaceResetCallback = cb;
}

// Private methods
DTFontFacePickerPanel.prototype._fontDoubleClick = function(e, o) {
	o.me._selectedFont = o.font;
	o.me._fontFaceSelected(e, o);	
}

DTFontFacePickerPanel.prototype._selectFont = function(e, o) {

	for (var i = 0; i < dtFontArray.length; i++) {
		var fontId = 'dtFontIndex' + i;
		YAHOO.util.Dom.setStyle(fontId, "border", "2px solid white");
	}

	for (var i = 0; i < dtRecentFontsArray.length; i++) {
		var fontId = 'dtRecentFontIndex' + i;
		YAHOO.util.Dom.setStyle(fontId, "border", "2px solid white");
	}
	
	YAHOO.util.Dom.setStyle(o.fontId, "border", "2px solid red");
	
	o.me._selectedFont = o.font;
}


DTFontFacePickerPanel.prototype._fontFaceSelected = function(e, o) {

	if (o.me._selectedFont == null) {
	
		var qPanel = new DTQuestionPanel('_qPanel1', 280);
		
		qPanel.setChoice1Callback(
			function () {
				return;
			}
		);
		
		qPanel.setChoice2Callback(
			function () {
				return;
			}
		);
		
		qPanel.setChoice3Callback(
			function () {
				return;
			}
		);
		
		qPanel.showPanel(
			"No Font Selected",		
			"You have not selected a font yet.  Please click on a font to select it.",
			'<img src="/designtools/webimages/0179_ok.png">', '', ''
		);
	
		return;
	}

	o.me._panel.hide();
	o.me._panel.destroy();	
	o.me._fontFaceSelectedCallback(o.me._selectedFont.faceName);
	o.me._addToRecentList(o.me._selectedFont);
}

DTFontFacePickerPanel.prototype._fontFaceReset = function(e, o) {
	o.me._panel.hide();
	o.me._panel.destroy();
	o.me._fontFaceResetCallback();
}


DTFontFacePickerPanel.prototype._cancel = function(e, o) {
	o.me._panel.hide();
	o.me._panel.destroy();
}



DTFontFacePickerPanel.prototype._addToRecentList = function(newFont) {
	
	for (var i = 0; i < dtRecentFontsArray.length; i++) {
		var font = dtRecentFontsArray[i];
		if (font.faceName == newFont.faceName) 
			dtRecentFontsArray.splice(i, 1);
	}
	
	dtRecentFontsArray.reverse();
	dtRecentFontsArray.push(newFont);
	dtRecentFontsArray.reverse();
	
	while (dtRecentFontsArray.length > 25) {
		dtRecentFontsArray.pop();
	}	
}



 
// Constructor method
DTFontSizePickerPanel = function(id) {

	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				xy: [200, 50],
				width: "380px", 
				visible: false, 
				fixedcenter: false,  
				draggable: false, 
				close: false, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 100
			} 
		);
		
	// Build out the panel content
	var body = 
		'<table align="center"><tr><td colspan=2><div class="dtPanelBorder">' +
		'	<table><tr><td>' +
		'		<img id="DTFontSizePickerPanelAutoFit" src="/designtools/webimages/0180_shrinktofit.png">' +
		'	</td>' +
		'	<td>' +
		'		<div id="DTFontSizePickerPanel-size-slider-bg" tabindex="-1" title="Font Size">' + 
		'  		<div id="DTFontSizePickerPanel-size-slider-thumb"><img src="/designtools/images/sliders/thumb-n.gif"></div>' +
		'	</td></tr></table></div></td>' +
		'</tr><tr>' + 
		'	<td><img src="/designtools/webimages/help.png" id="DTFontSizePickerPanelHelpButton"> ' +
		'			<a id="DTFontSizePickerPanelHelpLink">Help</a></td>' + 
		'	<td align="right">' +
		'		<img id="_dtFontSizePickerCancel" src="/designtools/webimages/0179_cancel.png"> ' + 
		'		<img id="_dtFontSizePickerReset" src="/designtools/webimages/0179_reset.png"> ' +
		'		<img id="_dtFontSizePickerChoose" src="/designtools/webimages/0179_choose.png"> ' +
		'</tr></table>';
				
	// Render the panel
	this._panel.setBody(body);
	this._panel.render(document.body);

	this._sizeSlider = YAHOO.widget.Slider.getHorizSlider(
			'DTFontSizePickerPanel-size-slider-bg',  
	        'DTFontSizePickerPanel-size-slider-thumb', -29, 220, 20);         
	this._sizeSlider.setValue(129, true, true, false);         

	new DTImageButton('DTFontSizePickerPanelAutoFit', 
		'/designtools/webimages/0180_shrinktofit.png', 
		'/designtools/webimages/0180_shrinktofit_on.png', 
		this._autofit, this);

	new DTImageButton('_dtFontSizePickerCancel', 
		'/designtools/webimages/0179_cancel.png', 
		'/designtools/webimages/0179_cancel_on.png', 
		this._cancel, this);

	new DTImageButton('_dtFontSizePickerReset', 
		'/designtools/webimages/0179_reset.png', 
		'/designtools/webimages/0179_reset_on.png', 
		this._reset, this);

	new DTImageButton('_dtFontSizePickerChoose', 
		'/designtools/webimages/0179_choose.png', 
		'/designtools/webimages/0179_choose_on.png', 
		this._fontSizeSelected, this);

	YAHOO.util.Event.addListener('DTFontSizePickerPanelHelpButton', "click", dtOpenHelp ); 
	YAHOO.util.Event.addListener('DTFontSizePickerPanelHelpLink', "click", dtOpenHelp ); 
}

// Public methods
DTFontSizePickerPanel.prototype.showPanel = function() {
	this._panel.show();
}

DTFontSizePickerPanel.prototype.setFontSizeSelectedCallback = function(cb) {
	this._fontSizeSelectedCallback = cb;
}

// Private methods
DTFontSizePickerPanel.prototype._cancel = function(e, o) {
	o._panel.hide();
	o._panel.destroy();
}

DTFontSizePickerPanel.prototype._autofit = function(e, o) {
	o._panel.hide();
	o._panel.destroy();
	o._fontSizeSelectedCallback('autofit');
}

DTFontSizePickerPanel.prototype._reset = function(e, o) {
	o._panel.hide();
	o._panel.destroy();
	o._fontSizeSelectedCallback(0);
}

DTFontSizePickerPanel.prototype._fontSizeSelected = function(e, o) {
	o._panel.hide();
	o._panel.destroy();
	o._fontSizeSelectedCallback(o._getSelectedValue(o));
}

DTFontSizePickerPanel.prototype._getSelectedValue = function(o) {

	var value = (o._sizeSlider.getValue() / 20) - 6; 
	return value;
}




 
// Constructor method
DTHelpModule = function(id, parentId) {

	this._module = 
		new YAHOO.widget.Module(
			id, 
			{ 
				width: "300px",
				visible: true
			} 
		);
		
	var html = 
		'<div style="text-align: left; overflow: auto; height: 250px" id="DTHelpModuleContent">' +
	  	'<a id="_dtHelpModuleFAQ">View All Help Topics</a> ' +
	  	'<p> ' +
		'<b>Welcome to Design Studio</b> ' +
		'<p> ' +
		'Depending on the product you have selected you may ' +
		'be able to alter the design yourself. Use the Colors and ' +
		'Photo Gallery panels above to start making changes. ' +
		'Use the <img align="absmiddle" src="/designtools/images/ds/nav_btn_highlight_text.gif">   ' +
		'in the blue bar above to view the editable ' +
		'text boxes in the design template. Select the editable ' +
		'text box to launch the text editor. ' +
		'<p> ' +
		'If you selected an imprintable product use the slide out ' +
		'form on the right to let our designers know how you ' +
		'want your product. Our designers will put the product ' +
		'together for you and email you a proof to approve it. ' +
		'<p> ' +
		'Some products may be standard products that do not ' +
		'accept any personalization. These products ship as is. ' +
		'</div>';
				
	this._module.setBody(html);
	this._module.render(parentId);

	YAHOO.util.Event.addListener('_dtHelpModuleFAQ', "click", dtOpenHelp ); 
	
}







 
// Constructor method
DTHtmlContentPanel = function(id) {

	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				xy: [200, 50],
				width: "400px", 
				visible: false, 
				draggable: true, 
				fixedcenter: false,  
				close: false, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 100
			} 
		);
		
	// Build out the panel content
	var body = 	
		'<div style="width: 100%; height: 450px; overflow: auto" id="DTHtmlContentPanelContent"></div>' + 
		'<center>' + 
		'<img vspace=5 hspace=6 id="DTHtmlContentPanelClose" src="/designtools/images/buttons/btn_large_close.gif">' + 
		'</center>';	
		
	// Render the panel
	this._panel.setHeader("");
	this._panel.setBody(body);
	this._panel.render(document.body);

	YAHOO.util.Event.addListener('DTHtmlContentPanelClose', "click", this._close, this ); 
	
}

// Public methods
DTHtmlContentPanel.prototype.showPanel = function(url) {
	this._panel.show();
	document.getElementById('DTHtmlContentPanelContent').innerHTML = 
		'<iframe width="99%" height="99%" src="' + url + '"></iframe>';
}

// Private methods
DTHtmlContentPanel.prototype._close = function(e, o) {
	o._panel.hide();
	o._panel.destroy();
}

// Constructor method
DTImageBoxPositionEditorPanel = function(id) {

	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				xy: [200, 50],
				width: "600px", 
				visible: false, 
				draggable: true, 
				fixedcenter: false,  
				close: false, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 100
			} 
		);
		
	// Build out the panel content
	var body = 	
		'<table align="center" width="100%"><tr><td> ' +
		'	<div class="dtPanelBorder" style="height: 440px; width: 100%"> ' +
		'		<table align="center" height="100%" width="100%"><tr><td width="420" align="center" valign="middle">' +
		'			<img id="DTImageBoxPositionEditorPanelPreviewImage">' + 
		'		</td><td valign="middle" align="center">' +
		'			<div id="DTImageBoxPositionEditorPanelInfo"></div>' +
		'		</td></tr></table>' + 
		'	</div>' +
		'</td></tr><tr><td>' +
		'	<table width="100%"><tr><td>' +
		'		<img src="/designtools/webimages/help.png" id="DTImagePositionPanelHelpButton"> ' +
		'			<a id="DTImagePositionPanelHelpLink">Help</a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + 
		'		<img src="/designtools/webimages/cross.png" id="DTImageBoxPositionEditorPanelRemovePhotoButton"> ' +
		'			<a id="DTImageBoxPositionEditorPanelRemovePhotoLink">Remove Photo</a>' +
		'	</td><td align="right">' +
		' 		<img src="/designtools/webimages/0179_cancel.png" id="DTImageBoxPositionEditorPanelCancel">' +
		' 		<img src="/designtools/webimages/0179_reset.png" id="DTImageBoxPositionEditorPanelReset">' +
		' 		<img src="/designtools/webimages/0179_ok.png" id="DTImageBoxPositionEditorPanelSave">' +
		'	</td></tr></table>' +
		'</td></tr></table>';
		
	// Render the panel
	this._panel.setHeader("Position Photo");
	this._panel.setBody(body);
	this._panel.render(document.body);

	new DTImageButton('DTImageBoxPositionEditorPanelCancel', 
		'/designtools/webimages/0179_cancel.png', 
		'/designtools/webimages/0179_cancel_on.png', 
		this._cancel, this);

	new DTImageButton('DTImageBoxPositionEditorPanelReset', 
		'/designtools/webimages/0179_reset.png', 
		'/designtools/webimages/0179_reset_on.png', 
		this._imageBoxReset, this);

	new DTImageButton('DTImageBoxPositionEditorPanelSave', 
		'/designtools/webimages/0179_ok.png', 
		'/designtools/webimages/0179_ok_on.png', 
		this._imageBoxModified, this);

	YAHOO.util.Event.addListener('DTImageBoxPositionEditorPanelRemovePhotoButton', "click", this._imageBoxRemoved, this ); 
	YAHOO.util.Event.addListener('DTImageBoxPositionEditorPanelRemovePhotoLink', "click", this._imageBoxRemoved, this ); 
	YAHOO.util.Event.addListener('DTImagePositionPanelHelpButton', "click", dtOpenHelp ); 
	YAHOO.util.Event.addListener('DTImagePositionPanelHelpLink', "click", dtOpenHelp ); 
}

// Public methods
DTImageBoxPositionEditorPanel.prototype.showPanel = function(dtImageBox, dtImageBoxIndex) {

	YAHOO.util.Connect.asyncRequest('GET', '/designtools/webimages/0182_verypoor.png'); 
	YAHOO.util.Connect.asyncRequest('GET', '/designtools/webimages/0182_poor.png'); 
	YAHOO.util.Connect.asyncRequest('GET', '/designtools/webimages/0182_fair.png'); 
	YAHOO.util.Connect.asyncRequest('GET', '/designtools/webimages/0182_good.png'); 
	YAHOO.util.Connect.asyncRequest('GET', '/designtools/webimages/0182_excellent.png'); 
	
	this._panel.show();
	this._dtImageBox = dtImageBox;
	this._dtImageBoxIndex = dtImageBoxIndex;
	
	YAHOO.util.Event.addListener('DTImageBoxPositionEditorPanelPreviewImage', "load", this._imageLoaded, this); 

	// set the preview image
	var previewImage = document.getElementById("DTImageBoxPositionEditorPanelPreviewImage");
	
	var r = new Date();
	r = r.getTime() + ":" + Math.random();
	previewImage.src = "/designtools/main/ajaxGetImageBoxPreviewImage/dtSessionId/" + 
		dtSessionId + "/dtDocumentId/" + dtDocList[dtCurrentDocumentIndex].documentId + 
		"/dtImageBoxType/" + dtImageBox.type + "/dtImageBoxPage/" + dtImageBox.page + 
		"/dtImageBoxPlace/" + dtImageBox.place + "/r/" + r;

}

// Private methods
DTImageBoxPositionEditorPanel.prototype._imageBoxModified = function(e, o) {

	var previewImage = document.getElementById("DTImageBoxPositionEditorPanelPreviewImage");
	var imageBox = o._dtImageBox;
	var crop = o._imageCropper.getCropCoords();

	// Check the ratio to make sure it is correct - otherwise, change it accordingly
	var cropRatio = crop.width / crop.height;
	if (cropRatio != o._initialRatio) {
	
		var correctedWidth = crop.height * o._initialRatio;
		var correctedHeight = crop.width / o._initialRatio;
		
		if (correctedWidth < crop.width) {
			crop.width = correctedWidth;
		} else if (correctedHeight < crop.height) {
			crop.height = correctedHeight;
		}
	}
	
	var imageTop = imageBox.top - ((imageBox.bottom - imageBox.top) * crop.top / crop.height);
	var imageLeft = imageBox.left - ((imageBox.right - imageBox.left) * crop.left / crop.width);
	var imageBottom = imageBox.bottom + ((imageBox.bottom - imageBox.top) * (previewImage.height - crop.top - crop.height) / crop.height);
	var imageRight = imageBox.right + ((imageBox.right- imageBox.left) * (previewImage.width - crop.left - crop.width) / crop.width);
		
	if (dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[o._dtImageBoxIndex].imageName == 'DT-REMOVE-IMAGE')
		dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[o._dtImageBoxIndex].imageName = null;	
	dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[o._dtImageBoxIndex].imageTop = imageTop;
	dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[o._dtImageBoxIndex].imageLeft = imageLeft;
	dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[o._dtImageBoxIndex].imageBottom = imageBottom;
	dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[o._dtImageBoxIndex].imageRight = imageRight;
	dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[o._dtImageBoxIndex].modified = true;
	_dtDocumentRequestUpdate = true;
	o._panel.hide();
	o._panel.destroy();

}

DTImageBoxPositionEditorPanel.prototype._imageBoxRemoved = function(e, o) {

	dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[o._dtImageBoxIndex].imageName = 'DT-REMOVE-IMAGE';
	dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[o._dtImageBoxIndex].modified = true;
	_dtDocumentRequestUpdate = true;
	o._panel.hide();
	o._panel.destroy();

}

DTImageBoxPositionEditorPanel.prototype._imageBoxReset = function(e, o) {

	dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[o._dtImageBoxIndex].modified = false;
	dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[o._dtImageBoxIndex].imageName = null;
	dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[o._dtImageBoxIndex].imageTop = dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[o._dtImageBoxIndex].defaultImageTop;
	dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[o._dtImageBoxIndex].imageLeft = dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[o._dtImageBoxIndex].defaultImageLeft;
	dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[o._dtImageBoxIndex].imageBottom = dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[o._dtImageBoxIndex].defaultImageBottom;
	dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[o._dtImageBoxIndex].imageRight = dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[o._dtImageBoxIndex].defaultImageRight;	
	_dtDocumentRequestUpdate = true;
	o._panel.hide();
	o._panel.destroy();

}


DTImageBoxPositionEditorPanel.prototype._imageLoaded = function(e, o) {

	var previewImage = document.getElementById("DTImageBoxPositionEditorPanelPreviewImage");	
	var initialX = (o._dtImageBox.left - o._dtImageBox.imageLeft) / (o._dtImageBox.imageRight - o._dtImageBox.imageLeft) * previewImage.width;
	var initialY = (o._dtImageBox.top - o._dtImageBox.imageTop) / (o._dtImageBox.imageBottom - o._dtImageBox.imageTop) * previewImage.height;
	var initialW = (o._dtImageBox.right - o._dtImageBox.left) / (o._dtImageBox.imageRight - o._dtImageBox.imageLeft) * previewImage.width;
	var initialH = (o._dtImageBox.bottom - o._dtImageBox.top) / (o._dtImageBox.imageBottom - o._dtImageBox.imageTop) * previewImage.height;
	
	// Record the initial ratio so that on save we can verify that it is correct
	o._initialRatio = initialW / initialH;
	
	o._imageCropper = new YAHOO.widget.ImageCropper(
		'DTImageBoxPositionEditorPanelPreviewImage', 
		{ 
			initialXY: [initialX, initialY], 
			initWidth: initialW, 
			initHeight: initialH, 
			ratio: true,
			minHeight: 10,
			minWidth: 10
		}
	); 

	o._imageCropper.on('resizeEvent', function() { 
		o._setImageInfo(o);
    }); 		
    
 	o._setImageInfo(o);
 
}

DTImageBoxPositionEditorPanel.prototype._cancel = function(e, o) {

	o._panel.hide();
	o._panel.destroy();

}

DTImageBoxPositionEditorPanel.prototype._setImageInfo = function(o) {

	var previewImage = document.getElementById("DTImageBoxPositionEditorPanelPreviewImage");
	var imageBox = o._dtImageBox;
	var crop = o._imageCropper.getCropCoords();

	var imageLeft = imageBox.left - ((imageBox.right - imageBox.left) * crop.left / crop.width);
	var imageRight = imageBox.right + ((imageBox.right- imageBox.left) * (previewImage.width - crop.left - crop.width) / crop.width);

	var projectedDPI = Math.round(imageBox.imagePixelWidth / (imageRight - imageLeft));
	var status = "";
	var imageName = "";

	if (projectedDPI <= 120) {
		status = "Very Poor";
		imageName = "0182_verypoor.png";
	}
	
	if (projectedDPI > 120) {
		status = "Poor";
		imageName = "0182_poor.png";
	}
	
	if (projectedDPI > 180) { 
		status = "Fair";
		imageName = "0182_fair.png";
	}
	
	if (projectedDPI > 240) {
		status = "Good";
		imageName = "0182_good.png";
	}
	
	if (projectedDPI > 300) {
		status = "Excellent";
		imageName = "0182_excellent.png";
	}
	
	var content = "";
	if (projectedDPI == 0) { 
		content = "Photo Quality<br>Not Available";
	} else {
		content = 
			'<b>Photo Quality</b><br>' +
			'<img width="72" height="72" src="/designtools/webimages/' + imageName + '"><br>' +
			'<i>' + status + '</i>'; 
	}
	
	document.getElementById('DTImageBoxPositionEditorPanelInfo').innerHTML = content;
}



 
// Constructor method
DTImageButton = function(imageId, baseSource, hoverSource, onClickHandler, onClickScope) {

	var image = document.getElementById(imageId);
	if (image == null) return;
	
	this._image = image;
	this._imageId = imageId;
	this._baseSource = baseSource;
	this._hoverSource = hoverSource;
	this._isDisabled = false;
	
	// Set up the listeners
	YAHOO.util.Event.addListener(imageId, "mouseover", this._onMouseOver, this); 
	YAHOO.util.Event.addListener(imageId, "mouseout", this._onMouseOut, this); 
	YAHOO.util.Event.addListener(imageId, "click", onClickHandler, onClickScope); 
}

DTImageButton.prototype.setDisable = function(disableSource) {
	this._isDisabled = true;
	this._baseSource = disableSource;
	this._hoverSource = disableSource;
	this._image.src = disableSource;
}

DTImageButton.prototype.removeDisable = function(baseSource, hoverSource) {
	this._isDisabled = false;
	this._baseSource = baseSource;
	this._hoverSource = hoverSource;
	this._image.src = baseSource;
}

// Private methods
DTImageButton.prototype._onMouseOver = function(e, o) {
	o._image.src = o._hoverSource;
}

DTImageButton.prototype._onMouseOut = function(e, o) {
	o._image.src = o._baseSource;
}

// Constructor method
DTImageEditorPanel = function(id) {

	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				xy: [200, 50],
				width: "750px", 
				visible: false, 
				draggable: true, 
				fixedcenter: false,  
				close: false, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 100
			} 
		);
		
	// Build out the panel content
	var body = 	
		'<table width="100%" align="center"><tr><td> ' +
		'	<div class="dtPanelBorder" style="width: 100%"> ' +
				'<table align="center" width="100%"><tr><td valign="middle" align="center" height="450" width="450">' +
					'<img id="DTImageEditorPanelPreviewImage" ' + 
					'	src="/designtools/images/misc/spinner_16_16.gif" border=1><br><br>' +
					'<img id="_DTImageEditorPanelLoadingSpinner" src="/designtools/images/misc/spinner_16_16.gif">' +
				'</td><td align="center">' +
					'<img id="DTImageEditorPanelBWPreset" src="/designtools/webimages/0180_blackandwhite.png"> ' + 
					'<img id="DTImageEditorPanelSepiaPreset" src="/designtools/webimages/0180_sepia.png"><br><br>' + 
					'<img id="DTImageEditorPanelRotateLeft" src="/designtools/webimages/0180_rotate_left.png"> ' + 
					'<img id="DTImageEditorPanelRotateRight" src="/designtools/webimages/0180_rotate_right.png"><br><br><br><br><br>' + 

						'<table><tr>' +
							'<td align="center"><img src="/designtools/webimages/0181_saturation_left.png"></td>' + 
							'<td><b><center>Color Intensity</b></center>' +
							'	<div id="DTImageEditorPanel-saturation-slider-bg" tabindex="-1" title="Color Intensity">' + 
						  		'<div id="DTImageEditorPanel-saturation-slider-thumb"><img src="/designtools/images/sliders/thumb-n.gif"></div> ' + 
							'</div></td>' +
							'<td align="center"><img src="/designtools/webimages/0181_saturation_right.png"></td>' +
						'</tr><tr>' +				
							'<td align="center"><img src="/designtools/webimages/0181_brightness_left.png"></td>' + 
							'<td><center><b>Brightness</b></center>' +
							'	<div id="DTImageEditorPanel-brightness-slider-bg" tabindex="-1" title="Brightness">' + 
						  		'<div id="DTImageEditorPanel-brightness-slider-thumb"><img src="/designtools/images/sliders/thumb-n.gif"></div> ' + 
							'</div></td>' +
							'<td align="center"><img src="/designtools/webimages/0181_brightness_right.png"></td>' +
						'</tr><tr>' +				
							'<td align="center"><img src="/designtools/webimages/0181_contrast_left.png"></td>' + 
							'<td><center><b>Contrast</b></center>' +
							'	<div id="DTImageEditorPanel-contrast-slider-bg" tabindex="-1" title="Contrast">' + 
						  		'<div id="DTImageEditorPanel-contrast-slider-thumb"><img src="/designtools/images/sliders/thumb-n.gif"></div> ' + 
							'</div></td>' +
							'<td align="center"><img src="/designtools/webimages/0181_contrast_right.png"></td>' +			
						'</tr></table><br>' +	

						'<b>Filter Effects:</b> ' + 
						'<select id="_DTImageEditorPanelColorize">' + 
							'<option value="0,0,0">None </option>' +
							'<option value="38,12,0">Sepia </option>' +
						'</select><br><br>' + 
	
				'</td></tr></table> ' +
		'	</div> ' +
		'</td></tr><tr><td> ' +
		'	<table width="100%"><tr>' +
		'		<td><img src="/designtools/webimages/help.png" id="DTImageEditorPanelHelpButton"> ' +
		'			<a id="DTImageEditorPanelHelpLink">Help</a></td>' +
		'		<td><div align="right">' +
		'				<img id="_DTImageEditorPanelCancel" src="/designtools/webimages/0179_cancel.png"> ' +
		'				<img id="_DTImageEditorPanelReset" src="/designtools/webimages/0179_reset.png">' +  
		'				<img id="_DTImageEditorPanelSave" src="/designtools/webimages/0179_saveacopy.png"> ' +
		'			</div>' +
		'	</td></tr></table>' +
		'</td></tr></table>';
	
	// Render the panel
	this._panel.setHeader("Photo Editor");
	this._panel.setBody(body);
	this._panel.render(document.body);

	this._rotationAngle = 0;
	
	// Create the saturation slider
	this._saturationSlider = YAHOO.widget.Slider.getHorizSlider(
			'DTImageEditorPanel-saturation-slider-bg',  
	        'DTImageEditorPanel-saturation-slider-thumb', 0, 200, 20);         
	this._saturationSlider.subscribe("slideEnd", this._saturationSliderSlideEnd, this); 

	// Create the brightness slider
	this._brightnessSlider = YAHOO.widget.Slider.getHorizSlider(
			'DTImageEditorPanel-brightness-slider-bg',  
	        'DTImageEditorPanel-brightness-slider-thumb', 0, 200, 20); 
	this._brightnessSlider.setValue(100, true, true, true);         
	this._brightnessSlider.subscribe("slideEnd", this._brightnessSliderSlideEnd, this); 

	// Create the contrast slider
	this._contrastSlider = YAHOO.widget.Slider.getHorizSlider(
			'DTImageEditorPanel-contrast-slider-bg',  
	        'DTImageEditorPanel-contrast-slider-thumb', 0, 200, 20);         
	this._contrastSlider.setValue(100, true, true, false);         
	this._contrastSlider.subscribe("slideEnd", this._contrastSliderSlideEnd, this); 

	new DTImageButton('DTImageEditorPanelRotateLeft', 
		'/designtools/webimages/0180_rotate_left.png', 
		'/designtools/webimages/0180_rotate_left_on.png', 
		this._rotateLeft, this);

	new DTImageButton('DTImageEditorPanelRotateRight', 
		'/designtools/webimages/0180_rotate_right.png', 
		'/designtools/webimages/0180_rotate_right_on.png', 
		this._rotateRight, this);

	new DTImageButton('_DTImageEditorPanelCancel', 
		'/designtools/webimages/0179_cancel.png', 
		'/designtools/webimages/0179_cancel_on.png', 
		this._cancel, this);
		
	new DTImageButton('_DTImageEditorPanelReset', 
		'/designtools/webimages/0179_reset.png', 
		'/designtools/webimages/0179_reset_on.png', 
		this._resetSliders, this);
		
	this._saveButton = new DTImageButton('_DTImageEditorPanelSave', 
		'/designtools/webimages/0179_saveacopy.png', 
		'/designtools/webimages/0179_saveacopy_on.png', 
		this._saveChanges, this);

	new DTImageButton('DTImageEditorPanelBWPreset', 
		'/designtools/webimages/0180_blackandwhite.png', 
		'/designtools/webimages/0180_blackandwhite_on.png', 
		this._setBWPreset, this);
		
	new DTImageButton('DTImageEditorPanelSepiaPreset', 
		'/designtools/webimages/0180_sepia.png', 
		'/designtools/webimages/0180_sepia_on.png', 
		this._setSepiaPreset, this);
		
	YAHOO.util.Event.addListener('_DTImageEditorPanelColorize', "change", this._colorizeChanged, this); 
	YAHOO.util.Event.addListener('DTImageEditorPanelHelpButton', "click", dtOpenHelp ); 
	YAHOO.util.Event.addListener('DTImageEditorPanelHelpLink', "click", dtOpenHelp ); 

	this._isSaving = false;
}

// Public methods
DTImageEditorPanel.prototype.showPanel = function(imageBaseName) {
	this._isSaving = false;
	this._imageBaseName = imageBaseName;
	this._panel.show();
}

DTImageEditorPanel.prototype.setImageModifiedCallback = function(cb) {
	this._imageModifiedCallback = cb;
}

// private methods
DTImageEditorPanel.prototype._resetSliders = function(e, o) {
	o._saturationSlider.setValue(0, true, true, true); 
	o._brightnessSlider.setValue(100, true, true, true); 
	o._contrastSlider.setValue(100, true, true, true); 
	document.getElementById('_DTImageEditorPanelColorize').selectedIndex = 0;
	o._rotationAngle = 0;
	o._refreshPreviewImage(o);	
}

DTImageEditorPanel.prototype._rotateLeft = function(e, o) {
	o._rotationAngle -= 90;
	if (o._rotationAngle >= 360) o._rotationAngle -= 360;
	if (o._rotationAngle < 0) o._rotationAngle += 360;
	o._refreshPreviewImage(o);	
}

DTImageEditorPanel.prototype._rotateRight = function(e, o) {
	o._rotationAngle += 90;
	if (o._rotationAngle >= 360) o._rotationAngle -= 360;
	if (o._rotationAngle < 0) o._rotationAngle += 360;
	o._refreshPreviewImage(o);	
}

DTImageEditorPanel.prototype._cancel = function(e, o) {
	o._panel.hide();
	o._panel.destroy();

}

DTImageEditorPanel.prototype._setBWPreset = function(e, o) {
	o._saturationSlider.setValue(200, true, true, true); 
	o._brightnessSlider.setValue(120, true, true, true); 
	o._contrastSlider.setValue(120, true, true, true); 
	document.getElementById('_DTImageEditorPanelColorize').selectedIndex = 0;
	o._refreshPreviewImage(o);	
}

DTImageEditorPanel.prototype._setSepiaPreset = function(e, o) {
	o._saturationSlider.setValue(200, true, true, true); 
	o._brightnessSlider.setValue(100, true, true, true); 
	o._contrastSlider.setValue(120, true, true, true);
	document.getElementById('_DTImageEditorPanelColorize').selectedIndex = 1;
	o._refreshPreviewImage(o);	
}

DTImageEditorPanel.prototype._saveChanges = function(e, obj) {
		
	if (obj._isSaving) return;
	
	var saturation = obj._saturationSlider.getValue();
	var brightness = obj._brightnessSlider.getValue();
	var contrast = obj._contrastSlider.getValue();
	
	saturation = (saturation / 20);
	brightness = (brightness / 20) - 5;
	contrast = (contrast / 20) - 5;
	
	saturation = Math.round(saturation);
	brightness = Math.round(brightness);
	contrast = Math.round(contrast);
	
	var colorizeE = document.getElementById('_DTImageEditorPanelColorize');
	var colorize = colorizeE.value;
	var colorize = colorize.split(",");
	var rotation = obj._rotationAngle;
	
	var r = new Date();
	r = r.getTime() + ":" + Math.random();

	var url = "/designtools/main/ajaxSaveImageEditorChanges/dtSessionId/" + 
		dtSessionId + "/dtImageBaseName/" + obj._imageBaseName + 
		"/dtDesaturation/" + saturation + 
		"/dtBrightness/" + brightness + 
		"/dtContrast/" + contrast + 
		"/dtColorizeR/" + colorize[0] + 
		"/dtColorizeG/" + colorize[1] + 
		"/dtColorizeB/" + colorize[2] + 
		"/dtRotation/" + rotation + 
		"/r/" + r;

	var callback = 
	{ 
	  cache: false,
	  success: function(o) {

		if (o.responseText.match(/$Error/g)) {
			alert(o.reponseText);
		} else {
			obj._imageModifiedCallback();
			obj._panel.hide();
			obj._panel.destroy();
		}

	  },
	  failure: function(o) {
	  	alert(o.statusText);
	  }
	} 

	YAHOO.util.Dom.setStyle("_DTImageEditorPanelLoadingSpinner", "opacity", 1.0);
	var cObj = YAHOO.util.Connect.asyncRequest('POST', url, callback); 
	
	obj._isSaving = true;
	obj._saveButton.setDisable('/designtools/webimages/0179_saving.png');
	
}

DTImageEditorPanel.prototype._colorizeChanged = function(e, o) {
	
	var colorizeE = document.getElementById('_DTImageEditorPanelColorize');
	var colorize = colorizeE.value;
	if (colorize == '0,0,0') {
		o._saturationSlider.setValue(0, true, true, true); 
	} else {
		o._saturationSlider.setValue(200, true, true, true); 
	}
	o._refreshPreviewImage(o);	
}

DTImageEditorPanel.prototype._saturationSliderSlideEnd = function(e, o) {
	o._refreshPreviewImage(o);	
}

DTImageEditorPanel.prototype._brightnessSliderSlideEnd = function(e, o) {
	o._refreshPreviewImage(o);	
}

DTImageEditorPanel.prototype._contrastSliderSlideEnd = function(e, o) {
	o._refreshPreviewImage(o);	
}

DTImageEditorPanel.prototype._refreshPreviewImage = function(obj) {

	var saturation = obj._saturationSlider.getValue();
	var brightness = obj._brightnessSlider.getValue();
	var contrast = obj._contrastSlider.getValue();
	
	saturation = (saturation / 20);
	brightness = (brightness / 20) - 5;
	contrast = (contrast / 20) - 5;
	
	saturation = Math.round(saturation);
	brightness = Math.round(brightness);
	contrast = Math.round(contrast);
	
	var colorizeE = document.getElementById('_DTImageEditorPanelColorize');
	var colorize = colorizeE.value;
	var colorize = colorize.split(",");
	var rotation = obj._rotationAngle;
	
	var r = new Date();
	r = r.getTime() + ":" + Math.random();

	YAHOO.util.Dom.setStyle("_DTImageEditorPanelLoadingSpinner", "opacity", 1.0);

	var newImage = new Image();
	newImage.src = "/designtools/main/ajaxGetImageEditorPreviewImage/dtSessionId/" + 
		dtSessionId + "/dtImageBaseName/" + obj._imageBaseName + 
		"/dtDesaturation/" + saturation + 
		"/dtBrightness/" + brightness + 
		"/dtContrast/" + contrast + 
		"/dtColorizeR/" + colorize[0] + 
		"/dtColorizeG/" + colorize[1] + 
		"/dtColorizeB/" + colorize[2] + 
		"/dtRotation/" + rotation + 
		"/r/" + r;
		
	var previewImage = document.getElementById('DTImageEditorPanelPreviewImage');
	YAHOO.util.Event.addListener(newImage, "load", obj._setPreviewImageSourceOnPreload, 
		{preload: newImage, target: previewImage});
						
}

DTImageEditorPanel.prototype._setPreviewImageSourceOnPreload = function(e, o) {
	o.target.src = o.preload.src;
	YAHOO.util.Dom.setStyle("_DTImageEditorPanelLoadingSpinner", "opacity", 0.0);
}

 
// Constructor method
DTImageGetterPanel = function(id) {


	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				xy: [200, 50],
				width: "560px", 
				height: "440px",
				visible: false, 
				fixedcenter: false,  
				draggable: true, 
				close: false, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 100
			} 
		);
		

	// Create the content		

	var html = 
		'<table align="center" width="100%"><tr><td> ' +
		'	<div class="dtPanelBorder" style="height: 340px; width: 100%"><div style="padding: 15px;"> ' + 
		'Select up to five files to upload at one time.<br>Acceptable file types are JPEG and TIFF.<br><br>' + 
			'<form id="uploadImageForm" action="/designtools/main/ajaxUploadImage" ' +
			'	enctype="multipart/form-data" method="post"> ' +
			'	<input type="hidden" name="dtSessionId" value="' + dtSessionId + '"> ' +
			'File 1: <input type="file" name="datafile1" size="45"><br><br> ' +
			'File 2: <input type="file" name="datafile2" size="45"><br><br> ' +
			'File 3: <input type="file" name="datafile3" size="45"><br><br> ' +
			'File 4: <input type="file" name="datafile4" size="45"><br><br> ' +
			'File 5: <input type="file" name="datafile5" size="45"><br><br> ' +
			'</form> ' + 
		'	<div id="uploadImageFormStatus"></div> ' +
		'	</div></div>' +
		'</td></tr><tr><td">' +
		'	<table width="100%"><tr>' +
		'		<td><img src="/designtools/webimages/help.png" id="DTImageGetteranelHelpButton"> ' +
		'			<a id="DTImageGetterPanelHelpLink">Help</a></td>' +
		'		<td><div align="right">' +
		'				<img  id="_uploadImageCancel"src="/designtools/webimages/0179_cancel.png"> ' +
		'				<img  id="_uploadImageFormSubmit"src="/designtools/webimages/0179_uploadphotos.png">' +
		'			</div>' +
		'	</td></tr></table>' +
		'</td></tr></table>';

	this._panel.setHeader("Upload Photos");
	this._panel.setBody(html);
	this._panel.render(document.body);

	new DTImageButton('_uploadImageCancel', 
		'/designtools/webimages/0179_cancel.png', 
		'/designtools/webimages/0179_cancel_on.png', 
		this._cancel, this);
		
	this._uploadButton = new DTImageButton('_uploadImageFormSubmit', 
		'/designtools/webimages/0179_uploadphotos.png', 
		'/designtools/webimages/0179_uploadphotos_on.png', 
		this._uploadImages, this);

	YAHOO.util.Event.addListener('DTImageGetteranelHelpButton', "click", dtOpenHelp ); 
	YAHOO.util.Event.addListener('DTImageGetterPanelHelpLink', "click", dtOpenHelp ); 

	this._startedUpload = false;

}

// Public methods
DTImageGetterPanel.prototype.showPanel = function() {
	this._startedUpload = false;
	this._panel.show();
}

DTImageGetterPanel.prototype.setImagesUploadedCallback = function(cb) {
	this._imagesUploadedCallback = cb;
}


// Private methods

DTImageGetterPanel.prototype._cancel = function(e, obj) {
	obj._panel.hide();
	obj._panel.destroy();
}

DTImageGetterPanel.prototype._uploadImages = function(e, obj) {

	if (obj._startedUpload) return;

	var callback = 
	{ 
	  upload: function(r) {
	  	
	  	// TODO - check the response text and warn if there were problems
	  	//alert(r.responseText);
	  	obj._uploadImageStopProgressTimer(obj);
	  	document.getElementById('uploadImageFormStatus').innerHTML = "Done.";
	  	obj._panel.hide();
		obj._panel.destroy();
	  	obj._imagesUploadedCallback();
	  	
	  }
	} 
	
	var formObject = document.getElementById('uploadImageForm'); 
	YAHOO.util.Connect.setForm(formObject, true); 
	var cObj = YAHOO.util.Connect.asyncRequest('POST', '/designtools/main/ajaxUploadImage', callback); 
	obj._uploadImageStartProgressTimer(obj);
	obj._startedUpload = true;
	obj._uploadButton.setDisable('/designtools/webimages/0179_uploading.png');
}

DTImageGetterPanel.prototype._uploadImageStartProgressTimer = function(obj) {

	obj._uploadImageProgressTimer = 
		setInterval(obj._uploadImageGetStatus, 1000);

}

DTImageGetterPanel.prototype._uploadImageStopProgressTimer = function(obj) {

	clearInterval(obj._uploadImageProgressTimer);
}

DTImageGetterPanel.prototype._uploadImageGetStatus = function() {

	// TODO - rewrite this to provide better feedback to users

	var callback = 
	{ 
	  cache:false,
	  success : function(o) {
	  
	  	try {
	  		var status = YAHOO.lang.JSON.parse(o.responseText);
			
			var percent = Math.round(status.currentBytes * 100 / status.totalBytes);
			var w = status.currentBytes * 200 / status.totalBytes;
			if (w < 0) w = 0;
			w = Math.round(w); 
			
			var pgBar = 
				'<div style="width: 200px; border: 1px solid black; background: url(/designtools/images/ds/progress_bar_bg.gif) repeat-x top left;">' +
				'<div style="overflow: hidden; width: ' + w + 'px; background: url(/designtools/images/ds/progress_bar_top.gif) repeat-x top left; color: white;"> ' + percent + '%&nbsp;complete</div></div>';
			
		  	document.getElementById('uploadImageFormStatus').innerHTML = pgBar;

	  	} catch (e) {}
	  
	  }, 
	  failure : function(o) {
	  	document.getElementById('uploadImageFormStatus').innerHTML = o.statusText;
	  }
	} 
	
	var cObj = YAHOO.util.Connect.asyncRequest('POST', '/designtools/main/ajaxUploadImageGetStatus', callback); 

}


// Constructor method
DTImageLibraryModule = function(id, parentId, contentHeight) {


	this._module = 
		new YAHOO.widget.Module(
			id, 
			{ 
				width: "300px", 
				visible: true
			} 
		);
		

	// Create the content
	
	var html = 
		'<div class="dtAccordionBodyToolbar">' +
		'<a id="_imageLibraryModuleAddItem" style="float: left"><img src="/designtools/webimages/addphotos.png"> Add Photos</a>' + 
		'<a id="_imageLibraryModuleHelp" style="float: right"><img src="/designtools/webimages/help.png"> Help</a>' +
		'</div>' +  
		'<div class="dtAccordionBodyTip">' + 
		'<img src="/designtools/images/ds/icon_tip.gif" align="left"> ' +
		'Drag thumbnail image from the photo gallery below and drop into the photo boxes in the design.' +
		'</div>' + 
		'<div style="overflow: auto; width: 100%; height: ' + contentHeight + 'px" id="_imageLibraryModuleBody"></div>';	
	
	this._module.setBody(html);
	this._module.render(parentId);

	this._imageList = null;
	this._selectedImage = null;

	
	YAHOO.util.Event.addListener('_imageLibraryModuleAddItem', "click", this._addImage, this ); 
	YAHOO.util.Event.addListener('_imageLibraryModuleHelp', "click", dtOpenHelp ); 

	// Load up the images in the module
	this._refreshYourImages(this);


	
}

// Public methods
DTImageLibraryModule.prototype.setImageSelectedCallback = function(cb) {
	this._imageSelectedCallback = cb;
}

// Private methods
DTImageLibraryModule.prototype._refreshYourImages = function(obj) {

	var callback = 
	{ 
	  cache: false,
	  success: function(o) {
	  	var yourImagesTab = document.getElementById('_imageLibraryModuleBody');
		var imageNames = o.responseText.split(",");
		
		// Load the html first 
		var cnt = 0;
		var html = '';
		for (var i = 0; i < imageNames.length; i++) {
			if (imageNames[i].length < 32) continue;
			var imageId = "_image-" + imageNames[i];
			var editId = "_imageEdit-" + imageNames[i];
			var viewId = "_imageView-" + imageNames[i];
			var deleteId = "_imageDelete-" + imageNames[i];
			var bgcolor = (cnt % 2 == 1) ? "#FFFFFF" : "#EEEEEE"; 
			cnt++;
			
			var itemHTML = 
				'<table bgcolor="' + bgcolor + '" width="100%"><tr>' +
				'	<td height="110px" width="110px" align="center" valign="middle">' + 
				'		<img border="1" class="dtDraggableImage" id="' + imageId + '" src="/designtools/images/misc/spinner_100_100.gif"></td>' +
				'	<td>' + imageNames[i].substring(33) + '<br><br>' +
				'		<a id="--' + editId + '"><img src="/designtools/webimages/pencil.png"></a> <a id="' + editId + '">Edit</a><br>' +
				'		<a id="--' + viewId + '"><img src="/designtools/webimages/view.gif"></a> <a id="' + viewId + '">View</a><br>' +
				'		<a id="--' + deleteId + '"><img src="/designtools/webimages/cross.png"></a> <a id="' + deleteId + '">Remove</a>' +
				'	</td>' +
				'</tr></table>';
					
			html += itemHTML;
		}
		yourImagesTab.innerHTML = html;
		
		// Set up the drag and drop framework for the images
		for (var i = 0; i < imageNames.length; i++) {
			if (imageNames[i].length < 32) continue;
			var imageId = "_image-" + imageNames[i];
			
			var dd = new YAHOO.util.DDProxy(imageId, 'dtDndPhotoGroup', { isTarget: false } );
			
			dd.on('dragDropEvent', function(ev, id) { 

				var ddTargetId = "";
				var lowestIndex = 100000;
				for (var targetIndex = 0; targetIndex < ev.info.length; targetIndex++) {

					var tmpId = ev.info[targetIndex].id;
					
					// Select the first dtImageName target
					if (tmpId.match(/dtImageName.*/)) {
						ddTargetId = tmpId;
						break;
					}
			
					// otherwise, select the hover region with the lowest index (the most front on design)
					var index = Number(tmpId.replace('dtHoverRegionImageBox', ''));
					if (index < lowestIndex)  {
						lowestIndex = index;
						ddTargetId = tmpId;
					}
				}

				if (ddTargetId.match(/dtImageName.*/)) {
					YAHOO.util.Dom.setStyle(ddTargetId, "opacity", '1.0');
				} else {
					YAHOO.util.Dom.setStyle(ddTargetId, "opacity", '0.0');
				}		
				
				obj._placeImageFromDrop(obj, this.id, ddTargetId); 

			}, dd, true);

			dd.on('endDragEvent', function(ev, id) { 
			
				YAHOO.util.Dom.setXY(this.id, [this.startPageX, this.startPageY]);
				
			}, dd, true);
		
			dd.on('dragEnterEvent', function(ev, id) { 
			
				for (var targetIndex = 0; targetIndex < ev.info.length; targetIndex++) {

					var ddTarget = ev.info[targetIndex];
					YAHOO.util.Dom.setStyle(ddTarget.id, "opacity", '0.7');

				}

			});

			dd.on('dragOutEvent', function(ev, id) { 

				for (var targetIndex = 0; targetIndex < ev.info.length; targetIndex++) {

					var ddTarget = ev.info[targetIndex];	
					if (ddTarget.id.match(/dtImageName.*/)) {
						YAHOO.util.Dom.setStyle(ddTarget.id, "opacity", '1.0');
					} else {
						YAHOO.util.Dom.setStyle(ddTarget.id, "opacity", '0.0');
					}		
					
				}		

			});	
		
		}
					
		// Set the correct path and the initial cursor for each image
		for (var i = 0; i < imageNames.length; i++) {
			
			// Set the correct image
			if (imageNames[i].length < 32) continue;
			var r = new Date();
			r = r.getTime() + ":" + Math.random();
			var preloadImage = new Image();
			preloadImage.src = '/designtools/main/ajaxGetLibraryThumbnailImage/dtSessionId/' + 
				dtSessionId + '/dtImageBaseName/' + imageNames[i] + '/r/' + r;
			var targetImage = document.getElementById("_image-" + imageNames[i]);
			YAHOO.util.Event.addListener(preloadImage, "load", obj._setImageSourceOnPreload, 
				{preload: preloadImage, target: targetImage});	
		}

		// Set the image list
		obj._imageList = imageNames;
						
		// Set up the listener for the click on actions
		for (var i = 0; i < imageNames.length; i++) {
			if (imageNames[i].length < 32) continue;
			var imageId = "_image-" + imageNames[i];
			var editId = "_imageEdit-" + imageNames[i];
			var viewId = "_imageView-" + imageNames[i];
			var deleteId = "_imageDelete-" + imageNames[i];
						
			//YAHOO.util.Event.addListener(imageId, "click", obj._selectImage, {me: obj, imageName: imageNames[i]} ); 
			YAHOO.util.Event.addListener(editId, "click", obj._editImage, {me: obj, imageName: imageNames[i]} ); 
			YAHOO.util.Event.addListener(viewId, "click", obj._viewImage, {me: obj, imageName: imageNames[i]} ); 
			YAHOO.util.Event.addListener(deleteId, "click", obj._deleteImage, {me: obj, imageName: imageNames[i]} ); 
			YAHOO.util.Event.addListener('--' + editId, "click", obj._editImage, {me: obj, imageName: imageNames[i]} ); 
			YAHOO.util.Event.addListener('--' + viewId, "click", obj._viewImage, {me: obj, imageName: imageNames[i]} ); 
			YAHOO.util.Event.addListener('--' + deleteId, "click", obj._deleteImage, {me: obj, imageName: imageNames[i]} ); 
		}

	  },
	  failure: function(o) {
	  	alert(o.statusText);
	  }
	} 
	
	var cObj = YAHOO.util.Connect.asyncRequest('POST', '/designtools/main/ajaxGetLibraryContents?dtSessionId=' + dtSessionId, callback); 
}

DTImageLibraryModule.prototype._selectImage = function(e, o) {

		
	if (o.me._imageList != null) {
		for (var i = 0; i < o.me._imageList.length; i++) {
			if (o.me._imageList[i].length < 32) continue;
			var imageId = "_image-" + o.me._imageList[i];
			YAHOO.util.Dom.setStyle(imageId, "border", "0px solid red");
		}
	}
	
	var imageId = "_image-" + o.imageName;
	YAHOO.util.Dom.setStyle(imageId, "border", "3px solid red");
	
	o.me._selectedImage = o.imageName;
}

DTImageLibraryModule.prototype._setImageSourceOnPreload = function(e, o) {
	o.target.src = o.preload.src;
}

DTImageLibraryModule.prototype._addImage = function(e, o) {

	var panel = new DTImageGetterPanel('_imageGetterPanel');
	panel.setImagesUploadedCallback( function() { o._refreshYourImages(o); } );
	panel.showPanel();
}

DTImageLibraryModule.prototype._editImage = function(e, o) {

	var panel = new DTImageEditorPanel('_imageEditorPanel');
	panel.setImageModifiedCallback(
		function() {
			o.me._refreshYourImages(o.me);	
		}
	);
	panel.showPanel(o.imageName);
}

DTImageLibraryModule.prototype._viewImage = function(e, o) {

	var imageURL = '/designtools/main/ajaxGetLibraryPreviewImage/dtSessionId/' + 
				dtSessionId + '/dtImageBaseName/' + o.imageName;

	var vPanel = new DTImageViewerPanel("_vPanel");
	vPanel.showPanel(imageURL);
}

DTImageLibraryModule.prototype._deleteImage = function(e, obj) {

	// Confirm with the user to delete the image
	var qPanel = new DTQuestionPanel('_qPanel1', 280);
	
	qPanel.setChoice1Callback(
		function () {
			obj.me._deleteImageFinal(obj);
		}
	);
	
	qPanel.setChoice2Callback(
		function () {
		}
	);
	
	qPanel.setChoice3Callback(
		function () {
		}
	);
	
	qPanel.showPanel(
		"Delete Image?",		
		"You are about to delete image '" + obj.imageName.substring(33) + "'.  Do you want to continue?",
		'<img src="/designtools/webimages/0179_yes.png">', 
		'<img src="/designtools/webimages/0179_no.png">', ''
	);
}


DTImageLibraryModule.prototype._deleteImageFinal = function(obj) {

	// Create the url
	var url = "/designtools/main/ajaxDeleteImageInLibrary/dtSessionId/" + 
		dtSessionId + "/dtImageBaseName/" + obj.imageName;

	// Handle the callback
	var callback = 
	{ 
	  cache: false,
	  success: function(o) {

		if (o.responseText.match(/$Error/g)) {
			alert(o.reponseText);
		} else {
			obj.me._refreshYourImages(obj.me);
		}

	  },
	  failure: function(o) {
	  	alert(o.statusText);
	  }
	} 
	
	// Make the ajax call
	var cObj = YAHOO.util.Connect.asyncRequest('POST', url, callback); 

}


DTImageLibraryModule.prototype._placeImageFromDrop = function(obj, dragImageId, hoverRegionId) {

	if (hoverRegionId.match(/dtImageName.*/)) {
	
		// Handle the DND support for imprint form images
		var imgId = hoverRegionId.replace('dtImageName', 'dtImageNameImage');
		document.getElementById(imgId).src = document.getElementById(dragImageId).src;
		
		var radioEl = document.getElementById(hoverRegionId + "_radio");
		if (radioEl != null) radioEl.checked = true;
		
	} else { 

		// Handle the DND support for standard hover regions
		var index = Number(hoverRegionId.replace('dtHoverRegionImageBox', ''));
		var imageBox = dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index];
		var imageName = dragImageId.replace('_image-', '');
		
		var progressPanel = new DTProgressPanel(
			"_placeImagePanel", 
			200, 
			"Placing Image", 
			"Placing image.  Please Wait.");
		progressPanel.showPanel();
		progressPanel.setProgress(50);
		
		// Create a callback for the async request
		var callback = 
		{
			cache:false,
			success: function(o) {
			
				progressPanel.hidePanel();
			
				// Check the returned data
				var data = o.responseText;
				if (data.match(/$Error/g)) {
					alert(o.responseText);
					return;
				}
				
				// set the new image name and pixel dimensions 
				var cells = data.split("|");
				dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index].imageName = cells[0];
				dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index].imagePixelWidth = cells[1];
				dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index].imagePixelHeight = cells[2];
				
				// compute a best fitting option for initial placement
				var boxWidth = imageBox.right - imageBox.left;
				var boxHeight = imageBox.bottom - imageBox.top;
				
				var boxRatioWH = boxWidth / boxHeight;
				var imageRatioWH = cells[1] / cells[2];
				
				// If image is flatter, use horizontal side for proportioning
				if (boxRatioWH > imageRatioWH) {
					var imageHeight = cells[2] * boxWidth / cells[1];
					dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index].imageLeft = dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index].left;
					dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index].imageRight = dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index].right;
					dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index].imageTop = dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index].top;
					dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index].imageBottom = dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index].top + imageHeight;
				} else {			
					var imageWidth = cells[1] * boxHeight / cells[2];
					dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index].imageTop = dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index].top;
					dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index].imageBottom = dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index].bottom;
					dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index].imageLeft = dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index].left;
					dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index].imageRight = dtDocList[dtCurrentDocumentIndex]._dtDocData.imageBoxes[index].left + imageWidth;
				}
				
				// Open image cropper
				obj._positionImage(imageBox, index);
			},
			failure: function(o) {
				progressPanel.hidePanel();
			 	alert("Error placing image: " + o.statusText);
			},
			argument: {}
		
		}
			
		// Make the call
		var url = "/designtools/main/ajaxPlaceImage/dtSessionId/" + dtSessionId + "/dtDocumentId/" + 
			dtDocList[dtCurrentDocumentIndex].documentId + 
			"/dtImageBaseName/" + imageName + "/dtImageBoxType/" + imageBox.type + "/dtImageBoxPage/" + imageBox.page + 
			"/dtImageBoxPlace/" + imageBox.place + "/";
		var request = YAHOO.util.Connect.asyncRequest('POST', url, callback); 	
	}
	
}

DTImageLibraryModule.prototype._positionImage = function(imageBox, imageBoxIndex) {

	var panel = new DTImageBoxPositionEditorPanel("_imagePositionerPanel");
	panel.showPanel(imageBox, imageBoxIndex);
}

// Constructor method
DTImageViewerPanel = function(id) {

	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				xy: [200, 50],
				width: "450px", 
				visible: false, 
				draggable: true, 
				fixedcenter: false,  
				close: false, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 100
			} 
		);
		
	// Build out the panel content
	var body = 	
		'<table align="center" width="100%"><tr><td> ' +
		'	<div class="dtPanelBorder" style="height: 450px; width: 100%"> ' + 
		'		<table align="center" valign="middle" height="100%" width="100%"><tr><td align="center"> ' +
		'			<img id="DTImageViewerPanelPreviewImage" src="/designtools/images/misc/spinner_16_16.gif" border=1> ' +
		'		</td></tr></table> ' +
		'	</div>' +
		'</td></tr><tr><td align="right">' +
		' 	<img src="/designtools/webimages/0179_ok.png" id="DTImageViewerPanelCancelButton">' +
		'</td></tr></table>';	

	// Render the panel
	this._panel.setHeader("View Photo");
	this._panel.setBody(body);
	this._panel.render(document.body);


	new DTImageButton('DTImageViewerPanelCancelButton', 
		'/designtools/webimages/0179_ok.png', 
		'/designtools/webimages/0179_ok_on.png', 
		this._hidePanel, this);

}

// Public methods
DTImageViewerPanel.prototype.showPanel = function(imageURL) {
	this._panel.show();
	document.getElementById('DTImageViewerPanelPreviewImage').src = imageURL;
}

// Private methods
DTImageViewerPanel.prototype._hidePanel = function(e, o) {
	o._panel.hide();
	o._panel.destroy();
}

 
// Constructor method
DTImprintEditorOverlay = function(id, containerId, locX, locY, locW, locH) {

	this._id = id;
	this._containerId = containerId;
	this._viewState = "Expanded";
	this._x = locX;
	this._y = locY;
	this._width = locW;
	this._height = locH;
	this._imageHeaderName = "";
	
	// Create the content		
	var html = 	
		'<div id="' + id + '" style="position: absolute; overflow: hidden; z-index: 400; height: ' + locH + 'px; width: ' + locW + 'px;"> ' +
		' 	<table cellpadding=0 cellspacing=0 width="100%" height="100%">' +
		'		<tr>' + 
		'			<td width="height" valign="top"><img style="cursor: pointer;" id="_imprintEditorToggleTab" src="/designtools/images/ds/btn_ie_imprints_and_options_minus.gif"></td>' + 
		'		</tr><tr>' + 
		' 			<td valign="top" style="border: 1px solid #cccccc; background: #dfdfdf">' +
		'				<div id="_DTImprintEditorOverlayDiv" style="height: 345px; width: 500px; overflow: scroll"></div>' + 
		'				<div id="_imprintEditorDesignNotesDiv">' + 
		'					<br><b>Special Design Instructions</b><br>' + 
		'						If you have additional design adjustments to communicate to the designer, ' +
		'						enter specific instructions here.  ' +
		'						Note: Depending on your request a fee may be required, in which case you will be contacted.<br>' +
		'					<div style="height: 100px; width: *; overflow: auto; border: 1px solid #cccccc; background: #eeeeee">' +
		'						<textarea rows=4 cols=52 id="_imprintEditorDesignNotesArea"></textarea>' +
		'						' +
		'					</div>' + 
		'				</div>' + 
		'				<img id="_imprintEditorDoneBtn" src="/designtools/images/ds/0174_keepclose.png">' +
		'			</td>' +
		'		</tr>' +
		'	</table>' + 
		'</div>';
	
	var con = document.getElementById(containerId);
	con.innerHTML += html;
	
	var xy = YAHOO.util.Dom.getXY(containerId);
	xy[0] = xy[0] + locX;
	xy[1] = xy[1] + locY;
	YAHOO.util.Dom.setXY(id, xy);
}

DTImprintEditorOverlay.prototype.loadDocImprintForms = function() {

	var imprintHTML = "";
	for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) {
			
		var header = "";
		
		if (dtDocList[docIndex].itemType == "IMPRINT") {
			header = 
				'<div style="background: #f2e893; font-weight: bold; font-size: 10px;">' + 
				'1) Complete the form below. 2) Our designers will fit your imprints ' +
				'and photos (if applicable) into the design for you upon purchase. 3) You  ' +
				'will receive an email proof to approve the final design before printing.' +
				'</div>';
		}
		
		if (dtDocList[docIndex].itemType == "DOL") {
			header = 
				'<div style="background: #f2e893; font-weight: bold; font-size: 10px;">' + 
				'Complete the form below to specify additional product options. ' +
 				'Note: you will not receive an emailed proof for this product unless you ' + 
				'specify special design instructions. ' +
				'</div>';
		}
			
		if (dtDocList[docIndex]._imprintFormData == null || dtDocList[docIndex]._imprintFormData == '') {
			header = 
				'No additional imprints or options';				
			dtDocList[docIndex]._imprintEditorState = "Closed";
		} else {
			dtDocList[docIndex]._imprintEditorState = "Open";
		}
			
		var imprintFormId = "_dtImprintEditorOverlayImprintForm" + docIndex;
		imprintHTML +=
			'<div id="' + imprintFormId + '" style="overflow: auto"><br>' +
			header + dtDocList[docIndex]._imprintFormData +
			'</div>';
			
		// Set the name of the div that contains the imprint form
		dtDocList[docIndex]._imprintFormDivId = imprintFormId;
	}

	var con = document.getElementById('_DTImprintEditorOverlayDiv');
	con.innerHTML = imprintHTML;
	
	// Find all the dtImageName divs and create DDTargets on them
	var matchArray = imprintHTML.match(/dtImageName_[0-9]+_[0-9]+/g);
	if (matchArray) {	
		for (var i = 0; i < matchArray.length; i++) {
			var ddt = new YAHOO.util.DDTarget(matchArray[i], 'dtDndPhotoGroup'); 
		}
	}
}

DTImprintEditorOverlay.prototype.loadDocImprints = function(o) {

	for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) {
		var imprintFormId = dtDocList[docIndex]._imprintFormDivId;
		var height = "1px";	
		if (docIndex == dtCurrentDocumentIndex) height = "";
		YAHOO.util.Dom.setStyle(imprintFormId, "height", height);
	}
	
	o._imageHeaderName = "/designtools/images/ds/btn_ie_imprints_and_options_";
	if (dtDocList[dtCurrentDocumentIndex]._imprintFormData == null || 
			dtDocList[dtCurrentDocumentIndex]._imprintFormData == '') {
	
		o._imageHeaderName = "/designtools/images/ds/btn_ie_sdi_";
	}
	
	if (dtDocList[dtCurrentDocumentIndex]._imprintEditorState == 'Open') {
		o.expand(null, o);
	} else {
		o.collapse(null, o);
	}
	
	var notesVisibility = 'visible';
	if (dtDocList[dtCurrentDocumentIndex].itemType == 'STOCK') notesVisibility = 'hidden';
	YAHOO.util.Dom.setStyle('_imprintEditorDesignNotesDiv', "visibility", notesVisibility);
	
	document.getElementById('_imprintEditorDesignNotesArea').value = dtDocList[dtCurrentDocumentIndex].userDesignNotes;	
	
	var editorVisibility = 'visible';
	if (dtDocList[dtCurrentDocumentIndex].itemType == 'STOCK' && 
		(dtDocList[dtCurrentDocumentIndex]._imprintFormData == null || dtDocList[dtCurrentDocumentIndex]._imprintFormData == "")) {
		editorVisibility = 'hidden';
		o.collapse(null, o);
	} 
	YAHOO.util.Dom.setStyle(o._id, "visibility", editorVisibility);
}

DTImprintEditorOverlay.prototype.deleteImprintForm = function(id) {

	var formDivElement = document.getElementById(id);
	if (formDivElement != null) {
		formDivElement.parentNode.removeChild(formDivElement);
	}
}

DTImprintEditorOverlay.prototype.loadButtons = function(o) {
				
	YAHOO.util.Event.addListener('_imprintEditorToggleTab', "click", o.toggle, o); 
	YAHOO.util.Event.addListener('_imprintEditorDesignNotesArea', "change", o._saveNotes, o); 
	
	YAHOO.util.Event.addListener('_imprintEditorToggleTab', "mouseover", this._onTabMouseOver, this ); 
	YAHOO.util.Event.addListener('_imprintEditorToggleTab', "mouseout", this._onTabMouseOut, this ); 	
	
	YAHOO.util.Event.addListener('_imprintEditorDoneBtn', "click", o.collapse, o); 
}

DTImprintEditorOverlay.prototype._saveNotes = function(e, o) {

	dtDocList[dtCurrentDocumentIndex].userDesignNotes = document.getElementById('_imprintEditorDesignNotesArea').value;
}

DTImprintEditorOverlay.prototype.toggle = function(e, o) {

	if (o._viewState == "Expanded") {
		o.collapse(e, o);
	} else {
		o.expand(e, o);
	}
}

DTImprintEditorOverlay.prototype.expand = function(e, o) {

	YAHOO.util.Dom.setStyle(o._id, 'height', "20px");

	o._viewState = "Expanded";
	dtDocList[dtCurrentDocumentIndex]._imprintEditorState = "Open";
		
	var xy = YAHOO.util.Dom.getXY(o._containerId);
	xy[0] = xy[0] + o._x;
	xy[1] = xy[1] + o._y;

	var currentHeight = o._height;
	if (dtDocList[dtCurrentDocumentIndex]._imprintFormData == null || 
			dtDocList[dtCurrentDocumentIndex]._imprintFormData == '') {

		currentHeight = 250;
		YAHOO.util.Dom.setStyle('_DTImprintEditorOverlayDiv', "height", "1px");
		YAHOO.util.Dom.setStyle('_DTImprintEditorOverlayDiv', 'visibility', 'hidden');
	} else {
		YAHOO.util.Dom.setStyle('_DTImprintEditorOverlayDiv', "height", "345px");
		YAHOO.util.Dom.setStyle('_DTImprintEditorOverlayDiv', 'visibility', 'visible');
	}
	
	var expandAmin = new YAHOO.util.Motion(
		o._id, 
		{
			height: { to: currentHeight },
			points: { to: xy }
		}, 
		1.0, 
		YAHOO.util.Easing.easeBoth
	);
 	expandAmin.animate();
	
	document.getElementById('_imprintEditorToggleTab').src = o._imageHeaderName + "minus.gif";
}

DTImprintEditorOverlay.prototype.collapse = function(e, o) {

	var currentHeight = o._height;
	if (dtDocList[dtCurrentDocumentIndex]._imprintFormData == null || 
			dtDocList[dtCurrentDocumentIndex]._imprintFormData == '') {
		currentHeight = 250;
	}
	YAHOO.util.Dom.setStyle(o._id, 'height', currentHeight + "px");

	o._viewState = "Collapsed";
	dtDocList[dtCurrentDocumentIndex]._imprintEditorState = "Closed";
	
	var xy = YAHOO.util.Dom.getXY(o._containerId);
	xy[0] = xy[0] + o._x;
	xy[1] = xy[1] + o._y;

	YAHOO.util.Dom.setStyle('_DTImprintEditorOverlayDiv', 'visibility', 'hidden');
	var collapseAnim = new YAHOO.util.Motion(
		o._id, 
		{
			height: { to: 20 },
			points: { to: xy }
		}, 
		1.0, 
		YAHOO.util.Easing.easeBoth
	);
 	collapseAnim.animate();
		
	document.getElementById('_imprintEditorToggleTab').src = o._imageHeaderName + "plus.gif";
}

DTImprintEditorOverlay.prototype.getState = function(o) {

	return o._viewState;
}

DTImprintEditorOverlay.prototype._onTabMouseOver = function(e, o) {
/*
	var content = "Expand to edit or view Imprint and Options form";
	if (o._viewState == "Expanded") content = "Collapse Imprints and Options form";
	
	
	var xy = YAHOO.util.Dom.getXY('_imprintEditorToggleTab');
	
	o._infoPanel = new DTInfoPanel('tabInfoId', xy[0] + 25, xy[1] + 25, 180, content, false, false);
	o._infoPanel.showPanel();
*/
}

DTImprintEditorOverlay.prototype._onTabMouseOut = function(e, o) {
	if (o._infoPanel != null) o._infoPanel.hidePanel();
}

// Constructor method
DTInfoModule = function(id, parentId) {

	this._module = 
		new YAHOO.widget.Module(
			id, 
			{ 
				width: "300px",
				visible: true
			} 
		);
		
	var html = 
		'<div style="overflow: auto; height: 400px" id="DTInfoModuleContent">' +
		'</div>';
		
	this._module.setBody(html);
	this._module.render(parentId);
	this.refreshContent();
}

DTInfoModule.prototype.refreshContent = function(e) {

	var templateInfo = '';
	if (dtDocList[dtCurrentDocumentIndex]._dtDocData != null) 
		templateInfo = dtDocList[dtCurrentDocumentIndex]._dtDocData.templateInfo;
	if (templateInfo != '') templateInfo = "Additional Notes: " + templateInfo;
	
	var html = 
		'<b>' + dtDocList[dtCurrentDocumentIndex].productName + '</b><br>' + 
		'Layout Size: ' + dtDocList[dtCurrentDocumentIndex].productSize + '<br>' + 
		'Layout Style: ' + dtDocList[dtCurrentDocumentIndex].productStylecode + '<br><br>' + 
		templateInfo + '<br><br>' + 
		'Item Type: ' + dtDocList[dtCurrentDocumentIndex].itemType;
		
	document.getElementById('DTInfoModuleContent').innerHTML = html;
}

DTInfoModule.prototype._showMargins = function(e) {
	dtBtnMarginsOnClick();
}

DTInfoModule.prototype._showEdits = function(e) {
	dtBtnShowEditableRegionsOnClick();
}

DTInfoModule.prototype._viewPDF = function(e) {
	dtBtnViewLargerOnClick();
}






 
// Constructor method
DTInfoPanel = function(id, x, y, width, content, varClose, varModal) {

	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				xy: [x, y],
				width: width + "px", 
				visible: false, 
				draggable: false, 
				fixedcenter: false, 
				close: varClose, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : varModal, 
				zIndex: 1000
			} 
		);
		
	// Render the panel
	this._panel.setBody('<table><tr><td>' + content + '</td></tr></table>');
	this._panel.render(document.body);

}

// Public methods
DTInfoPanel.prototype.showPanel = function() {
	this._panel.show();
}

DTInfoPanel.prototype.hidePanel = function() {
	try {
		this._panel.hide();
		this._panel.destroy();
	} catch (e) {}
}


// Constructor method
DTLoginPanel = function(id) {

	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				xy: [200, 50],
				width: "780px", 
				visible: false, 
				draggable: true, 
				fixedcenter: false,  
				close: true, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 110
			} 
		);
		
	// Build out the panel content
	var body = 	
		'<table align="center" width="100%"><tr><td> ' +
		'	<br><br><b>An account is required to save your work.</b> Sign into an existing online account or create a new account.<br><br>' +
		'	<div id="dtLoginPanelContent" class="dtPanelBorder" style="height: 400px; width: 100%"> ' +
		'	</div>' +
		'</td></tr></table>';
		
		
	// Render the panel
	this._panel.setHeader("MagnetStreet Login");
	this._panel.setBody(body);
	this._panel.render(document.body);

}

// Public methods
DTLoginPanel.prototype.showPanel = function() {
	
	this._panel.show();
	
	var callbackGetLoginFormData = 
	{
		cache:false,
		success: function(o) {
			try {
				
				var data = o.responseText;
				var elem = document.getElementById('dtLoginPanelContent');
				if (elem != null) elem.innerHTML = data;
				
			} catch (x) {
					
				var errorPanel = new DTExceptionPanel('errorPanel', x, 
					"Failed to get the login form Please try again or contact Customer Support.");
				errorPanel.showPanel();
				
			}
		},
		failure: function(o) {
		 	alert("Could not get the login form.  Please try again later.  Message: " + o.statusText);		
		}
	}		
	
	var getLoginURL = '/store/authChooser/market/' + dtMarketId + '/jspSetupId/moveItemsToIcebox';
	var getLoginRequest = YAHOO.util.Connect.asyncRequest('GET', getLoginURL, callbackGetLoginFormData); 
	
}

// Private methods
DTLoginPanel.prototype.hidePanel = function() {

	this._panel.hide();
	this._panel.destroy();
}

// Constructor method
DTProgressPanel = function(id, width, header, content) {

	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				width: "240px", 
				visible: false, 
				draggable: true, 
				fixedcenter: true, 
				close: false, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 1000
			} 
		);
		
	// Render the panel
	this._panel.setHeader(header);
	this._panel.setBody('<table><tr><td>' + content + '</td></tr><tr><td><div id="progressPanelStatus"></div></td></tr></table>');
	this._panel.render(document.body);

}

// Public methods
DTProgressPanel.prototype.showPanel = function() {
	this._panel.show();
}

DTProgressPanel.prototype.hidePanel = function() {
	this._panel.hide();
	this._panel.destroy();
}

DTProgressPanel.prototype.setProgress = function(progress) {
	
	progress = Math.round(progress); 
	
	var pgBar = 
		'<div style="width: 200px; border: 1px solid black; ' + 
		'background: url(/designtools/images/ds/progress_bar_bg.gif) repeat-x top left;">' +
		'<div style="overflow: hidden; width: ' + (progress*2) + 
		'px; background: url(/designtools/images/ds/progress_bar_top.gif) repeat-x top left; color: white;"> ' + progress + '%&nbsp;complete</div></div>';
			
	document.getElementById('progressPanelStatus').innerHTML = pgBar;
}











// Constructor method
DTQuestionPanel = function(id, panelWidth) {

	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				width: panelWidth + "px", 
				visible: false, 
				draggable: true, 
				fixedcenter:true,  
				close: false, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 100
			} 
		);
		
	// Build out the panel content
	var body = 	

		'<table align="center" width="100%"><tr><td> ' +
		'	<div class="dtPanelBorder" style="width: 100%"> ' + 
		'	<div style="padding: 15px; text-align: left;" id="_DTQuestionPanelContent"></div>' +
		'</td></tr><tr><td align="right">' +
			'<a id="_DTQuestionPanelChoice3"></a> ' + 
			'<a id="_DTQuestionPanelChoice2"></a> ' + 
			'<a id="_DTQuestionPanelChoice1"></a> ' + 
		'</td></tr></table>';

	// Render the panel
	this._panel.setHeader("");
	this._panel.setBody(body);
	this._panel.render(document.body);

	// Set up the listeners
	YAHOO.util.Event.addListener('_DTQuestionPanelChoice1', "click", this._choice1, this ); 
	YAHOO.util.Event.addListener('_DTQuestionPanelChoice2', "click", this._choice2, this ); 
	YAHOO.util.Event.addListener('_DTQuestionPanelChoice3', "click", this._choice3, this ); 
}

// Public methods
DTQuestionPanel.prototype.showPanel = function(header, content, choice1Label, choice2Label, choice3Label) {
	
	document.getElementById('_DTQuestionPanelContent').innerHTML = content;
	document.getElementById('_DTQuestionPanelChoice1').innerHTML = choice1Label;
	document.getElementById('_DTQuestionPanelChoice2').innerHTML = choice2Label;
	document.getElementById('_DTQuestionPanelChoice3').innerHTML = choice3Label;
	
	this._panel.setHeader(header);
	this._panel.show();
}

DTQuestionPanel.prototype.setChoice1Callback = function(cb) {
	this._choice1Callback = cb;
}

DTQuestionPanel.prototype.setChoice2Callback = function(cb) {
	this._choice2Callback = cb;
}

DTQuestionPanel.prototype.setChoice3Callback = function(cb) {
	this._choice3Callback = cb;
}

// private methods
DTQuestionPanel.prototype._choice1 = function(e, o) {
	o._choice1Callback();
	o._panel.hide();
	o._panel.destroy();
}

DTQuestionPanel.prototype._choice2 = function(e, o) {
	o._choice2Callback();
	o._panel.hide();
	o._panel.destroy();
}

DTQuestionPanel.prototype._choice3 = function(e, o) {
	o._choice3Callback();
	o._panel.hide();
	o._panel.destroy();
}
 
// Constructor method
DTReviewAndApprovePanel = function(id) {

	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				xy: [0, 00],
				width: "1125px", 
				visible: false, 
				draggable: false, 
				fixedcenter: false,  
				close: false, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 100
			} 
		);
		
	// Build out the panel content
	var body = 			
		'<div class="dtPanelBorder" style="font-size: 12px; height: 570px; width: 100%"> ' + 
		'	<table><tr><td valign="top" width="375"> ' + 
		'		<img id="_reviewAndApprovalPanelTipsImage" src="/designtools/images/ds/app_note_tips_dol.gif"><p>' +
		'		<table width="100%"><tr><td id="_reviewAndApprovalPanelQtyNote">pieces to review</td>' +
		'		<td><a id="_reviewAndApprovalPanelHelp" style="float: right"><img src="/designtools/webimages/help.png"> Help</a></td></tr></table>' + 
		'		<div style="overflow: scroll; height: 280px" id="_reviewAndApproveDocListContainer"></div> ' +
		'		<p>' +
		'		<img src="/designtools/images/ds/app_btn_return.gif" id="_reviewAndApprovePanelReturn"> ' + 
		'		<img src="/designtools/images/ds/0174_continue.png" id="_reviewAndApprovePanelContinue"> ' + 	 
		'	</td><td valign="top" width="*">' + 
		'		<div style="background: #d9dfea; border: 1px #cfcfcf solid;">' +
		'		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' +
		'		<a id="_ctrlZoomIn"><img align="absmiddle" src="/designtools/images/ds/btn_zoom_in.jpg"></a>' +
		'		&nbsp;&nbsp;&nbsp;<a id="_ctrlZoomOut"><img align="absmiddle" src="/designtools/images/ds/btn_zoom_out.jpg"></a>' +
		'		&nbsp;&nbsp;&nbsp;<a id="_ctrlZoomReset"><img align="absmiddle" src="/designtools/images/ds/btn_zoom_reset.jpg"></a>' +
		'		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Current Zoom: <span id="_zoomCurrentSetting">100%</span> ' + 
		'		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span id="_ctrlImprintToggleBtn"><a>Show Imprints</a></span> ' + 
		'		</div>' + 
		'		<div id="_reviewAndApproveProofContainer" style="overflow: auto; height: 520px; width: 720px"></div> ' + 
		'	</td></tr></table> ' + 
		'</div>';
		
	// Render the panel
	this._panel.setHeader("Review and Approve");
	this._panel.setBody(body);
	this._panel.render(document.body);
		
	new DTImageButton('_reviewAndApprovePanelReturn', 
		'/designtools/images/ds/app_btn_return.gif', 
		'/designtools/images/ds/app_btn_return_on.gif', 
		this._cancel, this);

	this._continueButton = new DTImageButton('_reviewAndApprovePanelContinue', 
		'/designtools/images/ds/0174_continue.png', 
		'/designtools/images/ds/0174_continue_on.png', 
		this._approve, this);
	
	YAHOO.util.Event.addListener('_reviewAndApprovalPanelHelp', "click", dtOpenHelp ); 

	YAHOO.util.Event.addListener('_ctrlZoomIn', "click", this._zoomIn, this ); 
	YAHOO.util.Event.addListener('_ctrlZoomOut', "click", this._zoomOut, this ); 
	YAHOO.util.Event.addListener('_ctrlZoomReset', "click", this._zoomReset, this ); 
	YAHOO.util.Event.addListener('_ctrlImprintToggleBtn', "click", this._toggleImprintPanel, this ); 
	
	

}

// Public methods
DTReviewAndApprovePanel.prototype.showPanel = function() {
	
	this._panel.show();
	this._randomId = (new Date()).getTime() + ":" + Math.random();
	
	this._currentDoc = 0;
	this._currentPage = 1;
	this._loadContent(null, this);
}


DTReviewAndApprovePanel.prototype._loadContent = function(e, o) {

	// Load the doc list to be proofed		
	var docListContainer = document.getElementById('_reviewAndApproveDocListContainer');
	var html = '';
	var reviewPieceCnt = 0;
	for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) {
	
		var docItem = dtDocList[docIndex];
		var proofItemId = "_proofItem" + docIndex;	
		var initialsTextId = "_initialsText" + docIndex;
		var editDesignerNotesId = "_editDesignerNotes" + docIndex;
		var pagesInDoc = 1;
		if (docItem.itemType == 'DOL') {
			pagesInDoc = docItem._dtDocData.pageCount;
		}
		
		// We want to count all the documents in the review list - this may change to only imprint/dol items in the future
		reviewPieceCnt++;
		
		var appHTML = '';
		
		if (docItem.itemType == 'DOL') {
		
			var initials = docItem.userApprovalInitials;
			if (initials == null) initials = "";
		
			appHTML = 
				'By initializing, I approve of this design and understand that no proof will be emailed.*<br>' + 	
				'	<input id="' + initialsTextId + '" value="' + initials + '"type="text" size=3 maxlength=4>';


			if (docItem.userDesignNotes != "") 
				appHTML = 
				'You added special design notes, therefore our designers will make the changes and email you a proof.';
				
		}
	
		if (docItem.itemType == 'IMPRINT') {
			appHTML = 
				'Proof to be emailed for approval.';
		}
		
		if (docItem.itemType == 'STOCK') {
			appHTML = 
				'Stock product.  No personalization accepted and no approval required.';
		}

		var itemHTML = "";
		for (var i = 1; i <= pagesInDoc; i++) {
				
			itemHTML += 
				'<tr style="cursor: pointer;">' +
				'	<td valign="top" id="' + proofItemId + 'LeftPage' + i + '"><img id="' + proofItemId + 'ArrowPage' + i + '" src="/designtools/images/ds/app_icon_arrow.gif"></td>' + 
				'	<td valign="top" id="' + proofItemId + 'MiddlePage' + i + '" valign="top" width="*">' + 
				'	<b>' + docItem.productName + ' (Page ' + i + ')</b>'+ 
				'<br><br>';
				
			if (docItem.itemType != 'STOCK' && i == 1) {
			
				var designNotesLabel = "Add Special Design Intructions";
				if (docItem.userDesignNotes != "") designNotesLabel = "Edit Special Design Intructions";
			
				itemHTML += '   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a id="' + editDesignerNotesId + 'Page' + i + '"><small>' + designNotesLabel + '</small></a>';
			}
				
			itemHTML +=
				'	</td>' +
				'	<td valign="top" id="' + proofItemId + 'RightPage' + i + '" width="130"><center>' + 
				'		<small>' + appHTML + '</small></center>' + 
				'	</td>' +
				'</tr>';	
				
			appHTML = "";
		}
			
		html += itemHTML;
	}
	docListContainer.innerHTML = '<table style="border-collapse: collapse; padding: 0px; margin: 0px;" width="100%">' + html + "</table>";
	
	var noteCell = document.getElementById('_reviewAndApprovalPanelQtyNote');
	noteCell.innerHTML = '<b>' + reviewPieceCnt + ' pieces to review</b>';
	
	// Set up the listener for the click on actions
	for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) {
	
		var proofItemId = "_proofItem" + docIndex;		
		var editDesignerNotesId = "_editDesignerNotes" + docIndex;
		
		var docItem = dtDocList[docIndex];
		var pagesInDoc = 1;
		if (docItem.itemType == 'DOL') pagesInDoc = docItem._dtDocData.pageCount;
		
		for (var i = 1; i <= pagesInDoc; i++) {
			YAHOO.util.Event.addListener(proofItemId + "LeftPage" + i, "click", o._getProof, {me: o, 'docIndex': docIndex, 'pageNumber': i} ); 
			YAHOO.util.Event.addListener(proofItemId + "MiddlePage" + i, "click", o._getProof, {me: o, 'docIndex': docIndex, 'pageNumber': i} ); 
			YAHOO.util.Event.addListener(proofItemId + "RightPage" + i, "click", o._getProof, {me: o, 'docIndex': docIndex, 'pageNumber': i} ); 
			YAHOO.util.Event.addListener(editDesignerNotesId + "Page" + i, "click", o._editDesignerNotes, {me: o, 'docIndex': docIndex, 'pageNumber': i} ); 
		}
	}

	this._getProof(null, {me: o, 'docIndex': o._currentDoc, 'pageNumber': o._currentPage});
}


// Private methods

DTReviewAndApprovePanel.prototype._saveInitials = function() {

	// Validate and save the initials
	for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) {
		
		if (dtDocList[docIndex].itemType != 'DOL') continue;
		if (dtDocList[docIndex].userDesignNotes != "") continue;
		var initialsTextId = "_initialsText" + docIndex;
		var initials = "";
		try {
			initials = document.getElementById(initialsTextId).value;
			initials = initials.replace(/^\s+|\s+$/g, '') ;
		} catch (e) {}
		
		dtDocList[docIndex].userApprovalInitials = initials;
	}

}

DTReviewAndApprovePanel.prototype._approve = function(e, o) {

	// Validate and save the initials
	for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) {
		if (dtDocList[docIndex].itemType != 'DOL') continue;
		if (dtDocList[docIndex].userDesignNotes != "") continue;
		var initialsTextId = "_initialsText" + docIndex;
		var initials = "";
		try {
			initials = document.getElementById(initialsTextId).value;
			initials = initials.replace(/^\s+|\s+$/g, '') ;
		} catch (e) {}
		
		if (initials == null || initials == '') {
		
			var qPanel = new DTQuestionPanel('_qPanelInvalidReview', 480);
	
			qPanel.setChoice1Callback(
				function () {
				}
			);
			
			qPanel.setChoice2Callback(
				function () {
				}
			);
			
			qPanel.setChoice3Callback(
				function () {
				}
			);
			
			qPanel.showPanel(
				"Unapproved Items",		
				'<img src="/designtools/images/ds/sign_stop.png" align="left" vspace="30" hspace="20"> ' +
				'There are Design Studio Template products that have not been reviewed and approved.<p>' +
				'You must review and approve all pieces you designed or remove the unwanted items in the Design Studio.' +
				'To continue, you must initial in the box provided to confirm approval.',
				'<img src="/designtools/webimages/0179_ok.png">', '', ''
			);
		
			return;
		}
		dtDocList[docIndex].userApprovalInitials = initials;
	}

	o._panel.hide();
	o._panel.destroy();
	
	dtSaveDocuments(false, function() { dtCloseInterface('Approve'); });
}

DTReviewAndApprovePanel.prototype._cancel = function(e, o) {

	o._hideImprintPanel(null, o);
	o._panel.hide();
	o._panel.destroy();
	
}

DTReviewAndApprovePanel.prototype._editDesignerNotes = function(e, obj) {

	obj.me._saveInitials();
	var panel = new DTDesignerNotesEditorPanel('_designerNotesPanel', obj.docIndex);
	panel.showPanel( 
		function() {
			obj.me._loadContent(null, obj.me);
		} 
	);
}

DTReviewAndApprovePanel.prototype._getProof = function(e, obj) {

 	obj.me._currentDoc = obj.docIndex;
 	obj.me._currentPage = obj.pageNumber;

	if (dtDocList[obj.docIndex].itemType == 'DOL' && 
		dtDocList[obj.docIndex]._imprintFormData != null && 
		dtDocList[obj.docIndex]._imprintFormData != "") {
		YAHOO.util.Dom.setStyle('_ctrlImprintToggleBtn', "visibility", "visible");	
		document.getElementById('_ctrlImprintToggleBtn').innerHTML = "Show Imprints and Options";
	} else {
		YAHOO.util.Dom.setStyle('_ctrlImprintToggleBtn', "visibility", "hidden");	
	}

	// Set the correct tip image
	if (dtDocList[obj.docIndex].itemType == 'DOL') document.getElementById('_reviewAndApprovalPanelTipsImage').src = "/designtools/images/ds/tip_dol.gif";
	if (dtDocList[obj.docIndex].itemType == 'IMPRINT') document.getElementById('_reviewAndApprovalPanelTipsImage').src = "/designtools/images/ds/tip_imprint.gif";
	if (dtDocList[obj.docIndex].itemType == 'STOCK') document.getElementById('_reviewAndApprovalPanelTipsImage').src = "/designtools/images/ds/tip_stock.gif";
	
	// Highlight the current proof item 
	for (var docIndex = 0; docIndex < dtDocList.length; docIndex++) {
		var pagesInDoc = 1;
		if (dtDocList[docIndex].itemType == 'DOL') pagesInDoc = dtDocList[docIndex]._dtDocData.pageCount;
		for (var i = 1; i <= pagesInDoc; i++) {
	
			var bgColor = (docIndex % 2 == 0) ? "#EEE" : "#FFF";  
			var proofItemId = "_proofItem" + docIndex;	
			YAHOO.util.Dom.setStyle(proofItemId + "LeftPage" + i, "background", bgColor);	
			YAHOO.util.Dom.setStyle(proofItemId + "MiddlePage" + i, "background", bgColor);	
			YAHOO.util.Dom.setStyle(proofItemId + "RightPage" + i, "background", bgColor);	
			YAHOO.util.Dom.setStyle(proofItemId + "ArrowPage" + i, "visibility", "hidden");	
		}				
	}
	
	var pagesInCurrentDoc = 1;
	if (dtDocList[obj.docIndex].itemType == 'DOL') pagesInCurrentDoc = dtDocList[obj.docIndex]._dtDocData.pageCount;
	for (var pageIndex = 1; pageIndex <= pagesInCurrentDoc; pageIndex++) {
		YAHOO.util.Dom.setStyle("_proofItem" + obj.docIndex + "LeftPage" + pageIndex, "background", "#c8dffe");
		YAHOO.util.Dom.setStyle("_proofItem" + obj.docIndex + "MiddlePage" + pageIndex, "background", "#c8dffe");
		YAHOO.util.Dom.setStyle("_proofItem" + obj.docIndex + "RightPage" + pageIndex, "background", "#c8dffe");
	
	}	
	YAHOO.util.Dom.setStyle("_proofItem" + obj.docIndex + "LeftPage" + obj.pageNumber, "background", "#b8cffe");
	YAHOO.util.Dom.setStyle("_proofItem" + obj.docIndex + "MiddlePage" + obj.pageNumber, "background", "#b8cffe");
	YAHOO.util.Dom.setStyle("_proofItem" + obj.docIndex + "RightPage" + obj.pageNumber, "background", "#b8cffe");
	YAHOO.util.Dom.setStyle("_proofItem" + obj.docIndex + "ArrowPage" + obj.pageNumber, "visibility", "visible");
	
	var proofContent = "";
	
	// If this is not a DOL item, display a basic message
	if (dtDocList[obj.docIndex].itemType == 'STOCK') {
	
		proofContent += 
			'<br><br><br><big><big><b><center>This is a standard product that does not accept any personalization.<br>This product will ship as is.</center></b></big></big>';
		if (dtDocList[obj.docIndex]._imprintFormReviewData != '') 
			proofContent += '<br><br><br><b>Review Selected Options</b><br><br><br>' + dtDocList[obj.docIndex]._imprintFormReviewData;
	}

	if (dtDocList[obj.docIndex].itemType == 'IMPRINT') {
	
		proofContent += 
			'<br><br><br><big><big><b><center>Our designers will put this product together for you.<br>You will receive an emailed proof for your approval within 3 business days.</center></b></big></big>';
		if (dtDocList[obj.docIndex]._imprintFormReviewData != '') 
			proofContent += '<br><br><br><b>Review Selected Imprints and Options</b><br><br><br>' + dtDocList[obj.docIndex]._imprintFormReviewData;		
	}

	obj.me._loadProofFile(obj.me, obj.docIndex, obj.pageNumber, proofContent);
}

DTReviewAndApprovePanel.prototype._loadProofFile = function(obj, docIndex, pageNumber, content) {

	//content = content.replace(/[^="()',\x09\x0A\x0D:<>/.A-Za-z 0-9]/g, '#');

	content = content.replace('class="moreInformationSubHeader"', "");
	content = content.replace('class="moreInformationSubContainer"', "");
	content = content.replace('class="moreInformationList"', "");





	var proofSrc = "/designtools/main/ajaxGetDTDocJPGProofFile/dtSessionId/" + 
		dtSessionId + "/dtDocumentId/" + dtDocList[docIndex].documentId + "/dtPageNumber/" + pageNumber + "/r/" + obj._randomId;
	var proofContent = 
		'<img style="visibility:hidden" id="DTReviewAndApprovePanelProofImage" src="/designtools/images/misc/spinner_16_16.gif">';
	proofContent += content;
	document.getElementById('_reviewAndApproveProofContainer').innerHTML = proofContent;
	var proofImg = document.getElementById('DTReviewAndApprovePanelProofImage');
	
	YAHOO.util.Dom.setStyle("DTReviewAndApprovePanelProofImage", "visibility", "hidden");
	YAHOO.util.Event.addListener(proofImg, "load", obj._zoomReset, obj);
	proofImg.src = proofSrc;
	
}

DTReviewAndApprovePanel.prototype._zoomIn = function(e, obj) {

	var newZoom = 100;	
	if (obj._currentZoomValue == 25) newZoom = 50;
	if (obj._currentZoomValue == 50) newZoom = 75;
	if (obj._currentZoomValue == 75) newZoom = 100;
	if (obj._currentZoomValue == 100) newZoom = 150;
	if (obj._currentZoomValue == 150) newZoom = 200;
	if (obj._currentZoomValue == 200) newZoom = 400;
	if (obj._currentZoomValue == 400) newZoom = 400;
	obj._zoomTo(e, obj, newZoom);
}

DTReviewAndApprovePanel.prototype._zoomOut = function(e, obj) {

	var newZoom = 100;	
	if (obj._currentZoomValue == 25) newZoom = 25;
	if (obj._currentZoomValue == 50) newZoom = 25;
	if (obj._currentZoomValue == 75) newZoom = 50;
	if (obj._currentZoomValue == 100) newZoom = 75;
	if (obj._currentZoomValue == 150) newZoom = 100;
	if (obj._currentZoomValue == 200) newZoom = 150;
	if (obj._currentZoomValue == 400) newZoom = 200;
	obj._zoomTo(e, obj, newZoom);
}

DTReviewAndApprovePanel.prototype._zoomReset = function(e, obj) {
	obj._zoomTo(e, obj, 100);
}

DTReviewAndApprovePanel.prototype._zoomTo = function(e, obj, percent) {
	
	var img = document.getElementById('DTReviewAndApprovePanelProofImage');
	if (img == null) return;

	YAHOO.util.Dom.setStyle("DTReviewAndApprovePanelProofImage", "height", "");
	YAHOO.util.Dom.setStyle("DTReviewAndApprovePanelProofImage", "width", "");

	var origHeight = img.height;
	var origWidth = img.width;
	
	var newHeight = Math.round( origHeight * percent / 200 );
	var newWidth = Math.round( origWidth * percent / 200 );

	YAHOO.util.Dom.setStyle("DTReviewAndApprovePanelProofImage", "height", newHeight);
	YAHOO.util.Dom.setStyle("DTReviewAndApprovePanelProofImage", "width", newWidth);
	YAHOO.util.Dom.setStyle("DTReviewAndApprovePanelProofImage", "visibility", "visible");
	document.getElementById('_zoomCurrentSetting').innerHTML = "<b>" + percent + "%</b>";

	obj._currentZoomValue = percent;
}

DTReviewAndApprovePanel.prototype._showImprintPanel = function(e, obj) {
	
	document.getElementById('_ctrlImprintToggleBtn').innerHTML = "Hide Imprints and Options";
	
	var currentDoc = obj._currentDoc;
	document.getElementById('_reviewAndApproveProofContainer').innerHTML = 
		'<br><br><br><b>Additional Imprints and Options</b><br><br><br>' + dtDocList[currentDoc]._imprintFormReviewData;
	
	/*
	
	var callbackFormatImprintData = 
	{
		cache:false,
		success: function(o) {
			
			var content = o.responseText;
			var xy = YAHOO.util.Dom.getXY('_reviewAndApproveProofContainer');
			obj._imprintPanel = new DTInfoPanel('_imprintInfoId', xy[0] + 25, xy[1] + 25, 320, content, true, true);
			obj._imprintPanel.showPanel();
			
		},
		failure: function(o) {

		}
	}		
			
	var currentDoc = obj._currentDoc;
	if (dtDocList[currentDoc]._imprintFormData != null && dtDocList[currentDoc]._imprintFormData != "") {
	
		var jsonFormData = "";
		jsonFormData += dtCreateJSONObjectFromForm("ImprintTextForm" + dtDocList[currentDoc].shoppingItemId, dtDocList[currentDoc].shoppingItemId);
		jsonFormData += dtCreateJSONObjectFromForm("ImprintGraphicsForm" + dtDocList[currentDoc].shoppingItemId, dtDocList[currentDoc].shoppingItemId);
		jsonFormData += dtCreateJSONImagesFromImprintList(dtDocList[currentDoc]._imprintFormData);
		jsonFormData = "[{" + jsonFormData + "}]";
	
		var formatImprintUrl = 
			"/store/showProductImprints/market/" + dtMarketId + 
			"/shoppingItemId/" + dtDocList[currentDoc].shoppingItemId + 
			"?productImprints=" + escape(jsonFormData);
			
		var formatImprintRequest = YAHOO.util.Connect.asyncRequest('POST', formatImprintUrl, callbackFormatImprintData); 
	}	
	
	*/
	
				
}

DTReviewAndApprovePanel.prototype._hideImprintPanel = function(e, o) {

	document.getElementById('_ctrlImprintToggleBtn').innerHTML = "Show Imprints and Options";

	this._getProof(null, {me: o, 'docIndex': o._currentDoc, 'pageNumber': o._currentPage});	
}

DTReviewAndApprovePanel.prototype._toggleImprintPanel = function(e, o) {
	
	if (document.getElementById('DTReviewAndApprovePanelProofImage') == null) {
		o._hideImprintPanel(e, o);
	} else {
		o._showImprintPanel(e, o);
	}	
	
}

// Constructor method
DTStartPanel = function(id) {

	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				width: "585px", 
				visible: false, 
				draggable: true, 
				fixedcenter: true, 
				close: false, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 100
			} 
		);
		
	// Build out the panel content
	var body = 	
		'<div style="height: 160px; background: #ffffff; text-align: left;">' +
		'<img id="_startNowButton" src="/designtools/webimages/start.png"><br>' + 
		'<img id="_startNowLoading" style="position: absolute;" src="/designtools/webimages/progress_indicator.gif">' +
		'<table width="100%"><tr>' +
		'	<td><a id="_startExit">Exit</a></td>' +
		'	<td align="right"><a id="_startLearnMore">Learn More</a></td></tr></table>' +
		'</div>';

	// Render the panel
	this._panel.setBody(body);
	this._panel.render(document.body);

	// Set up the listeners
	YAHOO.util.Event.addListener('_startNowButton', "click", this._startNow, this ); 
	YAHOO.util.Event.addListener('_startLearnMore', "click", this._learnMore, this ); 
	YAHOO.util.Event.addListener('_startExit', "click", this._exit, this ); 
}

// Public methods
DTStartPanel.prototype.showPanel = function() {
	this._canStart = false;
	this._panel.show();
	
	var xy = YAHOO.util.Dom.getXY('_startNowButton');
	xy[0] = xy[0] + 428;
	xy[1] = xy[1] + 24;
	YAHOO.util.Dom.setXY('_startNowLoading', xy);

}

DTStartPanel.prototype.hidePanel = function() {
	this._panel.hide();
	this._panel.destroy();
}

DTStartPanel.prototype.showStartNowButton = function() {
	var startNowImage = document.getElementById('_startNowButton');
	if (startNowImage == null) return;
	startNowImage.src = "/designtools/webimages/start_withbutton.png";
	YAHOO.util.Dom.setStyle('_startNowLoading', 'visibility', 'hidden');
	this._canStart = true;
}

// private methods
DTStartPanel.prototype._startNow = function(e, o) {
	if (!o._canStart) return;
	o._panel.hide();
	o._panel.destroy();
}

DTStartPanel.prototype._exit = function(e, o) {
	o._panel.hide();
	o._panel.destroy();
	_dtFinishCallback(dtSessionId, dtDocumentId, 'Cancel', '');
}

DTStartPanel.prototype._learnMore = function(e, o) {
	dtOpenHelp();
}
// Constructor method
DTTemplateSwatchEditorModule = function(id, parentId, contentHeight) {

	this._module = 
		new YAHOO.widget.Module(
			id, 
			{ 
				width: "300px",
				visible: true
			} 
		);
		
	var html = 
		'<div class="dtAccordionBodyToolbar">' +
		'<a id="_swatchEditorModuleHelp" style="float: right"><img src="/designtools/webimages/help.png"> Help</a>' +
		'</div>' + 
		'<div class="dtAccordionBodyTip">' + 
		'<img src="/designtools/images/ds/icon_tip.gif" align="left"> ' +
		'To launch the color editor, click <b>Edit</b> next to the color you want to change.<br>' + 
		'</div>' + 
		'<div style="overflow: auto; height: ' + contentHeight + 'px" id="DTTemplateSwatchEditorModuleContent">Loading...</div>';
		
	this._module.setBody(html);
	this._module.render(parentId);
	this.refreshContent(this);
}

DTTemplateSwatchEditorModule.prototype.refreshContent = function(obj) {
	
	// Do not show anything if this is not a DOL item
	if (dtDocList[dtCurrentDocumentIndex].itemType != 'DOL') {
		document.getElementById('DTTemplateSwatchEditorModuleContent').innerHTML = '';
		return;
	}
	
	// generate the content of the swatch panel
	var html = '';
	for (var i = 0; i < dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches.length; i++) {
	
		var color = dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[i];
		var rgb = DTUtilsGetRgbInHex([color.redValue, color.greenValue, color.blueValue]);
		var editId = '_editSwatch' + i;
		var resetId = '_resetSwatch' + i;	
		var bgcolor = (i % 2 == 1) ? "#FFFFFF" : "#EEEEEE"; 
		var swatchMaskName = (i % 2 == 1) ? 'color_swatch_white.gif' : 'color_swatch_grey.gif';
	
		var colorNameSplit = color.swatchName.split("|");
		var nameHTML = colorNameSplit[0] + "<br>";
		if (colorNameSplit.length > 1) nameHTML += '<small><font color="#444444">' + colorNameSplit[1] + '</font></small>';
		
	
	
		var itemHTML = 
			'<table bgcolor="' + bgcolor + '" width="100%"><tr>' +
			'	<td width="80px"><div style="background-color: #' + rgb + '; width: 70px;">' +
			'		<img id="---' + editId + '" src="/designtools/images/ds/' + swatchMaskName + '" border="0"></div></td>' +
			'	<td>' + nameHTML + '<br>' +
			'		<a id="--' + editId + '"><img src="/designtools/webimages/pencil.png"></a> <a id="' + editId + '">Edit</a>&nbsp;&nbsp;&nbsp;&nbsp;' +
			'		<a id="--' + resetId + '"><img src="/designtools/webimages/arrow_refresh.png"></a> <a id="' + resetId + '">Reset</a>' +
			'	</td>' +
			'</tr></table>';		
		html += itemHTML;
	}
			
	document.getElementById('DTTemplateSwatchEditorModuleContent').innerHTML = html;

	// Create the listeners for the events
	for (var i = 0; i < dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches.length; i++) {
		var editId = '_editSwatch' + i;
		var resetId = '_resetSwatch' + i;	
		YAHOO.util.Event.addListener(editId, "click", obj._editSwatch, {me : obj, swatchIndex : i} ); 
		YAHOO.util.Event.addListener(resetId, "click", obj._resetSwatch,  {me : obj, swatchIndex : i} ); 
		YAHOO.util.Event.addListener('--' + editId, "click", obj._editSwatch, {me : obj, swatchIndex : i} ); 
		YAHOO.util.Event.addListener('--' + resetId, "click", obj._resetSwatch,  {me : obj, swatchIndex : i} ); 
		YAHOO.util.Event.addListener('---' + editId, "click", obj._editSwatch, {me : obj, swatchIndex : i} ); 
	}
	
	YAHOO.util.Event.addListener('_swatchEditorModuleHelp', "click", dtOpenHelp ); 
}

// Private methods
DTTemplateSwatchEditorModule.prototype._editSwatch = function(e, o) {
	
	var currentColor = null;
	if (dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex] != null) currentColor = [
		dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].cyanValue, 
		dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].magentaValue, 
		dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].yellowValue, 
		dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].blackValue];
	
	var cp = new DTColorPickerPanel('_colorPickerPanel', currentColor);
	cp.setColorSelectedCallback(
		function (color) { 
	
			dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].modified = true;
			dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].colorSpace = color.colorSpace;
			dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].redValue = color.redValue;
			dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].greenValue = color.greenValue;
			dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].blueValue = color.blueValue;
			dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].cyanValue = color.cyanValue;
			dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].magentaValue = color.magentaValue;
			dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].yellowValue = color.yellowValue;
			dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].blackValue = color.blackValue;
	
			_dtDocumentRequestUpdate = true;
			o.me.refreshContent(o.me);
		}
	);
	cp.setColorResetCallback(
		function () { 
			o.me._resetSwatch(null, o);
		}
	);
	cp.showPanel();	
}

DTTemplateSwatchEditorModule.prototype._resetSwatch = function(e, o) {
	
	// Confirm with the user to reset the swatch
	var qPanel = new DTQuestionPanel('_qPanel1', 280);
	
	qPanel.setChoice1Callback(
		function () {
			dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].modified = false;
			dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].colorSpace = 'CMYK';
			dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].redValue = dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].origRedValue;
			dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].greenValue = dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].origGreenValue;
			dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].blueValue = dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].origBlueValue;
			dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].cyanValue = dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].origCyanValue;
			dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].magentaValue = dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].origMagentaValue;
			dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].yellowValue = dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].origYellowValue;
			dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].blackValue = dtDocList[dtCurrentDocumentIndex]._dtDocData.swatches[o.swatchIndex].origBlackValue;
			
			_dtDocumentRequestUpdate = true;
			o.me.refreshContent(o.me);	
		}
	);
	
	qPanel.setChoice2Callback(
		function () {
		}
	);
	
	qPanel.setChoice3Callback(
		function () {
		}
	);
	
	qPanel.showPanel(
		"Reset Color?",		
		"You are about to reset this color.  Do you want to continue?",
		'<img src="/designtools/webimages/0179_yes.png">', 
		'<img src="/designtools/webimages/0179_no.png">', ''
	);
	
}


 
// Constructor method
DTTextBoxEditorPanel = function(id, overflow) {

	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				xy: [200, 50],
				width: "540px", 
				visible: false, 
				draggable: true, 
				fixedcenter: false,  
				close: false, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 100
			} 
		);
		
	// Lay out the panel with basic HTML holders for the different widgets
	var panelBody = 
		'<table align="center" width="100%"><tr><td> ' +
		'	<div class="dtPanelBorder" style="text-align: left; width: 100%"><div style="padding: 15px;">' + 
			'	<table><tr>' +
			'		<td> <img src="/designtools/webimages/0180_size.png" id="DTTextBoxEditorTextSizeBtn"> </td>' +
			'		<td> <img src="/designtools/webimages/0180_color.png" id="DTTextBoxEditorTextColorBtn"> </td>' +
			'		<td> <img src="/designtools/webimages/0180_font.png" id="DTTextBoxEditorTextFontBtn"> </td>' +
				(!overflow ? '' : '<td rowspan=2><img src="/designtools/webimages/overset.gif"></td>') +
			'	</tr><tr>' +
			'		<td id="DTTextBoxEditorTextSizeDesc"></td>' +
			'		<td id="DTTextBoxEditorTextColorDesc"></td>' +
			'		<td id="DTTextBoxEditorTextFontDesc"></td>' +
			'	</tr></table>' +	
			'	<textarea id="DTTextBoxEditorPanelTextArea" cols=50 rows=5 WRAP=OFF></textarea>' +
		'	</div></div>' +
		'</td></tr><tr><td>' +
		'	<table width="100%"><tr>' +
		'		<td><img src="/designtools/webimages/help.png" id="DTTextBoxEditorPanelHelpButton"> ' +
		'			<a id="DTTextBoxEditorPanelHelpLink">Help</a></td>' +
		'		<td><div align="right">' +
		'				<img src="/designtools/webimages/0179_cancel.png" id="DTTextBoxEditorPanelCancelButton">' +
		'				<img src="/designtools/webimages/0179_reset.png" id="DTTextBoxEditorPanelResetButton">' +
		'				<img src="/designtools/webimages/0179_ok.png" id="DTTextBoxEditorPanelSaveButton">' +
		'			</div>' +
		'	</td></tr></table>' +
		'</td></tr></table>';

	// Render the panel
	this._panel.setHeader("Text Editor");
	this._panel.setBody(panelBody);
	this._panel.render(document.body);

	this._fontSizePickerButton = new DTImageButton('DTTextBoxEditorTextSizeBtn', 
		'/designtools/webimages/0180_size.png', 
		'/designtools/webimages/0180_size_on.png', 
		this._pickFontSize, this);

	this._fontColorPickerButton = new DTImageButton('DTTextBoxEditorTextColorBtn', 
		'/designtools/webimages/0180_color.png', 
		'/designtools/webimages/0180_color_on.png', 
		this._pickFontColor, this);

	this._fontTypePickerButton = new DTImageButton('DTTextBoxEditorTextFontBtn', 
		'/designtools/webimages/0180_font.png', 
		'/designtools/webimages/0180_font_on.png', 
		this._pickFontType, this);
		
	new DTImageButton('DTTextBoxEditorPanelCancelButton', 
		'/designtools/webimages/0179_cancel.png', 
		'/designtools/webimages/0179_cancel_on.png', 
		this._cancel, this);

	new DTImageButton('DTTextBoxEditorPanelResetButton', 
		'/designtools/webimages/0179_reset.png', 
		'/designtools/webimages/0179_reset_on.png', 
		this._resetChanges, this);

	new DTImageButton('DTTextBoxEditorPanelSaveButton', 
		'/designtools/webimages/0179_ok.png', 
		'/designtools/webimages/0179_ok_on.png', 
		this._saveChanges, this);

	YAHOO.util.Event.addListener('DTTextBoxEditorPanelHelpButton', "click", dtOpenHelp ); 
	YAHOO.util.Event.addListener('DTTextBoxEditorPanelHelpLink', "click", dtOpenHelp ); 


}

// Public methods
DTTextBoxEditorPanel.prototype.showPanel = function(dtTextBox) {

	this._panel.show();
	this._dtTextBox = dtTextBox;
				
	// Set some variables that we will use when we save changes	
	this._fontScaling = this._dtTextBox.selectedFontScaling;
	this._fontColor = this._dtTextBox.selectedFontColor;
	this._fontType = this._dtTextBox.selectedFontFace;	
					
	// Set up editing permissions
	if (this._dtTextBox.lockFontSize) this._fontSizePickerButton.setDisable('/designtools/webimages/0180_size_disabled.png');
	if (this._dtTextBox.lockColor) this._fontColorPickerButton.setDisable('/designtools/webimages/0180_color_disabled.png');
	if (this._dtTextBox.lockFontFace) this._fontTypePickerButton.setDisable('/designtools/webimages/0180_font_disabled.png');
	                                    
	// Set the labels
	document.getElementById('DTTextBoxEditorTextSizeDesc').innerHTML = this._getFontScalingButtonContent(this._fontScaling);
	document.getElementById('DTTextBoxEditorTextColorDesc').innerHTML = this._getFontColorButtonContent(this._fontColor);
	document.getElementById('DTTextBoxEditorTextFontDesc').innerHTML = 
		(this._fontType == null || this._fontType == '') ? 
			this._getFontTypeButtonContent(this._dtTextBox.defaultFontFace)	:
			this._getFontTypeButtonContent(this._fontType);
	
	// Get the panel's text area and set its value
	var ta = document.getElementById('DTTextBoxEditorPanelTextArea');
	ta.value = DTUtilsDecodeString(this._dtTextBox.content);
	ta.focus();
	
}

DTTextBoxEditorPanel.prototype.setTextBoxModifiedCallback = function(cb) {
	this._textBoxModifiedCallback = cb;
}

DTTextBoxEditorPanel.prototype.setTextBoxResetCallback = function(cb) {
	this._textBoxResetCallback = cb;
}

// Private methods
DTTextBoxEditorPanel.prototype._getFontScalingButtonContent = function(scaling) {

	var html = '<center>';
	if (scaling == 'autofit') {
		html += 'Shrink to Fit';
	} else if (scaling > 0) {
		html += '+' + scaling;
	} else if (scaling == 0) {
		html += '&nbsp;';
	} else if (scaling < 0) {
		html += scaling;
	}	
	html += "</center>";
	return html;
}

DTTextBoxEditorPanel.prototype._getFontColorButtonContent = function(color) {

	var html = '<center>';
	if (color == null) {
		html += "&nbsp;";
	} else { 
		var rgb = DTUtilsGetRgbInHex([color.redValue, color.greenValue, color.blueValue]);
		html += '<span style="background-color: #' + rgb + '; border: 1px solid black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>';
	}
	html += "</center>";
	return html;
}

DTTextBoxEditorPanel.prototype._getFontTypeButtonContent = function(fontName) {

	var html = '<center>';
	if (fontName == null || fontName == '') fontName = "&nbsp;";
	html += fontName;
	html += "</center>";
	return html;
}

DTTextBoxEditorPanel.prototype._saveChanges = function(e, o) {
	var content = DTUtilsEncodeString(document.getElementById('DTTextBoxEditorPanelTextArea').value);
	o._panel.hide();
	o._panel.destroy();	
	o._textBoxModifiedCallback(content, o._fontScaling, o._fontColor, o._fontType);
}

DTTextBoxEditorPanel.prototype._cancel = function(e, o) {
	o._panel.hide();
	o._panel.destroy();
}

DTTextBoxEditorPanel.prototype._resetChanges = function(e, o) {
	o._panel.hide();
	o._panel.destroy();
	o._textBoxResetCallback();
}

DTTextBoxEditorPanel.prototype._pickFontSize = function(e, o) {

	if (o._dtTextBox.lockFontSize) return;
	
	var panel = new DTFontSizePickerPanel("_fontSizePickerPanel");
	panel.setFontSizeSelectedCallback(
		function(scaling) {
			document.getElementById('DTTextBoxEditorTextSizeDesc').innerHTML = 
				o._getFontScalingButtonContent(scaling);
			o._fontScaling = scaling;
		}
	);
	panel.showPanel();
}

DTTextBoxEditorPanel.prototype._pickFontType = function(e, o) {

	if (o._dtTextBox.lockFontFace) return;

	var panel = new DTFontFacePickerPanel("_fontFacePickerPanel");
	panel.setFontFaceSelectedCallback(
		function(faceName) {	
			document.getElementById('DTTextBoxEditorTextFontDesc').innerHTML = 
				o._getFontTypeButtonContent(faceName);
			o._fontType = faceName;
		}
	);
	panel.setFontFaceResetCallback(
		function() {	
			document.getElementById('DTTextBoxEditorTextFontDesc').innerHTML = 
				o._getFontTypeButtonContent('');
			o._fontType = '';
		}
	);
	panel.showPanel();
}

DTTextBoxEditorPanel.prototype._pickFontColor = function(e, o) {

	if (o._dtTextBox.lockColor) return;

	var currentColor = null;
	if (o._fontColor != null) currentColor = [
		o._fontColor.cyanValue, 
		o._fontColor.magentaValue, 
		o._fontColor.yellowValue, 
		o._fontColor.blackValue];

	var panel = new DTColorPickerPanel('_fontColorPickerPanel', currentColor);
	panel.setColorSelectedCallback(
		function (color) { 
			document.getElementById('DTTextBoxEditorTextColorDesc').innerHTML = 
				o._getFontColorButtonContent(color);
			o._fontColor = color; 
		}
	);
	panel.setColorResetCallback(
		function (color) { 
			document.getElementById('DTTextBoxEditorTextColorDesc').innerHTML = 
				o._getFontColorButtonContent(null);
			o._fontColor = null; 
		}
	);
	
	panel.showPanel();	
}





 
// Constructor method
DTTextModule = function(id, parentId) {

	this._module = 
		new YAHOO.widget.Module(
			id, 
			{ 
				width: "300px",
				visible: true
			} 
		);
		
	var html = 
		'<div class="dtAccordionBodyToolbar">' +
		'<a id="_textModuleHelp" style="float: right"><img src="/designtools/webimages/help.png"> Help</a>' +
		'</div>' +  	
		'<div class="dtAccordionBodyTip">' + 
		'<img src="/designtools/webimages/note.png" align="left"> ' +
		'Click on editable text area to launch the text editor.  ' +
		'Change text and adjust size, color and font ' +
		'through the text editor.' +
		'</div>' +
		'<div style="overflow: auto; height: 400px" id="DTTextModuleContent">' +
		'<a id="_dtTextHighlightEdits1"><img src="/designtools/webimages/asterisk_orange.png"></a> ' +
		'<a id="_dtTextHighlightEdits2">Highlight Editable Text</a><br>' + 
		'</div>';
		
		
	this._module.setBody(html);
	this._module.render(parentId);

	YAHOO.util.Event.addListener('_textModuleHelp', "click", dtOpenHelp ); 
	YAHOO.util.Event.addListener('_dtTextHighlightEdits1', "click", this._showEdits ); 
	YAHOO.util.Event.addListener('_dtTextHighlightEdits2', "click", this._showEdits ); 
}

DTTextModule.prototype._showEdits = function(e) {
	dtBtnShowEditableRegionsOnClick();
}





 
// Constructor method
DTToolsOverlay = function(id, containerId, tabList, locX, locY, locW, locH, tabHeight) {

	this._tabList = tabList;
	this._id = id;
	this._tabHeight = tabHeight;
	this._currentTab = tabList[0];
	
	// Create a disabled tab list
	this._tabListDisabled = new Array();
	for (var x = 0; x < this._tabList.length; x++) {
		this._tabListDisabled[x] = false;
	}
	
	// Create the content		
	var html = '<div class="dtAccordion" style="height: ' + locH + 'px; width: ' + locW + 'px;" id="' + id + '">';
	for (var i = 0; i < tabList.length; i++) {
		var tabName = tabList[i];
		var tabHeaderName = '_dtToolsOverlay' + this._id + tabName + 'Header';
		var tabBodyName = '_dtToolsOverlay' + this._id + tabName + 'Body';
		html += '<div class="dtAccordionHeader" id="' + tabHeaderName + '"></div>';
		html += '<div style="overflow: hidden; background: #ffffff;" id="' + tabBodyName + '"></div>';
	}
	html += '</div>';
	
	var con = document.getElementById(containerId);
	con.innerHTML += html;
	
	var xy = YAHOO.util.Dom.getXY(containerId);
	xy[0] = xy[0] + locX;
	xy[1] = xy[1] + locY;
	YAHOO.util.Dom.setXY(id, xy);
		
}


DTToolsOverlay.prototype.setupEvents = function(o) {

	for (var i = 0; i < o._tabList.length; i++) {
		var tabName = o._tabList[i];
		var tabHeaderName = '_dtToolsOverlay' + o._id + tabName + 'Header';
		YAHOO.util.Event.addListener(tabHeaderName, "click", o._headerClick, {me: o, tab: tabName} ); 
	}
}

DTToolsOverlay.prototype.showTab = function(showTabName) {	
	this._showTab(this, showTabName);
}

DTToolsOverlay.prototype.getTabHeaderId = function(tabName) {
	return '_dtToolsOverlay' + this._id + tabName + 'Header';
}

DTToolsOverlay.prototype.getTabBodyId = function(tabName) {
	return '_dtToolsOverlay' + this._id + tabName + 'Body';
}

DTToolsOverlay.prototype.refreshTabs = function(obj) {

	for (var i = 0; i < obj._tabList.length; i++) {
		var tabName = obj._tabList[i];
		var tabHeaderName = '_dtToolsOverlay' + obj._id + tabName + 'Header';
		var tabBodyName = '_dtToolsOverlay' + obj._id + tabName + 'Body';
		
		var isDisabled = obj._tabListDisabled[i];
		
		if (tabName == obj._currentTab) {
			YAHOO.util.Dom.setStyle(tabBodyName, "height", obj._tabHeight + "px");
			document.getElementById(tabHeaderName).className = 'dtAccordionHeaderSelected';
		} else {
			YAHOO.util.Dom.setStyle(tabBodyName, "height", "1px");		
			var className = 'dtAccordionHeader';
			if (isDisabled) className = 'dtAccordionHeaderDisabled';
			document.getElementById(tabHeaderName).className = className;
		}
	}
	
}

DTToolsOverlay.prototype.setDisabledTab = function(tabName, isDisabled) {	

	for (var i = 0; i < this._tabList.length; i++) {
		var tab = this._tabList[i];
		if (tab == tabName) {
			this._tabListDisabled[i] = isDisabled;
		}
	}
	
	this.refreshTabs(this);
}

// Private methods
DTToolsOverlay.prototype._headerClick = function(e, o) {
	o.me._showTab(o.me, o.tab);
}

DTToolsOverlay.prototype._showTab = function(obj, showTabName) {

	// determine if the tab is disabled or not
	for (var i = 0; i < obj._tabList.length; i++) {
		var tabName = obj._tabList[i];
		if (tabName == showTabName) {
			if (!obj._tabListDisabled[i]) {
				obj._currentTab = showTabName;
			}
		}
	}
	
	obj.refreshTabs(obj);
}




function DTUtilsEncodeString(str) {
	var output = "";
	for (var i = 0; i < str.length; i++) {
		var ch = str.charCodeAt (i);
		if (ch == 65279) continue;		// This is a special character that IDS uses to handle tags
		output += ch + ",";		
	}
	return output;
}

function DTUtilsDecodeString(str) {
	var output = "";
	if (str == null) return '';
	var chArray = str.split(",");
	for (var i = 0; i < chArray.length; i++) {
		if (chArray[i] == '') continue; 
		try {
			output += String.fromCharCode (chArray[i]);
		} catch (e) {}
	}
	return output;
}

function DTUtilsConvertCmykToRgb(inCyan, inMagenta, inYellow, inBlack) { 

    var inCyan = inCyan / 100;
    var inMagenta = inMagenta / 100;
    var inYellow = inYellow / 100;
    var inBlack = inBlack / 100;
    		
    var x = 255;
    var k = 1;
    var c = DTUtilsClip01(inCyan + inBlack);
    var m = DTUtilsClip01(inMagenta + inBlack);
    var y = DTUtilsClip01(inYellow + inBlack);
    var aw = (k - c) * (k - m) * (k - y);
    var ac = c * (k - m) * (k - y);
    var am = (k - c) * m * (k - y);
    var ay = (k - c) * (k - m) * y;
    var ar = (k - c) * m * y;
    var ag = c * (k - m) * y;
    var ab = c * m * (k - y);
    
    var outRed = x*DTUtilsClip01(aw + 0.9137 * am + 0.9961 * ay + 0.9882 * ar);
    var outGreen = x*DTUtilsClip01(aw + 0.6196 * ac + ay + 0.5176 * ag);
    var outBlue = x*DTUtilsClip01(aw + 0.7804 * ac + 0.5412 * am + 0.0667 * ar + 0.2118 * ag + 0.4863 * ab);

	return new Array(Math.round(outRed), Math.round(outGreen), Math.round(outBlue));
}

function DTUtilsConvertCmykToRgbHex(inCyan, inMagenta, inYellow, inBlack) { 

    var rgb = DTUtilsConvertCmykToRgb(inCyan, inMagenta, inYellow, inBlack);
    
	return DTUtilsConvertIntegerToHex(rgb[0]) + 
		DTUtilsConvertIntegerToHex(rgb[1]) + 
		DTUtilsConvertIntegerToHex(rgb[2]);
}
			
function DTUtilsClip01(value) {
	if (value < 0) value = 0;
	if (value > 1) value = 1;
	return value;
}	

function DTUtilsConvertIntegerToHex(i) {

	var upper = Math.floor(i / 16);
	var lower = i % 16;
	
	if (upper == 10) upper = 'A';
	if (upper == 11) upper = 'B';
	if (upper == 12) upper = 'C';
	if (upper == 13) upper = 'D';
	if (upper == 14) upper = 'E';
	if (upper == 15) upper = 'F';
	
	if (lower == 10) lower = 'A';
	if (lower == 11) lower = 'B';
	if (lower == 12) lower = 'C';
	if (lower == 13) lower = 'D';
	if (lower == 14) lower = 'E';
	if (lower == 15) lower = 'F';
	
	var d = upper + '' + lower;
	return d;
}

function DTUtilsGetRgbInHex(rgb) {

	return DTUtilsConvertIntegerToHex(Math.round(rgb[0])) + 
		DTUtilsConvertIntegerToHex(Math.round(rgb[1])) + 
		DTUtilsConvertIntegerToHex(Math.round(rgb[2]));

}

// Constructor method
DTWaitPanel = function(id) {

	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{
				width: "240px", 
				visible: false, 
				draggable: true, 
				fixedcenter: true, 
				close: false, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 1000
			} 
		);
		
	// Render the panel
	this._panel.setHeader("Please wait...");
	this._panel.setBody('<img src="f">');
	this._panel.render(document.body);

}

// Public methods
DTWaitPanel.prototype.showPanel = function(header) {
	this._panel.setHeader(header);
	this._panel.show();
}

DTWaitPanel.prototype.hidePanel = function() {
	this._panel.hide();
	this._panel.destroy();
}


// Constructor method
DTZoomPanel = function(id) {

	// Build the panel 
	this._panel = 
		new YAHOO.widget.Panel(
			id, 
			{ 
				xy: [200, 50],
				width: "880px", 
				visible: false, 
				draggable: true, 
				fixedcenter: false,  
				close: false, 
				underlay: "shadow",
				constraintoviewport: true, 
				modal : true, 
				zIndex: 110
			} 
		);
		
	// Build out the panel content
	var body = 	
		'<table align="center" width="100%"><tr><td> ' +
		'	<div class="dtPanelBorder" style="overflow: auto; height: 520px; width: 100%"> ' + 
		'	<img id="DTZoomPanelImage" src="/designtools/images/misc/spinner_16_16.gif" border=0></div>' +
		'</td></tr><tr><td align="right">' +
		' 	<img src="/designtools/webimages/0179_ok.png" id="DTZoomPanelClose">' +
		'</td></tr></table>';
		
		
	// Render the panel
	this._panel.setHeader("Image Viewer");
	this._panel.setBody(body);
	this._panel.render(document.body);

	new DTImageButton('DTZoomPanelClose', 
		'/designtools/webimages/0179_ok.png', 
		'/designtools/webimages/0179_ok_on.png', 
		this._close, this);
}

// Public methods
DTZoomPanel.prototype.showPanel = function() {
	
	this._panel.show();
	this._getProof();
}

// Private methods
DTZoomPanel.prototype._close = function(e, o) {

	o._panel.hide();
	o._panel.destroy();
}

DTZoomPanel.prototype._getProof = function(o) {

	if (dtDocList[dtCurrentDocumentIndex].itemType == 'DOL') {
	
		// Create a callback for the async request
		var callbackPostDoc = 
		{
			cache:false,
			success: function(o) {
				
				var r = new Date();
				r = r.getTime() + ":" + Math.random();
				var imageSource = "/designtools/main/ajaxGetDTDocJPGProofFile/dtSessionId/" + 
					dtSessionId + "/dtDocumentId/" + dtDocList[dtCurrentDocumentIndex].documentId + 
					"/dtPageNumber/" + dtCurrentPageNumber + "/r/" + r;
				document.getElementById('DTZoomPanelImage').src = imageSource;
	
			},
			failure: function(o) {
			 	alert("Error updating document: " + o.statusText);
			},
			argument: {}
		
		}
		
		// Make the call
		var r = new Date();
		r = r.getTime() + ":" + Math.random();
		var postDocUrl = "/designtools/main/ajaxUpdateDTDoc/dtSessionId/" + dtSessionId + "/dtDocumentId/" + 
			dtDocList[dtCurrentDocumentIndex].documentId + 
			"/dtSaveChanges/false/dtGeneratePreview/false/dtGenerateProof/false/dtGenerateJPGProof/true/r/" + r;
		var postData = "dtDocData=" + escape(YAHOO.lang.JSON.stringify(dtDocList[dtCurrentDocumentIndex]._dtDocData));
		var postDocRequest = YAHOO.util.Connect.asyncRequest('POST', postDocUrl, callbackPostDoc, postData); 	
		
	} else { 
	
		var imageSource = dtDocList[dtCurrentDocumentIndex].previewSrc;
		document.getElementById('DTZoomPanelImage').src = imageSource;
		
	}
}
