/////////////////////////////////////////////////////////////////////////////////
//                                                                             //
//  Copyright © 2004-2005 Calliope. All Rights Reserved.                       //
//                                                                             //
//  This file is part of the Calliope Blogging Solution, developed by          //
//  dotPH Technologies Inc. Calliope is a comprehensive, easy-to-use           //
//  solution for people who want a presence on the Internet.                   //
//                                                                             //
//  This copyright notice must not be modified or removed from any of the      //
//  source code.                                                               //
//                                                                             //
//  YOU MAY NOT MODIFY OR REDISTRIBUTE THE SOFTWARE.                           //
//                                                                             //
//  THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY WARRANTY. ANY EXPRESS OR  //
//  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES  //
//  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.    //
//  IN NO EVENT SHALL THE AUTHORS BE LIABLE TO ANY PARTY FOR ANY DIRECT,       //
//  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES         //
//  ARISING IN ANY WAY OUT OF THE USE OR MISUSE OF THIS PACKAGE.               //
//                                                                             //
/////////////////////////////////////////////////////////////////////////////////

function checkDomain(form) {
	form.domainname.required = true;
	form.domainname.requiredError = lang("DomainRequired");
	form.domainname.numeric = true;
	form.domainname.numericError = lang("DomainNumeric");
	form.domainname.numericstart = true;
	form.domainname.numericErrorStart = lang("DomainNumericStart");
	form.domainname.validchars = true;
	form.domainname.validcharsError = lang("DomainValidChars");
	form.domainname.maxlength = 32;
	form.domainname.maxlengthError = lang("DomainMaxLength");
	form.domainname.minlength = 3;
	form.domainname.minlengthError = lang("DomainMinLength"); 
	return checkError(form);
}	


