/*
Item{
	ID,
	(chr(28))
	Quantity,
	ItemCode,
	Description,
	Price,
	OneTime, 
	Modifiers:[{ID,PartNumber,Description,Price,OneTime}], 
	availableStock,
	allowBackOrder,
	inStockMsg,
	outStockMsg,
	Location,
	LocationName,
	Config:{
	    PartNo,
	    Enforce,
	    IncQuantity,
	    MinQuantity,
	    MaxQuantity,
	    CasePack
	}
	Error:{
		bitWise,
		validItem:{
			description,
			basePrice,
			active,
			qtyOnHand,
			allowBackOrder,
			modifiers:[{ID,description,priceOffset,oneTime}]
		}
	}        
}


************************************************************************************
Cart Script Global Variables Here
************************************************************************************
*/
var showLocation = true;
var itemIndexInProcess;
var JSON_DIV;
var JSON_TABLE;
var LOADING_DIV;
var ERROR_DIV;
var ERROR_DIV_CONTENT;
var IMGDEF_PREFIX;
var CART_ELEMENTS;
var QtyTimeout = {};
var PriceBreaks = {};

var actionCartId;
var actionCartNewName;

var errorDelimiter = String.fromCharCode(31);
var ASYNC_RET_SESSION_EXPIRES = -1;
var ASYNC_RET_OK = 0;
var ASYNC_RET_UNKNOWN = 1;

var C_eShopCnfgNo = 0;
var C_eShopCnfgYes = 1;
var C_eShopCnfgCheckProduct = 2;

//bitWise values for each element in the Cart display
var BW_CART_NAME = 1;
var BW_CART_PARTNO = 2;
var BW_CART_DESCRIPTION = 4;
var BW_CART_IMAGE = 8;
var BW_CART_ATTRIBUTES = 16;
var BW_CART_BACKORDER = 32;
var BW_CART_LINKPRODUCT = 64;
var BW_CART_PRODUCTSPECIFICMSG = 128;

//bitWise values for validation error codes
var BW_ERR_PRICE_CHANGED = 1;
var BW_ERR_STOCK_CHANGED = 2;
var BW_ERR_INACTIVE = 4;
var BW_ERR_MINQTY = 8;
var BW_ERR_MAXQTY = 16;
var BW_ERR_INCQTY = 32;
var BW_ERR_NOTPURCHASABLE = 64;
var BW_ERR_SKU_MIN = 128;
var BW_ERR_SKU_MAX = 256;
var BW_ERR_PARTNO_MIN = 512;
var BW_ERR_PARTNO_MAX = 1024;
var BW_ERR_PARTNO_DELETE = 2048;
var BW_ERR_ITEM_DELETE = 4096;

//enforce states
var ENFORCE_SKU = 1;
var ENFORCE_PARTNO = 2;

try{
var CSSRule = GetCSSPropVal([{sel:'body',prop:'fontWeight',key:'BodyFontWeight'}
                            ,{sel:'body',prop:'fontSize',key:'BodyFontSize'}
                            ,{sel:'.Error',prop:'color',key:'ErrorColor'}
                            ,{sel:'.FormButtons',prop:'fontSize',key:'FrmBtnFontSize'}
                            ,{sel:'.FormButtons',prop:'cursor',key:'FrmBtnCursor'}]);

}catch(e){}
/*
*************************************************************************************
Ajax Cart Handlers
*************************************************************************************
*/

