var shopCatIdHolder = new GupShup.forms.controls({name:'shopCategory.catId'});	

(function(){
GupShup.html.shop = {};
GupShup.html.shop.vars = {	
	qtyCtrl : null,
	costCtrl : null,
	attrValIdCtrl : null,
	fNameCtrl : null,
	lNameCtrl : null,
	addressCtrl : null,
	cityCtrl : null,
	stateCtrl : null,
	pinCodeCtrl : null,
	productAttrs : {},
	product : null,
	bigImageUrl : false,
	inOwnContainer : false
	
};
	
GupShup.html.shop.renderCategoryList = function(catStr){
	var catObj = GupShup.util.getJsonFromResponse(catStr);
	var categories = catObj.categories;		
	if(GupShup.html.shop.vars.inOwnContainer)
	{
		for(var i = 0; i < categories.length; i++)
		{
			var html = GupShup.util.expandTemplate(GupShup.util.getInnerHTML('shopCatTemplate'), GupShup.html.shop.map.shopCatTemplate, [categories[i]]);
			GupShup.util.setInnerHTML('shopCatListContainer_' + categories[i].catDetails.id ,html);
		}
	}
	else
	{
		var html = GupShup.util.expandTemplate(GupShup.util.getInnerHTML('shopCatTemplate'), GupShup.html.shop.map.shopCatTemplate, categories);
		GupShup.util.setInnerHTML('shopCatListContainer',html);

	}
};

GupShup.html.shop.renderCategoryContainers = function(catStr){
	GupShup.html.shop.vars.inOwnContainer = true;
	var catObj = GupShup.util.getJsonFromResponse(catStr);
	var html = GupShup.util.expandTemplate(GupShup.util.getInnerHTML('shopContentContainerTemplate'), GupShup.html.shop.map.shopCatTemplate, catObj.categories);
	GupShup.util.setInnerHTML('shopContentContainer',html);
};


GupShup.html.shop.renderFeaturedContent = function(content){
	var catProucts = GupShup.util.getJsonFromResponse(content);
	GupShup.html.util.hideElement('shopSelectedItem'); //For buy page to hide selected Item desc	
	var content = catProucts.featuredShopProducts;
	if(GupShup.html.shop.vars.inOwnContainer)
	{
		for(var i = 0; i < content.length; i++)
		{
			var html = GupShup.util.expandTemplate(GupShup.util.getInnerHTML('shopFeaturedContentTemplate'), GupShup.html.shop.map.featuredShopContent, [content[i]]);
			GupShup.util.setInnerHTML('shopContentContainer_' + content[i].category.catDetails.id,html);	
		}
	}
	else
		return;
};

GupShup.html.shop.renderCatContent = function(content, args){
	var catProucts = GupShup.util.getJsonFromResponse(content);
	if((typeof(catProucts.status) != 'undefined') && (catProucts.status == 'SUCCESS'))
	{
		GupShup.html.util.hideElement('shopSelectedItem'); //For buy page to hide selected Item desc
		
		var html = GupShup.html.shop.map.methods.getFeaturedShopContentExpansion(catProucts.products);
		catProucts.params.totalForPg = catProucts.totalForPg;
		var pId = catProucts.params.catId;
		if(typeof args != "undefined")
			pId = args.pId;
			
		var paginationContent = GupShup.html.shop.getPagination(catProucts.products, catProucts.params, pId);
		html += "<div style=\"clear:both\"></div>";
		GupShup.util.setInnerHTML('shopContentContainer_' + pId ,html + paginationContent);
	}
};

GupShup.html.shop.processShopCatResponse = function(xhr){
	GupShup.html.shop.renderCatContent(xhr.responseText, xhr.argument);
};

GupShup.html.shop.collapseCategoryList = function(name){
	var catList = document.getElementsByName(name);
	for(var i = 0 ; i < catList.length ; i++ )
	 {
		catList[i].style.display = "none";
	 }
}

GupShup.html.shop.expandCategoryList = function(catId, name){
	GupShup.html.shop.collapseCategoryList(name);
	var catList = document.getElementsByName(name);
	for(var i = 0 ; i < catList.length ; i++ )
	 {
		if(catList[i].id == (name + "_" + catId))
		{
			catList[i].style.display = "block";
		}
	 }
};

GupShup.html.shop.clearCategoryHighlighting = function(name){
	var catList = document.getElementsByName(name);
	for(var i = 0 ; i < catList.length ; i++ )
	 {
		catList[i].className = "";
	 }
};

GupShup.html.shop.highlightCategory = function(catId, name){
	GupShup.html.shop.clearCategoryHighlighting(name);
	//GupShup.html.shop.expandCategoryList(catId, name + "_Sub"); //Not required for time being
	GupShup.html.shop.highlight(catId, name);	
};

GupShup.html.shop.highlight = function(catId, name){
	var catList = document.getElementsByName(name);
	for(var i = 0 ; i < catList.length ; i++ )
	 {
		if(catList[i].id == (name + "_" + catId))
			catList[i].className = "active";
	 }		
};

GupShup.html.shop.highlightSubCategory = function(catId, name){
	GupShup.html.shop.clearCategoryHighlighting(name);
	GupShup.html.shop.highlight(catId, name);
};

GupShup.html.shop.getCategoryContent = function(catId, isSubCat, pId){

	//If click is not from shop page , den go to shop page
	if(!GupShup.html.shop.vars.inOwnContainer)
	{
		GupShup.html.actions.pageReload(GupShup.conf.contextPath + "/shop");
		return;
	}
	
	if((shopCatIdHolder.get('value') == catId))
		return;
		
	shopCatIdHolder.set(catId);
	
	if(!isSubCat)
		GupShup.html.shop.highlightCategory(catId, 'shopCategory');
	else
		GupShup.html.shop.highlightSubCategory(catId, 'shopCategory');
		
	if(isNaN(parseInt(pId)))
		pId = catId;	
		
	var callback = {
		success:GupShup.html.shop.processShopCatResponse,
		failure:GupShup.html.shop.processShopCatResponse,
		argument : {pId : parseInt(pId)}
	}
	GupShup.html.util.submitFormUsingAjax('POST', GupShup.conf.readUrl , callback, 'shopCategory');
};

GupShup.html.shop.getPagination = function(dataArray,params, pId){
	var paginationObj = {
	start:params.start,
	total:params.totalForPg,
	returned:dataArray.length,
	windowSize:GupShup.conf.windowSize,
	listType : 'Shop Items'
	};

	var reqObj =  {
		url:GupShup.conf.readUrl,
		queryStr: "type=" + params.type + "&catId=" + params.catId + "&needTotalForPg=true",
		callBack:{
		success:GupShup.html.shop.processShopCatResponse,
		failure:GupShup.html.shop.processShopCatResponse,
		argument : {pId : pId}
		} 
	};
	var paginationContent = GupShup.util.expandPaginationTemplate(reqObj,paginationObj,params.type + "_" + params.catId);
	return paginationContent;
};

GupShup.html.shop.buyShopContent = function(id, name, isPremium){
	if(isPremium)
	{
		GupShup.html.actions.pageReload(GupShup.conf.contextPath + "/groups/" + name);
		return;
	}
	GupShup.html.actions.pageReload(GupShup.conf.contextPath + "/buy?itemId=" + id);
};

GupShup.html.shop.gotoShop = function(){
	GupShup.html.actions.pageReload(GupShup.conf.contextPath + "/shop");
};

GupShup.html.shop.showPreview = function(bigImageUrl){
	GupShup.html.util.showLoader("Loading Image..");
	var img = new Image();
	img.onload = function(){GupShup.html.util.hideLoader(); GupShup.html.shop.showLoadedPreview(img);};
	img.src = bigImageUrl;
};

GupShup.html.shop.closePreview = function(){
	GupShup.html.util.closeLightBox();
	GupShup.html.util.changeTagsDisplayTo(document,'SELECT','block');
};

GupShup.html.shop.showLoadedPreview = function(image){
	var lbObj  = {msg:'<img src="' + image.src + '" />', contentClass:'shopItempreviewContent', containerClass : 'shopItemPreview', width: image.width + 10, callBack : GupShup.html.shop.closePreview};
	GupShup.html.util.showLightBox(lbObj);
	GupShup.html.util.changeTagsDisplayTo(document,'SELECT','none');
};

GupShup.html.shop.showSelectedItem = function(selectedItem){
	var product = GupShup.util.getJsonFromResponse(selectedItem);
	var html = GupShup.util.expandTemplate(GupShup.util.removeHTMLComments(GupShup.util.getInnerHTML('shopSelectedItemTemplate')), GupShup.html.shop.map.shopSelectedItemTemplate, [product]);
	GupShup.util.setInnerHTML('shopSelectedItem',html);
	GupShup.html.shop.initSelectedShopItemCtrls();
};

GupShup.html.shop.initSelectedShopItemCtrls = function(){
	var id = GupShup.html.shop.vars.product.id;	
	var formName = 'shopSelectedItemForm_' + id;
	var vars = GupShup.html.shop.vars;
	vars.qtyCtrl = new GupShup.forms.controls({name:formName + '.qty'});
	vars.costCtrl = new GupShup.forms.controls({name:formName + '.cost'});
	vars.attrValIdCtrl = new GupShup.forms.controls({name:formName + '.attrValId'});
	vars.fNameCtrl = new GupShup.forms.controls({name:formName + '.fName'});
	vars.lNameCtrl = new GupShup.forms.controls({name:formName + '.lName'});
	vars.addressCtrl = new GupShup.forms.controls({name:formName + '.addr', limit:500});
	var delDetails = GupShup.html.shop.vars.product.showDeliveryDetails;
	if(delDetails)
		vars.addressCtrl.init();
	
	vars.cityCtrl = new GupShup.forms.controls({name:formName + '.city'});
	vars.stateCtrl = new GupShup.forms.controls({name:formName + '.state'});
	vars.pinCodeCtrl = new GupShup.forms.controls({name:formName + '.pin'});
}

GupShup.html.shop.buyShopItemStep1 = function(formName){	
	
	if(GupShup.html.shop.validateShopForm())
	{
		var product = GupShup.html.shop.vars.product;
		var isSubPack = (product.type == "INCOMING");
		var attrs = GupShup.html.shop.vars.productAttrs;
		var details = {
			cost:document.forms[formName].cost.value,
			itemType: product.displayName,
			extraInfo : isSubPack ? ("(" + attrs.msgPerDay[0].value + " msg/day, valid for " + Math.floor(attrs.duration[0].value/30) + " month(s))") : "",
			type:"SHOP_ITEM",
			subType : product.type,
			count: isSubPack ? 1 : document.forms[formName].qty.value,
			postFunction:GupShup.html.shop.buyShopItemStep2,
			redirectFunction:GupShup.html.shop.buyShopItemRedirect
			};
		
		if(details.count > 0)
		{
			window.location="#";
			GupShup.html.paidItems.methods.checkUserAccountBalanceForPaidItems(details);
		}
	}
};

GupShup.html.shop.changeAmountDetails = function(){
	var id = GupShup.html.shop.vars.product.id;
	var total = "shopItemTotalCost_" + id;
	var cost = "shopItemCost_" + id;
	
	var form = document.forms['shopSelectedItemForm_' + id];
	GupShup.util.setInnerHTML(total, (form.cost.value * form.qty.value).toFixed(2));
	GupShup.util.setInnerHTML(cost, (form.cost.value * 1).toFixed(2));
};

GupShup.html.shop.changeAttribute = function(attrName, attrValId){
	
	if(typeof GupShup.html.shop.vars.productAttrs[attrName] == 'undefined')
		return;
	
	var values = GupShup.html.shop.vars.productAttrs[attrName];
	
	var selectedValue = null;
	
	for(var i = 0; i < values.length ; i++)
	{
		if(values[i].id == attrValId)
		{
			selectedValue = values[i];
			break;
		}
	}
	
	if(selectedValue != null)
	{
		var oldProd = GupShup.html.shop.vars.product;
		var newUrl = (GupShup.util.trim(selectedValue.imageUrl) == "") ? oldProd.imageUrl : selectedValue.imageUrl;
		var newCost = (GupShup.util.trim(selectedValue.cost) == "0.00") ? oldProd.cost : selectedValue.cost;
		var actualCost = (GupShup.util.trim(selectedValue.actualCost) == "0.00") ? oldProd.actualCost : selectedValue.actualCost;
		var newProd = {
						cost: newCost,
						name: oldProd.name,
						id: oldProd.id,
						shortDescr: oldProd.shortDescr,
						actualCost: actualCost,
						displayName: oldProd.displayName,
						longDescr: oldProd.longDescr,
						imageUrl: newUrl
					};
		GupShup.util.expandTemplateInDiv('selectedShopItem_' + GupShup.html.shop.vars.product.id , 'shopItemTemplate', GupShup.html.shop.map.shopItemTemplate, [newProd]);
		
		GupShup.html.shop.vars.costCtrl.set(newProd.cost);
		GupShup.html.shop.vars.attrValIdCtrl.set(selectedValue.id);
		GupShup.html.shop.changeAmountDetails();
	}
};

GupShup.html.shop.buyShopItemStep2 = function(details){
	if(GupShup.html.shop.validateShopForm())
	{
		var id = GupShup.html.shop.vars.product.id;
		var formName = 'shopSelectedItemForm_' + id;
		var callBack = {
			success: GupShup.html.shop.postOrderResponseHandler,
			failure: GupShup.html.shop.postOrderResponseHandler 
		};
	
		GupShup.html.util.submitFormUsingAjax('POST', GupShup.conf.writeUrl, callBack, formName);
	
	}
};

GupShup.html.shop.postOrderResponseHandler = function(xhr){
	var status = GupShup.util.getJsonFromResponse(xhr.responseText);
	var msg = status.message;
	var msgDetails = {type:GupShup.html.shop.vars.product.type, itemType: GupShup.html.shop.vars.product.displayName};
	switch(status.status)
	{
		case 'SUCCESS' :
						GupShup.forms.hideNotification();
						GupShup.html.paidItems.methods.showPaidItemSentPopUp(status.params.accountDetails, msgDetails, status.params.type);
						break;
		case 'FAILURE' : GupShup.forms.showNotification(msg, {failure:true});break;
	}
};

GupShup.html.shop.buyShopItemRedirect = function(details){
	if(details.cost < GupShup.conf.minimumPay) //Minimum default amount for refill.
		details.cost = GupShup.conf.minimumPay
	GupShup.html.actions.forwardToPaymentSystem(details.cost,GupShup.conf.phoneNumber ,GupShup.conf.fromUrl + "/buy?itemId=" + GupShup.html.shop.vars.product.id);
};

GupShup.html.shop.getBigImageUrlFrom = function(url){
	var urrparts = GupShup.util.getFileAndExtension(url);
	return urrparts.name + "Big." + urrparts.ext;
};

GupShup.html.shop.validateShopForm = function(){

	GupShup.forms.controls.hideNotification();
	
	var delDetails = GupShup.html.shop.vars.product.showDeliveryDetails;
	var custDetails = GupShup.html.shop.vars.product.isCustomizable;
	var vars = GupShup.html.shop.vars;
	if(custDetails)
	{
		var quantity = vars.qtyCtrl.getValue();
		if(quantity < 1 || isNaN(quantity))
		{
			vars.qtyCtrl.showNotification(GupShup.html.errorMessages.invalidQuantity,{failure:true,position:'right'});
			return false;;
		}
	}
	
	if(delDetails)
	{
		var fName = vars.fNameCtrl.getValue();
		var lName = vars.lNameCtrl.getValue();
		var address = vars.addressCtrl.getValue();
		var city = vars.cityCtrl.getValue();
		var state = vars.stateCtrl.getValue();
		var pinCode = vars.pinCodeCtrl.getValue();
		if(lName.length < 1)
		{
			vars.lNameCtrl.showNotification(GupShup.html.errorMessages.blankLastName,{failure:true,position:'right'});
			return false;
		}		
		if(fName.length < 1)
		{
			vars.fNameCtrl.showNotification(GupShup.html.errorMessages.blankFirstName,{failure:true,position:'right'});
			return false;
		}
		if(address.length < 1)
		{
			vars.addressCtrl.showNotification(GupShup.html.errorMessages.blankAddress,{failure:true,position:'right'});
			return false;
		}
		if(city.length < 1)
		{
			vars.cityCtrl.showNotification(GupShup.html.errorMessages.blankCity,{failure:true,position:'right'});
			return false;
		}				
		if(state.length < 1)
		{
			vars.stateCtrl.showNotification(GupShup.html.errorMessages.blankState,{failure:true,position:'right'});
			return false;
		}
		if(pinCode.length < 1)
		{
			vars.pinCodeCtrl.showNotification(GupShup.html.errorMessages.blankPinCode,{failure:true,position:'right'});
			return false;
		}
		if(isNaN(pinCode))
		{
			vars.pinCodeCtrl.showNotification(GupShup.html.errorMessages.invalidPinCode,{failure:true,position:'right'});
			return false;
		}
	}
	return true;
}
})();

