function showDiv(id, off) {

	var div = document.getElementById(id);
	
	if (off) {
		div.style.display = 'none';
		div.style.visibility = 'hidden';
		document.registration.require_billing_data.value = 0;
	} else {
		div.style.display = 'block';
		div.style.visibility = 'visible';
		document.registration.require_billing_data.value = 1;
	}
}

function setAge() {
	document.registration.age.value = document.registration.bd_year.value + document.registration.bd_month.value + document.registration.bd_day.value;
}

function redirectTO(url) {
	
	document.location = url;

}

function chkNotNull()
{
    var i, campo, nombre, errors;
    errors	= chkNotNull.arguments[0];
	msg		= chkNotNull.arguments[1];
	for (i=2; i< chkNotNull.arguments.length; i += 2)
    {
		campo = chkNotNull.arguments[i];
        nombre = chkNotNull.arguments[i+1];
        if ( !campo.value )
            errors += '- '+ nombre +': ' + msg + '\n';
    }
    return errors;
}

function chkAny(errors, msg, name, f, funcArr)
{
	var e = '', i;
	for (i = 0; i < funcArr.length; i++) {
		eval(funcArr[i]);
		if (!e) {
			return errors;
		}
	}
	errors += '- '+ name +': ' + msg + '\n';
	return errors;
}

function chkCbo()
{
    var i, campo, nombre, errors, msg;
    errors 	= chkCbo.arguments[0];
	msg		= chkCbo.arguments[1];
	
    for (i=2; i< chkCbo.arguments.length; i += 2)
    {    	
        campo  = chkCbo.arguments[i];
        nombre = chkCbo.arguments[i+1];
        if ( (campo.selectedIndex == -1) || (campo.options[campo.selectedIndex].value == null) || 
            (campo.options[campo.selectedIndex].value == '') || 
            (campo.options[campo.selectedIndex].value == 0) )
                errors += '- '+ nombre +': ' + msg + '.\n';
    }

    return errors;
}



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 "3":
			//alert("VISA");
			result = ((cardLen == 16) || (cardLen == 13)) && (firstdig == "4");
			break;
		case "1":
			//alert("AMEX");
			var validNums = "47";
			result = (cardLen == 15) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
			break;
		case "2":
			//alert("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 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 chkCCNum() {
	var i, name, field, errors;
    errors 	= chkCCNum.arguments[0];
	msg 	= chkCCNum.arguments[1];
	
    for ( i = 2; i < chkCCNum.arguments.length; i += 3) {
        field = chkCCNum.arguments[i];
        name = chkCCNum.arguments[i+1];
        ccTypeField = chkCCNum.arguments[i+2];
        if (ccTypeField)
        	ccType = ccTypeField.value;
        else
        	ccType = null;
        if (field.value) {
        	/* First clean spaces and dashes then check for all numbers, valid luhn, and match with cctype  */
			var ccNum = field.value.replace(/\s+|\-/gi, "");
			if (ccNum.match(/[^\d]/) || !luhnCheck(ccNum) || (ccType != null && !validateCCNum(ccType, ccNum))) {
				errors += '- '+ name + ': ' + msg + '\n';
			}
		} 
	}
	return errors;
}

function chkDate()
{
    var i, field, p, name, errors, not_date;
    not_date = 0;
    errors 	= chkDate.arguments[0];
	msg 	= chkDate.arguments[1];
    for ( i = 2; i < chkDate.arguments.length; i += 2) {
        field = chkDate.arguments[i];
        name = chkDate.arguments[i+1];
        
        if (field.value) {
            isplit = field.value.indexOf('/');
            if (isplit == -1 || isplit == field.value.length)
            not_date = 1;
            sMonth = field.value.substring(0, isplit);
            isplit = field.value.indexOf('/', isplit + 1);
            if (isplit == -1 ||  (isplit + 1 )  == field.value.length)
                not_date = 2;
            sDay = field.value.substring((sMonth.length + 1), isplit);
            sYear = field.value.substring(isplit + 1);
            if ( !CheckInteger(sDay) )
                not_date = 3;
            else if ( !CheckRange(sMonth, 1, 12) )
                not_date = 4;
            else if ( !CheckInteger(sYear))
                not_date = 5;
            else if ( !CheckRange(sYear, 0, null) )
                not_date = 6;
			else if ( sYear.length != 4 && sYear.length !=2 )
				not_date = 7;
            else if ( !CheckInteger(sMonth) )
                not_date = 8;
            else if ( !CheckDay(sYear, sMonth, sDay) )
                not_date = 9;

			if (not_date)
                errors += '- '+ name + ': ' + msg + '.\n';
        }
    }
    return errors;
}

