function printMe()
{
    window.print(); 
}
function winOpen( myurl )
{
    window.open(myurl,'printWin','directories=no,location=no,menubar=no,scrollbars=yes,status=no,toolbar=no,resizable=yes,width=550,height=500');

}

function swapCats(cat_id)
{
    var myDiv = 'cat_'+cat_id;
    var curr  = document.getElementById(myDiv).style.display;
    
    if( curr == "none" )
    {
        document.getElementById(myDiv).style.display = "block";
    }
    else
    {
        document.getElementById(myDiv).style.display = "none";
    }
}

function allDigits(str)
{
	return inValidCharSet(str,"0123456789");
}

function allDigitsM(str)
{
	return inValidCharSet(str,"0123456789.");
}

function inValidCharSet(str,charset)
{
	var result = true;

	// Note: doesn't use regular expressions to avoid early Mac browser bugs	
	for (var i=0;i<str.length;i++)
		if (charset.indexOf(str.substr(i,1))<0)
		{
			result = false;
			break;
		}
	return result;
}
	
function validNum(formField,fieldLabel)
{
	var result = true;
	if (!allDigits(formField.value))
	{
		alert('Please enter a number for the "' + fieldLabel +'" field.');
		//timeout is used to re-focus on the desired error after tab has moved onto next item
		setTimeout(function () {formField.focus();}, 20);	
		result = false;
	}
	return result;
}

function validNumM(formField,fieldLabel)
{
	var result = true;
	if (!allDigitsM(formField.value))
	{
		alert('Please enter a number for the "' + fieldLabel +'" field.');
		//timeout is used to re-focus on the desired error after tab has moved onto next item
		setTimeout(function () {formField.focus();}, 20);	
		result = false;
	}
	return result;
}

function round(num)
{ 
    num = num.toString(); 
    var split = num.split("."); 
    var dec = split[1].substr(0,2); 
    var dec1 = dec.match(/\d{1,1}/); 
    var dec2 = dec.match(/(\d$)/); 
    var rounded = (dec1 + "." + dec2[0]); 
    return split[0] + "." + Math.round(rounded); 
}

function validateFormM(theForm)
{
    theForm.qty.value = round(theForm.qty.value);
    
	// Customize these calls for your form
	if(theForm.qty.value == '0')
	    return true;
	if (!validNumM(theForm.qty,"Quantity"))
		return false;
	// <--------- End
	
	return true;
}	

function validateForm(theForm)
{
	// Customize these calls for your form
	if(theForm.qty.value == '0')
	    return true;
	if (!validNum(theForm.qty,"Quantity"))
		return false;
	// <--------- End
	
	return true;
}

function validRequired(formField,fieldLabel)
{
	var result = true;

	if (formField.value == "")
	{
		alert('Please enter a value for the "' + fieldLabel +'" field.');
		formField.focus();
		result = false;
	}

	return result;
}

function allDigits(str)
{
	return inValidCharSet(str,"0123456789");
}

function inValidCharSet(str,charset)
{
	var result = true;

	for (var i=0;i<str.length;i++)
	{
		if (charset.indexOf(str.substr(i,1))<0)
		{
			result = false;
			break;
		}
	}
	return result;
}


function isValidExpDate(formField,fieldLabel,required)
{
	var result = true;
	var formValue = formField.value;

	if (required && !validRequired(formField,fieldLabel))
		result = false;

 	if (result && (formField.value.length>0))
 	{
 		var elems = formValue.split("/");

 		result = (elems.length == 2); // should be two components
 		var expired = false;

 		if (result)
 		{
 			var month = parseInt(elems[0],10);
 			var year = parseInt(elems[1],10);

 			if (elems[1].length == 2)
 				year += 2000;

 			var now = new Date();
 			var nowMonth = now.getMonth() + 1;
 			var nowYear = now.getFullYear();
 			
 			expired = (nowYear > year) || ((nowYear == year ) && (nowMonth > month));
 			
			result = allDigits(elems[0]) && (month > 0) && (month < 13) &&
					 allDigits(elems[1]) && ((elems[1].length == 2) || (elems[1].length == 4));
 		}
 		
  		if (!result)
 		{
 			alert('Please enter a date in the format MM/YY for the "' + fieldLabel +'" field.');
			formField.focus();
		}
		else if (expired)
		{
 			result = false;
 			alert('The date for "' + fieldLabel +'" has expired.');
			formField.focus();
		}
	} 
	
	return result;
}

