// start ProductItemDisplaySetup.js
function ScreenStateObj(formPrefix) {
	// properties
	this.busy = false;
	this.formPrefix = formPrefix;
	// Methods
	this.Add2ShopCart = Add2ShopCart;
	this.NpAdd2ShopCart = NpAdd2ShopCart;
	this.NpAdd2ShopList = NpAdd2ShopList;
	this.shoppingListAddSuccess = shoppingListAddSuccess;
	this.shoppingListAddError = shoppingListAddError;
	this.validateProdForm = validateProdForm;
	this.addProductToCart = addProductToCart;
	this.updateDashCart = updateDashCart;
	this.updatePricing = updatePricing;
}

function Add2ShopCart(form, catEntryId, catEntryQuantity)
{
       if (!this.busy) {
              this.busy = true;
              form.action="OrderItemAdd";
              form.catEntryId.value = catEntryId;
              form.quantity.value = catEntryQuantity;
              form.errorViewName.value = "CatalogItemAddErrorView";
              form.URL.value='SetPendingOrder?item_quantity*=&URL=OrderCalculate?URL=OrderItemDisplay&updatePrices=1&calculationUsageId=-1&orderId=.';
              form.submit();
       }
}
function NpAdd2ShopCart(form, catEntryId, catEntryQuantity, customLengthQty, URLbase)
{
	if (this.validateProdForm() && !this.busy) 
	{
    	this.busy = true;
    	var originalUrl = URLbase;
        form.action="OrderItemAdd";
        form.catEntryId.value = catEntryId;
        form.quantity.value = catEntryQuantity;
        if(customLengthQty != 0) {
	        form.field1.value = customLengthQty;
        } else {
        	form.field1.value = "";
        }
        form.errorViewName.value = "CatalogItemAddErrorView";
        form.addType.value = "shopCart";
        form.URL.value='SetPendingOrder?item_quantity*=&URL=OrderCalculate?URL=' + originalUrl;
        form.submit();
	}
}
function NpAdd2ShopList(form, catEntryId, catEntryQuantity, customLengthQty, shopListId, userId, URLbase)
{
	if (this.validateProdForm() && !this.busy) 
	{
		this.busy = true;
		// Show loading image on AJAX calls
		$("#cartLoading").ajaxStart(function(){
		   $(this).show();
		});
		$("#cartLoading").ajaxStop(function(){
		   $(this).hide();
		}); 
		var originalUrl = URLbase;
		form.catEntryId.value = catEntryId;
		form.quantity.value = catEntryQuantity;
		if(customLengthQty != 0) {
		    form.field1.value = customLengthQty;
		} 
		else {
			form.field1.value = "";
		}
		form.addType.value = "shopList";

		var storeId = form.storeId.value;
		var catalogId = form.catalogId.value;
		var langId = form.langId.value;
		
		var dataString = "";    	
		if(shopListId.length == 0)
		{
			dataString='langId='+ langId +'&storeId=' + storeId + '&catalogId=' + catalogId + '&catEntryId_1=' + catEntryId + '&quantity_1=' + catEntryQuantity + '&field1_1=' + customLengthQty + '&orderDesc=ShoppingList' + userId + '&status=Y&URL=' + originalUrl;
			
        } else
        {
        	dataString='langId='+ langId +'&storeId=' + storeId + '&catalogId=' + catalogId + '&catEntryId_1=' + catEntryId + '&quantity_1=' + catEntryQuantity + '&field1_1=' + customLengthQty + '&requisitionListId=' + shopListId + '&status=Y&URL=' + originalUrl;
        }		

	  // Make Ajax Call to Add Item to ShoppingList
       $.ajax({
		   type: "GET",
		   url: "CustomShoppingListItemAddCmd",
		   data: dataString,
		   dataType: "json",
		   success: this.shoppingListAddSuccess,
		   error: this.shoppingListAddError
       });
       // Unblock the block the browser from other requests.
	   this.busy=false;
 	} // End !busy and prodValidation()
}
function shoppingListAddSuccess(response,status)  {
	if(typeof response.requisitionListId != "undefined" )  {
		$.nyroModalManual ({
			content: "<div style=\"width: 100%; margin: auto; padding: 50px;\">"  + $("#shoppingListModalText").html() + " <div>"
		});
	} else {
		$.nyroModalManual ({
			content: "<div style=\"width: 100%; margin: auto; padding: 50px;\"> Error adding item to shopping list</div>"
		});		   
	}
}
function shoppingListAddError(response,status){
	$.nyroModalManual ({
		content: "<div style=\"width: 100%; margin: auto; padding: 50px;\"> Error adding item to shopping list</div>"
	});		  
}
function Add2RFQ(form) {
	if (form.Type[0].checked) {
		form.action="RFQCreateDisplay?endresult=0";
	} else 	{
		form.action="AddToExistRFQListDisplay?isContract=Y";
	}
	form.submit();		
}
function validateProdForm()
{
	resetValidation();
	var hasErrors = false;
	// Verify it has skus
	hasItemsSelector = $('#' + this.formPrefix + 'OrderItemAddForm input[id=hasItems]');
	if(hasItemsSelector.size() > 0 && hasItemsSelector.val() === "true") { 
		if(this.skuSelector.hasSizes) {
			if(this.skuSelector.selectedSize === "") {
				// This assumes that the error_messages for the sku selector is positioned after all other error_messages div's
				// This could be a faulty assumption.
				insertErrorMessage("Please choose a size.","last");
				massAddClassName('val_' + this.formPrefix + 'skuSize');
				hasErrors = true;
			}
		}
		if(this.skuSelector.hasColors) {
			if(this.skuSelector.selectedColor === "") {
				var msg = 'Please choose a  color.';
				if(location.href.match(/langId=-11/) || location.href.match(/_-11/)) //match uk langId
 				{
 					msg = 'Please choose a colour.';
 				}
				insertErrorMessage(msg,"last");
				massAddClassName('val_' + this.formPrefix + 'skuColor');
				hasErrors = true;
			}
		}
		if(this.skuSelector.hasMufs) {
			if(this.skuSelector.selectedMuf === "" ) {
				insertErrorMessage("Please choose a Style.","last");
				massAddClassName('val_' + this.formPrefix  + 'skuMuf');
				hasErrors = true;
			}
		}
	}	
	// validate quantitiy
	var catEntryQtySelector = $('#' + this.formPrefix + 'OrderItemAddForm input[id=item_quantity]');
	if(catEntryQtySelector.size() > 0)
	{
		var catEntryVal = parseInt(catEntryQtySelector.val(),10);
		if(isNaN(catEntryVal) || parseFloat(catEntryQtySelector.val()) < 1 || catEntryQtySelector.val() == '')
		{
			msg = 'Please enter a valid quantity.';
			insertErrorMessage(msg,"last");
			var valElm = 'val_' + this.formPrefix + 'quantity';
			var classes = new Array(validationBorderCSSClasses[0]);
			massAddClassName(valElm,classes);
			hasErrors=true;	
		} else {
			catEntryQtySelector.val(catEntryVal);
		}
	}
	// validate custom length
	var customLengthSelector = $('#' + this.formPrefix + 'OrderItemAddForm select[id=cust_length_qty]');
	// var custLengthQuantity = window.document.getElementById(formPrefix + 'cust_length_qty');
	if(customLengthSelector.size() > 0)
	{
		if(customLengthSelector.val() == "")
		{
			//alert('Please choose length.');
			msg = 'Please choose length.';
			insertErrorMessage(msg,"last");
			var valElm = 'val_' + this.formPrefix + 'length';
			var classes = new Array(validationBorderCSSClasses[0]);
			massAddClassName(valElm,classes);
			hasErrors=true;	
		}
	}
	return !hasErrors;
}
function addProductToCart() {
	if (this.validateProdForm() && !this.busy) {
    	this.busy = true;
    	// Show loading image on AJAX calls
		$("#cartLoading").ajaxStart(function(){
		   $(this).show();
		   
		});
		$("#cartLoading").ajaxStop(function(){
		   $(this).hide();
		}); 
        var requestMap = {};
		requestMap['storeId'] = $('#' + this.formPrefix + 'OrderItemAddForm input[id=storeId]').val();
		requestMap['catalogId'] = $('#' + this.formPrefix + 'OrderItemAddForm input[id=catalogId]').val();
		requestMap['langId'] = $('#' + this.formPrefix + 'OrderItemAddForm input[id=langId]').val();
		requestMap['catEntryId'] = $('#' + this.formPrefix + 'OrderItemAddForm input[id=itemCatentryId]').val();
		var customLength = $('#' + this.formPrefix + 'OrderItemAddForm select[id=cust_length_qty]').val();
		if (customLength == null || customLength == "undefined") {
			customLength = "";
		}
		requestMap['cust_length_qty'] = customLength;
		requestMap['orderId'] = ".";
		requestMap['quantity'] = $('#' + this.formPrefix + 'OrderItemAddForm input[id=item_quantity]').val();
		requestMap['requesttype'] = "ajax";
		// Call the ProductPricingControl service view
		$.ajax({
		   type: "POST",
		   url: "/webapp/wcs/stores/servlet/AjaxOrderChangeServiceItemAdd",
		   data: requestMap,
		   success: this.updateDashCart,
		   dataType: "json"
		 });
		 
		 this.busy = false;
	}
}

