var reg_oktogo    	= 0;
var error_email		= 0;
var reg_field_ids 	= new Array();
var reg_img_ids   	= new Array();
var reg_box_ids   	= new Array();
var reg_msg_ids   	= new Array();
var reg_img_box_ids	= new Array();
var input_green		= "input-green";
var input_red		= "input-red";

function IsNumeric(sText)
{
	var ValidChars = "0123456789";
	var IsNumber = true;
	var Char;

	for (i = 0; i < sText.length && IsNumber == true; i++) 
	{ 
		Char = sText.charAt(i); 
		if (ValidChars.indexOf(Char) == -1) 
		{
			IsNumber = false;
		}
	}
	return IsNumber;
}

var phoneNumberDelimiters = "()- ";
var validWorldPhoneChars = phoneNumberDelimiters + "+";
var minDigitsInIPhoneNumber = 10;

function stripCharsInBag(s, bag)
{   
	var i;
	var returnString = "";
	for (i = 0; i < s.length; i++)
	{   
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1) returnString += c;
	}
	return returnString;
}

function checkInternationalPhone(strPhone){
	s=stripCharsInBag(strPhone,validWorldPhoneChars);
	return (IsNumeric(s) && s.length >= minDigitsInIPhoneNumber);
}

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>3) {
		return false
	}

	if (len<2) {
		return false
	}

	return true;
}