function checkYourName(name)
{
   var regexHasValidCharacters = /^[a-z0-9'"._ -]+$/i;
   var regexHasAtLeastOneLetter = /[a-z]/i;

   if(!name.match(regexHasValidCharacters))
   {
      return false;
   }

   if(!name.match(regexHasAtLeastOneLetter))
   {
      return false;
   }

   return true;
}


function checkUserName(username) { 
	// allow only letters and numbers on username field
	var illegalChars = /[\W_]/; 

	// check required fields
	if (username == "") {
		alert(lang("RequiredUsername"));
		return false;
	}

	// check for illegal characters in username
    else if (illegalChars.test(username))  {
		alert(lang("UsernameValidChars"));
		return false;
    }

	// check for domain length
    else if ((username.length < 3) || (username.length > 32)) {
		alert(lang("DomainMaxLength") + ' ' + lang("DomainMinLength"));
		return false;
    }

	// check if user entered only numeric values
	else if (isNumeric(username) == false) {
		alert(lang("DomainNumeric"));
		return false;
	}	

   // do not start with a number
   else if (isNumericStart(username) == false) {
		alert(lang("DomainNumericStart"));
		return false;
   }

	else {
		return true;
	}
}

function checkUserInfo(form) {
	// check domain 
	if (checkUserName(form.username.value) == false) {
		return false;
	}

	// check required fields
	if (form.useremail.value == "") {
		alert(lang("RequiredEmailAddress"));
		return false;
	}
	else if (form.userpassword1.value == "") {
		alert(lang("RequiredPassword1"));
		return false;
	}
	else if (form.userpassword2.value == "") {
		alert(lang("RequiredPassword2"));
		return false;
	}
	else if (form.userchallenge.value == "") {
		alert(lang("RequiredChallenge"));
		return false;
	}
	else if (form.useranswer.value == "") {
		alert(lang("RequiredAnswer"));
		return false;
	}
	//else if (form.usermobile.value == "") {
	//	alert(lang("RequiredMobile"));
	//	return false;
	//}

	// check if mobile number starts with 0
	//else if (form.usermobile.value.charAt(0) == "0") {
	//	alert(lang("MobileInvalid"));
	//	return false;
	//}

        // check if the user-friendly name is valid
        else if(!checkYourName(form.yourname.value)) {
                alert(lang('YourNameInvalid'));
                return false;
        }

	// check if passwords matched
	else if (form.userpassword1.value != form.userpassword2.value) {
		alert(lang("PasswordsNotMatch"));
		return false;
	}

	// check password 
	else if (checkPassword(form.userpassword1.value) == false) {
		return false;
	}

	// check valid email address
	else if (!checkEmail(form.useremail.value)) {
		return false;
	}


	// check if user entered only numeric values in the mobile field
	//else if (!allDigits(form.usermobile.value)) {
	//	alert(lang("MobileNotAllDigits"));
	//	return false;
	//}	

	//else if (!((form.userpassword1.value.search(/(a-z)+/)) && (form.userpassword1.value.search(/(A-Z)+/)) && (form.password1.value.search(/(0-9)+/)))) {
	//	alert(lang("PasswordCombination"));
	//	return false;
	//}
	
	// check if checkbox for service agreement is checked
    else if (form.agreement.checked == false)  {
		alert(lang("AgreementChecked"));
		return false;
    }

	else {
		return true;
	}
}



function checkUserEmail(form) {
	// check required fields
	if (form.useremail.value == "") {
		alert(lang("RequiredEmailAddress"));
		return false;
	}

	// check valid email address
	else if (!checkEmail(form.useremail.value)) {
		return false;
	}
	else {
		return true;
	}
}

function checkUserMobile(form) {
	// check required fields
	if (form.usermobile.value == "") {
		alert(lang("RequiredMobile"));
		return false;
	}

	else {
		return true;
	}
}

function checkpath(form) {
	// allow only a slash at the start
	var startchar = /^\//; 

	if (form.homepage[0].checked == true && form.directory.value != "") {
		if ((startchar.test(form.directory.value)))  {
			return true;
		}
		else {
			alert("Your path should start with a slash (/). Do not put http, www and your domain.");
			return false;
		}
	} else {
		return true;
	}
	//alert("Your path should start with a slash (/). Do not put http, www and your domain.");
	//return false;
}



function checkPasswordInfo(form) {
	// check required fields
	//if (form.useremail.value == "") {
	//	alert(lang("RequiredEmailAddress"));
	//	return false;
	//}
	//else 
	if (form.userchallenge.value == "") {
		alert(lang("RequiredChallenge"));
		return false;
	}
	else if (form.useranswer.value == "") {
		alert(lang("RequiredAnswer"));
		return false;
	}
	//else if (form.usermobile.value == "") {
	//	alert(lang("RequiredMobile"));
	//	return false;
	//}

	// check valid email address
	//else if (!checkEmail(form.useremail.value)) {
	//	return false;
	//}

	else if (form.userpassword1.value) {
		// check if passwords matched
		if (form.userpassword1.value != form.userpassword2.value) {
			alert(lang("PasswordsNotMatch"));
			return false;
		}

		// check password 
		else if (checkPassword(form.userpassword1.value) == false) {
			return false;
		}
	}
	else {
		return true;
	}
}

function checkRenewalInfo(form) {
	if (form.renew[1].checked) {
		return checkCreditCard(form);
	}
}

function checkBlogSecurity(form) {
	// allow only letters and numbers on username field
	var illegalChars = /[\W_]/; 

	// check required fields
	if (form.username.value == "") {
		alert(lang("RequiredUsername"));
		return false;
	}

	// check password 
	else if (checkPassword(form.password.value) == false) {
		return false;
	}

	// check for illegal characters in username
    //else if (illegalChars.test(form.username.value))  {
	//	alert(lang("UsernameValidChars"));
	//	return false;
    //}

	else {
		return true;
	}
}

function checkNewAlbum(form) {
	// allow only letters and numbers on album name
	var illegalChars = /[\W_]/; 

	// check required fields
	if (form.albumname.value == "") {
		alert(lang("RequiredAlbumName"));
		return false;
	}
	else if (form.albumtitle.value == "") {
		alert(lang("RequiredAlbumTitle"));
		return false;
	}

	// check for illegal characters in username
    else if (illegalChars.test(form.albumname.value))  {
		alert(lang("AlbumNameValidChars"));
		return false;
    }

	else {
		return true;
	}
}

function checkNewBlog(form) {
	// allow only letters and numbers on album name
	var illegalChars = /[\W_]/; 

	// check required fields
	if (form.blogname.value == "") {
		alert(lang("RequiredBlogName"));
		return false;
	}
	else if (form.blogtitle.value == "") {
		alert(lang("RequiredBlogTitle"));
		return false;
	}

	// check for illegal characters in username
    else if (illegalChars.test(form.blogname.value))  {
		alert(lang("BlogNameValidChars"));
		return false;
    }

	else {
		return true;
	}
}

function checkPayforAccess(form) {
	if ((form.pfa_status.value == 1) || (form.pfa_status.checked)) {
		if (form.title.value == "") {
			alert(lang("RequiredPfATitle"));
			return false;
		}
		else if (form.salespitch.value == "") {
			alert(lang("RequiredPfASalesPitch"));
			return false;
		}
		else if ((form.usdprice_status) && (form.usdprice_status.checked) && (form.usdprice.value == "")) {
			alert(lang("RequiredPaypalPrice"));
			return false;
		}
		else if ((form.phpprice_status) && (form.phpprice_status.checked) && (form.phpprice.value == "")) {
			alert(lang("RequiredGCashPrice"));
			return false;
		}
		else if ((form.usdprice_status) && (form.usdprice_status.checked) && (form.usdprice.value < 1)) {
			alert(lang("MinimumPaypal"));
			return false;
		}
		else if ((form.phpprice_status) && (form.phpprice_status.checked) && (form.phpprice.value < 5)) {
			alert(lang("MinimumGCash"));
			return false;
		}
		else if ((!form.phpprice_status.checked) && (!form.usdprice_status.checked)) {
			alert("You must have at least 1 payment option.");
			return false;
		}
		else {
			return true;
		}
	} 
	else {
		return true;
	}
}

function checkPayToDetails(form) {
	if (form.remit_type.value == "G-Cash") {
		if (form.gcashaccountid.value == "") {
			alert(lang("RequiredField"));
			return false;
		}
	}
	if (form.remit_type.value == "Paypal") {
		if (form.paypalaccountid.value == "") {
			alert(lang("RequiredField"));
			return false;
		}
	}
	if (form.remit_type.value == "Bank") {
		if ((form.bankaccountprovider.value == "") || (form.bankaccountname.value == "") || (form.bankaccountid.value == "")) {
			alert(lang("RequiredField"));
			return false;
		}
	}
	else {
		return true;
	}
}

function checkPassword(form) {
	// allow only letters and numbers on password field
	var illegalChars = /[\W_]/; 

	if (form == "") {
		alert(lang("RequiredPassword1"));
		return false;
	}

	// check for password length
    else if ((form.length < 6)) {
		if (form == "demo") {
			return true;
		} else {
			alert('Your password must have a minimum of 6 characters');
			return false;
		}
    }

	// check for illegal characters in password
    else if (illegalChars.test(form))  {
		alert(lang("PasswordValidChars"));
		return false;
    }
}

function checkSecretCode(form) {
	if (form.useremail.value == "") {
		alert("Enter required field");
		return false;
	}

	else if (form.secretcode.value == "") {
		alert("Enter required field");
		return false;
	}

	// check for illegal characters in password
    else if (!isValidChars(form.secretcode.value))  {
		alert("Invalid character found");
		return false;
    }
}


function checkLogin(form) {
	// allow only letters and numbers on username
	var illegalChars = /[\W_]/; 

	// check required fields
	if (form.logindomainname.value == "") {
		alert(lang("RequiredUsername"));
		return false;
	}

	// check password 
	else if (checkPassword(form.loginpassword.value) == false) {
	//if (checkPassword(form.loginpassword.value) == false) {
		return false;
	}

	// check for illegal characters in username
    //else if (illegalChars.test(form.logindomainname.value))  {
	//	alert(lang("UsernameValidChars"));
	//	return false;
    //}
	else {
		return true;
	}
}

function checkGalleryInfo(form) {
	// allow only letters and numbers on username field
	//var illegalChars = /[\W_]/; 

	// check required fields
	if (form.title.value == "") {
		alert(lang("RequiredGalleryTitle"));
		return false;
	}

	// check password 
	else if (checkPassword(form.password.value) == false) {
		return false;
	}

	else {
		return true;
	}
}

function checkCategory(form) {

	// check required fields
	if (form.categoryname.value == "") {
		alert(lang("RequiredCategoryName"));
		return false;
	}

	else {
		return true;
	}
}




// Remove all spaces from a string
function removeSpaces(string) {
   var newString = '';
   for (var i = 0; i < string.length; i++) {
      if (string.charAt(i) != ' ') newString += string.charAt(i);
   }
   return newString;
}

function checkCreditCard(form) {
	// allow only letters and numbers 
	var illegalChars = /[\W_]/; 

	// check required fields
	if (form.cardnumber.value == "") {
		alert(lang("RequiredCardNumber"));
		return false;
	}
	else if (form.cardname.value == "") {
		alert(lang("RequiredCardName"));
		return false;
	}
	else if (form.cardcvv2.value == "") {
		alert(lang("RequiredCardCVV2"));
		return false;
	}
	else if (form.billingaddress.value == "") {
		alert(lang("RequiredBillingAddress"));
		return false;
	}
	else if (form.billingphone.value == "") {
		alert(lang("RequiredBillingPhone"));
		return false;
	}

	// check for illegal characters in card name
    else if (illegalChars.test(removeSpaces(form.cardname.value)))  {
		alert(lang("CardNameValidChars"));
		return false;
    }


	// check if user entered only numeric values
	else if (!allDigits(form.cardnumber.value)) {
		alert(lang("CreditCardNotAllDigits"));
		return false;
	}

	// check if user entered only numeric values
	else if (!allDigits(form.cardcvv2.value)) {
		alert(lang("CVV2NotAllDigits"));
		return false;
	}


	// check if credit card is valid
 	else if (!LuhnCheck(form.cardnumber.value) || !validateCCNum(form.cardtype.value,form.cardnumber.value)) {
		alert(lang("CreditCardNotValid"));
		//form.cardnumber.focus();
		return false;
	}

	// check expiry date
 	else if (!validateExpiryDate(form.cardexpiremonth.value,form.cardexpireyear.value)) {
		alert(lang("CreditCardExpired"));
		return false;
	}

	else {
		return true;
	}
}

function getErrors(form) {
   var errors = new Array();
   var element = form.elements[0];
   element.value = trimWhitespace(element.value);
         
   // required element
   if (element.required  && element.value == '') {
      errors[errors.length] = element.requiredError;
   }
         
   // maximum length
   else if (element.maxlength && isValidLength(element.value, 0, element.maxlength) == false) {
      errors[errors.length] = element.maxlengthError;
   }

   // minimum length
   else if (element.minlength && isValidLength(element.value, element.minlength, Number.MAX_VALUE) == false) {
      errors[errors.length] = element.minlengthError;
   }
         
   // valid characters
   else if (element.validchars && isValidChars(element.value) == false) {
     errors[errors.length] = element.validcharsError;
   }

   // numbers only
   else if (element.numeric && isNumeric(element.value) == false) {
      errors[errors.length] = element.numericError;
   }

   // do not start with a number
   else if (element.numericstart && isNumericStart(element.value) == false) {
      errors[errors.length] = element.numericErrorStart;
   }
    
   return errors;

}

// Check that the number of characters in a string is between a max and a min
function isValidLength(string, min, max) {
   if (string.length < min || string.length > max) return false;
   else return true;
}

// Check that a string contains valid domain characters
function isValidChars(string) {
   if (string.search) {
      //if (string.search(/^[a-z0-9]+([a-z0-9\-])*([a-z0-9])+$/) != -1) return true;
	  if (string.search(/^[a-zA-Z]*([a-zA-Z0-9])+$/) != -1) return true;
   }
   return false;
}

// Check that a string contains only numbers
function isNumeric(string) {
   if (string.search) {
      if (string.search(/^[0-9]+$/) != -1) return false;
   }
   return true;
}

// Check that a string starts with a number
function isNumericStart(string) {
   if (string.search) {
      if (string.search(/^[0-9]/) != -1) return false;
   }
   return true;
}

// Remove all spaces from a string
function removeSpaces(string) {
   var newString = '';
   for (var i = 0; i < string.length; i++) {
      if (string.charAt(i) != ' ') newString += string.charAt(i);
   }
   return newString;
}

// Remove leading and trailing whitespace from a string
function trimWhitespace(string) {
   var newString  = '';
   var substring  = '';
   beginningFound = false;
	
   // copy characters over to a new string
   // retain whitespace characters if they are between other characters
   for (var i = 0; i < string.length; i++) {
		
      // copy non-whitespace characters
      if (string.charAt(i) != ' ' && string.charCodeAt(i) != 9) {
			
         // if the temporary string contains some whitespace characters, copy them first
         if (substring != '') {
            newString += substring;
            substring = '';
         }
         newString += string.charAt(i);
         if (beginningFound == false) beginningFound = true;
      }
		
      // hold whitespace characters in a temporary string if they follow a non-whitespace character
      else if (beginningFound == true) substring += string.charAt(i);
   }
   return newString;
}

// check if there is an error
function checkError(form) {
   var errors = getErrors(form);

   if (errors.length > 0) {
      var errorMessage = ((errors.length > 1) ? 's' : '');
      for (var errorIndex = 0; errorIndex < errors.length; errorIndex++) {
         errorMessage += errors[errorIndex] + '\n';
      }
      //alert(errorMessage);
      //return false;
	  return errorMessage;
   }
   // no errors: return true
   return false;
}

// check if email address is valid
function checkEmail(emailStr) {
	/* The following variable tells the rest of the function whether or not
	to verify that the address ends in a two-letter country or well-known
	TLD.  1 means check it, 0 means don't. */
	var checkTLD=1;

	/* The following is the list of known TLDs that an e-mail address must end with. */

	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;

	/* The following pattern is used to check if the entered e-mail address
	fits the user@domain format.  It also is used to separate the username
	from the domain. */

	var emailPat=/^(.+)@(.+)$/;

	/* The following string represents the pattern for matching all special
	characters.  We don't want to allow special characters in the address. 
	These characters include ( ) < > @ , ; : \ " . [ ] */

	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";

	/* The following string represents the range of characters allowed in a 
	username or domainname.  It really states which chars aren't allowed.*/

	var validChars="\[^\\s" + specialChars + "\]";

	/* The following pattern applies if the "user" is a quoted string (in
	which case, there are no rules about which characters are allowed
	and	which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
	is a legal e-mail address. */

	var quotedUser="(\"[^\"]*\")";

	/* The following pattern applies for domains that are IP addresses,
	rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
	e-mail address. NOTE: The square brackets are required. */

	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;

	/* The following string represents an atom (basically a series of non-special characters.) */

	var atom=validChars + '+';

	/* The following string represents one word in the typical username.
	For example, in john.doe@somewhere.com, john and doe are words.
	Basically, a word is either an atom or quoted string. */

	var word="(" + atom + "|" + quotedUser + ")";

	// The following pattern describes the structure of the user

	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");

	/* The following pattern describes the structure of a normal symbolic
	domain, as opposed to ipDomainPat, shown above. */

	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

	/* Finally, let's start trying to figure out if the supplied address is valid. */

	/* Begin with the coarse pattern to simply break up user@domain into
	different pieces that are easy to analyze. */

	var matchArray=emailStr.match(emailPat);

	if (matchArray==null) {
		/* Too many/few @'s or something; basically, this address doesn't
		even fit the general mould of a valid e-mail address. */
		alert(lang("EmailIncorrect"));
		return false;
	}

	var user=matchArray[1];
	var domain=matchArray[2];

	// Start by checking that only basic ASCII characters are in the strings (0-127).

	for (i=0; i<user.length; i++) {
		if (user.charCodeAt(i)>127) {
			alert(lang("EmailNameInvalid"));
			return false;
		}
	}

	for (i=0; i<domain.length; i++) {
		if (domain.charCodeAt(i)>127) {
			alert(lang("EmailDomainInvalid"));
			return false;
		}
	}

	// See if "user" is valid 

	if (user.match(userPat)==null) {
		// user is not valid
		alert(lang("EmailNameInvalid"));
		return false;
	}

	/* if the e-mail address is at an IP address (as opposed to a symbolic
	host name) make sure the IP address is valid. */

	var	IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		// this is an IP address
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				alert(lang("EmailIPInvalid"));
				return false;
			}
		}
		return true;
	}

	// Domain is symbolic name.  Check if it's valid.
 
	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;
	for (i=0;i<len;i++) {
		if (domArr[i].search(atomPat)==-1) {
			alert(lang("EmailDomainInvalid"));
			return false;
	   }
	}	

	/* domain name seems valid, but now make sure that it ends in a
	known top-level domain (like com, edu, gov) or a two-letter word,
	representing country (uk, nl), and that there's a hostname preceding 
	the domain or country. */

	if (checkTLD && domArr[domArr.length-1].length!=2 && 
		domArr[domArr.length-1].search(knownDomsPat)==-1) {
		alert(lang("EmailExtensionInvalid"));
		return false;
	}

	// Make sure there's a host name preceding the domain.

	if (len<2) {
		alert(lang("EmailMissingHostname"));
		return false;
	}

	// If we've gotten this far, everything's valid!
	return true;
}