var deleteHnd = function (){    
	if (ajax.readyState==1) {		
	}
	else{
		if (ajax.readyState==4){
			hideLoadingBox(LOADING_DIV);
			if (ajax.status==200){				
				var result = generalInteger(ajax.responseText);								
				/*if (result!=""){
					alert(result);
					hideLoadingBox(LOADING_DIV);
				}
				else{
					deleteJSONItem(itemIndexInProcess);						
				}*/
				switch (result){
					case ASYNC_RET_SESSION_EXPIRES : clearJSONCart();													
													 errorOut("Your session has expired.");
													 break;
					
					case ASYNC_RET_OK		   	   : deleteJSONItem(itemIndexInProcess);													 
													 break;
													 
					case ASYNC_RET_UNKNOWN		   : alert("Item could not be found in the cart. Please contact support to report this issue.");
													 break;
					
					default						   : alert("Internal error occurred. Please contact support to report this issue.");
													 break;
				}
			}
			else{
				if(ajax.status==404){
				   alert("Error: Invalid URL");				   
				}
				else{
				   alert("Error: "+ ajax.status);
				}				
			} 
		}
	}	
	
};


var updateHnd = function (){
	if (ajax.readyState==1) {		
	}
	else{
		if (ajax.readyState==4){
			hideLoadingBox(LOADING_DIV);
			if (ajax.status==200){				
				var result = ajax.responseText;				
				/*
				var newItem = eval('('+result+')')
				updateJSONCart(newItem);								
				*/
				var aryResponse = result.split(errorDelimiter);
				var errorCode = generalInteger(aryResponse[0]);
				var newItem = eval('('+aryResponse[1]+')');
				
				switch (errorCode){
					case ASYNC_RET_SESSION_EXPIRES : clearJSONCart();							
													 errorOut("Your session has expired.");
													 break;
					
					case ASYNC_RET_OK		   	   : updateJSONCart(newItem);
													 doAjax("/Commerce/CommerceManageCartAJAX.asp", "act=REBUILD", "GET", rebuildCartHnd);													 
													 break;
													 
					case ASYNC_RET_UNKNOWN		   : alert("Item could not be found in the cart. Please contact support to report this issue.");
													 break;
					
					default						   : alert("Internal error occurred. Please contact support to report this issue.");
													 break;
				}
			}
			else{
				if(ajax.status==404){
				   alert("Error: Invalid URL");				   
				}
				else{
				   alert("Error: "+ ajax.status);
				}				
			} 
		}
	}		

};


var changeItemQtyHnd = function (){
	if (ajax.readyState==1) {		
	}
	else{
		if (ajax.readyState==4){
			hideLoadingBox(LOADING_DIV);
			if (ajax.status==200){	
			    var result = ajax.responseText;			
				var aryResponse = result.split(errorDelimiter);
				var errorCode = generalInteger(aryResponse[0]);	
				/*
				if (result!=""){
					alert(result);						
				}
				else{	
					updateTotals(itemIndexInProcess);					
				}	
				hideLoadingBox(LOADING_DIV);
				*/
				switch (errorCode){
					case ASYNC_RET_SESSION_EXPIRES : clearJSONCart();
													 errorOut("Your session has expired.");
													 break;
					
					case ASYNC_RET_OK		   	   : updateTotals(itemIndexInProcess); //updateJSONCart(newItem);
													 break;
													 
					case ASYNC_RET_UNKNOWN		   : alert("Item could not be found in the cart. Please contact support to report this issue.");
													 break;
					
					default						   : alert("Internal error occurred. Please contact support to report this issue.");
													 break;
				}
			}
			else{
				if(ajax.status==404){
				   alert("Error: Invalid URL");
				}
				else{
				   alert("Error: "+ ajax.status);
				}				
			} 
		}
	}		

};

var validateProdCnfgData = function (){
	if (ajax.readyState==1) {		
	}
	else{
		if (ajax.readyState==4){
			hideLoadingBox(LOADING_DIV);
			if (ajax.status==200){	
			    var result = ajax.responseText;			
				var aryResponse = result.split(errorDelimiter);
				var errorCode = generalInteger(aryResponse[0]);	
				switch (errorCode){
					case ASYNC_RET_SESSION_EXPIRES : clearJSONCart();
													 errorOut("Your session has expired.");
													 break;
					
					case ASYNC_RET_OK		   	   : alert(aryResponse);
													 break;
													 
					case ASYNC_RET_UNKNOWN		   : alert("Item could not be found in the cart. Please contact support to report this issue.");
													 break;
					
					default						   : alert("Internal error occurred. Please contact support to report this issue.");
													 break;
				}
			}
			else{
				if(ajax.status==404){
				   alert("Error: Invalid URL");
				}
				else{
				   alert("Error: "+ ajax.status);
				}				
			} 
		}
	}		

};