function init_reg_form()
{
	//------------------------------------------
	// INIT objects
	//------------------------------------------
	
	
	//------------------------------------------
	// Fields...
	//------------------------------------------

	reg_field_ids['password']			= document.getElementById( 'reg-password' );
	reg_field_ids['password-check']		= document.getElementById( 'reg-password-check' );
	reg_field_ids['emailaddress']		= document.getElementById( 'reg-emailaddress' );
	reg_field_ids['emailaddress-two']	= document.getElementById( 'reg-emailaddress-two' );
	reg_field_ids['companyname']		= document.getElementById( 'reg-companyname' );
	reg_field_ids['companytitle']		= document.getElementById( 'reg-companytitle' );	
	reg_field_ids['attn']				= document.getElementById( 'reg-attn' );
	reg_field_ids['dept']				= document.getElementById( 'reg-dept' );
	reg_field_ids['streetaddr']			= document.getElementById( 'reg-streetaddr' );
	reg_field_ids['apptnum']			= document.getElementById( 'reg-apptnum' );
	reg_field_ids['city']				= document.getElementById( 'reg-city' );
	reg_field_ids['state']				= document.getElementById( 'reg-state' );
	reg_field_ids['zip']				= document.getElementById( 'reg-zip' );
	reg_field_ids['firstname']			= document.getElementById( 'reg-firstname' );
	reg_field_ids['lastname']			= document.getElementById( 'reg-lastname' );
	reg_field_ids['compph']				= document.getElementById( 'reg-compph' );
	reg_field_ids['compphext']			= document.getElementById( 'reg-compphext' );
	reg_field_ids['fax']				= document.getElementById( 'reg-fax' );
	reg_field_ids['cell']				= document.getElementById( 'reg-cell' );
	reg_field_ids['oktogo']				= document.getElementById( 'oktogo' );
	
	//------------------------------------------
	// Images
	//------------------------------------------
	
	reg_img_ids['password']			= document.getElementById( 'img-password' );
	reg_img_ids['emailaddress']		= document.getElementById( 'img-emailaddress' );
	reg_img_ids['company']			= document.getElementById( 'img-company' );
	reg_img_ids['ship']				= document.getElementById( 'img-ship' );
	reg_img_ids['personal']			= document.getElementById( 'img-personal' );
	reg_img_ids['phone']			= document.getElementById( 'img-phone' );
	
	//------------------------------------------
	// Image Boxes
	//------------------------------------------
	
	reg_img_box_ids['password']		= document.getElementById( 'img-password-box' );
	reg_img_box_ids['emailaddress']	= document.getElementById( 'img-emailaddress-box' );
	reg_img_box_ids['company']		= document.getElementById( 'img-company-box' );
	reg_img_box_ids['ship']			= document.getElementById( 'img-ship-box' );
	reg_img_box_ids['personal']		= document.getElementById( 'img-personal-box' );
	reg_img_box_ids['phone']		= document.getElementById( 'img-phone-box' );

	//------------------------------------------
	// Boxes
	//------------------------------------------
	
	reg_box_ids['password']			= document.getElementById( 'box-password' );
	reg_box_ids['emailaddress']		= document.getElementById( 'box-emailaddress' );
	reg_box_ids['company']			= document.getElementById( 'box-company' );
	reg_box_ids['ship']				= document.getElementById( 'box-ship' );
	reg_box_ids['personal']			= document.getElementById( 'box-personal' );
	reg_box_ids['phone']			= document.getElementById( 'box-phone' );
	
	//------------------------------------------
	// Messages
	//------------------------------------------
	
	reg_msg_ids['password']			= document.getElementById( 'msg-password' );
	reg_msg_ids['emailaddress']		= document.getElementById( 'msg-emailaddress' );
	reg_msg_ids['company']			= document.getElementById( 'msg-company' );
	reg_msg_ids['ship']				= document.getElementById( 'msg-ship' );
	reg_msg_ids['personal']			= document.getElementById( 'msg-personal' );
	reg_msg_ids['phone']			= document.getElementById( 'msg-phone' );
	
	//------------------------------------------
	// Set up onblur
	//------------------------------------------
	
	reg_field_ids['password-check'].onblur		= check_passwords;
	reg_field_ids['emailaddress'].onblur		= check_email_addresses_one;
	reg_field_ids['emailaddress-two'].onblur	= check_email_addresses;
	reg_field_ids['companyname'].onblur			= check_company_name;
	reg_field_ids['zip'].onblur					= check_ship_info;
	reg_field_ids['lastname'].onblur			= check_personal_info;
	reg_field_ids['compph'].onblur				= check_comp_phone_number;
	reg_field_ids['compphext'].onblur			= check_comp_phone_number;
	reg_field_ids['fax'].onblur					= check_fax_phone_number;
	reg_field_ids['cell'].onblur				= check_cell_phone_number;
	
	//------------------------------------------
	// Already got error messages?
	//------------------------------------------
	
	if ( ! reg_msg_ids['password'].innerHTML )
	{
		reg_box_ids['password'].style.display = 'none';
		reg_img_box_ids['password'].style.display = 'none';
	}
	
	if ( ! reg_msg_ids['emailaddress'].innerHTML )
	{
		reg_box_ids['emailaddress'].style.display = 'none';
		reg_img_box_ids['emailaddress'].style.display = 'none';
	}
	
	if ( ! reg_msg_ids['company'].innerHTML )
	{
		reg_box_ids['company'].style.display = 'none';
		reg_img_box_ids['company'].style.display = 'none';
	}
	
	if ( ! reg_msg_ids['ship'].innerHTML )
	{
		reg_box_ids['ship'].style.display = 'none';
		reg_img_box_ids['ship'].style.display = 'none';
	}
	
	if ( ! reg_msg_ids['personal'].innerHTML )
	{
		reg_box_ids['personal'].style.display = 'none';
		reg_img_box_ids['personal'].style.display = 'none';
	}
	
	if ( ! reg_msg_ids['phone'].innerHTML )
	{
		reg_box_ids['phone'].style.display = 'none';
		reg_img_box_ids['phone'].style.display = 'none';
	}
}

function validate_reg_form( event )
{
	//------------------------------------------
	// Simply run the functions
	//------------------------------------------
	
	reg_oktogo = 1;
	
	check_passwords();
	check_email_addresses();
	check_company_name();
	check_ship_info();
	check_personal_info();
	check_comp_phone_number();
	check_fax_phone_number();
	check_cell_phone_number();

	//------------------------------------------
	// Got error messages
	//------------------------------------------
	
	if ( reg_msg_ids['password'].innerHTML )
	{
		reg_oktogo = 0;
	}
	
	if ( reg_msg_ids['emailaddress'].innerHTML )
	{
		reg_oktogo = 0;
	}
	
	if ( reg_msg_ids['company'].innerHTML )
	{
		reg_oktogo = 0;
	}
	
	if ( reg_msg_ids['ship'].innerHTML )
	{
		reg_oktogo = 0;
	}
	
	if ( reg_msg_ids['personal'].innerHTML )
	{
		reg_oktogo = 0;
	}
	
	if ( reg_msg_ids['phone'].innerHTML )
	{
		reg_oktogo = 0;
	}

	//------------------------------------------
	// Return
	//------------------------------------------
	
	reg_field_ids['oktogo'].value = reg_oktogo;
	
	return reg_oktogo ? null : false;
}