function isValidCreditCardNumber(formField,ccType,fieldLabel,required)
{
	var result = true;
 	var ccNum = formField.value;

	if (required && !validRequired(formField,fieldLabel))
		result = false;
 
  	if (result && (formField.value.length>0))
 	{ 
 		if (!allDigits(ccNum))
 		{
 			alert('Please enter only numbers (no dashes or spaces) for the "' + fieldLabel +'" field.');
			formField.focus();
			result = false;
		}	

		if (result)
 		{ 
 			
 			if (!LuhnCheck(ccNum) || !validateCCNum(ccType,ccNum))
 			{
 				alert('Please enter a valid card number for the "' + fieldLabel +'" field.');
				formField.focus();
				result = false;
			}	
		} 

	} 
	
	return result;
}

function LuhnCheck(str) 
{
  var result = true;

  var sum = 0; 
  var mul = 1; 
  var strLen = str.length;
  
  for (i = 0; i < strLen; i++) 
  {
    var digit = str.substring(strLen-i-1,strLen-i);
    var tproduct = parseInt(digit ,10)*mul;
    if (tproduct >= 10)
      sum += (tproduct % 10) + 1;
    else
      sum += tproduct;
    if (mul == 1)
      mul++;
    else
      mul--;
  }
  if ((sum % 10) != 0)
    result = false;
    
  return result;
}



function GetRadioValue(rArray)
{
	for (var i=0;i<rArray.length;i++)
	{
		if (rArray[i].checked)
			return rArray[i].value;
	}
	
	return null;
}


function validateCCNum(cardType,cardNum)
{
	var result = false;
	cardType = cardType.toUpperCase();
	
	var cardLen = cardNum.length;
	var firstdig = cardNum.substring(0,1);
	var seconddig = cardNum.substring(1,2);
	var first4digs = cardNum.substring(0,4);

	switch (cardType)
	{
		case "VISA":
			result = ((cardLen == 16) || (cardLen == 13)) && (firstdig == "4");
			break;
		/*case "AMEX":
			var validNums = "47";
			result = (cardLen == 15) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
			break;*/
		case "MASTERCARD":
			var validNums = "12345";
			result = (cardLen == 16) && (firstdig == "5") && (validNums.indexOf(seconddig)>=0);
			break;
		/*case "DISCOVER":
			result = (cardLen == 16) && (first4digs == "6011");
			break;
		case "DINERS":
			var validNums = "068";
			result = (cardLen == 14) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
			break;*/
	}
	return result;
}

function validCCForm()
{
	var ccTypeField = document.getElementById('ccType');
	var ccNumField = document.getElementById('ccNum');
	var ccExpField = document.getElementById('ccExp');
	var result = true;

    if( document.getElementById('payment').selectedIndex == 0 )
    {
        if( !validRequired(ccTypeField,"Credit Card Type") ||
            !isValidCreditCardNumber(ccNumField,ccTypeField.value,"Credit Card Number",true) ||
		    !isValidExpDate(ccExpField,"Expiration Date",true)
		    
		  )
		{
		    return false;
		}
    }
    
    
	//details.address2, details.e_mail are not checked because I don't see them necessary
	if(!validRequired(document.getElementById('first_name'),"First Name") || 
		!validRequired(document.getElementById('surname'),"Surname") || 
		!validRequired(document.getElementById('address1'),"Delivery Address") ||  
		!validRequired(document.getElementById('suburb'),"Suburb") || 
		!validRequired(document.getElementById('postcode'),"Postcode") || 
		!validRequired(document.getElementById('e_mail'),"Email") || 
		!validRequired(document.getElementById('phone'),"Phone Number") )
    {
		return false;
	}
		
    
    if( document.getElementById('privacy').checked == false )
    {
        alert( 'You must agree to the privacy policy to continue.' );
        document.getElementById('privacy').focus();
        return false;
    }
    
	return true;
}

//this script disables the credit card fields
function DisableCredit()
{
	if(document.getElementById('payment').selectedIndex == 0 ) 
	{           
		document.getElementById('ccDetails').style.display = 'block';
	}
	else
	{
	    document.getElementById('ccDetails').style.display = 'none';
	}
}

 function MM_preloadImages() { //v3.0
      var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
        var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
        if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
    }
    
    function MM_swapImgRestore() { //v3.0
      var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
    }
    
    function MM_findObj(n, d) { //v4.01
      var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
        d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
      if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
      for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
      if(!x && d.getElementById) x=d.getElementById(n); return x;
    }
    
    function MM_swapImage() { //v3.0
      var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
       if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
    }