scene7={

baseRender_URL: "http://s7d4.scene7.com/ir/render/HartwellRender/",
baseIPS_URL: "http://s7ondemand5.scene7.com/is/image/HartwellIndustries/",
noLogoUrl:  "is/image/HartwellIndustries/600x600",
defaultColorSet:  ["as shot", "as shot", "as shot"],
defaultColorID:  "999",

 // table object names
productTable : hwProductTable,
dualProductTable: hwDualProductTable,
colorTable: hwColorTable,
vignetteTable: hwVignetteTable,
objectNameTable: hwObjectNameTable,
objectIndexTable: hwObjectNameIndexTable,

 // table fields
productDisplayNameInd:  0,
vignetteUrlFragmentInd:  1,
productSkuIndex:  1,

// data used by S7's test page only
/*
featureTypeInd:  0,
featureTypeNamesInd:  1,
productNumTextFeaturesInd:  2,
productNumColorGroupsInd:  3,
*/

 // general utility functions
hasVignette:function(productID, productTable) {
	for (var i=0;i< productTable.length;i++){
		if(productID == productTable[i][scene7.productDisplayNameInd]){
			return true;
		}
	}
	return false;
},
isDualProduct:function(productID) {
	for (var i = 0; i < scene7.dualProductTable.length; i++) {
		if (productID == scene7.dualProductTable[i][0]) {
			return true;
		}
	}
	return false;			
},
getOriginalImage:function(productID){
	if(!scene7.hasVignette(productID,scene7.productTable)){return false;}
	productID = scene7.lookupSku(productID, scene7.productTable);

	var colorSet;
	var productColors = scene7.lookupTableValue(scene7.colorTable, productID, -1).slice();
	
	productColors.shift();
	Loop1:
	for(var d=0;d<productColors.length;d++){
		var colorID = productColors[d][0];
		var colorSetting = productColors[d].slice();
		colorSetting.shift();
		for(var c=0;c<colorSetting.length;c++){
			if(colorSetting[c] !== 'as shot'){continue Loop1;}
		}
		var imageAsShot = colorID;
	}
	return imageAsShot;
},
defaultColorSettings:function(productId,rawId){
	var color,defaults;
	
	var vignetteDefault = scene7.getOriginalImage(productId);
	
	if(!window.defaultColors){
		if(!window.settings){return;}
		for(var s in settings){
			// if default color has been specified set imgcolor to that value
			if(s == 'defaultColors'){
				defaults = settings[s];
			}
		}
		if(!defaults){return;}
		for(var d in defaults){
			if(d == rawId){
				color = defaults[d];
			}
		}
	}else{
		for(var d in defaultColors){
			// if default color has been specified set imgcolor to that value
			if(d == rawId){
				color = defaultColors[d];
			}
		}
	}
	if(!color){color = vignetteDefault}
	return color;
},

 // utility functions for HWLogoAndColorURL
lookupTableValue:function(table, key, index) {
	for (i = 0; i < table.length; i++)
		if (table[i][0] == key) {
			if (index == -1)
				return table[i];
			else
				return table[i][index];
		}
	return "";
},
lookupSku:function(productID, productTable) {	
	for (var i=0; i < productTable.length; i++ ) {
		if ( productID == productTable[i][scene7.productDisplayNameInd]) {
			return productTable[i][scene7.productSkuIndex ];
		}
	}
	return "undefined";
},
getProductIDFromDualID:function(prodID, which) {
	var retval="";
	for (var i = 0; i < scene7.dualProductTable.length; i++) {
		if (prodID == scene7.dualProductTable[i][0]) {
			retval = scene7.dualProductTable[i][which];
			break;
		}
	}
	return retval;
},
arrayPosInList:function(arrayPos, logoPosNames) {
	var retval = false
	for (var ii = 0; ii < logoPosNames.length; ii++) {
	//	console.log( hwObjectNameTable[arrayPos]+","+logoPosNames[ii]) 
		if (hwObjectNameTable[arrayPos] == logoPosNames[ii]) {
			retval = true;
			break;
		}
	}
	return retval;
},
getVignetteUrlFragment:function(selectedProduct, vignetteTable, productTable) {
	var selectedProductSku = scene7.lookupSku(selectedProduct, productTable);
	for (var i=0; i < vignetteTable.length; i++ ) {
		if (selectedProductSku == vignetteTable[i][scene7.productDisplayNameInd]) {
			return vignetteTable[i][scene7.vignetteUrlFragmentInd];
		}
	}
},
getNumFeatures:function(selectedProduct, vignetteTable, productTable, featureIndex) {
	var selectedProductSku = scene7.lookupSku(selectedProduct, productTable);
	if (selectedProductSku == "undefined")
		selectedProductSku = selectedProduct;
	for (var i=0; i < vignetteTable.length; i++ ) {
		if (selectedProductSku == vignetteTable[i][scene7.productDisplayNameInd] ) {
			return vignetteTable[i][featureIndex];
		}
	}
	return "Can't find " + selectedProductSku + " in vignette table";
},
setColorGroup:function(url, color, colorNum) {
	var regExp;
	var replStr;
	if (color == "as shot") {
	  regExp = new RegExp("&color=\\$rgb" + colorNum + "\\$", "g");
	  replStr = "";
	} else if (color.indexOf("swatch") > -1) {
	  regExp = new RegExp("&color=\\$rgb" + colorNum + "\\$", "g");
	  replStr = "&src=" + color.slice(7);
	} else {
	  regExp = new RegExp("\\$rgb" + colorNum + "\\$", "g");
	  replStr = color;
	}
	return url.replace(regExp , replStr);
},
setLogoUrl:function(url, logoUrl) {
	var regExp = new RegExp("\\$text=\\$");
	var newUrl = url.replace(regExp, "$text=" + logoUrl);

	if (logoUrl === "" || logoUrl == null)
		newUrl  = newUrl .replace(/\$url\$/, scene7.noLogoUrl);
	else {
		logoUrl = 
		newUrl  = newUrl .replace(/\$url\$/, logoUrl);
	}
	return newUrl;
},
processLogosAndColors:function(productID,url,logos,color){
	var logoPosNames = scene7.getNumFeatures(productID, scene7.vignetteTable, scene7.productTable, 3);
	var lpnPos = 0;
	var colorSet, productColors,logoUrl;
	for (i = 0; i < logos.length; i++) {
		if (scene7.arrayPosInList(i, logoPosNames)) {
			//console.log(i+",true")
			logoUrl = logos[scene7.objectIndexTable[logoPosNames[lpnPos++]]];
			url = scene7.setLogoUrl(url, logoUrl);
		}
	}
	if (color == scene7.defaultColorID){
		colorSet = scene7.defaultColorSet;
	}
	else {		
		productColors = scene7.lookupTableValue(scene7.colorTable, productID, -1).slice();
		productColors.shift();
		colorSet = scene7.lookupTableValue(productColors, color, -1).slice();
		colorSet.shift();
	}
	for (j = 0; j < colorSet.length; j++){
		url = scene7.setColorGroup(url, colorSet[j], j+1);
	}
	return url;
},

 // builds render url
HWLogoAndColorURL:function(productID,width,logos1,colorID1,logos2,colorID2) {
	/*
		Check scene7.productTable to determine if productID is an alias of another style.
		This was done for sites that change Hartwell style numbers and eliminates the need for duplicate scene7.vignetteTable and scene7.colorTable entries.
	*/
	productID = scene7.lookupSku(productID, scene7.productTable);
	// continue method as normal
	var url = scene7.getVignetteUrlFragment(productID, scene7.vignetteTable, scene7.productTable);
	url = url.replace(/wid=\d+/, "wid=" + width);
	
	if(scene7.isDualProduct(productID)){
		var product1ID = scene7.getProductIDFromDualID(productID, 1);
		var product2ID = scene7.getProductIDFromDualID(productID, 2);
		var prod1Logos = (productID == product1ID) ? logos1 : new Array(15);
		var prod2Logos = (productID == product2ID) ? logos1 : new Array(15)
		colorID2 = colorID2 ? colorID2 : colorID1;
		prod2Logos = logos2 ? logos2 : prod2Logos;
		var urlFirstHalf = url.slice(0, url.indexOf("&obj=main_" + product2ID));
		var urlSecondHalf = url.slice(url.indexOf("&obj=main_" + product2ID));
		urlFirstHalf = scene7.processLogosAndColors(product1ID,urlFirstHalf,prod1Logos,colorID1);
		urlSecondHalf = scene7.processLogosAndColors(product2ID,urlSecondHalf,prod2Logos,colorID2);

		// concatenate url halves
		url = urlFirstHalf + urlSecondHalf;
	}
	else{
		url = scene7.processLogosAndColors(productID,url,logos1,colorID1);
	}
	return scene7.baseRender_URL + url;
},

 // determines and returns ips or render url based 
buildURL:function(productId, rawId, color, width, logos) {
	var url,isRendered;
	var noLogos=new Array(15);
	var logos = (!logos || logos == undefined) ? noLogos : logos;
	var dyn = 1;
	var stat = 0;
	var imgcolor = color;
	var defcolor;
	var logos2,colorID2;
	
	/* ---- private methods ---- */
		// builds static IPS URLS
	var buildStatic = function(color){
		if(color == undefined){
			// set the default value
			defColor = scene7.defaultColorSettings(productId,rawId);
			if(defColor){
				imgcolor = "_"+defColor;
				productId += imgcolor
			}
		}else{
			imgcolor= "_"+color;
			productId += imgcolor
		}
		url = scene7.baseIPS_URL+productId+"?wid="+width;
		return url;
	}
	// check if product has a vignette
	isRendered = scene7.hasVignette(productId,scene7.productTable);
	// If style is in vignette table...
	if(isRendered == true){
		// check if a color is defined and if not...
		if(imgcolor == undefined){
			// set the default value
			defColor = scene7.defaultColorSettings(productId,rawId);
			imgcolor = defColor?defColor:scene7.defaultColorID;
		}
		imgtype = dyn;
	}
	// if no vignette, build static IPS urls
	else{
		imgtype = stat;
	}
	// define image type variables with actual urls
	try{
			url = imgtype ? scene7.HWLogoAndColorURL(productId, width, logos, imgcolor,logos2,colorID2) : buildStatic(imgcolor);
	}
	catch(err){
		//alert("product: "+productId+" error: "+err.description);
		url = buildStatic(color);
	}
	return url;
}

}