var clearCartHnd = function (){
	if (ajax.readyState==1) {		
	}
	else{
		if (ajax.readyState==4){
			hideLoadingBox(LOADING_DIV);
			if (ajax.status==200){				
				var result = generalInteger(ajax.responseText);								
				/*
				if (result!=""){
					alert(result);
					hideLoadingBox(LOADING_DIV);
				}
				else{			
					clearJSONCart();				
				}
				*/
				switch (result){
					case ASYNC_RET_SESSION_EXPIRES : clearJSONCart();
													 errorOut("Your session has expired.");
													 break;
					
					case ASYNC_RET_OK		   	   : clearJSONCart();											 
													 break;													
					
					default						   : alert("Internal error occurred. Please contact support to report this issue.");
													 break;
				}
			}
			else{
				if(ajax.status==404){
				   alert("Error: Invalid URL");				   
				}
				else{
				   alert("Error: "+ ajax.status);
				}				
			} 
		}
	}		

};


var renameCartHnd = function (){
	if (ajax.readyState==1) {		
	}
	else{
		if (ajax.readyState==4){
			 hideLoadingBox(LOADING_DIV);
			if (ajax.status==200){				
				var result = ajax.responseText;	
				var aryResponse = result.split(errorDelimiter);
				var errorCode = generalInteger(aryResponse[0]);
				var cartLabelExists = eval('('+aryResponse[1]+')');
				/*
				if (result=="Error"){
					alert("Unable to check for name conflicts at this time. Contact support before trying to save your cart again.");
					hideLoadingBox(LOADING_DIV);
				}
				else{	
					if (result=="False"){
						renameCart_AJAXResponse();						
					}
					else{						
						hideLoadingBox(LOADING_DIV);
						alert("There is another cart named \""+ actionCartNewName +"\". Please use another name to properly save this cart.");	
					}
				}
				*/
				switch (errorCode){
					case ASYNC_RET_SESSION_EXPIRES : clearJSONCart();
													 errorOut("Your session has expired.");
													 break;
					
					case ASYNC_RET_OK		   	   : if (cartLabelExists){
														 alert("There is another cart named \""+ actionCartNewName +"\". Please use another name to properly save this cart.");	 
													 }
													 else{
														  renameCart_AJAXResponse();		
													 }
													 break;													
					
					default						   : alert("Unable to check for name conflicts at this time. Contact support before trying to rename your cart again.");
													 break;
				}				
			}
			else{
				if(ajax.status==404){
				   alert("Error: Invalid URL");				  
				}
				else{
				   alert("Error: "+ ajax.status);
				}				
			} 
		}
	}		

};


var saveCartHnd = function (){
	if (ajax.readyState==1) {		
	}
	else{
		if (ajax.readyState==4){
			hideLoadingBox(LOADING_DIV);
			if (ajax.status==200){				
				var result = ajax.responseText;	
				var aryResponse = result.split(errorDelimiter);
				var errorCode = generalInteger(aryResponse[0]);
				var cartLabelExists = eval('('+aryResponse[1]+')');
				/*
				if (result=="Error"){
					alert("Unable to check for name conflicts at this time. Contact support before trying to save your cart again.");
					hideLoadingBox(LOADING_DIV);
				}
				else{	
					if (result=="False"){
						saveCart_AJAXResponse();						
					}
					else{						
						hideLoadingBox(LOADING_DIV);
						alert("There is another cart named \""+ actionCartNewName +"\". Please use another name to properly save this cart.");	
					}
				}
				*/
				switch (errorCode){
					case ASYNC_RET_SESSION_EXPIRES : clearJSONCart();
													 errorOut("Your session has expired.");
													 break;
					
					case ASYNC_RET_OK		   	   : if (cartLabelExists){
														 alert("There is another cart named \""+ actionCartNewName +"\". Please use another name to properly save this cart."); 
													 }
													 else{
														  saveCart_AJAXResponse();		
													 }
													 break;													
					
					default						   : alert("Unable to check for name conflicts at this time. Contact support before trying to save your cart again.");
													 break;
				}		
			}
			else{
				if(ajax.status==404){
				   alert("Error: Invalid URL");
				}
				else{
				   alert("Error: "+ ajax.status);
				}				
			} 
		}
	}		

};