/*-------------------------------------------------------------------------*/
// Check email address validity
/*-------------------------------------------------------------------------*/

function check_email_addresses_one( event )
{
	//----------------------------------
	// INIT
	//----------------------------------
	
	var error_found = '';
		
	//----------------------------------
	// Ajax: check for existing email address
	//----------------------------------
	
	if ( reg_field_ids['emailaddress'].value )
	{
		var url = var_base_url + "/common/xmlout.php";
		var query = "xmlhttp=yes&method=email&email=" + escape(reg_field_ids['emailaddress'].value);
		
		do_request_function = function()
		{			
			if ( ! xmlobj.readystate_ready_and_ok() )
			{
				return;
			}
			
			//----------------------------------
			// INIT
			//----------------------------------
			response = xmlobj.xmlhandler.responseText.parseJSON();
			
			//----------------------------------
			// Show errors
			//----------------------------------
			
			if ( ! response.success )
			{
				reg_field_ids['emailaddress'].className       = input_red;
				reg_img_box_ids['emailaddress'].style.display = 'inline';
				reg_img_ids['emailaddress'].src               = var_image_url + '/' + img_cross;
				reg_msg_ids['emailaddress'].innerHTML         = response.ErrorMsg + "<br />";
				reg_box_ids['emailaddress'].style.display     = 'block';
				error_email = 1;
			}
			else
			{
				error_email = 0;
			}
			
			error_found = '';
		}
		
		//----------------------------------
		// LOAD XML
		//----------------------------------
		
		xmlobj = new ajax_request();
		xmlobj.onreadystatechange( do_request_function );
		xmlobj.process( url , "POST" , query );
	}
}

/*-------------------------------------------------------------------------*/
// Check email addresses
/*-------------------------------------------------------------------------*/

function check_email_addresses( event )
{
	//----------------------------------
	// INIT
	//----------------------------------
	
	var error_found = '';
	
	//----------------------------------
	// Check
	//----------------------------------
	
	if ( ! emailCheck(reg_field_ids['emailaddress'].value) )
	{
		error_found += "The email address you entered is invalid (ex: name@domain.com) or contains illegal characters: ; # &amp; ! * ' &quot; &lt; &gt; % ( ) { } ? &#092;<br />";
	}
	
	if ( ! reg_field_ids['emailaddress'].value || ! reg_field_ids['emailaddress-two'].value )
	{
		error_found += "The Email Address section is incomplete.<br />";
	}
	
	if ( reg_field_ids['emailaddress'].value != reg_field_ids['emailaddress-two'].value )
	{
		error_found += "The email addresses do not match.<br />";
	}
	
	if ( error_found )
	{
		reg_field_ids['emailaddress'].className       = input_red;
		reg_field_ids['emailaddress-two'].className   = input_red;
		reg_img_box_ids['emailaddress'].style.display = 'inline';
		reg_img_ids['emailaddress'].src               = var_image_url + '/' + img_cross;
		reg_msg_ids['emailaddress'].innerHTML         = error_found;
		reg_box_ids['emailaddress'].style.display     = 'block';
		error_email = 1;
	}
	else
	{
		error_email = 0;
	}
	
	//----------------------------------
	// No error....
	//----------------------------------
	
	if ( error_email == 0 )
	{
		check_email_addresses_one();
	}
	
	//----------------------------------
	// Still no errors...
	//----------------------------------
	
	if ( error_email == 0 )
	{
		reg_field_ids['emailaddress'].className       = input_green;
		reg_field_ids['emailaddress-two'].className   = input_green;
		reg_img_box_ids['emailaddress'].style.display = 'inline';
		reg_img_ids['emailaddress'].src               = var_image_url + '/' + img_tick;
		reg_box_ids['emailaddress'].style.display     = 'none';
		reg_msg_ids['emailaddress'].innerHTML         = '';
	}

	if( reg_field_ids['emailaddress'].className   == input_red )
	{
		reg_field_ids['emailaddress-two'].className   = input_red;
	}		
}

