/**
 * Catalog Quick Order implementation.
 */
var idx;
var available;
var fromPicker;
var alertType=1;
var pickerType=1;
var deleteItems=new Array();
var varItems=new Array();
var isProductId=false;

 function getAvailability(productId,skuId) {
    
    var params = new Array();
    params['productId'] = productId;
    params['skuId'] = skuId;
    var bindArgs = {
      url: "getAvailability.jsp",
      error: function(type, data, evt){
        alert("An error occurred.");
      },
      mimetype: "text/plain",
      content: params
   };
   var req = dojo.io.bind(bindArgs);
   dojo.event.connect(req, "load", this, "populateAvailability");
 }
 
 function getProductAvailability(index) {
     idx=index;
     fromPicker="false";
     document.getElementById("varCodes_"+idx).style.display = "none"; 
     
     //check if user has entered productId
     var productId=document.getElementById("product_"+index).value;

     if(productId!=''){
       productId = removeSplChar(productId.toUpperCase());
       document.getElementById("product_"+index).value = productId;
       isProduct(productId);
     }else{
       removeElement(deleteItems,idx);     
         if (varItems.length == 0 && deleteItems ==0){
           document.getElementById("addCart_submit").style.display = "block";
           document.getElementById("addCart_button").style.display = "none";
         }else if(deleteItems.length != 0){
           alertType=1;
         }else if(varItems.length != 0){
           alertType=2;
         }

       document.getElementById("info_"+idx).style.display = "none";
       document.getElementById("delete_"+idx).style.display = "none";

     }
     
 }

 function getSkuAvailability(index) {
     idx=index;
     
     var productId=document.getElementById("product_"+index).value;
     var skuId = productId;
     
     var varCode1=document.getElementById("varCode1_"+index).value;
     if(varCode1!=''){
        skuId = skuId+'-'+removeSplChar(varCode1);
     }
     var varCode2=document.getElementById("varCode2_"+index).value;
     
     if(varCode2!=''){
        skuId = skuId+'-'+removeSplChar(varCode2);
     }
     getAvailability(productId,skuId);
     
 }

function populateAvailability(type, data, evt) {
   available="false";
   if (!data) {
   } else {
      if(data.indexOf("incorrect") != -1){   
         var picker = document.getElementById("varCodes_"+idx);
         picker.innerHTML = "Item not found or is unavailable";
         document.getElementById("varCodes_"+idx).style.display = "block";
         document.getElementById("addCart_submit").style.display = "none";
	 document.getElementById("addCart_button").style.display = "block";
	 alertType=1;
	 
	 var productId=document.getElementById("product_"+idx).value;	
	 deleteItems.push(idx);
	 
      }else if(data.indexOf("nosku") != -1){ 
        if(fromPicker != "true"){
           removeElement(deleteItems,idx);
           getPicker(idx);
        }else{
           if(pickerType == 2){
             alert("Either the SKU is unavailable or we dont carry this combination");
             var productId=document.getElementById("product_"+idx).value;	
             if(!containsElement(varItems,productId)){             
               varItems.push(productId);
             }
             
             document.getElementById("availability_"+idx).innerHTML='';
             document.getElementById("addCart_submit").style.display = "none";
	     document.getElementById("addCart_button").style.display = "block";

          }
        }
      }else{
      
         var availibility = document.getElementById("availability_"+idx);
         availibility.innerHTML = data;
         
         var productId=document.getElementById("product_"+idx).value;	
	 removeElement(varItems,productId);
         removeElement(deleteItems,idx);
         
         if (varItems.length == 0 && deleteItems ==0){
           document.getElementById("addCart_submit").style.display = "block";
           document.getElementById("addCart_button").style.display = "none";
         }else if(deleteItems.length != 0){
           alertType=1;
         }else if(varItems.length != 0){
           alertType=2;
         }
        available="true";

      }
      document.getElementById("info_"+idx).style.display = "inline";
      document.getElementById("delete_"+idx).style.display = "inline";
   }

}

function getPicker(index) { 
    var idx=index;
    var productId=document.getElementById("product_"+index).value;  
    if(available == "false"){
      if(productId.indexOf("-") != -1){
        productId =productId.slice(0,productId.indexOf("-") ); 
        document.getElementById("product_"+index).value=productId;
      }
    }
    
    if(!containsElement(deleteItems,index)){
    	var params = new Array();
	params['productId'] = productId;
	params['index'] = index;
	var bindArgs = {
	      url: "picker.jsp",
	      error: function(type, data, evt){
		alert("An error occurred.");
	      },
	      mimetype: "text/plain",
	      content: params
	};
	var req = dojo.io.bind(bindArgs);
	dojo.event.connect(req, "load", this, "populatePicker");  
   }
 }

