
function validateCardForm() {
    res = true
    if (!isValidCreditCardNumber($("CCN").value, $("paymentChoices").value, "Broj kreditne kartice", true)) {
            res = false; 
        } else if (!validRequired($("CCN02").value, "Kontrolni broj")) {
            res = false;
        } else if (!validRequired($("billToNABname").value, "Ime i prezime")) {
            res = false; 
        } else if (!validRequired($("billToNABaddress1").value, "Adresa")) {
            res = false; 
        } else if (!validRequired($("billToNABcity").value, "Mjesto")) {
            res = false; 
        } else if (!validRequired($("billToNABpostcode").value, "Poštanski broj")) {
            res = false; 
        } else if (!validRequired($("billToNABphone").value, "Telefon/GSM")) {
            res = false; 
        } else if (!validRequired($("billToNABemail").value, "Email")) {
            res = false;
        } else if (!isValidExpDate($("CCExpMM").value + '/' + $("CCExpYY").value, "Kontrolni broj", true)) {
            res = false; 
        } else {
            res = true;
        }  
        if (res==true) {
            document.frmBuy.submit();
        }
    }





function validRequired(formField,fieldLabel) {
	var result = true;
	
	if (formField == "") {
		alert('Molimo, unesite podatke u polje "' + fieldLabel +'".');
		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;

	if (required && !validRequired(formField,fieldLabel))
		result = false;
  
 	if (result && (formField.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 (expired)
		{
 			result = false;
 			alert('Valjanost kartice je istekla.');
		}
	} 
	
	return result;
}


function isValidCreditCardNumber(formField,ccType,fieldLabel,required) {
	var result = true;
 	var ccNum = formField;

	if (required && !validRequired(formField,fieldLabel))
		result = false;
 
  	if (result && (formField.length>0))
 	{ 
 		if (!allDigits(ccNum))
 		{
 			alert('Molimo unesite samo brojeve, bez razmaka i crtica u polje "Broj kartice".');
			result = false;
		}	

		if (result)
 		{ 
 			
 			if (!LuhnCheck(ccNum) || !validateCCNum(ccType,ccNum))
 			{
 				alert('Molimo unesite ispravan broj kartice.');
				result = false;
			}	
		} 

	} 
	
	return result;
}


function isValidCreditCardNumberII(el) {
    var formField,ccType,fieldLabel,required;
	var result = true;
	formField = el.value;
 	var ccNum = formField;

 	ccType = $("paymentChoices").value;
 	fieldLabel = "";
 	
 	
/*
	if (required && !validRequired(formField,fieldLabel))
		result = false;
 
 */
  	if (result && (formField.length>0))
 	{ 
 		if (!allDigits(ccNum))
 		{
 			//alert('Molimo unesite samo brojeve, bez razmaka i crtica u polje "Broj kartice".');
 			el.errors.push("Molimo unesite samo brojeve, bez razmaka i crtica u polje 'Broj kartice'.");
			result = false;
		}	

		if (result)
 		{ 
 			
 			if (!LuhnCheck(ccNum) || !validateCCNum(ccType,ccNum))
 			{
 				el.errors.push("Molimo unesite ispravan broj kartice.");
				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 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");
			result = (cardNum=="4111111111111111") ? false:result;
			break;
		case "AMEX":
			var validNums = "47";
			result = (cardLen == 15) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
			result = (cardNum=="340000000000009") ? false:result;
			break;
		case "AMEX KREDIT":
			var validNums = "47";
			result = (cardLen == 15) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
			result = (cardNum=="340000000000009") ? false:result;
			break;
		case "MASTERCARD":
			var validNums = "12345";
			result = (cardLen == 16) && (firstdig == "5") && (validNums.indexOf(seconddig)>=0);
			result = (cardNum=="5500000000000004") ? false:result;
			break;
		case "DISCOVER":
			result = (cardLen == 16) && (first4digs == "6011");
			break;
		case "DINERS":
			var validNums = "068";
			result = (cardLen == 14) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
			result = (cardNum=="30000000000004") ? false:result;
			break;
		case "DINERS KREDIT":
			var validNums = "068";
			result = (cardLen == 14) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
			result = (cardNum=="30000000000004") ? false:result;
			break;
	}
	return result;
}

