var S1_List = 0;
var S2_List = 0;
var locationMethods = new Array();

//Whenever user change ship location or method, the select attribute OnChange calls following fuctions.

function onShippingChange() 
{
  document.CALFORM.submit();
}
//--------------------------------------------------------------------------------------------------

function onSelectLocation()
{
  q=false;
  check_shipping();
  document.CALFORM.submit();
}
function onSelectMethod()
{
  q=false;
  check_shipping();
  document.CALFORM.submit();
}

//-----------------------------------------------------------------------------------------------------

function check_shipping()
{
  var pname = "";
	check_options(S1_List, S2_List);
	
	// Begining of Shipping Table Info
	var locList = new Array(); var methList = new Array();
locList[0] = "Autriche"; methList[0] = "La Poste,DHL International";
locList[1] = "Belgique"; methList[1] = "La Poste,DHL International";
locList[2] = "Danemark"; methList[2] = "La Poste,DHL International";
locList[3] = "Finlande"; methList[3] = "La Poste,DHL International";
locList[4] = "France"; methList[4] = "La Poste,DHL International";
locList[5] = "Allemagne"; methList[5] = "La Poste";
locList[6] = "Holland"; methList[6] = "La Poste,DHL International";
locList[7] = "Ireland"; methList[7] = "La Poste,DHL International";
locList[8] = "Italie"; methList[8] = "La Poste,DHL International";
locList[9] = "Luxembourg"; methList[9] = "La Poste,DHL International";
locList[10] = "Norvège"; methList[10] = "La Poste,DHL International";
locList[11] = "Espagne"; methList[11] = "La Poste,DHL International";
locList[12] = "Suède"; methList[12] = "La Poste,DHL International";
locList[13] = "Suisse"; methList[13] = "La Poste,DHL International";
	// End of Shipping Table Info
	
	for(i=0; i<document.CALFORM.elements.length; i++)
	{
    if(document.CALFORM.elements[i].name == "p_name")
		{
			pname = document.CALFORM.elements[i].value;
      if(pname == "S1")
			{
        if(S1_List == 1)
				{
          for(j=0; j<document.CALFORM.elements[i+1].options.length; j++)
					{
            if(document.CALFORM.elements[i+1].options[j].selected)
						{
							for(z=0; z < locList.length; z++)
							{
								if (locList[z] == document.CALFORM.elements[i+1].options[j].text)
								{
									get_locationMethods(methList[z]);
								}
							}
						}
					}
				}
			}
			else
			{
        if(pname == "S2")
				{ 
          if(S2_List == 1)
					{
            
						for(j=0; j<document.CALFORM.elements[i+1].options.length; j++)
						{
							if(document.CALFORM.elements[i+1].options[j].selected)
							{
								var selectedMethod = document.CALFORM.elements[i+1].options[j].text;
								var exists = 0;
								for(w=0; w <locationMethods.length; w++)
								{
									if(selectedMethod == locationMethods[w])
									{
										exists = 1;
									}
								}
								if(exists == 0)
								{
									var errMessage = "We're sorry, ";
									errMessage += selectedMethod;
									errMessage += " will not ship to the location you have selected. \nWe will calculate your charge using ";
									errMessage += locationMethods[0];
									for(v=0; v<document.CALFORM.elements[i+1].options.length; v++)
									{
										if(document.CALFORM.elements[i+1].options[v].text == locationMethods[0])
										{
											locIndex = v;
										}
									}

									alert(errMessage);
									document.CALFORM.elements[i+1].selectedIndex = locIndex;
    							return;
								}
							}
						}
					}
				}
			}
		}
	}
}
//-----------------------------------------------------------------------------------------------------
function get_locationMethods(methString)
{
	locationMethods.length = 1;
	var methIndex = 0;
	var currLoc = "";
	for(y=0; y <= methString.length; y++)
	{
		if(methString.charAt(y) != "," && y != methString.length)
		{
			currLoc += methString.charAt(y);
		
		}
		else
		{
			for(x=0; x < currLoc.length; x++)
			{
				if(currLoc.charAt(x) != " ")
				{
					currLoc = currLoc.substr(x)
					x=currLoc.length;
				}
			}
			for(x=currLoc.length; x > 0; x--)
			{
				if(currLoc.charAt(x-1) != " ")
				{
					currLoc = currLoc.substr(0,x);
					x = 0;
				}
			}
			locationMethods[methIndex]=currLoc;
			methIndex++;
			currLoc = "";
		}
	}
}
//-----------------------------------------------------------------------------------------------------