var rebuildCartHnd = function (){
	if (ajax.readyState==1) {		
	}
	else{
		if (ajax.readyState==4){
			hideLoadingBox(LOADING_DIV);
			if (ajax.status==200){				
				var result = ajax.responseText;	
				var aryResponse = result.split(errorDelimiter);
				var errorCode = generalInteger(aryResponse[1]);
				//var newCartJS = eval('('+aryResponse[0]+')');
				oCart = eval('('+aryResponse[0]+')');
				/*
				if (result=="Error"){
					alert("Unable to check for name conflicts at this time. Contact support before trying to save your cart again.");
					hideLoadingBox(LOADING_DIV);
				}
				else{	
					if (result=="False"){
						saveCart_AJAXResponse();						
					}
					else{						
						hideLoadingBox(LOADING_DIV);
						alert("There is another cart named \""+ actionCartNewName +"\". Please use another name to properly save this cart.");	
					}
				}
				*/
				switch (errorCode){
					case ASYNC_RET_SESSION_EXPIRES : clearJSONCart();
													 errorOut("Your session has expired.");
													 break;
					
					case ASYNC_RET_OK		   	   : // create a temp duplicate json structure, call update one by one
					                                 //for (var i=0;i<newCartJS.Items.length;i++)
					                                 //{
					                                 //   updateJSONCart(newCartJS.Items[i]);
					                                 //}
                                                     reBuildCart();
													 break;													
					
					default						   : alert("Unable to validate your cart at this time. Contact support before trying to save your cart again.");
													 break;
				}		
			}
			else{
				if(ajax.status==404){
				   alert("Error: Invalid URL");
				}
				else{
				   alert("Error: "+ ajax.status);
				}				
			} 
		}
	}		

};

/*
***********************************************************************************
Cart logic: delete, update, add items
***********************************************************************************
*/

function updateTotals(anIndex){
	//var objItem = getCartItemById(anItemCode);
	var objItem = oCart.Items[anIndex];
	var txtField = eval('document.getElementById(\'qty'+ anIndex +'\')');		
	objItem.Quantity = parseInt(txtField.value);
	reBuildCart();
}

function getCartItemById(itemCode){
	for (i=0; i<oCart.Items.length; i++){
		if (oCart.Items[i].ItemCode == itemCode){
			return oCart.Items[i];
		}
	}
	return null;
}

