﻿//---------------------------------------------------------------------
// Author:		Marc van Heugten
// Date:		16-01-2004
// Description: Validates if the ProductNumber and Quantity text boxes are filled
// Reference:	TD Webshop 300
// Modified:    13 Feb 2009 William Daugherty ITG -
//              to be used with the new quick order control
//---------------------------------------------------------------------
function ProductAndQuantityFilled(MaxRowCount, errorMessage, MinChar, MinCharErrorMessage)
{
//	//---------------------------------------------------------------------
//	// String that builds the message 
//	//---------------------------------------------------------------------
//	var strMessage = '';
	//frmQuickOrder.txtProductNumber.value = TrimString(frmQuickOrder.txtProductNumber.value);
	//frmQuickOrder.txtQuantity.value = TrimStringAll(frmQuickOrder.txtQuantity.value);

//	if (frmQuickOrder.txtProductNumber.value == '')
//	{
//		strMessage += '- ' + frmQuickOrder.txtProductNumberAlert.value + String.fromCharCode(10);
//	}

//	if (frmQuickOrder.txtQuantity.value == '')
//	{
//		strMessage += '- ' + frmQuickOrder.txtQuantityAlert.value;
//	}


    //---------------------------------------------------------------------
	// String that builds the message 
	//---------------------------------------------------------------------
	var strMessage = '';
	
	var txtProductNumber;
	var txtQuantity;
	
	for (var i = 0; i < MaxRowCount; i++)
	{
	    //Get Controls 
	    txtProductNumber = document.getElementById("txtProductNumber" + i);
	    txtQuantity = document.getElementById("txtQuantity" + i);
	    var text = txtProductNumber.value.length;
	    //First row must be filled
	    if (i == 0 && txtProductNumber.value.length < MinChar)
	    {
	        strMessage = MinCharErrorMessage;
	        //don't check any more
	        break;
	    }
	    //Check to see if row has a product number
	    if (txtProductNumber.value != "")
	    {
	        //Check to see if the minimum number of characters hae been entered.
	        if (txtProductNumber.value.length >= MinChar)
	        {
	            //Input validation: if number is filled then there should be a quantity
	            if (txtQuantity.value == "")
	            {
	                strMessage = errorMessage;
	            }
	        }
	        else
	        {
	            strMessage = MinCharErrorMessage;
	        }
	    }
	}
	//---------------------------------------------------------------------
	// Show message
	//---------------------------------------------------------------------
	if (strMessage != '')
	{
		alert(strMessage);
		return false;
	}
	else
	{
		//DisableButton(btnClicked);
		//__doPostBack(btnClicked.name,'')
		return true;
	}
}

//---------------------------------------------------------------------
// Author:		Tim Lindelauf
// Date:		20-05-2005
// Description: This function trims a string
// Input:		str - a string to trim
// Output: 
// Reference:	TD Webshop 300
//---------------------------------------------------------------------
function TrimString (str) {
  str = this != window? this : str;
  return str.replace(/^\s+/g, "").replace(/\s+$/g, "");
}

function TrimStringAll (str) {
   str = this != window? this : str;
   return str.replace(/^\s+/, "").replace(/\s+$/, "").replace(/\s+/g, "");
}

var asyncThreadCount = 0;

function ValidatePartNumber (txtProductNumber, rowIndex, MinChar, MinCharMessage)
{
    var hdnCurrentRowIndex = document.getElementById(_hdnCurrentRowIndex);
    hdnCurrentRowIndex.value = rowIndex;
    
    if (txtProductNumber.value.length == 0)
    {
        //don't do anything ignore
    }
    else if (txtProductNumber.value.length >= MinChar)
    {
        //increment thread count and disable button
        if (asyncThreadCount === 0)
        {
            var cmdAddToBasket = document.getElementById(_cmdAddToBasket);
            cmdAddToBasket.disabled = true;
        }
        asyncThreadCount += 1;
        
        var partNumber = txtProductNumber.value;
        var txtProductType = document.getElementById("txtProductType" + rowIndex);
        var imgProcessing = document.getElementById(_imgWaitProcessing);
        imgProcessing.style.visibility = "visible";
        var context = new Array(txtProductType, txtProductNumber.value, rowIndex);
        WS.Webshop.UI.Order.QuickOrderWebService.ValidatePartNumber(partNumber, ValidatePartNumberSucess, ValidatePartNumberFail, context);
    }
    else
    {
        alert(MinCharMessage);
        txtProductNumber.focus();
    }
}

