
decorator={
// Properties
	 // ID's and ClassNames
	initFlag:'s7dynamic',
	pageID:'item_detail',
	itemDetail_itemID:'itemID',
	img:'mainImg',
	imgDownload:'imageDownload',
	imgPopup:'imagePopup',
	swatches:'colorchips',
	deco:'decoration',
	gridContainer:'ordergrid',
	gridSelect:'selectctrl',
	gridTablesContainer:'grids',
	gridDecoLink:'grid_decor_button',
	selections:'sku_selection_list',
	 // generated content id's
	previewPopUpId: 'previewPop',
	downloadPopUpId: 'downloadPop',
	 // Dimensions of generated images
	 // main image size
	imgWidth:'250',
	 // popup image size
	popWidth:'375',
	 // download image size
	dlWidth:'560',
	// default logos directory
	defaultLogoURL:'http://www.onesourcepro.com:80/osp/images/default/',
	
// Methods

	init:function(){
		if(document.getElementById(decorator.pageID)){
			pageId = document.getElementById(decorator.pageID);
			if(pageId.className == decorator.initFlag){
				 // get product id and logos array and set as properties of decorator
				var productID = document.getElementById(decorator.itemDetail_itemID).innerHTML;
				if(!productID){return};
				productID = util.cleanWhitespace(productID);
				decorator.rawProductID = productID;
				productID = util.stripDivCodes(productID);
				decorator.productID = productID;
				decorator.logos = decorator.getLogos();
				 // check if vignette exists and set boolean a property
				decorator.isRendered = scene7.hasVignette(productID,scene7.productTable);
				 // initiate decorator methods
				decorator.defaultColor = scene7.defaultColorSettings(decorator.productID,decorator.rawProductID);
				decorator.initOrderGrid(decorator.defaultColor);

				var lastProduct = util.readCookie('productID');
				var lastColorSelected = util.readCookie('decoColor');
				if(lastProduct == decorator.productID){
					if(lastColorSelected){
						if(decorator.isRendered){
							decorator.buildItemDetailURLs(lastColorSelected);
						}
						decorator.toggleGrid(lastColorSelected,2)
					}else{
					decorator.buildItemDetailURLs();
					}
				}else{
					decorator.clearCookies();
					util.createCookie('productID',decorator.productID,0);
					decorator.buildItemDetailURLs();
				}
				
				decorator.addDecorObjects();
				decorator.initSwatches();
				var previewTarget = document.getElementById(decorator.imgPopup);
				YAHOO.util.Event.addListener(previewTarget,'click',decorator.generatePreviewPopup);
				var downloadTarget = document.getElementById(decorator.imgDownload);
				YAHOO.util.Event.addListener(downloadTarget,'click',decorator.generateDLPopup);
				
				var cartbutton = YAHOO.util.Dom.getElementsByClassName('btn_addToCart')
				YAHOO.util.Event.addListener(cartbutton,'click',decorator.validateItems);
			}
		}
	},
	getLogos:function(){
		// build logos array
		// Array order: Left Sleeve, Right Sleeve, Left Chest, Right Chest, Left Cuff, Right Cuff, Left Hem, Right Hem
		var defaultLogoSettings;
		var logos=new Array(15);
		
		// check if default logos have been set. if so,place in logos array
		if(window.settings){
			for(var l in settings){
				if(l == 'defaultLogos'){
					defaultLogoSettings = settings[l];
				}
			}
			if(defaultLogoSettings && defaultLogoSettings.length > 0){
				for(var j = 0; j<defaultLogoSettings.length;j++){
					if(defaultLogoSettings[j]){
						logos[j] = decorator.defaultLogoURL + defaultLogoSettings[j];
					}else{
						logos[j] = defaultLogoSettings[j];
					}
				}
			}
			
		}
		
		// logo application via decorator
		if(document.getElementById("decorationcount")) {
			var count = document.getElementById("decorationcount").value;
			count = count * 1;
			for(var i = 0 ; i < count; i++ ) {
				//Set our logos for the decoration
				var emb = i+"Embroider";
				var scr = i+"Screen";
				var loc = "";
				if(document.getElementById(emb)) {
					//Get innerHTML of this id
					var data = document.getElementById(emb).childNodes[0].nodeValue;
					loc = data.substring(data.indexOf(":")+2, data.length);
				}
				else if(document.getElementById(scr)) {
					var data = document.getElementById(scr).childNodes[0].nodeValue;
					loc = data.substring(data.indexOf(":")+2, data.length);
				}
				var logoCur = "";
				var isrc = i+"logourl";
				if(document.getElementById(isrc)) {
					 logoCur = document.getElementById(isrc).value;
				}
				switch(loc) {
					case "Left Sleeve":
						logos[0] = logoCur;
						break;
					case "Right Sleeve":
						logos[1] = logoCur;
						break;
					case "Left Chest":
						logos[2] = logoCur;
						break;    
					case "Right Chest":
						logos[3] = logoCur;
						break;
					case "Left Cuff":
						logos[4] = logoCur;
						break;
					case "Right Cuff":
						logos[5] = logoCur;
						break;
					case "Left Hem":
						logos[6] = logoCur;
						break;
					case "Right Hem":
						logos[7] = logoCur;
						break;
					case "Full Front":
						logos[8] = logoCur;
						//alert("8"+loc);
						break;
					case "Full Back":
						logos[9] = logoCur;
						break;
					case "Upper Back":
						logos[10] = logoCur;
						break;
					case "Left Hip":
						logos[11] = logoCur;
						break;
					case "Right Hip":
						logos[12] = logoCur;
						break;
					case "Butt":
						logos[13] = logoCur;
						break;
					case "Center":
						logos[14] = logoCur;
						break;
					default:
						logos[0] = logoCur;
						break;
				}
			}
		}
		return logos;
	},
	buildItemDetailURLs:function(color){
		document.getElementById(decorator.img).setAttribute('src',scene7.buildURL(decorator.productID,decorator.rawProductID,color,decorator.imgWidth,decorator.logos));		
		document.getElementById(decorator.imgPopup).setAttribute("href",scene7.buildURL(decorator.productID,decorator.rawProductID,color,decorator.popWidth,decorator.logos));
		document.getElementById(decorator.imgDownload).setAttribute("href",scene7.buildURL(decorator.productID,decorator.rawProductID,color,decorator.dlWidth,decorator.logos));
	},
	initSwatches:function(){
		if(!document.getElementById(decorator.swatches) || document.getElementById(decorator.swatches).getElementsByTagName('dl').length <= 1){return;}
		var swatchDiv = document.getElementById(decorator.swatches);
		 // loop though swatches and apply event listener
		var colors = YAHOO.util.Dom.getElementsByClassName('colorCode','dd',swatchDiv);
		for(var i=0;i<colors.length;i++){
			var code = colors[i].innerHTML;
			code = util.cleanWhitespace(code);
			var swatch = colors[i].parentNode;
			swatch.code = code;
			YAHOO.util.Event.addListener(swatch,'click',decorator.changeColor);
		}
		 // if vignette exists, add swatch interactivity message
		if(!decorator.isRendered){return;}
		var addTo = swatchDiv.getElementsByTagName('h3')[0];
		var message = document.createElement('span');
		addTo.appendChild(message);
		message.innerHTML = " (click swatch to preview)";
	
	},
	changeColor:function(e){
		var code;
		var target = YAHOO.util.Event.getTarget(e);
		if(target.getAttribute('id')== decorator.gridSelect){
			code = target.options[target.selectedIndex].value
			if(decorator.isRendered){
				decorator.buildItemDetailURLs(code);
			}
			decorator.toggleGrid(code,1);
		}else{
			code = this.code;
			if(decorator.isRendered){
				decorator.buildItemDetailURLs(this.code);
			}
			decorator.toggleGrid(this.code,2);
		}
		util.createCookie('decoColor',code,0);
	},
	initOrderGrid:function(defaultImage){
		if(!document.getElementById(decorator.gridSelect) || !document.getElementById(decorator.gridTablesContainer)){return;}
		var productID = document.getElementById(decorator.itemDetail_itemID).innerHTML;
		var menu = document.getElementById(decorator.gridSelect);
		var options = menu.getElementsByTagName('option');
		var grids = document.getElementById(decorator.gridTablesContainer);
		
		// upcoming PO funciontality
		// set up containers to load and receive upcoming skus
		if(document.getElementById('POFunctionInd')){
			var iframe = document.createElement('iframe');
				iframe.style.border = "0";
				iframe.style.height = ".01em";
				iframe.style.width = ".01em";
				iframe.scrolling = "no";
				iframe.style.visibility = "hidden";
				iframe.id = 'nextPO';
				iframe.name = 'nextPO';
			var nextPOdiv = document.createElement('div');
				nextPOdiv.id = "nextPOdiv";
				grids.appendChild(iframe);

			var invPanel = new YAHOO.widget.Panel("logoInfoPanel",
								{
								width:"300px",
								close:true,
								draggable:true,
								zIndex:1000,
								underlay:"shadow",
								visible:false,
								iframe:true,
								constraintoviewport:true,
								effect:{effect: YAHOO.widget.ContainerEffect.FADE,duration:.5}
								});
			YAHOO.util.Event.onDOMReady(function(){
					invPanel.setHeader("Inventory")
					invPanel.setBody(nextPOdiv);
					invPanel.render(document.body);
					});
		}

		var hasSKUCode = function(el){
			var hasCode,test;
			if(!document.hasAttribute){
				test = el.getAttribute("skucode");
				hasCode = test?true:false;
			}else{
				hasCode = (el.hasAttribute("skucode"))?true:false;
			}
			return hasCode;
		}
		decorator.grids = YAHOO.util.Dom.getElementsBy(hasSKUCode,'div',grids);
		decorator.grids.inputs = document.getElementsByName('qty');
		
		var optGrid,defGrid;
		for(var g=0;g<decorator.grids.length;g++){
			var grid = decorator.grids[g];
			grid.code = grid.getAttribute('skucode');
			YAHOO.util.Dom.addClass(grid,'dynamicGrid');
			
			// upcoming inventory functionality
			if(document.getElementById('POFunctionInd')){
				var link = document.createElement('a');;
				link.className = "upcomingInvLink";
				link.href = "?Dsp=30601&IID="+productID+"&colorcode="+grid.code;
				link.id = "nexPO_"+grid.code;
				link.innerHTML = "Upcoming PO's for Color "+grid.code;
				YAHOO.util.Event.addListener(link,"click",function(e){
					YAHOO.util.Event.stopEvent(e);
					frames['nextPO'].location.replace(this.href);
					invPanel.cfg.setProperty("context",[this.id,"tl","tl"]);
					invPanel.show();
				})
				grid.appendChild(link);
			}		
			// test for first color in option group as well as test for default display setting
			if(grid.code == menu.options[0].value){
				optGrid = grid;
			}
			if(defaultImage){
				if(grid.code == defaultImage){
				defGrid = grid;
				}
			}
		}
		// set initial display
		decorator.grids.current = defGrid ? defGrid : optGrid;
		YAHOO.util.Dom.addClass(decorator.grids.current,'currentGrid');
		
		// set pull down to match default and set event listener
		if(defaultImage){
			for(var o=0;o<options.length;o++){
				if(options[o].value == defaultImage){
					menu.options.selectedIndex = o;
				}
			}
		}
		YAHOO.util.Event.addListener(menu,'change',decorator.changeColor)
	},
	clearGrids:function(){
		for (var i=0; i < decorator.grids.inputs.length; i++) {
			decorator.grids.inputs[i].value = "";
		};	
	},
	toggleGrid:function(colorcode,action){
		if(!document.getElementById(decorator.gridContainer)){return;}
		var code = colorcode;
		if(action == 2){
			var menu = document.getElementById(decorator.gridSelect);
			var options = menu.getElementsByTagName('option');
			for(var o=0;o<options.length;o++){
				if(options[o].value == code){
					menu.options.selectedIndex = o;
				}
			}
		}
		YAHOO.util.Dom.removeClass(decorator.grids.current,'currentGrid');
		for(var g=0;g<decorator.grids.length;g++){
			if(decorator.grids[g].getAttribute('skucode')==code){
				decorator.grids.current = decorator.grids[g];
				YAHOO.util.Dom.addClass(decorator.grids.current,'currentGrid');
			}
		}
		decorator.clearGrids();
	},
	generatePreviewPopup:function(e){
		YAHOO.util.Event.stopEvent(e);
		if(!document.getElementById("popImg")){
			var src = this.getAttribute("href");
			//create popup container
			var popUp = document.createElement('div');
			document.getElementById("pagecontainer").appendChild(popUp);
			popUp.setAttribute('id',"popImg");
			//create popup caption
			var popImgCaption = document.createElement('p');
			popUp.appendChild(popImgCaption)
			popImgCaption.setAttribute("id","popImgTab")
			popImgCaption.innerHTML = "click here to hide"
			YAHOO.util.Event.addListener(popImgCaption,'click', function(){this.parentNode.parentNode.removeChild(this.parentNode);});
			//create popup image
			var popImg = document.createElement('img');
			popUp.appendChild(popImg);
			popImg.setAttribute('src',src);
		}
	},
	generateDLPopup:function(e){
		YAHOO.util.Event.stopEvent(e);
		if(!document.getElementById("dlPop")){
			var dlsrc = this.getAttribute("href");
			//create popup container
			var dlpopUp = document.createElement('div');
			document.getElementById("pagecontainer").appendChild(dlpopUp);
			dlpopUp.setAttribute('id',"dlPop");
			//create popup caption
			var dlpopImgCaption = document.createElement('p');
			dlpopUp.appendChild(dlpopImgCaption)
			dlpopImgCaption.innerHTML = "Windows: right-click image, then select \"Save Picture As\". Macintosh: click and drag image to the desktop.";
			//create popup close tab
			var dlpopImgTab = document.createElement('p');
			dlpopUp.appendChild(dlpopImgTab);
			dlpopImgTab.setAttribute('id',"dlTab");
			dlpopImgTab.innerHTML = "click here to hide";
			YAHOO.util.Event.addListener(dlpopImgTab,'click', function(){this.parentNode.parentNode.removeChild(this.parentNode);});
			//create overflow box for image
			var dlOverflow = document.createElement('div');
			dlpopUp.appendChild(dlOverflow);
			dlOverflow.setAttribute('id',"dlImgFrame");
			//create popup image
			var dlpopImg = document.createElement('img');
			dlOverflow.appendChild(dlpopImg);
			dlpopImg.setAttribute('src',dlsrc);
		}
	},
	addDecorObjects:function(){		// add decoration specific items to item_detail if decoration exists
		if(!document.getElementById(decorator.deco)){return;}
		var div=document.getElementById(decorator.deco);
		// if decorations have been specified add or modify dom elements
		if(div.getElementsByTagName('ul').length > 0){
			// check if in render library
			var isRendered = scene7.hasVignette(decorator.productID,hwProductTable);
			// add preview locations note based on preview availability
			var ul = div.getElementsByTagName('ul')[0];
			var note = document.createElement("p");
			if(isRendered == true){ 
					note.setAttribute('class',"note");
					var noteref = div.insertBefore(note, ul);
					noteref.innerHTML="Some Locations May Not Be Available For Preview";
			}else{
					note.setAttribute('class',"noPreviewnote");
					var noteref = div.insertBefore(note, ul);
					noteref.innerHTML="This Product Is Not Currently Configured To Preview Decorations.";
			}
			 // add edit button to decoration specs
			if(div.getElementsByTagName('h3').length > 0){
				var h3=div.getElementsByTagName('h3')[0];
				h3.getElementsByTagName('span')[0].innerHTML="edit";
			}
			 //change h3 link text within order grid to reflect decor addition
			if(document.getElementById(decorator.gridContainer)){
				var gridHeader = document.getElementById(decorator.gridContainer).getElementsByTagName('h3')[0];
				gridHeader.innerHTML = "Purchase This Item With Decoration(s)";
				document.getElementById(decorator.gridDecoLink).innerHTML = "Edit/Remove Decoration(s)";
			}
		}
	},
	clearCookies:function(){
		util.eraseCookie('productID');
		util.eraseCookie('decoColor');
		util.eraseCookie('decoFlag')
	},
	validateItems:function(e){
		if(!window.settings){return};

		var defaults = settings;
		for(var d in defaults){
			if(d == 'sellsblanks'){
			var	blanks = defaults[d];
			}
		}
		// check if style is exempt from any decoration requirement
		var check = document.getElementById(decorator.deco);
		var ext = 0;
		for(var ex in defaults){
			if(ex == 'exemptions'){
				
				var	exempt = defaults[ex];
				if(exempt.length>0){
					for(var j=0;j<exempt.length;j++){
						if(exempt[j] == decorator.rawProductID){
						ext = 1;
						}
					}
				}
			}
		}
		switch(blanks){
			case 0:
				//if(ext == true){return true;}
				if(!check.getElementsByTagName('h3').length>0 && ext == false){
					YAHOO.util.Event.stopEvent(e);
					alert("Items must be decorated before continuing");
				}else{
					decorator.clearCookies();
				}
				break;
			case 1:
				//if(ext == false){return true;}
				if(!check.getElementsByTagName('h3').length>0 && ext == true){
					YAHOO.util.Event.stopEvent(e);
					alert("Items must be decorated before continuing");
				}else{
					decorator.clearCookies();
				}
				break;
			default:
					decorator.clearCookies();
				break;
		}
	}
}
YAHOO.util.Event.onAvailable('footer',decorator.init);