function changeItemQty(anIndex){    
	delete QtyTimeout['I'+anIndex];	
	//var currentItem = getCartItemById(anItemCode);
	var intQty;
	var currentItem = oCart.Items[anIndex];
	var qtyTextField = document.getElementById("qty"+anIndex);
	var updateBtn = GetTag('QtyUpdBtn' + anIndex);
	intQty = parseInt(qtyTextField.value);
	//if here ... qty can be changed
	if(oCart.Items[anIndex].Quantity != intQty)
	{
		try
		{
        qtyTextField.style.borderColor = CSSRule['ErrorColor'];
        }catch(e){}
        
        qtyTextField.style.borderStyle = 'solid';
    } else {
        qtyTextField.style.borderColor = '';
        qtyTextField.style.borderStyle = '';
    }      
    if(isCartDirty()) {
        updateBtn.className = 'FormButtons';
        updateBtn.disabled = false;
    } else { 
       updateBtn.className = 'FormButtonsDisabled';
       updateBtn.disabled = true;    
    }    
}
function validateClientSide()
{   
	return true; //passed validation as required in #10047          
    var msg = '';      
    var bol = true;
    var updateBtn = GetTag('QtyUpdBtn');    
    for(var i=0; i<oCart.Items.length; i++)
    {        
        //valid integer        
        var qtyTextField = GetTag("qty"+i);
        if (qtyTextField.disabled == false)
        {
			var intQty = parseInt(qtyTextField.value); 	   	    
			if (!(intQty > 0))
			    msg = 'Invalid quantity';
			 if ((intQty > oCart.Items[i].availableStock) && (oCart.Items[i].availableStock > 0) && (oCart.Items[i].allowBackOrder == false))
			 {	        			
			    msg = 'Quantity is greater than the available stock of ' + String(oCart.Items[i].availableStock);
			    qtyTextField.value = oCart.Items[i].Quantity;
			 }	    
			//config validation
			if (typeof(oCart.Items[i].Config) != 'undefined')
			{
			    var oItemCfg = oCart.Items[i].Config;
			    if (msg == '')
			    {	        
			       //pull total qty based on enforce flag
			       var iEnforce = oItemCfg.Enforce;
			       var sItem = '';
			       if (iEnforce == 0) 
			        iEnforce = ENFORCE_PARTNO;
			       switch (iEnforce)
			       {
			            case ENFORCE_SKU:
			                //qty remains the same
			                sItem = 'SKU ' + String(oCart.Items[i].ItemCode);
			            break;
			            case ENFORCE_PARTNO:
			                intQty = 0;
			                sItem = 'Part Number ' + String(oCart.Items[i].Config.PartNo);
			                //override total	                    
			                for (var j=0; j<oCart.Items.length; j++)
			                {
			                    if (String(oCart.Items[i].Config.PartNo) == String(oCart.Items[j].Config.PartNo))
			                    {
			                        qtyTextField = GetTag("qty"+j);
			                        intQty += parseInt(qtyTextField.value);
			                    }	                            
			                }
			            break;
			       }
			       qtyTextField = GetTag("qty"+i);
			       if ((intQty < oItemCfg.MinQuantity) && (oItemCfg.MinQuantity > 0))
			       {
			        msg = 'Quantity (' + String(intQty) + ') for '+String(sItem)+' is lower than the minimum required of ' + String(oCart.Items[i].Config.MinQuantity);
			        if (iEnforce != ENFORCE_PARTNO) 
						qtyTextField.value = oCart.Items[i].Quantity;
			       }
			       if ((intQty > oItemCfg.MaxQuantity) && (oItemCfg.MaxQuantity > 0))
			       {
			        msg = 'Quantity (' + String(intQty) + ') for '+String(sItem)+' is greater than the maximum required of ' + String(oCart.Items[i].Config.MaxQuantity);
			        if (iEnforce != ENFORCE_PARTNO)
						qtyTextField.value = oCart.Items[i].Quantity;	
			       }        
			       if (oItemCfg.IncQuantity > 0)
			       {
			           if (((intQty - oItemCfg.MinQuantity) % oItemCfg.IncQuantity != 0))
			           {
			            msg = 'Quantity (' + String(intQty) + ') for '+String(sItem)+' is different than the incremental amount required of ' + String(oItemCfg.IncQuantity);
			            if (iEnforce != ENFORCE_PARTNO)
							qtyTextField.value = oCart.Items[i].Quantity;
			           }
			       }
			    }
	        }     
	    }
	    if (msg.length > 0 && false)
	    {	        
	        alert(msg);
	        if (iEnforce != ENFORCE_PARTNO)
				qtyTextField.focus();
	        if(oCart.Items[i].Quantity != qtyTextField.value)
	        {
				try
				{
                qtyTextField.style.borderColor = CSSRule['ErrorColor'];
                }catch(e){}
                
                qtyTextField.style.borderStyle = 'solid';
            } else {
                qtyTextField.style.borderColor = '';
                qtyTextField.style.borderStyle = '';
            }      
            if(isCartDirty()) {
                updateBtn.className = 'FormButtons';
                updateBtn.disabled = false;
            } else { 
               updateBtn.className = '';
               updateBtn.disabled = true;    
            }  
	        bol = false;
	        break;	        
	    }
    }    
    return bol;
}
function isCartDirty()
{
    var bol = false;    
    for(var i=0; i<oCart.Items.length; i++)
    {
        var qtyTextField = GetTag("qty"+i);
	    var intQty = getInt(qtyTextField);

        if((intQty != oCart.Items[i].Quantity) && (qtyTextField.disabled == false)) {
            bol = true;
            break;
        }
    }    
    return bol;
}