function updateDashCart(data, textStatus) {
   	if (data.orderItemId != null && data.orderItemId != 'undefined') {
   		window.location.hash = 'test';
   		$.nyroModalManual({ content: $("#productAddSuccess").html() });
   	}
   	if (data.errorMessageKey != null && data.errorMessageKey != 'undefined') {
   		$.nyroModalManual({ content: '<div style="width: 100%; margin: auto; padding: 50px;">An error has occurred: ' + data.errorMessageKey + '</div>'});
   	}
}

function updatePricing() {
	// Show loading image on AJAX calls
	$("#cartLoading").ajaxStart(function(){
	   $(this).hide();
	});
	$("#cartLoading").ajaxStop(function(){
	   $(this).hide();
	}); 
	var requestMap = {};
	requestMap['storeId'] = $('#' + this.formPrefix + 'OrderItemAddForm input[id=storeId]').val();
	requestMap['catalogId'] = $('#' + this.formPrefix + 'OrderItemAddForm input[id=catalogId]').val();
	requestMap['langId'] = $('#' + this.formPrefix + 'OrderItemAddForm input[id=langId]').val();
	requestMap['productId'] = $('#' + this.formPrefix + 'OrderItemAddForm input[id=productId]').val();
	requestMap['formPrefix'] = this.formPrefix;
	requestMap['priceItemCatalogEntryID']  = $('#' + this.formPrefix + 'OrderItemAddForm input[id=itemCatentryId]').val();
	requestMap['customLength'] = $('#' + this.formPrefix + 'OrderItemAddForm input[id=custom_length]').val();
	// Call the ProductPricingControl service view
	var pricingDataField = $('#' + this.formPrefix + 'pricingData');
	$.ajax({
	   type: "POST",
	   url: "/webapp/wcs/stores/servlet/ProductPricingControl",
	   data: requestMap,
	   success: function(data){
	     pricingDataField.html(data);
	   }
	 });
}