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 validateCCNum(cardNum){
	var result = false;
	var cardLen = cardNum.length;
	var firstdig = cardNum.substring(0,1);
	var seconddig = cardNum.substring(1,2);
	var first4digs = cardNum.substring(0,4);

	//cascade validation
	for(i=0; i<5; i++){
		switch(i){
			case 0: //"VISA":
				result = ((cardLen == 16) || (cardLen == 13)) && (firstdig == "4");
				break;
			case 1: //"AMEX":
				var validNums = "47";
				result = (cardLen == 15) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
				break;
			case 2: //"MASTERCARD":
				var validNums = "12345";
				result = (cardLen == 16) && (firstdig == "5") && (validNums.indexOf(seconddig)>=0);
				break;
			case 3: //"DISCOVER":
				result = (cardLen == 16) && (first4digs == "6011");
				break;
			case 4: //"DINERS":
				var validNums = "068";
				result = (cardLen == 14) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
				break;
		}
		if(result) return true;
	}
	return false;
}

function validateExpDate(expDate){
	//valid are  mmyy, mm/yy, mm20yy, mm/20yy
	var rex = /^(([0]\d{1})|([1]([012])))(\/?)(([2][0])?)(\d{2})$/;
	return rex.test(expDate);
}

function validateExpMonth(expDate){
	//valid are  01-12
	var rex = /^(([0]?\d{1})|([1]([012])))$/;
	return rex.test(expDate);
}

function validateExpYear(expDate){
	//valid are  mmyy, mm/yy, mm20yy, mm/20yy
	var rex = /^(([2][0])?)(\d{2})$/;
	return rex.test(expDate);
}


function validateCVC2(cvc2){
	//valid are ddd or dddd
	var rex = /^(\d{3,4})$/;
	return cvc2==""?true:rex.test(cvc2);
}