function updateCartQty()
{
    if (validateClientSide())
    {    
        showLoadingBox(LOADING_DIV);
        
        var prod = oCart.Items;
        var count = prod.length;
        var mods = '';
        var qtyTextField, intQty;
        
        var aUpdate = new Array();
        var ItemDLMTR = String.fromCharCode(29);
        var PropDLMTR = String.fromCharCode(30);
        
        for(var i=0; i<count; i++)
        {   
	        hideInfoBox(i);
	        intQty = parseInt(document.getElementById("qty"+i).value, 10);
	        for (var j=0; j<=prod[i].Modifiers.length-1; j++)
	        {
	            mods += String(prod[i].Modifiers[j].ID) + String.fromCharCode(31) + String(prod[i].Modifiers[j].Name) + String.fromCharCode(28);
	        }	    	    
            
	        if(intQty != prod[i].Quantity || true)//passed validation as requierd in #10047
			{
	            prod[i].Quantity = intQty;
		    aUpdate.push(prod[i].ID + PropDLMTR + prod[i].ItemCode
	                + PropDLMTR + prod[i].Location + PropDLMTR + intQty + PropDLMTR + mods + PropDLMTR);
	        }
		mods = '';
			
        }
	    doAjax("/Commerce/CommerceManageCartAJAX.asp", "act=UPDATEQTY&data=" + encodeURIComponent(aUpdate.join(ItemDLMTR)), "POST", rebuildCartHnd);
	}
}

function AjaxEncode(str)
{
	return str.replace(/ /g, String.fromCharCode(30))
}

function renameCart(cartOldName, cartId, concurrencyId){		
	var newNameTextField = eval('document.frmCart.txtCartNewName'+cartId.toString());		
	if (checkRequiredTextField(newNameTextField, "New cart name")){
	    if (trim(newNameTextField.value.toLowerCase()) != cartOldName.toLowerCase()) {
	        GetTag('COMCartSaveRename'+cartId.toString()).value = GetTag('txtCartNewName' + cartId).value;
			//then check for name conflicts				
			actionCartId = cartId;
			actionCartNewName = newNameTextField.value;	
			actionCartConcurrencyId = concurrencyId;
			showLoadingBox(LOADING_DIV);
			doAjax("/Commerce/CommerceManageCartAJAX.asp", "act=RENAMECART&cartID="+actionCartId+"&NewName="+urlEncode(actionCartNewName), "GET", renameCartHnd);							
		}
		else{
	        //alert("The name you entered is already in use for another saved cart. Please enter a different name.");
	        $('#txtCartNewName' + cartId).gips({ 'theme': 'red', placement: 'bottom', text: 'The name you entered is already in use for another saved cart. Please enter a different name.' });
		}			
	}					
}