function populatePicker(type, data, evt) {
  var picker = document.getElementById("varCodes_"+idx);
  
   if (!data) {
   } else {
     if(data.indexOf("nopicker") != -1){     	
   	document.getElementById("varCodes_"+idx).style.display = "none";
     }else{
        picker.innerHTML = data;
        document.getElementById("varCodes_"+idx).style.display = "block";
        document.getElementById("addCart_submit").style.display = "none";
	document.getElementById("addCart_button").style.display = "block";
	
	alertType=2;
	var productId=document.getElementById("product_"+idx).value;	 
	varItems.push(productId);
     }
   }
  
}

function setVarCodes(myForm,type,index){
  var varCode = document.getElementById(type+index);
  varCode.value=myForm.value;  
  fromPicker="true";
  if(type == 'varCode2_'){
    pickerType=2;
  }else{
    pickerType=1;
  }
  getSkuAvailability(index);
}

function deleteData(index){
  var productId=document.getElementById("product_"+index).value;	
  removeElement(deleteItems,index);
  document.getElementById("product_"+index).value='';
  document.getElementById("qty_"+index).value='';
  document.getElementById("availability_"+index).innerHTML='';
  document.getElementById("varCodes_"+index).innerHTML='';
  document.getElementById("delete_"+index).style.display = "none";
  document.getElementById("info_"+index).style.display = "none";
  if (varItems.length == 0 && deleteItems ==0){
    document.getElementById("addCart_submit").style.display = "block";
    document.getElementById("addCart_button").style.display = "none";

  }
}

function clearData(){
  for (var i=1;i<=10;i++){
    deleteData(i);
  }
}

function displayAlert(){
  if(alertType==2){
    alert('Please select variant(s)');
  }else{
    alert('Please update invalid items');
  
  }
}

function containsElement(arr,obj){ 
  for(var i = 0; i < arr.length; i++) {
    if(arr[i] === obj){
      return true;
    }
  }
  return false;
}

function removeElement(originalArray,itemToRemove){
  var j = 0;
  while (j < originalArray.length) {
    if (originalArray[j] == itemToRemove) {
      originalArray.splice(j, 1);
      break;
    } else { 
      j++; 
    }
  }
}

function isProduct(productId){  
  var params = new Array();
  params['productId'] = productId;

  var bindArgs = {
    url: "isProduct.jsp",
    error: function(type, data, evt){
    alert("An error occurred.");
  },
  mimetype: "text/plain",
  content: params
  };
  var req = dojo.io.bind(bindArgs);
  dojo.event.connect(req, "load", this, "verifyProduct");

}

function verifyProduct(type, data, evt) {
    var productId=document.getElementById("product_"+idx).value.toUpperCase();
    var skuId=document.getElementById("product_"+idx).value.toUpperCase();
    
    if (!data) {
    }else if(data.indexOf("noProduct") != -1){  
    
      if(skuId.indexOf("-") != -1){
	productId =skuId.slice(0,skuId.indexOf("-") ); 
      }else{
	productId=skuId;
      }
   } 
   
  getAvailability(productId,skuId);
}


function displayName(index){
  var idx=index;

  var skuId=document.getElementById("product_"+index).value;
  var productId;
     
  if(skuId.indexOf("-") != -1){
    productId =skuId.slice(0,skuId.indexOf("-") ); 
  }else{
    productId=skuId;
  }
  
  var params = new Array();
  params['productId'] = productId;

  var bindArgs = {
    url: "getProductName.jsp",
    error: function(type, data, evt){
    alert("An error occurred.");
  },
  mimetype: "text/plain",
  content: params
  };
  var req = dojo.io.bind(bindArgs);
  dojo.event.connect(req, "load", this, "populateProductName");

}

function populateProductName(type, data, evt) {
   if (!data) {
   } else {
        var infoImg = document.getElementById("info_"+idx);
        infoImg.title=data.trim();        
  }
  
}

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}

String.prototype.removeSplChar = function() {
  return this.replace(/[^a-zA-Z 0-9]+/g,'-');
}

function removeSplChar(input){
  var input = input.replace(/\s+/g,'-');
  var input = input.replace(/[^a-zA-Z 0-9]+/g,'-');
  return input;
}