function CheckDay(checkYear, checkMonth, checkDay)
{
    maxDay = 31;
    if (checkMonth == 4 || checkMonth == 6 ||
        checkMonth == 9 || checkMonth == 11)
            maxDay = 30;
    else if (checkMonth == 2)
    {
        if (checkYear % 4 > 0)
            maxDay =28;
        else if (checkYear % 100 == 0 && checkYear % 400 > 0 )
            maxDay = 28;
        else
            maxDay = 29;
    }
    return CheckRange(checkDay, 1, maxDay);
}

function CheckInteger(object_value)
{
    var decimal_format = ".";
    var check_char;
    if (object_value.length == 0)
        return true;
    check_char = object_value.indexOf(decimal_format)
    if (check_char < 1)
        return CheckNumber(object_value);
    else
        return false;
}

function NumberRange(object_value, min_value, max_value)
{
    if (min_value != null)
        if (object_value < min_value)
            return false;
    if (max_value != null)
        if (object_value > max_value)
            return false;
    return true;
}

function CheckRange(object_value, min_value, max_value)
{
    if (object_value.length == 0)
        return true;
    if (!CheckNumber(object_value))
        return false;
    else
        return (NumberRange((eval(object_value)), min_value, max_value));
    return true;
}

function CheckNumber(object_value)
{
    var start_format = " .+-0123456789";
    var number_format = " .0123456789";
    var check_char;
    var decimal = false;
    var trailing_blank = false;
    var digits = false;

    if (object_value.length == 0)
        return true;

    check_char = start_format.indexOf(object_value.charAt(0))
    if (check_char == 1)
        decimal = true;
    else if (check_char < 1)
        return false;
    for (var i = 1; i < object_value.length; i++)
    {
        check_char = number_format.indexOf(object_value.charAt(i))
        if (check_char < 0)
            return false;
	else if (check_char == 1)
	{
            if (decimal)
                return false;
            else
                decimal = true;
        }
        else if (check_char == 0)
        {
            if (decimal || digits)	
            trailing_blank = true;
        }
        else if (trailing_blank)
            return false;
        else
            digits = true;
    }	
    return true
}

function chkDepends(errors, msg, f, arrConds, arrChks) {
	var e = '', i;
	for (i = 0; i < arrConds.length; i++) {
		eval(arrConds[i]);
		if (e) {
			return errors;
		}
	}
	e = '';
	for (i = 0; i < arrChks.length; i++)
		eval(arrChks[i]);
	if (e && msg)
		errors += msg + '\n';
	errors += e;
	return errors;
}


function chkEmail()
{
    var i, name, field, errors;
    errors 	= chkEmail.arguments[0];
	msg 	= chkEmail.arguments[1];
    for ( i = 2; i < chkEmail.arguments.length; i += 2)
    {
        field = chkEmail.arguments[i];
        name = chkEmail.arguments[i+1];
        if (field.value)
        {
            var tevaloresults = true;
            var valor = field.value;
            var index = 0;
            var filter=/^.+@.+\..+$/
            var filter2=/\.\./
            var rejected = false;
            var rejectedDomain=new Array();
            rejectedDomain[index]="";
            if (filter.test(valor))
            {
                var tempstring = valor.split("@");
                tempstring = tempstring[1].split(".")
                for ( i = 0; i < rejectedDomain.length; i++)
                    if (tempstring[0]==rejectedDomain[i])
                        rejected=true

                if ( filter2.test(valor) )
                    errors += '- '+ name + ': ' + msg + '\n';
            }
            else
                errors += '- '+ name + ': ' + msg + '\n';
        }
    }
    return errors;
}

function chkEqual()
{ //No Null


  var i,field1,field2,name2,msg,errors,val;

	errors	= chkEqual.arguments[0];
	msg		= chkEqual.arguments[1];
	for (i=2; i< chkEqual.arguments.length; i += 4)
    {
        field2 	= chkEqual.arguments[i];
		field1 	= chkEqual.arguments[i+1];
        val 	= chkEqual.arguments[i+2];
        name2 	= chkEqual.arguments[i+3];
        if ( field2 && field1.value != field2.value) {
            errors += '- '+ name2 +': ' + msg + '\n';
        } else if ( val && val != field1.value) {
            errors += '- '+ name2 +': ' + msg + '\n';
        }
    }

	return errors;
} //End validateLength

function chkInteger()
{
    var i, campo, nombre, numero, errors;
    errors	= chkInteger.arguments[0];
    msg		= chkInteger.arguments[1];
   for ( i = 2; i < chkInteger.arguments.length; i += 2)
    {
        campo = chkInteger.arguments[i];
        nombre = chkInteger.arguments[i+1];
        if (campo.value)
        {
			numero = parseInt( campo.value );
            if ( campo.value != '' + numero)
                errors += '- '+ nombre +': ' + msg + '\n';
        }
    }
    return errors;
}

