function Replace(sString, sOld, sNew)
{
	for(var sTemp=sString;sTemp!=sTemp.replace(sOld, sNew);sTemp=sTemp.replace(sOld, sNew));
	return sTemp;
}

function ValidateCreditCardNumber(frmForm, sFieldCard, sFieldType)
{
	var sCard=frmForm.elements[sFieldCard].value;
	sCard=Replace(Replace(Replace(Replace(Replace(Replace(sCard, '-', ''), ' ', ''), '/', ''), '\\', ''), '|', ''), '_', '');
	if (sCard=='') return true;
	var nType=frmForm.elements[sFieldType].value;
	var nTotal=0;
	var nMulti=0;
	var nDigit=0;
	var nTemp=0;
	if ((nType==1)&&((sCard.length==8)||(sCard.length==9)))
	{
		//Isracart - 8 or 9 digits
		if (sCard.length==8) sCard='0'+sCard;
		for (var i=8;i>=0;i--)
		{
			nMulti++;
			nDigit=sCard.substr(i,1);
			nTotal+=nMulti*nDigit;
		}
		return ((nTotal>0)&&(Math.round(nTotal/11)*11==nTotal))
	}
	else
	{
		nMulti=2;
		for (var i=sCard.length-1;i>-1;i--)
		{
			nMulti=3-nMulti;
			nDigit=sCard.substr(i,1);
			nTemp=nMulti*nDigit;
			if (nTemp>9) nTemp=nTemp-9;
			nTotal+=nTemp;
		}
		return (Math.round(nTotal/10)*10==nTotal);
	}
}

function ValidateCreditCardType(frmForm, sFieldCard, sFieldType)
{
	var sCard=frmForm.elements[sFieldCard].value;
	sCard=Replace(Replace(Replace(Replace(Replace(Replace(sCard, '-', ''), ' ', ''), '/', ''), '\\', ''), '|', ''), '_', '');
	if (sCard=='') return true;
	var nType=frmForm.elements[sFieldType].value;
	if (nType==1)
	{
		//Isracart
		if (sCard.length==9) return true;
		if (sCard.length==8) return true;
		if ((sCard.length==16)&&((sCard.substr(0,1)=='5')||(sCard.substr(0,1)=='6'))) return true;
		return false;
	}
	if ((nType==2)||(nType==5))
	{
		//Visa CAAL
		if (sCard.length==16)
		{
			if (((sCard.substr(0,1)=='3')||(sCard.substr(0,1)=='4'))&&((sCard.substr(0,6)<352800)||(sCard.substr(0,6)>358999))) return true;
			return false;
		}
		if ((sCard.length<11)||(sCard.length>19)) return false;
		if (sCard.substr(0,1)=='4') return true;
		return false;
	}
	if (nType==3)
	{
		//Diners
		if ((sCard.length==14)&&((sCard.substr(0,1)=='3')||(sCard.substr(0,1)=='6'))) return true;
		return false;
	}
	if (nType==4)
	{
		//American Express
		if ((sCard.length==15)&&((sCard.substr(0,2)=='34')||(sCard.substr(0,2)=='37'))) return true;
		return false;
	}
	if (nType==6)
	{
		//Alpha Card
		if ((sCard.length==16)&&(sCard.substr(0,1)=='4'))
		{
			if(sCard.substr(0,4)=='4580') return true;
			return true;
		}
		return false;
	}
}

function ValidateCreditCardValidity(frmForm, sFieldMonth, sFieldYear, nMonth, nYear)
{
	if (isNaN(parseInt(frmForm.elements[sFieldMonth].value))||isNaN(parseInt(frmForm.elements[sFieldYear].value))) return false;
	if ((frmForm.elements[sFieldMonth].value<1)||(frmForm.elements[sFieldMonth].value>12)) return false;
	if ((frmForm.elements[sFieldYear].value-nYear>0)||((frmForm.elements[sFieldYear].value-nYear==0)&&(frmForm.elements[sFieldMonth].value-nMonth>=0))) return true;
	return false;
}

function ValidateCreditCard(frmForm, sFieldCard, sFieldType, sFieldMonth, sFieldYear, nMonth, nYear, sErrorInvalidNumber, sErrorInvalidType, sErrorCardExpired)
{
	var sCard=frmForm.elements[sFieldCard].value;
	sCard=Replace(Replace(Replace(Replace(Replace(Replace(sCard, '-', ''), ' ', ''), '/', ''), '\\', ''), '|', ''), '_', '');
	frmForm.elements[sFieldCard].value=sCard;

	var sAsterisks="xxxxxxxxxxxxxxxxxxxx";
	if ((sCard.substr(0,sCard.length-4)==sAsterisks.substr(0,sCard.length-4))&&(sCard.length>7)) return true;
	if (!ValidateCreditCardNumber(frmForm, sFieldCard, sFieldType))
	{
		if (sErrorInvalidNumber=="") alert("Invalid credit card number!"); else alert(sErrorInvalidNumber);
		frmForm.elements[sFieldCard].focus();
		return false;
	}
	if (!ValidateCreditCardType(frmForm, sFieldCard, sFieldType))
	{
		if (sErrorInvalidType=="") alert("Credit card number doesn\'t match its type!"); else alert(sErrorInvalidType);
		
		frmForm.elements[sFieldType].focus();
		return false;
	}
	if (!ValidateCreditCardValidity(frmForm, sFieldMonth, sFieldYear, nMonth, nYear))
	{
		if (sErrorCardExpired=="") alert("Credit card expired!"); else alert(sErrorCardExpired);
		
		frmForm.elements[sFieldMonth].focus();
		return false;
	}
	return true;
}