//
// functions for credit card validation
//

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 validateExpiryDate(month,year)
{
	var result = true;
		
 	var now = new Date();
 	var nowMonth = now.getMonth() + 1;
 	var nowYear = now.getFullYear();
	//var nowYear = now.getYear();
 			
 	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

	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 isValidName(formField,fieldLabel,required)
{
	var result = true;
	if (required && !validRequired(formField,fieldLabel))
		result = false;
}

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(form) {
	var ccTypeField = form.cardtype;
	var ccNumField = form.cardnumber;
	var ccExpField = form.cardexpiremonth + "/" + form.cardexpireyear;
	var ccNameField = form.cardname;
	var result = isValidCreditCardNumber(ccNumField,ccTypeField.value,"Card Number",true) &&
		isValidExpDate(ccExpField,"Expiration Date",true) &&
		isValidName(ccNameField,"Name on Card",true);
	return result;
}


function checkfileform (form) {
   // ** START **
   if (form.file.value == "") {
     alert( "Please attach the downloaded file." );
     form.file.focus();
     return false ;
   }
   // ** END **
   return true ;
}


function checkmovableform(form) {
   // ** START **


   if (form.bloguser.value == "") {
     alert( "Please type the blogger.com username." );
     form.bloguser.focus();
     return false ;
   }
   else if (form.blogpass.value == "") {
     alert( "Please type the blogger.com password." );
     form.blogpass.focus();
     return false ;
   }
   else if ((form.blogname.value == "") && (!(form.blogexist.checked))) {
     alert( "Please type the blog name." );
     form.blogname.focus();
     return false ;
   }
   else {
     return true ;
   }

   // ** END **
}