function chkLength()
{ //No Null

  var i,field,message,errors,minLen;

	errors	= chkLength.arguments[0];
	msg		= chkLength.arguments[1];
	len		= chkLength.arguments[2];
	for (i=3; i< chkLength.arguments.length; i += 2)
    {
        field 	= chkLength.arguments[i];
        name 	= chkLength.arguments[i+1];
        if ( field.value && field.value.length != len)
            errors += '- '+ name +': ' + msg + '\n';
    }

	return errors;
} //End validateLength

function chkLengthRange()
{
  var i,field,message,errors,minLen;

	errors	= chkLengthRange.arguments[0];
	msg		= chkLengthRange.arguments[1];
	lenMin	= chkLengthRange.arguments[2];
	lenMax	= chkLengthRange.arguments[3];
	for (i=4; i< chkLengthRange.arguments.length; i += 2)
    {
        field 	= chkLengthRange.arguments[i];
        name 	= chkLengthRange.arguments[i+1];
        if ( field.value && (field.value.length < lenMin || field.value.length > lenMax) )
            errors += '- '+ name +': ' + msg + '\n';
    }
	return errors;
}

function chkMulti(errors, msg, name, f, funcArr)
{
	var e = '', i;
	for (i = 0; i < funcArr.length; i++) {
		eval(funcArr[i]);
		if (e) {
			errors += '- '+ name +': ' + msg + '\n';
			return errors;
			//break;
		}
	}
	return errors;
}


function chkNull()
{
    var i, campo, nombre, errors;
    errors	= chkNull.arguments[0];
	msg		= chkNull.arguments[1];
	for (i=2; i< chkNull.arguments.length; i += 2)
    {
        campo = chkNull.arguments[i];
        nombre = chkNull.arguments[i+1];
        if ( campo.value )
            errors += '- '+ nombre +': ' + msg + '\n';
    }
    return errors;
}

function chkNumeric()
{
    var i, campo, nombre, numero, errors;
    errors	= chkNumeric.arguments[0];
    msg		= chkNumeric.arguments[1];
   for ( i = 2; i < chkNumeric.arguments.length; i += 2)
    {
        campo = chkNumeric.arguments[i];
        nombre = chkNumeric.arguments[i+1];
        if (campo.value && isNaN(parseFloat(campo.value)))
        {
            //num = convertNum(campo.value);
			//numero = parseFloat( num );
            //if ( num != '' + numero)
                errors += '- '+ nombre +': ' + msg + '\n';
        }
    }
    return errors;
}

function chkNumRange()
{
  var i,field,message,errors,minLen;

	errors	= chkNumRange.arguments[0];
	msg		= chkNumRange.arguments[1];
	min	= chkNumRange.arguments[2];
	max	= chkNumRange.arguments[3];
	for (i=4; i< chkNumRange.arguments.length; i += 2)
    {
        field 	= chkNumRange.arguments[i];
        name 	= chkNumRange.arguments[i+1];
        if ( field.value)
			if( ( min && parseFloat(field.value) < min) ||
				( max && parseFloat(field.value) > max)   )
            	errors += '- '+ name +': ' + msg + '\n';
    }
	return errors;
}

function chkRadio() 
{
    var i, campo, nombre, errors, flag, x;
    errors	= chkRadio.arguments[0];
    msg		= chkRadio.arguments[1];
   for ( i = 2; i < chkRadio.arguments.length; i += 2) {
		flag = 1;
        campo = chkRadio.arguments[i];
        nombre = chkRadio.arguments[i+1];
		
		if(campo.length) {
			for (x = 0; x < campo.length; x++)  {
					if (campo[x].checked == "1")
						flag = 0; 
			}
		} else {
			if (campo.checked)
				flag = 0; 
		}

		if (flag) {
			errors += '- '+ nombre+ ': ' + msg +'\n';
		}

    }
    return errors;
}

function chkRegEx()
{
    var i, name, field, errors, regex;
    errors 	= chkRegEx.arguments[0];
	msg 	= chkRegEx.arguments[1];
	regex	= chkRegEx.arguments[2];
    for ( i = 3; i < chkRegEx.arguments.length; i += 2)
    {
        field = chkRegEx.arguments[i];
        name = chkRegEx.arguments[i+1];
        if (field.value && !regex.test(field.value))
                errors += '- '+ name + ': ' + msg + '\n';
    }
    return errors;
}