function delItem(anIndex){
		itemIndexInProcess = anIndex;		    
		//var itemObj = getCartItemById(anItemCode);		
		hideInfoBox(anIndex);
		showLoadingBox(LOADING_DIV);
		var ItemDLMTR = String.fromCharCode(28);
		var mods = '';
		for (var j=0; j<=oCart.Items[anIndex].Modifiers.length-1; j++)
	    {
	        mods += String(oCart.Items[anIndex].Modifiers[j].ID) + ItemDLMTR;
	    }	 
		doAjax("/Commerce/CommerceManageCartAJAX.asp", "act=DELETE&itemCode="+oCart.Items[anIndex].ItemCode+"&productId="+oCart.Items[anIndex].ID+"&mods="+escape(mods)+"&LocationID="+oCart.Items[anIndex].Location, "GET", deleteHnd);
		//doAjax("/Commerce/CommerceManageCartAJAX.asp", "act=REBUILD", "GET", rebuildCartHnd);
	
}

function clearCart(){
	if (oCart.Items.length == 0){
		alert("Your cart is already empty.");
	}
	else{
			showLoadingBox(LOADING_DIV);
			doAjax("/Commerce/CommerceManageCartAJAX.asp", "act=CLEARCART", "GET", clearCartHnd);
	}	
}

function validateProdCnfgData()
{
    //get the ProductID list
    var csvProds = '';    
    for (i=0; i<oCart.Items.length; i++){
        csvProds += oCart.Items[i].ID;
    }
    doAjax("/Commerce/CommerceManageCartAJAX.asp", "act=GETPRODUCTSCONFIG&ProductIDList=" + csvProds, validateProdCnfgData);
}

function saveCart()
{		
	document.frmCart.submit();		
}
function calculateItemUpdateQty(oItem)
{	
    var oConfig = oItem.Config;           
    var index = 0;        
    var auxQty = 0;
    if (oItem.Error)
    {
        if (oItem.Error.bitWise > 0)
        {
            var oValidItem = oItem.Error.validItem;
            auxQty = oValidItem.qty;
            if (typeof(oConfig) != 'undefined')
            {
                /*if ((parseInt(oItem.availableStock) > 0) && (oConfig.MaxQuantity > 0))
                {
                    if ((oItem.availableStock < oConfig.MaxQuantity) && (oItem.allowBackOrder == false))
                        oConfig.MaxQuantity = oItem.availableStock;            
                }
                if (parseInt(oValidItem.qty) > parseInt(oConfig.MaxQuantity))
                {					
                    for (index=parseInt(oConfig.MaxQuantity); index>=parseInt(oConfig.MinQuantity); index--)
                    {                                              
                        if (((index - oConfig.MinQuantity) % oConfig.IncQuantity == 0) && ((index-oConfig.MinQuantity) >0))
                            auxQty = index;						
                    }
                }*/ 
                if((auxQty - oConfig.MinQuantity) % oConfig.IncQuantity != 0)
				{
					var high, low, rem;
					rem = auxQty - oConfig.MinQuantity;
					low = auxQty - (rem % oConfig.IncQuantity);
					high = low + oConfig.IncQuantity;   
					
					if(high <= oConfig.MaxQuantity && high <= auxQty)
					{
						oItem.Error.validItem.qty = high;
						return high;
					}
					if(low >= oConfig.MinQuantity)
					{
						oItem.Error.validItem.qty = low;
						return low;
					}
				}      
            }
        }    
    }    
    return auxQty;
}
function updtItem(anIndex){
	itemIndexInProcess = anIndex;
	hideInfoBox(anIndex);
	showLoadingBox(LOADING_DIV);
	//var itemObj = getCartItemById(anItemCode);	
	//oCart.Items[anIndex].Quantity = qty;
	var itemObj = oCart.Items[anIndex];			
	updateJSONCart(itemObj)
	doAjax("/Commerce/CommerceManageCartAJAX.asp", "act=UPDATE&"+cartSerialize(itemObj), "GET", updateHnd);
}


