//#######################################################################
// WebCatalog Creator 2003 Script build 159 - webcat.js
//
// © 1999-2003 Grafix Network, Inc.  This software and software source code 
// is protected by copyright law and international treaties.  Unauthorized 
// use of this program, or any portion of it, will result in criminal and 
// civil prosecution to the maximum extent of the law.
//#######################################################################

var notice_no_default = "You can not submit the default value for the customized text.";
var notice_required = "You must specify a value for the customized text.";
var notice_beyond_max = "Please limit your response to XX characters";
var notice_invalid_character = "You can not use the '|' symbol in this field";
var notice_specify_value = "You must specify a value for";
var notice_email_invalid = "The email address you've entered is invalid";
var notice_cc_invalid = "The credit card number you've entered is invalid";
var notice_max_length = "Please limit the number of characters in your response to";

//######################################
function Order_Form_Validate(theForm) {
for (var i=0; i<theForm.elements.length; i++) {
	var validateObj = theForm.elements[i];
	var params = validateObj.id.split("|");
	if ((params[1] == "True") || (params[2] != 0))
	{
	    if (params[2] == 1) { //email address
			if (!(emailCheck (validateObj.value))) {
				alert(notice_email_invalid);
				validateObj.focus();
				return (false);
			}
	    }
	    if (params[2] == 2) { //credit card number
	        if (validateObj == "") {
	            alert(notice_cc_invalid);
	            return (false);
	        }
	        if (!(checkCard(validateObj.value))) {
	            alert(notice_cc_invalid);
	            validateObj.focus();
	            return (false);
	        }
	    }
	    if (validateObj.value == "") {
	            alert(notice_specify_value + " " + params[0]);
	            validateObj.focus();
	            return (false);
	    }
		if (params[3] > 0) {
	        if (validateObj.value.length > params[3]) {
	            alert(notice_max_length + " " + params[3]);
	            validateObj.focus();
	            return  (false);
	        }
		}
	} 
}
return (true);
}
//#################################
//Drop Down Selection
function selectaplace(form) {
	var appname= navigator.appName;
	var appversion=parseInt(navigator.appVersion);
	if (appname == "Netscape" && appversion >= 3) {
		var formindex=form.select1.selectedIndex;
		var storage=form.select1.options[formindex].text;
		if (form.select1.options[formindex].value != "none") {
			var msg=storage+"You are now being transferred to the -> "+storage;
			for (var spot=0;spot<msg.length-storage.length;spot++) {
			var x=msg.substring(spot,msg.length);
			form.select1.options[formindex].text=x;
			for(var d=0;d<150;d++) { };
		}
			window.location=form.select1.options[formindex].value;
			form.select1[formindex].text=storage;
	} else  {
		form.select1[formindex].text="Not a real option!";
		for(var d=0;d<1250;d++) { };
		form.select1[formindex].text=storage;
	   }
	}
		else {
		var formindex=form.select1.selectedIndex;
		window.location=form.select1.options[formindex].value;
   	}	
}

//#################################
//Cart Validate
function cart_validate(theForm)
{
	var stemp;
	if (theForm.personalized_info.value !== "")
	{
		 var parray = theForm.personalized_info.value.split("|");
		 if ((parray[3] == 0) && (theForm.personalized.value == parray[2]) && (theForm.personalized.value !== ""))
			 {
			 	alert(notice_no_default);
			 	return (false);
			 }
		 if ((parray[4] == -1) && (theForm.personalized.value == ""))
			 {
			 	alert(notice_required);
			 	return (false);
			 }
		if ((theForm.personalized.value.length > parray[1]) && (parray[1] > 0))
			{
			 	alert(notice_beyond_max);
			 	return (false);
			}
		for (var i=0; i<theForm.personalized.value.length; i++) {
			stemp = theForm.personalized.value.substring(i, i+1);
			if (stemp == "|")
			{
			 	alert(notice_invalid_character);
			 	return (false);
			}
		}
	}
  	return (true);
}

//######################################
function emailCheck (emailStr) {
var emailPat=/^(.+)@(.+)$/
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
var validChars="\[^\\s" + specialChars + "\]"
var quotedUser="(\"[^\"]*\")"
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
var atom=validChars + '+'
var word="(" + atom + "|" + quotedUser + ")"
var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
var matchArray=emailStr.match(emailPat)
if (matchArray==null) {
	return false
}
var user=matchArray[1]
var domain=matchArray[2]
if (user.match(userPat)==null) {
    return false
}
var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
		return false
	    }
    }
    return true
}
var domainArray=domain.match(domainPat)
if (domainArray==null) {
    return false
}
var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>5) {
   return false
}
if (len<2) {
   var errStr="This address is missing a hostname!"
   return false
}
return true;
}

//######################################
function checkCardNumWithMod10(cardNum) {
	var i;
	var cc = new Array(16);
	var checksum = 0;
	var validcc;
	for (i = 0; i < cardNum.length; i++) {
		cc[i] = Math.floor(cardNum.substring(i, i+1));
	}
	for (i = (cardNum.length % 2); i < cardNum.length; i+=2) {
		var a = cc[i] * 2;
		if (a >= 10) {
			var aStr = a.toString();
			var b = aStr.substring(0,1);
			var c = aStr.substring(1,2);
			cc[i] = Math.floor(b) + Math.floor(c);
		} else {
			cc[i] = a;
		}
	}
	for (i = 0; i < cardNum.length; i++) {
		checksum += Math.floor(cc[i]);
	}
	validcc = ((checksum % 10) == 0);
	return validcc;
}

//######################################
function cleanCardNum(cardNum) {
	var i;
	var ch;
	var newCard = "";
	var pattern = /[0-9]/;
	i = 0;
	while (i < cardNum.length) {
		ch = cardNum.substring(i, i+1);
		if (pattern.test(ch)) {
			newCard += ch;
		}
		i++;
	}
	return newCard;
}
//######################################
function checkCard(cardNum) {
	var validCard;
	var cardLength;
	var cardLengthOK;
	var cardStart;
	var cardStartOK;
	validCard = cleanCardNum(cardNum);
	if (validCard != "") {
		cardStart = validCard.substring(0,1);
		cardStartOK = ( (cardStart == "4") || (cardStart == "5") || (cardStart == "3") || (cardStart == "6") );
		cardLength = validCard.length;		
		if (cardStart == 3) {
		       if (cardLength != 15) { return false; }
		}
		if (cardStart == 4) {
		        if ((cardLength != 13) && (cardLength != 16)) { return false; }
		}
		if (cardStart == 5) {
		        if (cardLength != 16) { return false; }
		}
		if (cardStart == 6) {
		        if (cardLength != 16) { return false; }
		}
		if (checkCardNumWithMod10(validCard)) {
			return true;
		} else {
			return false;
		}
	} else {
		return false;
	}
}