function ValidatePartNumberSucess(res, context)
{
    //decrement asyncThreadCount and if 0 then enable button
    asyncThreadCount -= 1;
    if (asyncThreadCount <= 0)
    {
        //set it to zero just to make sure it never becomes negative
        asyncThreadCount = 0;
        //enable button
        var cmdAddToBasket = document.getElementById(_cmdAddToBasket);
        cmdAddToBasket.disabled = false;
    }
    
    //alert(res);
    var txtProductType = context[0];
    var productNumber = context[1];
    var rowIndex = context[2];
    var nextRow = rowIndex + 1;
    var litQuickOrderErrorMessage = document.getElementById(_litQuickOrderErrorMessage);
    var statusImg = document.getElementById('imgProductIssue' + rowIndex);
    
    //hide processing image
    var imgProcessing = document.getElementById(_imgWaitProcessing);
    imgProcessing.style.visibility = "hidden";
        
    //clear error message
    litQuickOrderErrorMessage.innerHTML = "";
    
    switch (res){
//        case "HagemeyerPartNumber":
//        {
//            //Set hidden field to denote Hagemeyer part number
//            txtProductType.value = "HagemeyerPartNumber";
//            if (nextRow < MaxRows)
//            {
//                var txtNextProductNumber = document.getElementById("txtProductNumber" + nextRow);
//                txtNextProductNumber.disabled = false;
//                txtNextProductNumber.style.backgroundColor = "";
//                var txtNextQuantity = document.getElementById("txtQuantity" + nextRow);
//                txtNextQuantity.disabled = false;
//                txtNextQuantity.style.backgroundColor = "";
//            }
//            break;
//        }
//        case "CustomerPartNumber":
//        {
//            //Set hidden filed to denote Customer part number
//            txtProductType.value = "CustomerPartNumber";
//            if (nextRow < MaxRows)
//            {
//                var txtNextProductNumber = document.getElementById("txtProductNumber" + nextRow);
//                txtNextProductNumber.disabled = false;
//                txtNextProductNumber.style.backgroundColor = "";
//                var txtNextQuantity = document.getElementById("txtQuantity" + nextRow);
//                txtNextQuantity.disabled = false;
//                txtNextQuantity.style.backgroundColor = "";
//            }
//            break;
//        }
        case "NO PRODUCTS FOUND":
        case "MORE THAN ONE FOUND":
        {
            //TODO Show wait timer and do Lucene search
            //SearchForPartNumber(productNumber, rowIndex);
            statusImg.src = strPartNumNeedsAttnImagePath;
            statusImg.title = strRowIssueResolveText;
            statusImg.style.visibility = 'visible'
            break;
        }
        default:
        {
            //Set hidden filed to denote Customer part number
            txtProductType.value = res;
            if (nextRow < MaxRows)
            {
                var txtNextProductNumber = document.getElementById("txtProductNumber" + nextRow);
                txtNextProductNumber.disabled = false;
                txtNextProductNumber.style.backgroundColor = "";
                var txtNextQuantity = document.getElementById("txtQuantity" + nextRow);
                txtNextQuantity.disabled = false;
                txtNextQuantity.style.backgroundColor = "";
            }
            break;
        }
    }
}

function ValidatePartNumberFail(res)
{
    //decrement asyncThreadCount and if 0 then enable button
    asyncThreadCount -= 1;
    if (asyncThreadCount <= 0)
    {
        //set it to zero just to make sure it never becomes negative
        asyncThreadCount = 0;
        //enable button
        var cmdAddToBasket = document.getElementById(_cmdAddToBasket);
        cmdAddToBasket.disabled = false;
    }
    //alert(res);
}