function validateName(name){
	var rex = /^[a-zA-Z \-\']+$/;
	return rex.test(name);
}
function CheckField(frm, fname, ftitle){
	if(frm.elements[fname].value == ""){
		alert("Please enter " + ftitle);
		frm.elements[fname].focus();
		return false;
	}
	else{
		return true;
	}
}

function CheckAddProduct(frm, min_order, max_order){
	var rex = /^(\d{1,})$/
	if(!rex.test(frm.elements["oa_quantity"].value)){
		alert("Please enter valid product quantity!\r\nIt must be a numeric value.");
		frm.elements["oa_quantity"].focus();
		return false;
	}
	if((frm.elements["oa_quantity"].value *1) < min_order){
		alert("Product quantity is less as " + min_order + " (min order quantity).\nPlease enter valid product quantity!");
		frm.elements["oa_quantity"].focus();
		return false;
	}
	if((max_order != "-") && (frm.elements["oa_quantity"].value * 1 > max_order)){
		alert("Product quantity is bigger as " + max_order + " (max order quantity).\nPlease enter valid product quantity!");
		frm.elements["oa_quantity"].focus();
		return false;
	}
	return true;
}

function CheckResetPassword(frm){
	if(!CheckField(frm, "login", "username")) return false;
	if(!isEmail(frm.elements["email"].value)){
		alert("Please enter valid email address");
		frm.elements["email"].focus();
		return false;
	}
	return true;
}

function CheckCartForm(frm){
	var irex = /^oa_quantity\[(\d{1,})\]$/;
	var drex = /^(\d{1,})$/
	for(i=0; i<frm.elements.length; i++){
		if(irex.test(frm.elements[i].name)){
			if(!drex.test(frm.elements[i].value)){
				alert("Please enter valid product quantity!\r\nIt must be a numeric value.");
				frm.elements[i].focus();
				return false;	
			}
			
			if(frm.elements[i].value * 1 < frm.elements["min_" + frm.elements[i].name].value){
				alert("Product quantity is less as " + frm.elements["min_" + frm.elements[i].name].value + " (min order quantity).\nPlease enter valid product quantity!");
				frm.elements[i].focus();
				return false;
			}
			
			if(	(frm.elements["max_" + frm.elements[i].name].value != "-") && 
			(frm.elements["max_" + frm.elements[i].name].value != "0") && 
				(frm.elements[i].value * 1 > frm.elements["max_" + frm.elements[i].name].value)
			){
				alert("Product quantity is bigger as " + frm.elements["max_" + frm.elements[i].name].value + " (max order quantity).\nPlease enter valid product quantity!");
				frm.elements[i].focus();
				return false;
			}
		}
	}
	return true;
}

function CheckNewsletters(frm){
	if(!isEmail(frm.elements["email"].value)){
		alert("Please enter valid email address");
		frm.elements["email"].focus();
		return false;
	}
	//alert(frm.elements["email_updates"]);
	if((!frm.elements["email_updates"].checked) && (!frm.elements["email_newsletters"].checked)){
		alert("Please enter choose at least one check box");
		frm.elements["email_updates"].focus();
		return false;
	}
	return true;
}

function CheckUnsubscribe(frm){
	if(!isEmail(frm.elements["email"].value)){
		alert("Please enter valid email address");
		frm.elements["email"].focus();
		return false;
	}
	//alert(frm.elements["email_updates"]);
	if((!frm.elements["email_updates"].checked) && (!frm.elements["email_newsletters"].checked)){
		alert("Please enter choose at least one check box");
		frm.elements["email_updates"].focus();
		return false;
	}
	if(confirm("Do you really want to cancel your subscribtion?")){
		return true;
	}
	return false;
}

function CheckLoginForm(frm){
	if(!CheckField(frm, "login", "your username")) return false;
	if(!CheckField(frm, "password", "your password")) return false;
	return true;
}

/////////////////////////////
// CHECK SIGNUP FORM
function CheckSignupForm(frm){
	if(!CheckField(frm, "form[fname]", "first name")) return false;
	if(!CheckField(frm, "form[lname]", "last name")) return false;
	if(!CheckField(frm, "form[address1]", "address line 1")) return false;
	if(!CheckField(frm, "form[city]", "city name")) return false;
	if(!CheckField(frm, "form[country]", "country")) return false;
	//check is there USA or Canada
	if(frm.elements["form[country]"].value == 1 || frm.elements["form[country]"].value == 2){
		//check USA state
		if(frm.elements["form[country]"].value == 1){	
			if(frm.elements["form[state]"].value < 1 || frm.elements["form[state]"].value > 50){
				alert("Please select USA state");
				frm.elements["form[state]"].focus();
				return false;
			}
		}
		//check Canadian Province
		if(frm.elements["form[country]"].value == 2){	
			if(frm.elements["form[state]"].value < 50 || frm.elements["form[state]"].value > 63){
				alert("Please select Canadian province");
				frm.elements["form[state]"].focus();
				return false;
			}
		}
	}
	else{
		//check custom province/state
		if(!CheckField(frm, "form[province]", "custom province/state")) return false;
	}
	
	if(!CheckField(frm, "form[zip]", "zip/postal code")) return false;
	if(!CheckField(frm, "form[phone]", "phone number")) return false;
	if(!CheckField(frm, "form[email]", "email address")) return false;
	if(!isEmail(frm.elements["form[email]"].value)){
		alert("Please enter valid email address");
		frm.elements["form[email]"].focus();
		return false;
	}
	if(!CheckField(frm, "form[login]", "username")) return false;
	if(!CheckField(frm, "form[password]", "password")) return false;
	if(!CheckField(frm, "form[password2]", "password confirmation")) return false;
	if(frm.elements["form[agree]"].checked == false){
		alert("Before registration please read our terms and conditions");
		return false;
	}
	return true;
}

function CheckShippingAddress(frm){
	if(!CheckField(frm, "form[name]", "name")) return false;
	if(!CheckField(frm, "form[address1]", "address line 1")) return false;
	if(!CheckField(frm, "form[city]", "city name")) return false;
	if(!CheckField(frm, "form[country]", "country")) return false;
	//check is there USA or Canada
	if(frm.elements["form[country]"].value == 1 || frm.elements["form[country]"].value == 2){
		//check USA state
		if(frm.elements["form[country]"].value == 1){	
			if(frm.elements["form[state]"].value < 1 || frm.elements["form[state]"].value > 50){
				alert("Please select USA state");
				frm.elements["form[state]"].focus();
				return false;
			}
		}
		//check Canadian Province
		if(frm.elements["form[country]"].value == 2){	
			if(frm.elements["form[state]"].value < 50 || frm.elements["form[state]"].value > 63){
				alert("Please select Canadian province");
				frm.elements["form[state]"].focus();
				return false;
			}
		}
	}
	else{
		//check custom province/state
		if(!CheckField(frm, "form[province]", "custom province/state")) return false;
	}
	if(!CheckField(frm, "form[zip]", "zip/postal code")) return false;
	return true;
}

function CheckShippingForm(frm){
	ra = document.getElementById("id_new_address_radio");
	hi = document.getElementById("id_new_address_hidden");
	if((ra && ra.checked) || hi){
		return CheckShippingAddress(frm);
	}
	return true;
}

///////////////////////////////
// CHECK BILLING FORM
function CheckBillingForm(frm){
	if(!CheckField(frm, "form[fname]", "first name")) return false;
	if(!CheckField(frm, "form[lname]", "last name")) return false;
	if(!CheckField(frm, "form[address1]", "address line 1")) return false;
	if(!CheckField(frm, "form[city]", "city name")) return false;
	//check is there USA or Canada
	if(frm.elements["form[country]"].value == 1 || frm.elements["form[country]"].value == 2){
		//check USA state
		if(frm.elements["form[country]"].value == 1){	
			if(frm.elements["form[state]"].value < 1 || frm.elements["form[state]"].value > 50){
				alert("Please select USA state");
				frm.elements["form[state]"].focus();
				return false;
			}
		}
		//check Canadian Province
		if(frm.elements["form[country]"].value == 2){	
			if(frm.elements["form[state]"].value < 50 || frm.elements["form[state]"].value > 63){
				alert("Please select Canadian province");
				frm.elements["form[state]"].focus();
				return false;
			}
		}
	}
	else{
		//check custom province/state
		if(!CheckField(frm, "form[province]", "custom province/state")) return false;
	}
	if(!CheckField(frm, "form[zip]", "zip/postal code")) return false;
	if(!CheckField(frm, "form[email]", "email address")) return false;
	if(!isEmail(frm.elements["form[email]"].value)){
		alert("Please enter valid email address");
		frm.elements["form[email]"].focus();
		return false;
	}
	return true;
}

///////////////////////////////
// CHECK PROFILE FORM
function CheckProfileForm(frm){
	if(!CheckField(frm, "form[fname]", "first name")) return false;
	if(!CheckField(frm, "form[lname]", "last name")) return false;
	if(!CheckField(frm, "form[address1]", "address line 1")) return false;
	if(!CheckField(frm, "form[city]", "city name")) return false;
	if(!CheckField(frm, "form[country]", "country")) return false;
	//check is there USA or Canada
	if(frm.elements["form[country]"].value == 1 || frm.elements["form[country]"].value == 2){
		//check USA state
		if(frm.elements["form[country]"].value == 1){	
			if(frm.elements["form[state]"].value < 1 || frm.elements["form[state]"].value > 50){
				alert("Please select USA state");
				frm.elements["form[state]"].focus();
				return false;
			}
		}
		//check Canadian Province
		if(frm.elements["form[country]"].value == 2){	
			if(frm.elements["form[state]"].value < 50 || frm.elements["form[state]"].value > 63){
				alert("Please select Canadian province");
				frm.elements["form[state]"].focus();
				return false;
			}
		}
	}
	else{
		//check custom province/state
		if(!CheckField(frm, "form[province]", "custom province/state")) return false;
	}
	if(!CheckField(frm, "form[zip]", "zip/postal code")) return false;
	if(!CheckField(frm, "form[phone]", "phone number")) return false;
	if(!CheckField(frm, "form[email]", "email address")) return false;
	if(!isEmail(frm.elements["form[email]"].value)){
		alert("Please enter valid email address");
		frm.elements["form[email]"].focus();
		return false;
	}
	if(frm.elements["form[password]"].value != ""){
		if(frm.elements["form[password]"].value != frm.elements["form[password2]"].value){
			alert("Password and confirmation are different!");
			frm.elements["form[password]"].focus();
			return false;
		}
	}
	return true;
}

function CheckEmail2FriendForm(frm){
	if(!CheckField(frm, "yname", "your name")) return false;
	if(!CheckField(frm, "yemail", "your email address")) return false;
	if(!isEmail(frm.elements["yemail"].value)){
		alert("Please enter valid email address");
		frm.elements["yemail"].focus();
		return false;
	}
	if(!CheckField(frm, "fname", "your friend name")) return false;
	if(!CheckField(frm, "femail", "your friend email address")) return false;
	if(!isEmail(frm.elements["femail"].value)){
		alert("Please enter valid email address");
		frm.elements["femail"].focus();
		return false;
	}
	return true;
}