function check_passwords( event )
{
	//----------------------------------
	// INIT
	//----------------------------------
	
	var error_found = '';
	
	//----------------------------------
	// Check
	//----------------------------------
	
	if ( ! reg_field_ids['password'].value || ! reg_field_ids['password-check'].value )
	{
		error_found += "Enter your password in both fields.<br />";
	}
	
	if ( reg_field_ids['password'].value.length < 3 )
	{
		error_found += "Your password must be between 3 and 32 characters.<br />"
	}
	
	if ( reg_field_ids['password'].value != reg_field_ids['password-check'].value )
	{
		error_found += "Passwords do not match.<br />";
	}
	
	if ( error_found )
	{
		reg_field_ids['password'].className       = input_red;
		reg_field_ids['password-check'].className = input_red;
		reg_img_box_ids['password'].style.display = 'inline';
		reg_img_ids['password'].src               = var_image_url + '/' + img_cross;
		reg_msg_ids['password'].innerHTML         = error_found;
		reg_box_ids['password'].style.display     = 'block';
	}
	else
	{
		reg_field_ids['password'].className       = input_green;
		reg_field_ids['password-check'].className = input_green;
		reg_img_box_ids['password'].style.display = 'inline';
		reg_img_ids['password'].src               = var_image_url + '/' + img_tick;
		reg_box_ids['password'].style.display     = 'none';
		reg_msg_ids['password'].innerHTML         = '';
	}
}

function check_company_name( event )
{
	//----------------------------------
	// INIT
	//----------------------------------
	
	var error_found = '';
	
	//----------------------------------
	// Check
	//----------------------------------
	
	if ( ! reg_field_ids['companyname'].value )
	{
		error_found += "The Company Information section is incomplete.<br />";
	}
		
	if ( error_found )
	{
		reg_field_ids['companyname'].className       = input_red;
		reg_img_box_ids['company'].style.display = 'inline';
		reg_img_ids['company'].src               = var_image_url + '/' + img_cross;
		reg_msg_ids['company'].innerHTML         = error_found;
		reg_box_ids['company'].style.display     = 'block';
	}
	else
	{
		reg_field_ids['companyname'].className       = input_green;
		reg_img_box_ids['company'].style.display = 'inline';
		reg_img_ids['company'].src               = var_image_url + '/' + img_tick;
		reg_box_ids['company'].style.display     = 'none';
		reg_msg_ids['company'].innerHTML         = '';
	}
}

function check_ship_info( event )
{
	//----------------------------------
	// INIT
	//----------------------------------
	
	var error_found = '';
	
	//----------------------------------
	// Check
	//----------------------------------

	if ( ! reg_field_ids['attn'].value || ! reg_field_ids['streetaddr'].value || 
		 ! reg_field_ids['city'].value || ! reg_field_ids['state'].value || 
		 ! reg_field_ids['zip'].value )
	{
		error_found += "The Ship To Address section is incomplete.<br />";
	}
	
	if ( ! IsNumeric(reg_field_ids['zip'].value))
	{
		error_found += "The Zip / Postal Code must be numerical.<br />";
	}
		
	if ( error_found )
	{
		reg_field_ids['attn'].className				= input_red;
		reg_field_ids['streetaddr'].className		= input_red;
		reg_field_ids['city'].className				= input_red;
		reg_field_ids['zip'].className				= input_red;
		reg_img_box_ids['ship'].style.display		= 'inline';
		reg_img_ids['ship'].src						= var_image_url + '/' + img_cross;
		reg_msg_ids['ship'].innerHTML				= error_found;
		reg_box_ids['ship'].style.display			= 'block';
	}
	else
	{
		reg_field_ids['attn'].className				= input_green;
		reg_field_ids['streetaddr'].className		= input_green;
		reg_field_ids['city'].className				= input_green;
		reg_field_ids['zip'].className				= input_green;
		reg_img_box_ids['ship'].style.display		= 'inline';
		reg_img_ids['ship'].src						= var_image_url + '/' + img_tick;
		reg_box_ids['ship'].style.display			= 'none';
		reg_msg_ids['ship'].innerHTML				= '';
	}
}