function SearchForPartNumber(partNumber, rowIndex)
{
    var hdnCurrentRowIndex = document.getElementById(_hdnCurrentRowIndex);
    hdnCurrentRowIndex.value = rowIndex;
    var imgProcessing = document.getElementById(_imgWaitProcessing);
    imgProcessing.style.visibility = "visible";
    WS.Webshop.UI.Order.QuickOrderWebService.SearchForPartNumber(partNumber, rowIndex, SearchForPartNumberOnSucess, SearchForPartNumberOnFail);
}

function SearchForPartNumberOnSucess(res)
{
    var btnShowItemSelect = document.getElementById(_btnShowItemSelect);
    var btnShowSearchRedirect = document.getElementById(_btnShowSearchRedirect);
    var litQuickOrderErrorMessage = document.getElementById(_litQuickOrderErrorMessage);
    var hdnCurrentRowIndex = document.getElementById(_hdnCurrentRowIndex);
    var statusImg = document.getElementById('imgProductIssue' + hdnCurrentRowIndex.value);
    
    //clear error message
    //litQuickOrderErrorMessage.innerHTML = "";
    
    //Determine the results of the search
    switch(res[0])
    {
        case "DISPLAYSELECTMODALPOPUP":
        {
            btnShowItemSelect.click();
            break;
        }
        case "DISPLAYSEARCHMODALPOPUP":
        {
            btnShowSearchRedirect.click()
            break;
        }
        case "NOPRODUCTSFOUND":
        default:
        {
            //Show error message for no products found
            //litQuickOrderErrorMessage.innerHTML = res[1];
            statusImg.src = strPartNumNotFoundImagePath;
            statusImg.title = strRowNoMatchText;
            break;
        }
    }
    var imgProcessing = document.getElementById(_imgWaitProcessing);
    imgProcessing.style.visibility = "hidden";
}

function SearchForPartNumberOnFail(res)
{
    //alert(res);
}

function updateProductNumber(productNumber)
{
    var arrProductNumbers = new Array();
    arrProductNumbers = productNumber.split("_");
    
    //Get current row index
    
    var rowIndex = document.getElementById(_hdnCurrentRowIndex).value;
    if (rowIndex != null)
    {
        var txtProductNumber = document.getElementById("txtProductNumber" + rowIndex);
        var txtProductType = document.getElementById("txtProductType" + rowIndex);
        
        txtProductType.value = productNumber;
        if (arrProductNumbers[0] != "")
        {
            txtProductNumber.value = arrProductNumbers[0];
            //txtProductType.value = "HagemeyerPartNumber";
        }
        else
        {
            txtProductNumber.value = arrProductNumbers[1];
            //txtProductType.value = "CustomerPartNumber";
        }
        //hide the status icon
        var statusImg = document.getElementById("imgProductIssue" + rowIndex);
        statusImg.style.visibility = 'hidden';
    }
    //set control focus
    var txtQuantity = document.getElementById("txtQuantity" + rowIndex);
    txtQuantity.focus();
    
    //enable the next row
    var nextRow = parseInt(rowIndex) + 1;
    if (nextRow < MaxRows)
    {
        var txtNextProductNumber = document.getElementById("txtProductNumber" + (nextRow));
        txtNextProductNumber.disabled = false;
        txtNextProductNumber.style.backgroundColor = "";
        var txtNextQuantity = document.getElementById("txtQuantity" + (nextRow));
        txtNextQuantity.disabled = false;
        txtNextQuantity.style.backgroundColor = "";
    }
            
    //hide modal popup
    var mpeQuickOrderItemSelect = $find("mpeQuickOrderItemSelect");
    mpeQuickOrderItemSelect.hide();
}

function CancelmpeQuickOrderItemSelect()
{
    //Get current row
    var rowIndex = document.getElementById(_hdnCurrentRowIndex).value;
    
    //Get txt controls for row
    var txtProductNumber = document.getElementById("txtProductNumber" + rowIndex);
    
    //emtpy text box and give it focus
    txtProductNumber.value = "";
    txtProductNumber.focus();
}