(function(){
GupShup.html.shop.map = {};
GupShup.html.shop.map.methods = {
	
	getSuperCatExpansion : function(catDetails){
		return GupShup.util.expandTemplate(GupShup.util.getInnerHTML('shopCatItemContentTemplate'), GupShup.html.shop.map.shopCatItemTemplate, [catDetails]);
	},
	
	getSubCatExpansion : function(subCatList, data){
		if(subCatList.length < 1)
			return "";
		else
		{
			var op = "";
			for(var i = 0; i < subCatList.length ; i++)
			{
				subCatList[i].catDetails.parentId = data.catDetails.id;
				
				if(subCatList[i].childCategories.length > 0)
				{
					op += GupShup.util.expandTemplate(GupShup.util.getInnerHTML('shopCatTemplate'), GupShup.html.shop.map.shopCatTemplate, [subCatList[i]]);
				}
				else
				{
						op += GupShup.util.expandTemplate(GupShup.util.getInnerHTML('shopCatItemTemplate'), GupShup.html.shop.map.shopCatItemTemplate, [subCatList[i].catDetails]);
				}
			}
			return op;
		}
	},
	
	getSavedCost : function(actual, data){
		var actualCost = GupShup.html.shop.map.methods.getDefaultActualCost(actual, data);
		var cost = GupShup.html.shop.map.methods.getDefaultCost(data.cost, data);
		return (actualCost - cost);
	},
	
	getSelectedItem : function(id, data){
		GupShup.html.shop.vars.product = data;
		for(var i = 0; i < data.attributes.length; i++)
		{
			if(data.attributes[i].name == "bigImageUrl")
				GupShup.html.shop.vars.bigImageUrl = true;
		}
		var html = GupShup.util.expandTemplate(GupShup.util.getInnerHTML('shopItemTemplate'), GupShup.html.shop.map.shopItemTemplate, [data]);
		return html;	
	},
	
	getOtherAttrs: function(attrs, data){
		
		var html = "";
		for(var i = 0; i < attrs.length; i++)
		{
			if(typeof GupShup.html.shop.vars.productAttrs[attrs[i].name] == 'undefined')
				GupShup.html.shop.vars.productAttrs[attrs[i].name] = attrs[i].values;
			
			if(attrs[i].hidden == true)
				continue;
				
			html += GupShup.util.expandTemplate(GupShup.util.removeHTMLComments(GupShup.util.getInnerHTML('shopItemAttrNameTemplate')), GupShup.html.shop.map.shopItemAttrNameTemplate, [attrs[i]]);
		}
		
		return html;
	},
	
	getAttrsValues: function(values, data){
		var html = GupShup.util.expandTemplate(GupShup.util.removeHTMLComments(GupShup.util.getInnerHTML('shopItemAttrValTemplate')), GupShup.html.shop.map.shopItemAttrValTemplate, values);
		return html;
	},
	
	getCustomisationDetails: function(isCustomizable, data){
		var html = isCustomizable ? GupShup.util.expandTemplate(GupShup.util.removeHTMLComments(GupShup.util.getInnerHTML('shopSelectedItemCustomizeTemplate')), GupShup.html.shop.map.shopSelectedItemCustomizeTemplate, [data]) : "";
		return html;
	},
	
	getDelvDetails: function(showDelvDetails, data){
		var html = showDelvDetails ? GupShup.util.expandTemplate(GupShup.util.removeHTMLComments(GupShup.util.getInnerHTML('shopSelectedItemDeliveryTemplate')), GupShup.html.shop.map.shopSelectedItemDeliveryTemplate, [data]) : "";
		return html;
	},
	
	selectCostTemplate : function(data){
		return (data.actualCost == data.cost) ? 1 : 0;
	},
	
	isDefaultAttr : function(isDefault){
		return (isDefault == true) ? 'selected="true"' : '';
	},
	
	getQtyClass : function(showQty){
		return (showQty == true) ? '' : 'template';
	},
	
	getDefaultActualCost : function(cost, data){
		if(typeof data.defaultActualCost != "undefined")
			return data.defaultActualCost;
		else
			return cost;
	},

	getDefaultCost : function(cost, data){
		if(typeof data.defaultCost != "undefined")
			return data.defaultCost;
		else
			return cost;
	},
	
	getDefaultImage : function(imageUrl, data){
		if(typeof data.defaultImageUrl != "undefined")
			return data.defaultImageUrl;
		else
			return imageUrl;
	},
	
	getBigImageClass : function(id, data){
		if(GupShup.html.shop.vars.bigImageUrl)
			return "shopItemPreviewLink"
		else
			return "template";
	},
	
	getBigImage : function(imageUrl, data){
		if(GupShup.html.shop.vars.bigImageUrl)
			return GupShup.html.shop.getBigImageUrlFrom(imageUrl);
		else
			return imageUrl;
	},
	
	getClearBothDiv : function(id, data, pos){
		if(pos%3 == 2)
			return '<div style="clear:both"></div>';
		else
			return "";
	},
	
	isPremiumGroup : function(type){
		if(type == "PREMIUM_GROUP")
			return true;
		return false;
	},
	
	getPageName : function(type){
		if(type == "PREMIUM_GROUP")
			return 'groups/';
		return 'buy';
	},

	getItemUIdHolder : function(type){
		if(type == "PREMIUM_GROUP")
			return 'entityName';
		return 'itemId';
	},

	getItemUName : function(type, data){
		if(type == "PREMIUM_GROUP")
			return data.name;
		return data.id;
	},
	
	getFeaturedShopCatHeaderExpansion : function(cat){
		return GupShup.util.expandTemplate(GupShup.util.getInnerHTML('shopFeaturedContentHeaderTemplate'), GupShup.html.shop.map.shopCatItemTemplate, [cat.catDetails]);
	},
	
	getFeaturedShopContentExpansion : function(products){
		return GupShup.util.expandTemplate(GupShup.util.getInnerHTML('shopItemTemplate'), GupShup.html.shop.map.shopItemTemplate, products);
	}

};
GupShup.html.shop.map.shopCatItemTemplate = [
											{key:'$ID$', dataMember:'id'},
											{key:'$PID$', dataMember:'parentId'},
											{key:'$CAT_TITLE$',dataMember:'displayName'}
										];
GupShup.html.shop.map.shopCatTemplate = [
											{key:'$ID$', dataMember:'catDetails.id'},
											{key:'$SUPER_CAT_EXPANSION$', dataMember:'catDetails', dataProcessor: GupShup.html.shop.map.methods.getSuperCatExpansion},
											{key:'$SUBCATLIST$', dataMember:'childCategories', dataProcessor: GupShup.html.shop.map.methods.getSubCatExpansion}
										];
										
GupShup.html.shop.map.shopItemCostTemplate = [
											{key:'$ORIG_COST$',dataMember:'actualCost', dataProcessor: GupShup.html.shop.map.methods.getDefaultActualCost},
											{key:'$OUR_COST$',dataMember:'cost', dataProcessor: GupShup.html.shop.map.methods.getDefaultCost}
										];
										
GupShup.html.shop.map.shopItemTemplate = [
											{key:'$ID$', dataMember:'id'},
											{key:'$TITLE$',dataMember:'displayName'},
											{
												key:'$COST_INFO$',
												templateSelector: GupShup.html.shop.map.methods.selectCostTemplate,
												templateOptions:
												[
													{
														tmplDivId: 'shopItemSavedCostTemplate',
														tmplMap : GupShup.html.shop.map.shopItemCostTemplate
													},
													{
														tmplDivId: 'shopItemDefaultCostTemplate',
														tmplMap : GupShup.html.shop.map.shopItemCostTemplate
													}
												]
											},
											{key:GupShup.util.getPlaceHolderUrl('$PIC_SRC$'),dataMember:'imageUrl', dataProcessor: GupShup.html.shop.map.methods.getDefaultImage},
											{key:'$SAVED$', dataMember:'actualCost', dataProcessor: GupShup.html.shop.map.methods.getSavedCost},
											{key:'$BIG_IMAGE_URL$',dataMember:'imageUrl', dataProcessor: GupShup.html.shop.map.methods.getBigImage},
											{key:'$BIG_IMAGE_CLASS$', dataMember:'id', dataProcessor: GupShup.html.shop.map.methods.getBigImageClass},
											{key:'$CLEAR_BOTH$', dataMember:'id', dataProcessor: GupShup.html.shop.map.methods.getClearBothDiv},
											{key:'$NAME$', dataMember:'name'},
											{key:'$IS_PREMIUM$', dataMember:'type', dataProcessor: GupShup.html.shop.map.methods.isPremiumGroup},
											{key:'$ITEM_UID_HOLDER$', dataMember:'type', dataProcessor: GupShup.html.shop.map.methods.getItemUIdHolder},
											{key:'$ITEM_UNAME$', dataMember:'type', dataProcessor: GupShup.html.shop.map.methods.getItemUName},
											{key:'$PAGE_NAME$', dataMember:'type', dataProcessor: GupShup.html.shop.map.methods.getPageName}
										];

GupShup.html.shop.map.shopSelectedItemDeliveryTemplate = [
											{key:'$ID$', dataMember:'id'}
										];

GupShup.html.shop.map.shopSelectedItemCustomizeTemplate = [
											{key:'$ID$', dataMember:'id'},
											{key:'$OUR_COST$',dataMember:'cost', dataProcessor: GupShup.html.shop.map.methods.getDefaultCost},
											{key:'$SHOW_QTY$',dataMember:'showQty', dataProcessor: GupShup.html.shop.map.methods.getQtyClass},
											{key:'$OTHER_ATTRS$',dataMember:'attributes', dataProcessor: GupShup.html.shop.map.methods.getOtherAttrs}
										];

										
GupShup.html.shop.map.shopSelectedItemTemplate = [
											{key:'$ID$', dataMember:'id'},
											{key:'$CUSTOM_DETAILS$', dataMember:'isCustomizable', dataProcessor: GupShup.html.shop.map.methods.getCustomisationDetails},
											{key:'$DELV_DETAILS$', dataMember:'showDeliveryDetails', dataProcessor: GupShup.html.shop.map.methods.getDelvDetails},
											{key:'$SELECTED_ITEM$',dataMember:'id', dataProcessor: GupShup.html.shop.map.methods.getSelectedItem},
											{key:'$TITLE$',dataMember:'displayName'},
											{key:'$DESCR$', dataMember:'longDescr', dataProcessor: GupShup.util.htmlDecode},
											{key:'$OUR_COST$',dataMember:'cost'},
											{key:'$DEFAULT_ATTR_VAL_ID$',dataMember:'defaultAttrValId'}
										];

GupShup.html.shop.map.shopItemAttrNameTemplate = [
											{key:'$NAME$', dataMember:'name'},
											{key:'$DISPLAY_NAME$', dataMember:'displayName'},
											{key:'$OPTIONS$',dataMember:'values', dataProcessor: GupShup.html.shop.map.methods.getAttrsValues}
										];
GupShup.html.shop.map.shopItemAttrValTemplate = [
											{key:'$VAL$', dataMember:'value'},
											{key:'$VAL_ID$', dataMember:'id'},
											{key:'$SELECTED$', dataMember:'isDefault', dataProcessor: GupShup.html.shop.map.methods.isDefaultAttr}
										];
GupShup.html.shop.map.featuredShopContent = [
													{key:'$SHOP_CONTENT_SUB_HEADER$', dataMember:'category', dataProcessor: GupShup.html.shop.map.methods.getFeaturedShopCatHeaderExpansion},
													{key:'$SHOP_CONTENT_UNITS$', dataMember:'products', dataProcessor: GupShup.html.shop.map.methods.getFeaturedShopContentExpansion},
											];
										
})();