function check_personal_info( event )
{
	//----------------------------------
	// INIT
	//----------------------------------
	
	var error_found = '';
	
	//----------------------------------
	// Check
	//----------------------------------

	if ( ! reg_field_ids['firstname'].value || ! reg_field_ids['lastname'].value )
	{
		error_found += "The Personal Information section is incomplete.<br />";
	}
		
	if ( error_found )
	{
		reg_field_ids['firstname'].className			= input_red;
		reg_field_ids['lastname'].className				= input_red;
		reg_img_box_ids['personal'].style.display		= 'inline';
		reg_img_ids['personal'].src						= var_image_url + '/' + img_cross;
		reg_msg_ids['personal'].innerHTML				= error_found;
		reg_box_ids['personal'].style.display			= 'block';
	}
	else
	{
		reg_field_ids['firstname'].className			= input_green;
		reg_field_ids['lastname'].className				= input_green;
		reg_img_box_ids['personal'].style.display		= 'inline';
		reg_img_ids['personal'].src						= var_image_url + '/' + img_tick;
		reg_box_ids['personal'].style.display			= 'none';
		reg_msg_ids['personal'].innerHTML				= '';
	}
}

function check_comp_phone_number( event )
{
	//----------------------------------
	// INIT
	//----------------------------------
	
	var error_found = '';
	var ext_error_found = '';
	
	//----------------------------------
	// Check
	//----------------------------------

	if ( ! reg_field_ids['compph'].value )
	{
		error_found += "The Phone Numbers section is incomplete.<br />";
	}
	
	if ( reg_field_ids['compphext'].value ) 
	{
		if ( ! IsNumeric(reg_field_ids['compphext'].value))
		{
			ext_error_found += "Please enter a numerical extention.<br />";
			error_found += ext_error_found;
		}
	}
	
	if ( reg_field_ids['compph'].value) 
	{
		if ( ! checkInternationalPhone(reg_field_ids['compph'].value))
		{
			error_found += "Please enter a valid numeric phone number no less than 10 digits.<br />";
		}
	}
	
	if ( error_found )
	{
		if ( ext_error_found ) {
			reg_field_ids['compphext'].className			= input_red;
		}
		reg_field_ids['compph'].className			= input_red;
		reg_img_box_ids['phone'].style.display		= 'inline';
		reg_img_ids['phone'].src					= var_image_url + '/' + img_cross;
		reg_msg_ids['phone'].innerHTML				= error_found;
		reg_box_ids['phone'].style.display			= 'block';
	}
	else
	{
		if ( reg_field_ids['compphext'].value ) {
			reg_field_ids['compphext'].className			= input_green;
		}
		reg_field_ids['compph'].className			= input_green;
		reg_img_box_ids['phone'].style.display		= 'inline';
		reg_img_ids['phone'].src					= var_image_url + '/' + img_tick;
		reg_box_ids['phone'].style.display			= 'none';
		reg_msg_ids['phone'].innerHTML				= '';
	}
}

function check_fax_phone_number( event )
{
	//----------------------------------
	// INIT
	//----------------------------------
	
	var error_found = '';
	var checkOK = 0;
	
	//----------------------------------
	// Check
	//----------------------------------

	if ( reg_field_ids['fax'].value ) 
	{
		if ( ! checkInternationalPhone(reg_field_ids['fax'].value))
		{
			error_found += "Please enter a valid numeric phone number no less than 10 digits.<br />";
		} else {
			checkOK = 1;
		}
	}
	
	if ( error_found )
	{
		reg_field_ids['fax'].className				= input_red;
		reg_msg_ids['phone'].innerHTML				= error_found;
		reg_box_ids['phone'].style.display			= 'block';
	}
	else if ( checkOK )
	{
		reg_field_ids['fax'].className				= input_green;
		check_comp_phone_number();
	}
}

function check_cell_phone_number( event )
{
	//----------------------------------
	// INIT
	//----------------------------------
	
	var error_found = '';
	var checkOK = 0;
	
	//----------------------------------
	// Check
	//----------------------------------

	if ( reg_field_ids['cell'].value)
	{
		if ( ! checkInternationalPhone(reg_field_ids['cell'].value))
		{
			error_found += "Please enter a valid numeric phone number no less than 10 digits.<br />";
		} else {
			checkOK = 1;
		}
	}
	
	if ( error_found )
	{
		reg_field_ids['cell'].className				= input_red;
		reg_msg_ids['phone'].innerHTML				= error_found;
		reg_box_ids['phone'].style.display			= 'block';
	}
	else if ( checkOK )
	{
		reg_field_ids['cell'].className				= input_green;
		check_comp_phone_number();
	} 
}