function cartSerialize(anItem){
	var finalUrl = "";
	var invalidItemString = "";
	var validItemString = "";
	var itemPropertyDelimiter = String.fromCharCode(28);
	var modifierPropertyDelimiter = String.fromCharCode(29);
	var arrayDelimiter = String.fromCharCode(30);
	var modifierString;
	
	if (anItem.Error && anItem.Error.validItem)
	{
		//finalUrl += "&bitWise=" + anItem.Error.bitWise.toString();
        
		validItemString += anItem.ID.toString() + itemPropertyDelimiter;
		validItemString += anItem.ItemCode + itemPropertyDelimiter;
		//validItemString += anItem.Error.validItem.description + itemPropertyDelimiter;
		validItemString += anItem.Error.validItem.basePrice.toString() + itemPropertyDelimiter;
		validItemString += (anItem.Error.validItem.active ? "1" : "0") + itemPropertyDelimiter;
		validItemString += anItem.Error.validItem.qty.toString() + itemPropertyDelimiter;
		validItemString += (anItem.Error.validItem.allowBackOrder ? "1" : "0") + itemPropertyDelimiter;
		//validItemString += anItem.Error.validItem.candidateQty.toString() + itemPropertyDelimiter;
		
		modifierString = "";
		for (i=0; i<anItem.Error.validItem.modifiers.length; i++){
			modifierString += anItem.Error.validItem.modifiers[i].ID + modifierPropertyDelimiter;
			//+ anItem.Error.validItem.modifiers[i].description + modifierPropertyDelimiter;			
			modifierString += anItem.Error.validItem.modifiers[i].priceOffset.toString() + modifierPropertyDelimiter + (anItem.Error.validItem.modifiers[i].oneTime ? "1" : "0");
			modifierString += (i==anItem.Error.validItem.modifiers.length-1 ? "" : arrayDelimiter);		
		}
		
		validItemString += modifierString;
		
		finalUrl += "validItem=" + escape(validItemString);
	} else {
		validItemString += anItem.ID.toString() + itemPropertyDelimiter;
		validItemString += anItem.ItemCode + itemPropertyDelimiter;
		validItemString += anItem.Price.toString() + itemPropertyDelimiter;
		validItemString += (anItem.Active ? "1" : "0") + itemPropertyDelimiter;
		validItemString += anItem.Quantity.toString() + itemPropertyDelimiter;
		//validItemString += (anItem.AllowBackOrder ? "1" : "0") + itemPropertyDelimiter;
		validItemString += "1" + itemPropertyDelimiter;
		
		modifierString = "";
		for (i=0; i<anItem.Modifiers.length; i++){
			modifierString += anItem.Modifiers[i].ID + modifierPropertyDelimiter;
			modifierString += anItem.Modifiers[i].Price.toString() + modifierPropertyDelimiter + (anItem.Modifiers[i].OneTime ? "1" : "0");
			modifierString += (i==anItem.Modifiers.length-1 ? "" : arrayDelimiter);		
		}	    
		validItemString += modifierString;
		
		finalUrl += "ItemStr=" + escape(validItemString);
	}
	return finalUrl;			 
}


function renameCart_AJAXResponse(){	
	var currentForm = document.frmCart;	
	hideLoadingBox(LOADING_DIV);		
	currentForm.ActionCartID.value = actionCartId;
	currentForm.ActionCartConcurrencyID.value = actionCartConcurrencyId;	
	currentForm.ActionCartLabel.value = actionCartNewName;
	currentForm.DisplayBlock.value = "LIST";	
	currentForm.ActionToDo.value = "RENAME";	
	currentForm.submit();
}


function saveCart_AJAXResponse(){	
	var currentForm = document.frmCart;	
	hideLoadingBox(LOADING_DIV);		
	currentForm.ActionCartID.value = actionCartId;
	currentForm.ActionCartConcurrencyID.value = actionCartConcurrencyId;	
	currentForm.ActionCartLabel.value = actionCartNewName;
	currentForm.DisplayBlock.value = "LIST";	
	currentForm.ActionToDo.value = "SAVE";	
	currentForm.submit();
}

function isQtyRelated(bitWise){		
	if (bitWise >= 2048)
		return false
	else
		return ((bitWise & 32) != 0) || ((bitWise & 16) != 0) || ((bitWise & 8) != 0) || ((bitWise & 2) != 0);	
}