function check_options()
{
  var List_string;  
  var S1_flag = 0;
  var S2_flag = 0;
  var S1_key = "onSelectLocation";
  var S2_key = "onSelectMethod";
 
  for(i=0; i<document.CALFORM.elements.length; ++i)
	{
    if(document.CALFORM.elements[i].name == "p_val")
		{
      if(document.CALFORM.elements[i].type == "select-one")
			{
        List_string += document.CALFORM.elements[i].onchange;
        S1_flag = (List_string.indexOf(S1_key));
        S2_flag = (List_string.indexOf(S2_key));
        if(S1_flag != -1)
				{
          S1_List = 1;
        }
        if(S2_flag != -1)
				{
          S2_List = 1;
        }   
      }
    }
  }
}
// Added for testing the min-max quantity
function onSelectQuantity()
{
  submit = check_quantity();
  if  (submit == true) {
     document.CALFORM.submit();
  } 
}

function getPValArray(tempQuantArray, parseStr){
var j = 1;

   for(i=0; i<document.CALFORM.elements.length; i++){
      if(document.CALFORM.elements[i].value == parseStr+j){
         tempQuantArray[j] = document.CALFORM.elements[++i].value; 
         j = j + 1;
      }
   }
}

function check_quantity(){
var quantityArray = new Array(); 
var verMinArray   = new Array();
var verMaxArray   = new Array();
var verDescArray  = new Array();

var pMinArray     = new Array();
var pMaxArray     = new Array();
var prodArray     = new Array();
var prodNameArray = new Array();
var prodQtyArray  = new Array();

var totalQtyArray = new Array();
var showError = false;
var errorMessage = "";
var n = 0;
var m = 0;
var j = 0;
var regularmessage = "";
var total = 0;

   getPValArray(quantityArray, "dtl_qty");   // holds the quantity per line item.

   getPValArray(verMaxArray, "vmax");        // holds the minimum qty limit at version level.
   getPValArray(verMinArray, "vmin");        // holds the maximum qty limit at version level.
   getPValArray(verDescArray, "vdesc");	   // holds the detail description per version.
   getPValArray(prodQtyArray, "pid");        // holds product id per line item in the order.

   getPValArray(pMinArray, "pmin");          // holds the product min-qty limit for each distinct product.
   getPValArray(pMaxArray, "pmax");          // holds the product max-qty limit for each distinct product.
   getPValArray(prodArray, "grouppid");      // holds the distinct product id in the order.
   getPValArray(prodNameArray, "prodname");  // holds the distinct product name in the order.
 
   for(m=1; m<prodArray.length; m++){
      total = 0;
      for(n=1; n<prodQtyArray.length; n++) {
         if (prodArray[m] == prodQtyArray[n]){
            if (parseInt(pMinArray[m]) != -1) {
               verMinArray[n]= -1+"";
            }
            total = total + parseInt(quantityArray[n]);
            totalQtyArray[m] = total + "";         
         }
      }
   }

   for(n=1; n<quantityArray.length; n++){
      if ((parseInt(quantityArray[n]) > 0) && (parseInt(verMinArray[n]) > 1)) {
         if (parseInt(quantityArray[n]) < parseInt(verMinArray[n])) {
            errorMessage += "The minimum quantity to order "+verDescArray[n]+" is "+verMinArray[n]+"\n";
            showError = true;
         }
      }
      if ((parseInt(verMaxArray[n]) > 0) && (parseInt(quantityArray[n]) != 0)){
         if (parseInt(quantityArray[n]) > parseInt(verMaxArray[n])){
            errorMessage += "The maximum quantity to order "+verDescArray[n]+" is "+verMaxArray[n]+"\n";
            showError = true;
         }
      }
   } 
   for(m=1; m<totalQtyArray.length; m++){
      if ((parseInt(pMinArray[m]) != -1) && (parseInt(totalQtyArray[m]) > 0)){
         if (parseInt(totalQtyArray[m]) < parseInt(pMinArray[m])) {
            errorMessage += "The minimum quantity to order "+prodNameArray[m]+" is "+pMinArray[m]+"\n";
	         showError = true;
         }
      }		
   }   
   if (showError) {
      alert(errorMessage);
      return false;
   }
   return true;
}
// end of selectquantity()