//==============================================================================
//                                                                          nfo:
// name:       ribbit_shopping_cart.js
// created:    2006-07-12
// MOD: 2006-08-02
// by:         spork /  spork@utensil.org
//
// abstract:   handles shopping cart data
//
//==============================================================================
// revision history
// ----------------
//
//==============================================================================


var mywindow;
function CVVpop(){
    mywindow = window.open ("CVV.jsp","mywindow","location=0,status=0,scrollbars=0,width=400,height=650");
    mywindow.moveTo(10,10);
} 

function CVVclose(){
    if (mywindow != null)
        mywindow.close();
}

function displayToggle(id,id2){
  var node = document.getElementById(id);
	var node2 = document.getElementById(id2);
  if (node != null)
  {  	
    var d = node.style.display;
    if (d == 'none'){
     node.style.display = 'inline';  
     node2.style.display = 'none';  
		}else{
     node.style.display = 'none';			
     node2.style.display = 'inline';  
		}
  }else{
   alert('Unable to find node ' + id+'.');
  } 
} 


var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();


var timeToKeep = 60000; // one minute
var expires = new Date();
var checkOut = false;
var total = 0;
expires.setTime(expires.getTime() + timeToKeep);
var dbug = 0; 
var domain = '.ribbitfilms.com';
var secureHost = 'secure.ribbitfilms.com';
var context = '';
var gLid = '';

var licenseData= new Array();
var clipData= new Array();
var savedClipData= new Array();

var splitString = location.href.split("/"); 

var vers = new Array("sp", "de", "po", "fr") 

var idx = vers.toString().lastIndexOf(splitString[3]); 

if (idx != -1)
{
	gLid = splitString[3];
}

//var lid = getParm('lid');

var qsLid = '';
	if (lid)
	{
				qsLid = '&lid='+lid;
  }
	if (gLid){
				qsLid = '&lid='+gLid;
	}
	
	if (location.host != secureHost) 
{ 
    context = '/'; 
} 

if (idx != -1 && getParm('action') != 'cart') 
{ 
    context = ''; 
} 



function totalObj(imgOff, imgOn, action, div, shipCost, page)
{ 
 this.imgOn = imgOn; 
 this.imgOff = imgOff;
 this.action = action;    
 this.div = div;    
 this.shipCost = shipCost;    
 this.page = page;    
}

function savedClip(sku, licenseID){ 
 this.sku = sku; 
 this.licenseID = licenseID;
}

function hideCheckOut(){
	var divNames= new Array();
	divNames[0] = 'Total1';
	divNames[1] = 'Total2';
	divNames[2] = 'cartNav1';
	divNames[3] = 'cartNav3';	
	for(var k = 0; k < divNames.length; k++){
		var checkOutNav = document.getElementById(divNames[k]);
		if (checkOutNav != null){
			//alert(divNames[k]);
  		var skuarray = init_array(); // if it isn't already defined
  		get_array('skus', skuarray);
  		var num = (skuarray.length);
  		if (num == 0){
				checkOutNav.innerHTML = '';
				hideText();
				}
		}
	}	
	return false;
}	

function cartStatus(){
	//LOAD ERROR MESSAGES
	//getMessages();

	var checkOutNav = document.getElementById('cartNav1');
  var skuarray = init_array(); // if it isn't already defined
  get_array('skus', skuarray);
  var num = (skuarray.length);
  var items = 'item';
  if (num > 1)
  	items = 'items';
  if (num > 0){
  		var statusNode = document.getElementById('cartStatus');
  		var statusNode2 = document.getElementById('cartStatus2');
  		var statusNode3 = document.getElementById('cartStatus3');
			var iHTML =  'You have '+skuarray.length+' '+items+' in cart<br/>';
			var lid = getParm('lid');

			iHTML += '<a onClick="del_cookie(\'message\')" href="https://'+secureHost+'/RibbitFilms/content.display.jsp?pid=1&aid=4&action=register'+qsLid+'">Go to Check Out >></a><br/>';

			var iHTML2 =  '<a class="styleCart" onClick="navTo(\'cart_display\',\'_self\')"><img onMouseOver="this.src=\'img/newcartOVER.gif\'" onMouseOut="this.src=\'img/newcartON.gif\'" onMouseDown="this.src=\'img/newcartOVER.gif\'" src="img/newcartON.gif" alt="shopping cart" width="30" height="30" border="0" align="left" />You have '+skuarray.length+' '+items+' in cart</a>';		 	

		if (statusNode != null)
			statusNode.innerHTML = iHTML;

		if (statusNode2 != null)
			statusNode2.innerHTML = iHTML;

		if (statusNode3 != null)
			statusNode3.innerHTML = iHTML2;

  		return true;
	}else{
			if (checkOutNav != null)
			{
				checkOutNav.innerHTML = 'No items in cart.';
				return false;
		}
	}
	return false;
//	alert('You have '+skuarray.length+' in cart');
}	

function init_array() {
	if (dbug) alert('init_cookie');  
	var ary = new Array(); 
	return ary;
	} 
	
function set_cookie(name,value,expires) {
	if (!expires) expires = new Date();
	//expires=' + expires.toGMTString() + ';
	var cookie =  name + '=' + escape(value) + '; path=/; domain='+ domain;
	document.cookie = cookie;
	if (dbug) alert('set_cookie '+ cookie); 

} 

function get_cookie(name) {
	if (dbug) alert('get_cookie'); 
	var dcookie = document.cookie; 
	var cname = name + '='; 
	var clen = dcookie.length; 
	var cbegin = 0; 
	while (cbegin < clen) {
	var vbegin = cbegin + cname.length;
if (dcookie.substring(cbegin, vbegin) == cname) {
	var vend = dcookie.indexOf (';', vbegin); 
	if (vend == -1) vend = clen; 
	return unescape(dcookie.substring(vbegin, vend));
	} 
	cbegin = dcookie.indexOf(' ', cbegin) + 1; 
	if (cbegin == 0) break;
	} 
	return false;
	} 

function del_cookie(name) {
	if (dbug) alert('del_cookie');
	document.cookie = name + '=' + '; expires=Thu, 01-Jan-01 00:00:01 GMT; path=/; domain='+ domain;
} 

function get_array(name, ary) {
	if (dbug) alert('get_array'); 	
//	d_a(ary); 
	var ent = get_cookie(name); 
	if (ent) {
		i = 0; 
	while (ent.indexOf('^') != '-1') {
		ary[i] = ent.substring(0,ent.indexOf('^')); 
		i++;
ent = ent.substring(ent.indexOf('^')+1, ent.length);
	}
	}
}

 function set_array(name, ary, expires) {
 	if (dbug) alert('set_array'); 
 	var value = ''; 
 	for (var i = 0; ary[i]; i++) {
 		value += ary[i] + '^';
 		} 
 		set_cookie(name, value, expires);
 		} 
 		
 function del_entry(name, ary, pos, expires) {
 	
 //	alert('Ready to delete:' + name + ' in ' + pos);
 	if (dbug) alert('del_entry');
		var value = ''; 
		get_array(name, ary); 
	for (var i = 0; i < pos; i++) {
		value += ary[i] + '^';
		} 
	for (var j = pos + 1; ary[j]; j++) {
		value += ary[j] + '^';
		} 
	set_cookie(name, value, expires);
	} 
	


function debug_on() {
	dbug = 1;
	} 
	
function debug_off() {
	dbug = 0;
	}
	
 function dump_cookies() {
 	if (document.cookie == ''){ 
 	document.write('No Cookies Found'); 
	}else {
 	thisCookie = document.cookie.split('; '); 
 	
 	for (i=0; i<thisCookie.length; i++) {
 	document.write(thisCookie[i] + '<br \/>');
 	}
 	
 	}
 }
 
function add_to_cart(qnty,sku){
   	var skuarray = init_array(); // if it isn't already defined
   	var qntyarray = init_array(); // if it isn't already defined

   	get_array('skus', skuarray);
   	get_array('qntys', qntyarray);

   	var num = (skuarray.length);
   	skuarray[num] = sku;

   	qntyarray[num] = qnty;

   	set_array('skus', skuarray, expires);
   	set_array('qntys', qntyarray, expires);
		window.location.assign(cartLink);      

}


function add_to_cart_noload(qnty,sku){
	del_cookie('cookieState');
	var isMatch = false;
  var skuarray = init_array(); // if it isn't already defined

  get_array('skus', skuarray);

  var num = (skuarray.length);

  if (num == 0){ 
  	skuarray[num] = sku+'_'+qnty;
   	set_array('skus', skuarray, expires);
 		cartStatus();
		return true;  	 
	}
	
  var tmpVal;
  for (var i=0;i<num;i++){
   		tmpVal = skuarray[i];
   		tmpVal = tmpVal.split('_');
   		if (tmpVal[0].toLowerCase() == sku.toLowerCase() && tmpVal[1] != '24'){
   			if (tmpVal[1] ==3)
   			{
   				var version = 'an HD';
   			}else if (tmpVal[1] ==23){
   				var version = 'a MATTE';
   			}else{
					var version = 'a COMP';
   			}		
   				var msg = "You have already placed "+version+" version of this clip("+sku+") in your shopping cart.\n\nIf you are purchasing both versions of this clip, please contact us at sales@ribbitfilms.com."
   				alert(msg);
					isMatch = true;
   				//alert('Clip ' + sku + ' exists in cart.');
   		}else if(tmpVal[0].toLowerCase() == sku.toLowerCase() && tmpVal[1] == '24'){
          var version = 'this bundle ';
   				var msg = "You have already placed "+version+"("+sku+") in your shopping cart.\n\n"
   				alert(msg);
					isMatch = true;
                            
      }
  	}

 		if (!isMatch){
			skuarray[num] = sku+'_'+qnty;  

			set_array('skus', skuarray, expires);
		}
 		cartStatus();
}



 function update_cart(){
 	del_cookie('qntys');
 	var qntyarray = init_array(); // if it isn't already defined
	for (var i=0; i<document.forms[0].elements.length; i++) {
 	  for (var j=0; j<document.forms[0].elements.length; j++) {
 	 	if (document.forms[0].elements[i].name == 'q'+j){
		var num = qntyarray.length;
		qntyarray[num] = document.forms[0].elements[i].value;
		}
	  }
	}
	set_array('qntys',qntyarray,expires);
	window.location.reload()
}	


function delete_this(sku){
 var skuarray = init_array(); // if it isn't already defined
// var qntyarray = init_array(); // if it isn't already defined
  get_array('skus', skuarray);
//  get_array('qntys', qntyarray);

 	for (var i=0; i<skuarray.length; i++) {
 	  if (sku == skuarray[i]){
 	    del_entry('skus', skuarray, i, '');
// 	    del_entry('qntys', qntyarray, i, '');
	  }
	}
}
 
function set_shipping(id){
	set_cookie('shipping',id,expires)
	window.location.reload();
} 

function set_special_shipping(name, id){
	set_cookie(name,id,expires);
	window.location.reload();
} 

function auto_update(skus,qntys){
	set_cookie('skus',skus,'');
	set_cookie('qntys',qntys,'');
}

function delete_values(){
	del_cookie('shopper');
	del_cookie('pass');
}


function check_session(goLink){
  if (!get_cookie('session')){	
	return false;
	}


	var timeToKeep = 300000; // five minutes
	var session_times = init_array(); // if it isn't already defined
	get_array('session_times',session_times);
	var session_time_string = unescape(get_cookie('session_times')); //
	var now = new Date();
	var expires;

	if (!get_cookie('session_times') | session_times[0] == 'Session Expired'){ //does the session cookie exist
		//set initial cookies

		//session_times[0] = now.toUTCString()
		//alert('set initial cookies');

		Expires = new Date();
		Expires.setTime(now.getTime() + timeToKeep);
		session_times[0] = expires.toUTCString();

		set_array('session_times', session_times, '')
		return true;
	}else{
//read cookies and set now time

	Expires = new Date(session_times[0]);

	GMT_now = new Date(now.toUTCString());
	GMT_expires = new Date(expires.toUTCString());

	//	alert('It is now ' + GMT_now.toUTCString());
	//	alert('Previous expires ' + GMT_expires.toUTCString());
	if (GMT_now < GMT_expires){
//	alert('session still valid');
		GMT_expires.setTime(now.getTime() + timeToKeep);
		session_times[0] = GMT_expires.toUTCString();
//	alert('session expires at ' + GMT_expires.toUTCString());	
		set_array('session_times',session_times,'');
		return true;
	}else{
		alert('Your session has expired.\nPlease Log in again.');
		session_times[0] = 'Session Expired'
		set_array('session_times',session_times,'');
		document.cookie = 'session=' + '; expires=Thu, 01-Jan-70 00:00:01 GMT; path=/orders.nsf';
		document.cookie = 'session=' + '; expires=Thu, 01-Jan-70 00:00:01 GMT; path=/orders.nsf/';
		window.location.assign(goLink);
		return false;
}



}

}

function checkout(goLink){
      window.location.assign(goLink);      
   }

function set_costs(shipping_cost,tax_cost,ship_id){
	var costs = init_array(); // if it isn't already defined
	costs[0] = shipping_cost;
	costs[1] = tax_cost;
	set_array('costs',costs,'');
   	set_cookie('shipping',ship_id,expires);
   	set_cookie('ship_country',ship_country,expires);
   }

function clear_order(){
  del_cookie('qntys');
	del_cookie('skus');
	del_cookie('session_times');
	del_cookie('shipping');
	del_cookie('costs');
	del_cookie('ship_country');
	del_cookie('front_hub');
	del_cookie('rear_hub');
	del_cookie('front_rim');
	del_cookie('rear_rim');
  del_cookie('front_holes');
	del_cookie('rear_holes');
	del_cookie('wheel_type');
	del_cookie('wheel_build');
	del_cookie('wheel_spokes_F');
	del_cookie('wheel_spokes_NDS');
  del_cookie('wheel_spokes_DS');
	del_cookie('lacing_F');
	del_cookie('lacing_NDS');
	del_cookie('lacing_DS');
	del_cookie('nipples');

	
  document.cookie = 'session=' + '; expires=Thu, 01-Jan-70 00:00:01 GMT; path=/orders.nsf';
	document.cookie = 'session=' + '; expires=Thu, 01-Jan-70 00:00:01 GMT; path=/orders.nsf/';
}

function process_order(){
//   if (check_session()){
	document.forms[0].submit();	
//   }
}

function update_CC_info(){
   if (check_session()){
	if(!document.forms[0].check_pay.checked){
		if(CheckCardNumber(document.forms[0]))	{ document.forms[0].submit();}
	}else if (document.forms[0].check_pay.checked & document.forms[0].ACCT.value == ''){
		document.forms[0].submit();
	}else{
	 	alert('Please deselect the Check/Money Order checkbox. \n Or clear the Credit Card Number.');
	}
  }
}

function checkWholeForm_account(theForm) {
var status = 0;
    status = checkEmail (theForm.email.value,theForm.email) 
    status += validateZIP(theForm.zip.value,theForm.zip);
    status += checkFirstName (theForm.first_name.value,theForm.first_name);
    status += checkLastName (theForm.last_name.value,theForm.last_name);    
    status += checkAddress (theForm.address.value,theForm.address); 
    status += checkCity (theForm.city.value,theForm.city); 
	if (status == 6){ //Check for the correct number of true statements. Should match number of fields being validated.
	     return true;
	}else{
         return false;
    }
}

function update_info(){
   if (check_session()){
	 if  (checkWholeForm_account(document.forms[0])){
          document.forms[0].submit();
        }
	   }
}

function checkWholeForm_shipping(theForm) {
var status = 0;
    status += checkFirstName (theForm.B_first_name.value,theForm.B_first_name);
    status += checkLastName (theForm.B_last_name.value,theForm.B_last_name);    
    status += checkAddress (theForm.B_address.value,theForm.B_address); 
    status += checkCity (theForm.B_city.value,theForm.B_city);
        if(theForm.B_country.value == 'US'){
       status += validateZIP(theForm.B_zip.value,theForm.zip);
    }else{
       status++;
    } 
	if (status == 5){ //Check for the corrct number of true statements. Should match number of fields being validated.
	     return true;
	}else{
         return false;
    }
}


function checkWholeForm_registration(theForm) {
var status = 0;
    status += checkFirstName (theForm.first_name.value,theForm.first_name);
    status += checkLastName (theForm.last_name.value,theForm.last_name);    
    status += checkAddress (theForm.address.value,theForm.address); 
    status += checkCity (theForm.city.value,theForm.city);
    if(theForm.State.value != 'NA'){
       status += validateZIP(theForm.zip.value,theForm.zip);
    }else{
       status++;
    } 
	if (status == 5){ //Check for the corrct number of true statements. Should match number of fields being validated.
	     return true;
	}else{
         return false;
    }
}


function update_shipping_info(ship_country){
   if (check_session()){
	 if  (checkWholeForm_shipping(document.forms[0])){
   		set_cookie('ship_country',ship_country,expires);
          	document.forms[0].submit();
        }
   }
}


function reg_this(){
   if (document.forms[0].email.value != '' & document.forms[0].checkEmail.value != ''){
   	if(document.forms[0].pass.value != '' & document.forms[0].checkPass.value != ''){
		if (document.forms[0].email.value == document.forms[0].checkEmail.value){
		   if (document.forms[0].pass.value == document.forms[0].checkPass.value){		   	            		
 			//Validate shipping information if not same as billing
		if  (!document.forms[0].same_as_billing.checked){
			if(!checkWholeForm_shipping(document.forms[0])){return false;}
            	}
		//Check for valid email address
			if(!checkEmail (document.forms[0].email.value,document.forms[0].email)){return false;}
		//Validate billing information
		   if (checkWholeForm_registration(document.forms[0])){
		   	//If user not paying by check, validate CC
            		if(!document.forms[0].check_pay.checked){
            	   	   del_cookie('payment');
		   	   if(!CheckCardNumber(document.forms[0])){return false;}
			}else{
		   	   set_cookie('payment','check',expires);
			}		   	
			//All checks passed set username and password and stop shopping!
		   	set_cookie('shopper',document.forms[0].email.value,expires);
		   	set_cookie('pass',document.forms[0].pass.value,expires);		   
      	           	document.forms[0].submit();
                   }
		   }else{
		       alert('The password values do not match');
		   }
		}else{
		    alert('The email values do not match');
		}
      }else{
       alert('Please enter and retype your password.');
       return false;
      }
   }else{
       alert('Please enter and retype a value for your email address.');
       return false;
  } 
}


var version4 = (navigator.appVersion.charAt(0) == '4'); 

var popupHandle;

function closePopup() {
if(popupHandle != null && !popupHandle.closed) popupHandle.close();
}

function displayPopup(uri,w,h) {
closePopup();
var args = 'width='+w+','+'height='+h+',scrollbars,';
popupHandle = window.open(uri,'',args);
}

function get_radio(field){
   var array = init_array(); 
	var flag =0;

 if (field.checked){
      array[0] = field.name;
      array[1] = field.value;
      return array;  
}

	// Loop from zero to the one minus the number of radio button selections
for (counter = 0; counter < field.length; counter++)
{
// If a radio button has been selected it will return true
// (If not it will return false)
if (field[counter].checked){
  flag = 1;
 array[0] = field[counter].name;
 array[1] = field[counter].value;
}

}

   if (flag == 1){
      return array;     
    }else{
	return false;  
 }
}

function showText(targ){
		var cartNav1 = document.getElementById('cartNav1');
		if (cartNav1 != null)
		{
			cartNav1.style.visibility = 'hidden';
		}			 
		var infoNode = document.getElementById('info');
		infoNode.innerHTML = '&nbsp;&nbsp;<hr><span class="style17" id="tdInfoPage"><b>'+licenseData[targ].name+'</b><br>&nbsp;&nbsp;'+licenseData[targ].desc+'</span><hr>';
}	

function hideText(){
		var cartNav1 = document.getElementById('cartNav1');
		if (cartNav1 != null)
		{
			cartNav1.style.visibility  = 'visible';
		}			 

		var infoNode = document.getElementById('info');
		infoNode.innerHTML = '';
}	

function editOrder(){
	location.replace('content.display.jsp?pid=1&aid=4&action=cart'+qsLid);
}

function goCheckout(){

	window.location.assign(context+'content.display.jsp?pid=1&aid=4&action=checkout'+qsLid);
}

function goTime(){
	del_cookie('message');
	var skuarray = init_array(); // if it isn't already defined
  get_array('skus', skuarray);
 	var totalField = document.getElementById('totalfield');

 	var num = 0;
  if (totalField != null){
  		num = totalField.value;
  }		

	  
  if (num > 0){
  	//Short circuit if this is a redirect from User Profile update
  	var action = document.forms[0].action.value;

  	if (action)
 		{

			if (action.toLowerCase() == 'update_user')
			{
				//Redirect to checkout
				location.assign('content.display.jsp?pid=1&aid=4&action=register'+qsLid);
				return false;
				
			}
		}
		if (document.access != null)
		{
			document.access.submit();
		}else{				
			location.assign('content.display.jsp?pid=1&aid=4&action=register'+qsLid);
		}		
	}else{
		alert('Please select at least one item for purchase.');
		return false;
	}		
}	

function formatCurrency(num) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
		num = "0";
		sign = (num == (num = Math.abs(num)));
		num = Math.floor(num*100+0.50000000001);
		cents = num%100;
		num = Math.floor(num/100).toString();
	if(cents<10)
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+
		num.substring(num.length-(4*i+3));
		return (((sign)?'':'-') + '$' + num + '.' + cents);
}

function killDLCookies()
{
	del_cookie('ribbitsite_download');
	del_cookie('ribbitsite_session');	
}	

/*
==============================================================================
*
* BELOW IS WHERE THE AJAX MAGIC HAPPENS
*
==============================================================================
*/

/*
	Define a javascript clip class
*/
function clipObj(catID, shortName, clipID, blurb, licenseID, parent){ 
	this.CatalogID=catID;	
	this.shortName=shortName;	
	this.clipID=clipID;	
	this.blurb=blurb;	
	this.licenseID=licenseID;		
	this.parent = parent;
} 
/*
	End Define a javascript clip class
*/


/*
	Define a javascript license class
*/

function License(id, name, desc, price)
{ 
 this.id = id; 
 this.name = name;
 this.desc = desc;  
 this.price = price;  
}
/*
	END Define a javascript license class
*/


var req = null;
//var req2
//var req3;

var loaded = false;
var action;
var saved_clips = null;

function loadXMLDoc(URL,data) {
    req = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest) {
    	try {
			req = new XMLHttpRequest();
        } catch(e) {
			req = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	req = new ActiveXObject('Msxml2.XMLHTTP');
      	} catch(e) {
        	try {
          		req = new ActiveXObject('Microsoft.XMLHTTP');
        	} catch(e) {
          		req = false;
        	}
		}
    }

	if(req) {
			if (action == 'cart')
				req.onreadystatechange = processReqChange;
			else if (action == 'checkout')
				req.onreadystatechange = processReqChange3;
			else if (action == 'coupon')
				req.onreadystatechange = processReqChange6;
			else if (action == 'doTotal')
				req.onreadystatechange = processReqChange4;
			else if (action == 'profile')
				req.onreadystatechange = processReqChange5;
			else			
				req.onreadystatechange = processReqChange2;

            try {
							req.open('POST', URL, true);
            } catch(e) {
                //alert('ERROR:POS '+e.toString()+'\n\nCan not open connection for ' + URL+'\n\n'+'Your ('+BrowserDetect.browser+') browser does not support generic AJAX/XML standards.'+'\n\n'+'Please contact customer support at 1-718-358-3881.');
            }
		if (req != null)
		{
			req.setRequestHeader('Content-Type', 'text/xml');
			req.send(encode_utf8( data ));
		}	
	}


}

function encode_utf8( s )
{
  return unescape( encodeURIComponent( s ) );
}

function decode_utf8( s )
{
  return decodeURIComponent( escape( s ) );
}


function processReqChange() {

		if (req != null){			
    // only if req shows 'loaded'
    if (req.readyState == 4) {
        // only if 'OK'
        if (req.status == 200) {
        		//NOT NECESSARY TO LOAD SAVED CLIPS FOR NON-TIERED PRICING	
						//loadSavedClips(req);

 						buildCartTable();

            var divNames= new Array();
						divNames[0] = new totalObj('payUP.gif','payDN.gif','goTime()','Total1',0,'cart');
						divNames[1] = new totalObj('payUP.gif','payDN.gif','goTime()','Total2',0,'cart');
						calcTotal(divNames);
       } else {
            alert('There was a problem retrieving the XML data:\n' +
                req.statusText);
        }
    }
   } 
}

function processReqChange5() {
		if (req != null){			
    // only if req shows 'loaded'
    if (req.readyState == 4) {
        // only if 'OK'
        if (req.status == 200) {
        		//NOT NECESSARY TO LOAD SAVED CLIPS FOR NON-TIERED PRICING	
						//loadSavedClips(req);
 						buildCartTable();
        		var divNames= new Array();
						divNames[0] = new totalObj('proceedUP.gif','proceedDOWN.gif','goCheckout()','Total1',0,'cart');
						divNames[1] = new totalObj('proceedUP.gif','proceedDOWN.gif','goCheckout()','Total2',0,'cart');
						calcTotal(divNames);
       } else {
            alert('There was a problem retrieving the XML data:\n' +
                req.statusText);
        }
    }
   } 
}



function processReqChange2() {
    // only if req2 shows 'loaded'
    if (req.readyState == 4) {
        // only if 'OK'
        if (req.status == 200) {
 						loadMessages(req);
       } else {
            alert('There was a problem retrieving the XML data:\n' +
                req.statusText);
        }
    }
}

function processReqChange3() {
	

    if (req.readyState == 4) {
        // only if 'OK'

        if (req.status == 200) {
 						listCart();		
    				var divNames= new Array();
    				
						divNames[0] = new totalObj('editEEUP.gif','editEEDN.gif','editOrder()','Total1',0,'checkout');
						divNames[1] = new totalObj('submitEEUP.gif','submitEEOver.gif','submitOrder(document.forms[1])','Total2',0,'checkout');
		
			var form = document.forms[1];
			if ( form == null)
						divNames[1] = new totalObj('submitEEUP.gif','submitEEOver.gif','submitOrder(document.forms[0])','Total2',0,'checkout');
	
			calcTotal(divNames);
			
       } else {
            alert('There was a problem retrieving the XML data:\n' +
                req.statusText);
        }
    }
}

function processReqChange6() {
    if (req.readyState == 4) {
        // only if 'OK'

			if (req.status == 200) {
    		var divNames= new Array();
				divNames[0] = new totalObj('editEEUP.gif','editEEDN.gif','editOrder()','Total1',0,'checkout');
				divNames[1] = new totalObj('submitEEUP.gif','submitEEOver.gif','submitOrder(document.forms[1])','Total2',0,'checkout');
		
				var form = document.forms[1];
				if ( form == null)
					divNames[1] = new totalObj('submitEEUP.gif','submitEEOver.gif','submitOrder(document.forms[0])','Total2',0,'checkout');
					calcTotal(divNames);
			
       } else {
            alert('There was a problem retrieving the XML data:\n' +
                req.statusText);
        }
    }
}


function processReqChange4() {
    // only if req2 shows 'loaded'
    if (req.readyState == 4) {
        // only if 'OK'
        if (req.status == 200) {
        		var divNames= new Array();
						divNames[0] = new totalObj('','','','Total1',0,'cart');
						calcTotal(divNames);
       } else {
            alert('There was a problem retrieving the XML data:\n' +
                req.statusText);
        }
    }
}


function getMessages(){
				loadMessages();
				return false;
}


function buildCartItems(){
	var skuarray = init_array(); // if it isn't already defined
	get_array('skus', skuarray);
  var num = (skuarray.length);
  if (num > 0){
 		var cartStatus = document.getElementById('cartStatus');

 		if (cartStatus != null)
                {    
			cartStatus.innerHTML = 'Cart is loading...';
                }        

  	URL = context+'processXML.jsp?response=0';
  	action = 'cart';
  	loadXMLDoc(URL,'');

	}else{
		var cartStatus = document.getElementById('cartStatus');
		if (cartStatus != null)
			cartStatus.innerHTML = '<span style="font-size: 18px; color:red; font-family: Abadi MT Condensed Light, Osaka, Helvetica Neue Light, Arial Narrow;">No clips in cart.</span>';

		var totalNode = document.getElementById('Total1');
		var showHtml = '<table><tr><td width="85px"><td id="tdInfoPage_">'+formatCurrency('0')+' USD</td></tr></table>';

		if (totalNode != null)
			totalNode.innerHTML = showHtml;
			
			getNav();			
			//hideCheckOut();
 	}
}

function backToCheckout(){
  	URL = context+'processXML.jsp?response=0';
  	action = 'profile';
  	loadXMLDoc(URL,'');
}


function listCartItems(){
	var skuarray = init_array(); // if it isn't already defined
	get_array('skus', skuarray);
  var num = (skuarray.length);
  if (num > 0){
// 		var cartStatus = document.getElementById('cartStatus');
//		cartStatus.innerHTML = 'Cart is loading...';
  	URL = context+'processXML.jsp?response=0';
  	action = 'checkout';
  	loadXMLDoc(URL,'');
	}else{
		var cartStatus = document.getElementById('cartStatus');
		cartStatus.innerHTML = 'No items in cart.';
		hideCheckOut();
 	}
}

function processCouponCode(){
	var skuarray = init_array(); // if it isn't already defined
	get_array('skus', skuarray);
  var num = (skuarray.length);
  if (num > 0){
// 		var cartStatus = document.getElementById('cartStatus');
//		cartStatus.innerHTML = 'Cart is loading...';
  	URL = context+'processXML.jsp?response=0';
  	action = 'coupon';
  	loadXMLDoc(URL,'');
	}else{
		var cartStatus = document.getElementById('cartStatus');
		cartStatus.innerHTML = 'No items in cart.';
		hideCheckOut();
 	}
}



function buildLicenseItems(node){
  if (node != null)
    {
	for (i=0;i<node.length;i++)        
  {
        for (j=0;j<node[i].childNodes.length;j++)        
        {           
        	  var myNode = node[i].childNodes[j];
						var nodeName = node[i].childNodes[j].nodeName 
						licenseData[myNode.getAttribute("licenseID")]= new License(myNode.getAttribute("licenseID"),myNode.getAttribute("name"), myNode.getAttribute("desc"),myNode.getAttribute("price"));				
			}
  }
 						return true;
    }else{
    	alert('node is null');
    	return false;
  }

}

function clearMessages(){
	del_cookie('message');
}

function loadMessages(){
			var messages_txt = '';
			var messageBox = document.getElementById('messages');
			messages_txt = get_cookie('message');			
			//Alert to user
			if (messages_txt.length > 0)
			{
					alert(messages_txt);
      		return true; 		    
			}	
			//Write to page
			if (messageBox != null){
//				messageBox.innerHTML = messages_txt;
      	return true; 		    
			}else{
				return false;
			}				
}

function loadSavedClips(req){
	    var saved_clips = req.responseXML.getElementsByTagName('saved_cart');
	    if (saved_clips[0] == null){return false;}
	    for (j=0;j<saved_clips[0].childNodes.length;j++)        
       {
       	    var myNode = saved_clips[0].childNodes[j];
						var nodeName = saved_clips[0].childNodes[j].nodeName
						if (nodeName.toLowerCase() == 'total')
								myNode.firstChild.nodeValue;
						else
							//alert('loading '+nodeName+':'+myNode.getAttribute("licenseID"));
							savedClipData[nodeName] = new savedClip(nodeName, myNode.getAttribute("licenseID"));			
       }
       return true; 		    
}
/*
Builds list of clip information for checkout page.
This is located on the left side.
*/
function listCart()
{
	var myClips= new Array();
	//Package XML
	var clipCnt = 0 //Track number of clips ordered
  var clips = req.responseXML.getElementsByTagName('clip');
  //var licenses = req.responseXML.getElementsByTagName('licensedata');
  //buildLicenseItems(licenses);    
  clipCnt = clips.length;
	//Initialize Table 		
	var	table = document.createElement('TABLE');
	table.setAttribute("border","0");
	table.setAttribute("width","185");
	table.cellSpacing="2px";
	var tbody = document.createElement('TBODY');
	table.appendChild(tbody);
	//Initialize a ROW
	//var row =document.createElement('TR');
	//Initialize a CELL
	//var rowtd=document.createElement('TD');
	//rowtd.setAttribute("width","175");
 	//var	cat_id = nodeValue;
	//var objTextNode = document.createTextNode(clipCnt+' Clips');
  //var objLabel = document.createElement('label');
  //objLabel.className ='selector';
  //objLabel.appendChild(objTextNode);
	//Add Content to Cell	 
  //rowtd.appendChild(objLabel);
  //Add cell to row
	//row.appendChild(rowtd);
	//Add row to table
	//tbody.appendChild(row);
	//Initialize a ROW
	//var row =document.createElement('TR');
	//Initialize a CELL
	//var rowtd=document.createElement('TD');
	//rowtd.setAttribute("width","175");
 	//var	cat_id = nodeValue;
	//var objTextNode = document.createTextNode('Clip IDs');
  //var objLabel = document.createElement('label');
  //objLabel.className ='bold';
  //objLabel.appendChild(objTextNode);
	//Add Content to Cell	 
  //rowtd.appendChild(objLabel);
  //Add cell to row
	//row.appendChild(rowtd);
	//Add row to table
	//tbody.appendChild(row);
	var clip_list  = document.getElementById('cList');  
	//var hidden_list  = document.getElementById('hidden_list');  

  for (i=0;i<clipCnt;i++)        
  {
  	var key; //id
  	var licenseID;
  	var blurb;
  	var	cat_id;
  	var shortName; 
  	var parent = null;
		for (j=0;j<clips[i].childNodes.length;j++)        
    {
    	var iput = '';
    	var myNode = clips[i].childNodes[j];
			var nodeName = clips[i].childNodes[j].nodeName
			key = myNode.getAttribute("id");
     	licenseID = myNode.getAttribute("licenseID");	   	
			var sku_license = document.createElement('input');
			if (key != null)
			{
				//iput += '<input type=hidden name='+'license_'+key + ' value='+licenseID+' id='+'license_'+key+'>';
    		sku_license.setAttribute('type', 'hidden');
    		sku_license.setAttribute('name', 'license_'+key);
    		sku_license.setAttribute('value', licenseID);  		
    		sku_license.setAttribute('id', 'license_'+key);
				clip_list.appendChild(sku_license); 
				
			}
			

			if (myNode.firstChild != null)
      {
      	var nodeValue = myNode.firstChild.nodeValue;
      }else{
      	var nodeValue = 'NA';
      } 
			if (nodeName.toLowerCase() == 'blurb')
     			blurb = nodeValue;
			if (nodeName.toLowerCase() == 'catalog_id')
 					cat_id = nodeValue;
 			if (nodeName.toLowerCase() == 'shortname')
 					shortName = nodeValue;      
 			if (nodeName.toLowerCase() == 'parent')
 					parent = nodeValue;      
				
		}	
		myClips[i] = new clipObj(cat_id, shortName, key, blurb, licenseID,parent);				
	}	

	for (i=0;i<myClips.length;i++)        
  {
  		//this.CatalogID=catID;	
			//this.shortName=shortName;	
			//this.clipID=clipID;	
			//this.blurb=blurb;	
			//this.licenseID=licenseID;
			//Initialize a ROW
			row =document.createElement('TR');
			//Initialize a CELL
			rowtd=document.createElement('TD');
			rowtd.setAttribute('id', 'tdthumbDisplay');
			rowtd.setAttribute("width","185");
	  	rowtd.className ='center';
			if (i==0)
			{
			//	row.Height = '25';
			}
			objTextNode = document.createTextNode('CATALOG ID: '+myClips[i].CatalogID);
      objLabel = document.createElement('label');
      objLabel.className ='bold';
      
      //if (myClips[i].licenseID == 3)
      //	objLabel.className ='selector_red';
			//else
      //	objLabel.className ='selector_blue';
      	
	    var new_image = document.createElement('img');
			//new_image.setAttribute("width","64");
			new_image.src  =  'http://demo.ribbitfilms.com/site/img/thumbs_still/'+myClips[i].CatalogID+'.thumb.x72.gif';

  		//Add thumb of thumb image to cell
      rowtd.appendChild(new_image);	
			var br = document.createElement('br');
			rowtd.appendChild(br);	
			objLabel.appendChild(objTextNode);
			//Add Content to Cell	 
  		rowtd.appendChild(objLabel);
			br = document.createElement('br');
			rowtd.appendChild(br);
  		
  		
      //Add cell to row
			row.appendChild(rowtd);
			//Add row to table
			tbody.appendChild(row);
	}        	
	//Add table to div	
	clip_list.appendChild(table); 
}

/*
Builds table of clips for shopping cart page.
This is located body area of page.
*/
function buildCartTable(){
	
	//setNav();  	
	
	
	var cartStatus = document.getElementById('cartStatus');
	if (cartStatus != null)
		cartStatus.innerHTML = '';
				
	var clipCnt = 0 //Track number of clips ordered
		var items = document.getElementById('Items');
		if (items == null)
			return false;

				
    var clips = req.responseXML.getElementsByTagName('clip');
    var licenses = req.responseXML.getElementsByTagName('licensedata');
    buildLicenseItems(licenses);    
    clipCnt = clips.length;
	    
    if (clipCnt == 0){
    var messages = req.responseXML.getElementsByTagName('message');
    if (messages != null)
    {
        	for (k=0;k<messages.length;k++)        
        	{
            	html = 'No clips in cart.';
            	var tagDiv = document.createElement( 'div' );
            	var attrID = document.createAttribute( 'id' );
            	attrID.nodeValue = 'errorMessage';
            	tagDiv.setAttributeNode( attrID );
            	items.parentNode.insertBefore( tagDiv, items.nextSibling );
            	document.getElementById('errorMessage').innerHTML = html;
            	return false;
        	}
    	}
  	}
  	
 	//Initialize Table 		
	var	table = document.createElement('TABLE');
	table.setAttribute("border","0");
	table.setAttribute("width","600");
	table.setAttribute("cellpadding","0");
	table.setAttribute("cellspacing","0");

	table.cellSpacing="10px";

	var tbody = document.createElement('TBODY');
	table.appendChild(tbody);
	//Initialize a ROW
	var row;
	row =document.createElement('TR');
	  
    for (i=0;i<clipCnt;i++)        
    {
    	//Initialize a new clip array
    	var myClip= new Array();
			var sku = '';
			var cat_id = '';
			var html = '';
			var new_image = ''; 
			var parent = null;
			//Initialize a CELL
			var rowtd=document.createElement('TD');
			if (i==0)
			{
				row.Height = '350';
			}
			rowtd.setAttribute("width","220");
			//rowtd.className = 'cartTD';
			rowtd.className = 'tdShopClip';

	
			var clip_data = document.createElement('clip');
			clip_data  = items.parentNode.insertBefore( clip_data, items.nextSibling );
			
       		new_image = document.createElement('img');
					rowtd.setAttribute("width","220");
					rowtd.setAttribute("align","center");

        	clip_data.appendChild(new_image);	
					var p = document.createElement('p');
      		clip_data.appendChild(p);	
        	
        for (j=0;j<clips[i].childNodes.length;j++)        
        {
            var myNode = clips[i].childNodes[j];
						var nodeName = clips[i].childNodes[j].nodeName 
	          if (myNode.firstChild != null)
            {
                var nodeValue = myNode.firstChild.nodeValue;
            }else{
                var nodeValue = 'NA';
            }

            if (nodeName.toLowerCase() == '_list_clip_category_id'){
 								parent = nodeValue;
						}	

            if (nodeName.toLowerCase() == 'id'){
 								sku = nodeValue;
 								clip_data.id = sku; 
						}

            if (nodeName.toLowerCase() == 'catalog_id'){
 								cat_id = nodeValue;
								new_image.id = "image"+cat_id; 
								
 						}														
						

            	clip_data.setAttribute(nodeName, nodeValue);
           	if (nodeName.toLowerCase() == 'license')
           	{
           		var key = myNode.getAttribute("id");
            	var thisID = 'license_'+key;
           		var myRadio = document.createElement('input');
              var licenseID = myNode.getAttribute("licenseID")
              var label = myNode.getAttribute("name");
              var price = myNode.getAttribute("price");
           		var ischecked = '';
            	/*
            	var ischecked = '';
            	if (savedClipData['clip_'+key] != undefined)
           		{
           			if (savedClipData['clip_'+key].licenseID == licenseID)
           			{
           				ischecked = 'checked';
              	}
              }
              */
			
           		if (BrowserDetect.browser == 'Explorer'){
             		myRadio = document.createElement('<input checked id='+thisID+' onMouseOut=hideText() onMouseOver=showText(\''+licenseID+'\') onClick=deleteNode(\''+sku+'\') licenseID=\''+licenseID+'\' label=\''+label+'\' type=\'checkbox\' name='+thisID+' value='+price+'>');
            	}else{
//							if (ischecked)
								myRadio.setAttribute('checked', true);
           			myRadio.setAttribute('type', 'checkbox');
								myRadio.setAttribute('name', thisID );
           			myRadio.setAttribute('value', myNode.getAttribute("price"));
              	myRadio.setAttribute('id', thisID);
              	myRadio.setAttribute('licenseID', licenseID);
              	myRadio.setAttribute('label', label);                
              	myRadio.setAttribute('onClick', 'deleteNode(\''+sku+'\')');
              	myRadio.setAttribute('onMouseOver', 'showText(\''+licenseID+'\')');                                                
              	myRadio.setAttribute('onMouseOut', 'hideText(\''+licenseID+'\')');
            	}
							if (myRadio == null)
            		alert('This browser does not support AJAX. Shopping cart invalid.');
            		
            	clip_data.appendChild(myRadio);
            	
            	/*THIS CODE IS FOR CART SAVE; NOT NECESSARY FOR NON-TIERED PRICING
            	//Write hidden field to set license ID for selected clip
              if (ischecked){
								var sku_license = document.createElement('input');
    						sku_license.setAttribute('type', 'hidden');
    						sku_license.setAttribute('name', key+"_license" );
    						sku_license.setAttribute('value', licenseID);
    						sku_license.setAttribute('id', key+"_license");
								sku_license  = document.getElementById('Items').parentNode.insertBefore( sku_license , document.getElementById('Items').nextSibling );
             }	
							*/
							
							/*
							//SET Color scheme for 4 COMP(blue)/3 HD(red) clips
              var colorTextNode =  document.createTextNode('<< ');             	
            	var colorLabel = document.createElement('label');
							if (licenseID == 3)
            		colorLabel.className ='selector_red';
							else if(licenseID == 3)
            		colorLabel.className ='selector_purple';
							else
            		colorLabel.className ='selector_blue';
            		
            	colorLabel.appendChild(colorTextNode);
							*/
  
              var objTextNode = document.createTextNode(label+': ' + formatCurrency(price)+'');
            	var objLabel = document.createElement('label');
            	//objLabel.value = 'momo';
            	//objLabel.className ='tdShopClip';
            	objLabel.htmlFor = myRadio.id;
            	objLabel.appendChild(objTextNode);
            	//clip_data.appendChild(colorLabel);
            	clip_data.appendChild(objLabel);
            	var br = document.createElement('br');            	
            	clip_data.appendChild(br);

            	/*
							//SET Color scheme for 4 COMP(blue)/3 HD(red) clips
              var colorTextNode =  document.createTextNode(' >>');             	
            	var colorLabel = document.createElement('label');
							if (licenseID == 3)
            		colorLabel.className ='selector_red';
							else
            		colorLabel.className ='selector_blue';
       	
            	colorLabel.appendChild(colorTextNode);
            	clip_data.appendChild(colorLabel);
							*/
            	            	
            	var br = document.createElement('br');
            	clip_data.appendChild(br);
           		//ADD RADIO IS NOT CROSS BROWSER COMPATIBLE
      				//addRadio('checkbox',clip_data,myNode.getAttribute("id"),myNode.getAttribute("name"),myNode.getAttribute("price"),myNode.getAttribute("licenseID"));      				
						}else{
							myClip[nodeName] = nodeValue;             		
						}	
    
        }
				new_image.src  = 'http://demo.ribbitfilms.com/site/img/thumbs_still/'+cat_id+'.thumb.x72.gif';				


				if (parent != null)
				{
					  var local = parent;
					  var clip_id_ = clip_data.id.split("_");
						var cid = clip_id_[0]; 
        	  var aid = 8;
 						document.getElementById("image"+cat_id).onclick=function(){ 
        			location.assign('category.display.jsp?cid='+cid+'&aid='+aid+'&pid='+local);
	      			return true;
						} 
	     }else{
						var clip_id = clip_data.id.split("_");
						document.getElementById("image"+cat_id).onclick=function(){ 
       					aid = 7;
        				location.assign('content.display.jsp?pid='+clip_id[0]+'&aid=6&action=volumes');
        				return true;
						} 
	
      }
        //html =  nodeName+' : ' +  nodeValue+'';
				var objTextNode = document.createElement('div');
				//objTextNode.className = 'cartItems';
        html = 'CATALOG ID: <strong>'+myClip['catalog_id']+'</strong><br>';
        html += 'TITLE: <strong>'+myClip['shortname']+'</strong><br>';
        objTextNode.innerHTML = html;
        clip_data.appendChild(objTextNode);
        rowtd.appendChild(clip_data);
        //Add cell to row
				row.appendChild(rowtd);

		var adjCnt = (i+1);		
		var mod = (adjCnt % 3);
		
		if (mod == 0)
		{		
				//Add row to table
				tbody.appendChild(row);
				//Create new row
				row=document.createElement('TR');
		}
				
    }
		//Add row to table
		tbody.appendChild(row);
		//Add total and nav image
		row =document.createElement('TR');
		rowtd=document.createElement('TD');
		rowtd.setAttribute("colSpan","2");
		rowtd.className = 'tdInfoPage';
		var Total2= document.createElement('div');
		Total2.id = 'Total2'
		Total2.className = 'Total2'		
  	rowtd.appendChild(Total2);
  	var br = document.createElement('br');
  	rowtd.appendChild(br);
		var cartNav3 = document.createElement('div');
		cartNav3.id = 'cartNav3'
		//cartNav3.innerHTML = '<img onMouseDown="this.src=\'img/proceed2.gif\';" onMouseUp="this.src=\'img/proceed1.gif\';" width=150px onClick=goTime(); src="img/proceed1.gif">';
  	rowtd.appendChild(cartNav3);
   	//Add cell to row
		row.appendChild(rowtd);
		//Add row to table
		tbody.appendChild(row);
		//Add table to page

    table =items.parentNode.insertBefore( table,items.nextSibling );

    
		var total = document.createElement('input');
    	total.setAttribute('type', 'hidden');
    	total.setAttribute('name', 'total' );
    	total.setAttribute('value', 0);
    	total.setAttribute('id', 'totalfield');
			total  =items.parentNode.insertBefore( total,items.nextSibling );
			return true;
}
function calcShipping(radio)
{
    var divNames= new Array();
		divNames[0] = new totalObj('editEEUP.gif','editEEDN.gif','editOrder()','Total1',radio.value,'checkout');

		divNames[1] = new totalObj('submitEEUP.gif','submitEEOver.gif','submitOrder(document.forms[1])','Total2',radio.value,'checkout');
		
		var form = document.forms[1];
		if ( form == null)
			divNames[1] = new totalObj('submitEEUP.gif','submitEEOver.gif','submitOrder(document.forms[0])','Total2',radio.value,'checkout');
		
		calcTotal(divNames);
}
/*
CalcTotal totals all clips that match a sku in cookie!
*/	
function calcTotal(objList)
{
	var form = document.forms[1];
	if ( form == null)
		form = document.forms[0];
	
	var skuarray = init_array(); // if it isn't already defined
 	get_array('skus', skuarray);
 	var num = (skuarray.length);
 	
	for(var k = 0; k < objList.length; k++){
		var shipCost = (objList[k].shipCost);
		var clipCnt = 0 //Track number of clips ordered
		var totalNode = document.getElementById(objList[k].div);
		var discount;
		var credit;

		if (form.credit != null)
			credit = form.credit.value;
		else
			credit = 0;		

		
		if (form.discount != null)
			discount = ((form.discount.value-0)*.01)
		else
			discount = 0;		
		
		
		var showHtml = '<table width="200px">';
		var subTotal = 0;
  	//var clips =  document.getElementsByTagName('clip');
 		var clips = req.responseXML.getElementsByTagName('clip');
	
  	clipCnt = clips.length;
		if (clipCnt != 0)
		{
			for(var i = 0; i < clipCnt; i++)
			{
				for (j=0;j<clips[i].childNodes.length;j++)        
    		{
						var myNode = clips[i].childNodes[j];
						if (myNode != null)
						{
 							var idx = skuarray.toString().lastIndexOf(myNode.getAttribute("id"));
							var price = myNode.getAttribute("price");
							//Test if clip matches sku in cookie
							if (price != null & idx != -1)
    						            subTotal = subTotal+(price-0);
    				}

    		}
				//var radios = document.getElementsByName('license_'+clips[i].id);
				//for(var j = 0; j < radios.length; j++)
				//{	
				//DISABLED DUE TO NON TIERED PRICING
				//	if(radios[j].checked == 1){
				//		subTotal = subTotal+(radios[j].value-0);
				//	}
				//}
				
			}
		}else if (num == 0){
			subTotal = 0;
		}else{
			subTotal = document.getElementById('session_totalfield').value;
		}
		//STORE SUBTOTAL ON FORM
		var subtotalField = document.getElementById('subtotalfield');
		if (subtotalField != null)
		{
			subtotalField.setAttribute('value', subTotal);
				//alert('Subtotal: '+document.forms[0].subtotal.value);
		}						


			if (discount > 0)
			{
				//STORE DISCOUNT ON FORM
				var discounttotalField = document.getElementById('discounttotalfield');
				if (discounttotalField != null)
				{
						discounttotalField.setAttribute('value', (discount*subTotal));
						//alert('Discount: '+document.forms[0].discounttotal.value);				
				}
				//Show total before discount
				showHtml += '<tr><td id="tdInfoPage__">Subtotal: </td><td style="text-align:right;" id="tdInfoPage_">'+formatCurrency(subTotal)+' USD</td></tr>';
				//Show discount
				showHtml += '<tr><td id="tdInfoPage__">Discount:</td><td style="text-align:right;color:red;" id="tdInfoPage_">-'+formatCurrency(discount*subTotal)+' USD</td></tr>';
				subTotal = (subTotal-(discount*subTotal))									
			}else{
				if (objList[k].page == 'checkout')	
					showHtml += '<tr><td id="tdInfoPage__">Subtotal:</td><td id="tdInfoPage_"><span>'+formatCurrency(subTotal)+' USD</span></td></tr>';
			}
			
			//STORE CREDIT ON FORM
			if (credit > 0)
			{
				showHtml += '<tr><td id="tdInfoPage__">Credit:</td><td style="text-align:right;color:red;" id="tdInfoPage_">-'+formatCurrency(credit)+' USD</td></tr>';	
				//alert(document.forms[0].credit.value);			
			}			
			//Apply credit
			subTotal = ((subTotal-0)-(credit-0));

			if (shipCost > 0)
			{
				//STORE SHIPPING TOTAL ON FORM
				var shippingtotalField = document.getElementById('shippingtotalfield');
				if (shippingtotalField != null)
				{
						shippingtotalField.setAttribute('value', shipCost);
						//alert('Ship Cost: '+document.forms[0].shippingtotal.value);				
				}
				showHtml += '<tr><td id="tdInfoPage__">Shipping:</td><td style="text-align:right;" id="tdInfoPage_">'+formatCurrency(shipCost)+' USD</td></tr>';
			}
			
		subTotal = ((subTotal-0)+(shipCost-0));

		showHtml += '<td id="tdInfoPage__"></td><td style="text-align:right;" id="tdInfoPage_">'+formatCurrency(subTotal)+' USD</td></tr>';
		//Do we have an image button>
		if (+objList[k].imgOff != 0 && +objList[k].imgOn != 0)
		{
			if (objList[k].action.length != 0)
				showHtml += '<tr><td align="center" colSpan=2><img onMouseDown="this.src=\'http://demo.ribbitfilms.com/site/img/'+objList[k].imgOn+'\';" onMouseUp="this.src=\'http://demo.ribbitfilms.com/site/img/'+objList[k].imgOff+'\';" onClick='+objList[k].action+'; src="http://demo.ribbitfilms.com/site/img/'+objList[k].imgOff+'"></td></tr>';
			else	
				showHtml += '<tr><td align="center" colSpan=2><img type="image" name="submit" onMouseDown="this.src=\'http://demo.ribbitfilms.com/site/img/'+objList[k].imgOn+'\';" onMouseUp="this.src=\'http://demo.ribbitfilms.com/site/img/'+objList[k].imgOff+'\';" onClick='+objList[k].action+'; src="http://demo.ribbitfilms.com/site/img/'+objList[k].imgOff+'"></td></tr>';
		}
		showHtml += '</table>';
		
		
		if (totalNode != null)
			totalNode.innerHTML = showHtml;
	
	}
	total = subTotal;
	var totalField = document.getElementById('totalfield');

	if (totalField != null){
		totalField.setAttribute('value', total);
		//alert('Total: ' + form.totalfield.value);
		//var s_totalField = document.getElementById('session_totalfield');
		//alert('Session Total: ' + s_totalField.value);		
	
	}
	
	//setNav();

}	
            

function addRadio(eType, node, key, label,price,licenseID){

		 				var ischecked = '';
            var thisID = 'license_'+key;
            	  if (savedClipData['clip_'+key] != undefined)
           			{
           				if (savedClipData['clip_'+key].licenseID == licenseID)
           				{
           					ischecked = 'checked';
              		}
              	}
            try{
            	myRadio = document.createElement('<input '+ischecked+' id='+thisID+' onMouseOut=hideText() onMouseOver=showText(\''+licenseID+'\') onClick=CalcTotal(\'Total1\') licenseID=\''+licenseID+'\' label=\''+label+'\' type=\''+eType+'\' name='+thisID+' value='+price+'>');
            }catch(err){
  							myRadio = document.createElement('input');
           			myRadio.setAttribute('type', eType);
           			myRadio.setAttribute('name', thisID );
           		//	if (savedClipData['clip_'+key] != undefined)
           		//	{
           		//		if (savedClipData['clip_'+key].licenseID == licenseID)
           		//		{
           			if (ischecked)
                		myRadio.setAttribute('checked', true);
              //		}
              //	}
                myRadio.setAttribute('value', price);
                myRadio.setAttribute('id', thisID);
                myRadio.setAttribute('licenseID', licenseID);
                myRadio.setAttribute('label', label);                
                myRadio.setAttribute('onClick', 'CalcTotal(\'Total1\')');
                myRadio.setAttribute('onMouseOver', 'showText(\''+licenseID+'\')');                                                
                myRadio.setAttribute('onMouseOut', 'hideText(\''+licenseID+'\')');
            }
            
            if (myRadio == null)
            		alert('This browser does not support AJAX. Shopping cart invalid.');
            
            //Write hidden field to set license ID for selected clip
              	if (ischecked){
									var sku_license = document.createElement('input');
    							sku_license.setAttribute('type', 'hidden');
    							sku_license.setAttribute('name', key+"_license" );
    							sku_license.setAttribute('value', licenseID);
    							sku_license.setAttribute('id', key+"_license");
									sku_license  =items.parentNode.insertBefore( sku_license ,items.nextSibling );
              	}	
              	
            if (node != null)
          	{
          		
          		
	          		
							var objTextNode = document.createTextNode(label+': ' + formatCurrency(price)+'');
            	var objLabel = document.createElement('label');
            	objLabel.className ='selector';
            	objLabel.htmlFor = myRadio.id;
            	objLabel.appendChild(myRadio);
            	objLabel.appendChild(objTextNode);
            	node.appendChild(myRadio);
            	node.appendChild(objLabel);
            	var br = document.createElement('br');
            	node.appendChild(br);
            	
            }	
            
}

function deleteNode(sku){
        var items = document.getElementById(sku);
        var parent = items.parentNode;
        parent.removeChild(document.getElementById(sku));
        //Remove cookie value
        delete_this(sku);
        //Recalculate total
        var divNames= new Array();
				divNames[0] = new totalObj('proceedUP.gif','proceedDOWN.gif','goTime()','Total1',0,'cart');
				divNames[1] = new totalObj('proceedUP.gif','proceedDOWN.gif','goTime()','Total2',0,'cart');
				calcTotal(divNames);
				hideCheckOut();
				del_cookie('cookieState');
				window.location.reload();
}

function saveCartItems(){
//	if (!checkOut)
		//DEACTIVATED NO TIER PRICING
		return true;
		
   	var docClips = document.getElementsByTagName('clip');
		var id;
		var img;
		var xml = '<saved_cart>'; 
		xml += '<total>'+total+'</total>'; 	


     for (i=0;i<docClips.length;i++)        
     {
				id =docClips[i].id;
				img = docClips[i].img;
				 //for (j=0;j<docClips[i].childNodes.length;j++)        
        //{
            var myNode = docClips[i].childNodes[j];
     				var radios = document.getElementsByName('license_'+id);
						for(var k = 0; k < radios.length; k++)
						{
							//NOT NECESSARY FOR NON-TIERED PRICING
							//if(radios[k].checked == 1){
     						xml +='<clip_'+id+' licenseID="'+radios[k].getAttribute("licenseID")+'"/>';
							//}
						}
					
			//	}
				
     		if (id.length >0 ){
    	//		alert(id);
    		}		  
		
    }	
			xml += '</saved_cart>'; 

			//Save state of form to session attribute
//      var URL = context+'saveCartClips.jsp';
 			var URL = context+'processXML.jsp?response=1';
 			loadXMLDoc(URL,xml);
			//var items = document.getElementById('Items');
      //var parent = items.parentNode;
			//deleteAllClips(parent,'clip');			
			return true; 
}   

function deleteAllClips(node, name) {
	var list = document.getElementsByTagName(name);
	var child = null;
	var oldChild = null;
	var clipCnt = list.length;
	for (i=0;i<clipCnt;i++)        
  {
		oldChild = list.removeChild(child);	
	}
	
	
}


function checkLicense(form) {
	if (form.agreement == null)
		return true;
	
	if (form.agreement.checked)
	{
		return true;
	}else{
		alert('Please agree to the terms of RIBBIT FILMS, INC. ROYALTY-FREE LICENSE AGREEMENT.');
		return false;
	}
}

function valid(validateFields, form) {
	if (form==null)
		return true;
	
	if(form.submitButton == 'cancel') {
  	return true;
    }  
    	for (var count=0; count < validateFields.length; count++) {
				if (eval("form."+validateFields[count]) != null){
      		if ( (eval("form."+validateFields[count]+".value") == "") ) 
      		{
        		alert("Please complete all of the required fields.");
            return false;
        	}
      }
		}
	return true;
} // END function valid()

function validShipping(validateFields, form) {
	if(form.submitButton == 'cancel') {
  	return true;
    }  
    	for (var count=0; count < validateFields.length; count++) {
      	if ( (eval("form."+validateFields[count]+".value") == "") ) 
      	{
        		alert("Please complete all of the required shipping fields.");
            return false;
        }
		}
	return true;
} // END function valid()


// return the value of the radio button that is checked
// return an empty string if none are checked, or
// there are no radio buttons
function getCheckedValue(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}



/*************************************************************************\
SUBMIT ORDER FUNCTION!
\*************************************************************************/
function 	submitOrder(form){
	
	
/*
//UNCOMMENTS THIS CODE SNIPPED TO SHOW FORM NAMES/VALS 
	for (var i=0; i < form.length; i++) {
   var element = form.elements[i];
   alert(element.name);
   alert(element.value);   
}
	return false;	
*/
//	alert('submit order');
//	form.submit();
//	return true;	

	
	var validateFields = new Array("ACCTNAME","ACCTZIP","ACCTADD","ACCTCITY","ACCTSTATE");
	if (!valid(validateFields, form))
			return false;

	
	if (!checkLicense(form))
			return false;

	var x_freight = (getCheckedValue(form.x_freight)-0);
	if (x_freight > 0){
		validateFields = new Array("x_ship_to_fullname","x_ship_to_address1","x_ship_to_city","x_ship_to_state","x_ship_to_zip","x_ship_to_country");
		if (!validShipping(validateFields, form))
			return false;
	}		
				 
	if (!CheckCardNumber(form))
			return false;

	form.submit();
	return true;	


}	


//CardNumber
/*************************************************************************\
CREDIT CARD VALIDATION BELOW
\*************************************************************************/

              	


/*************************************************************************\
CheckCardNumber(form)
function called when users click the "check" button.
\*************************************************************************/
function CheckCardNumber(form) {
	
//Bail if no card type
if (form.CardType	== null)
	return true;
	
var Cards = new makeArray(5);
Cards[0] = new CardType("MasterCard", "51,52,53,54,55", "16");
var MasterCard = Cards[0];
Cards[1] = new CardType("VisaCard", "4", "13,16");
var VisaCard = Cards[1];
Cards[2] = new CardType("AmExCard", "34,37", "15");
var AmExCard = Cards[2];
Cards[3] = new CardType("DiscoverCard", "6011", "16");
var DiscoverCard = Cards[3];
var LuhnCheckSum = Cards[4] = new CardType();

var tmpyear;
if (form.CardType.value.length == 0) {
alert("Please enter a Card Type.");
form.CardType.focus();
return;
}

if (form.ACCT.value.length == 0) {
alert("Please enter a Card Number.");
form.ACCT.focus();
return;
}
if (form.ExpYear.value.length == 0) {
alert("Please enter the Expiration Year.");
form.ExpYear.focus();
return;
}
if (form.ExpYear.value > 96)
tmpyear = "19" + form.ExpYear.value;
else if (form.ExpYear.value < 21)
tmpyear = "20" + form.ExpYear.value;
else {
alert("The Expiration Year is not valid.");
return;
}
tmpmonth = form.ExpMon.options[form.ExpMon.selectedIndex].value;
// The following line doesn't work in IE3, you need to change it
// to something like "(new CardType())...".
// if (!CardType().isExpiryDate(tmpyear, tmpmonth)) {
if (!(new CardType()).isExpiryDate(tmpyear, tmpmonth)) {
alert("This card has already expired.");
return;
}
card = form.CardType.options[form.CardType.selectedIndex].value;
var retval = eval(card + ".checkCardNumber(\"" + form.ACCT.value +
"\", " + tmpyear + ", " + tmpmonth + ");");
cardname = "";
if (retval){
// comment this out if used on an order form
//alert("This card number appears to be valid.");
	return true;
}else {
// The cardnumber has the valid luhn checksum, but we want to know which
// cardtype it belongs to.
for (var n = 0; n < Cards.size; n++) {
if (Cards[n].checkCardNumber(form.ACCT.value, tmpyear, tmpmonth)) {
cardname = Cards[n].getCardType();
break;
   }
}
if (cardname.length > 0) {
alert("This looks like a " + cardname + " number, not a " + card + " number.");
}
else {
alert("This card number is not valid.");
      }
   }
}
/*************************************************************************\
Object CardType([String cardtype, String rules, String len, int year, 
                                        int month])
cardtype    : type of card, eg: MasterCard, Visa, etc.
rules       : rules of the cardnumber, eg: "4", "6011", "34,37".
len         : valid length of cardnumber, eg: "16,19", "13,16".
year        : year of expiry date.
month       : month of expiry date.
eg:
var VisaCard = new CardType("Visa", "4", "16");
var AmExCard = new CardType("AmEx", "34,37", "15");
\*************************************************************************/
function CardType() {
var n;
var argv = CardType.arguments;
var argc = CardType.arguments.length;

this.objname = "object CardType";

var tmpcardtype = (argc > 0) ? argv[0] : "CardObject";
var tmprules = (argc > 1) ? argv[1] : "0,1,2,3,4,5,6,7,8,9";
var tmplen = (argc > 2) ? argv[2] : "13,14,15,16,19";

this.setCardNumber = setCardNumber;  // set CardNumber method.
this.setCardType = setCardType;  // setCardType method.
this.setLen = setLen;  // setLen method.
this.setRules = setRules;  // setRules method.
this.setExpiryDate = setExpiryDate;  // setExpiryDate method.

this.setCardType(tmpcardtype);
this.setLen(tmplen);
this.setRules(tmprules);
if (argc > 4)
this.setExpiryDate(argv[3], argv[4]);

this.checkCardNumber = checkCardNumber;  // checkCardNumber method.
this.getExpiryDate = getExpiryDate;  // getExpiryDate method.
this.getCardType = getCardType;  // getCardType method.
this.isCardNumber = isCardNumber;  // isCardNumber method.
this.isExpiryDate = isExpiryDate;  // isExpiryDate method.
this.luhnCheck = luhnCheck;// luhnCheck method.
return this;
}

/*************************************************************************\
boolean checkCardNumber([String cardnumber, int year, int month])
return true if cardnumber pass the luhncheck and the expiry date is
valid, else return false.
\*************************************************************************/
function checkCardNumber() {
var argv = checkCardNumber.arguments;
var argc = checkCardNumber.arguments.length;
var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
var year = (argc > 1) ? argv[1] : this.year;
var month = (argc > 2) ? argv[2] : this.month;

this.setCardNumber(cardnumber);
this.setExpiryDate(year, month);

if (!this.isCardNumber())
return false;
if (!this.isExpiryDate())
return false;

return true;
}
/*************************************************************************\
String getCardType()
return the cardtype.
\*************************************************************************/
function getCardType() {
return this.cardtype;
}
/*************************************************************************\
String getExpiryDate()
return the expiry date.
\*************************************************************************/
function getExpiryDate() {
return this.month + "/" + this.year;
}
/*************************************************************************\
boolean isCardNumber([String cardnumber])
return true if cardnumber pass the luhncheck and the rules, else return
false.
\*************************************************************************/
function isCardNumber() {
var argv = isCardNumber.arguments;
var argc = isCardNumber.arguments.length;
var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
if (!this.luhnCheck())
return false;

for (var n = 0; n < this.len.size; n++)
if (cardnumber.toString().length == this.len[n]) {
for (var m = 0; m < this.rules.size; m++) {
var headdigit = cardnumber.substring(0, this.rules[m].toString().length);
if (headdigit == this.rules[m])
return true;
}
return false;
}
return false;
}

/*************************************************************************\
boolean isExpiryDate([int year, int month])
return true if the date is a valid expiry date,
else return false.
\*************************************************************************/
function isExpiryDate() {
var argv = isExpiryDate.arguments;
var argc = isExpiryDate.arguments.length;

year = argc > 0 ? argv[0] : this.year;
month = argc > 1 ? argv[1] : this.month;

if (!isNum(year+""))
return false;
if (!isNum(month+""))
return false;
today = new Date();
expiry = new Date(year, month);
if (today.getTime() > expiry.getTime())
return false;
else
return true;
}

/*************************************************************************\
boolean isNum(String argvalue)
return true if argvalue contains only numeric characters,
else return false.
\*************************************************************************/
function isNum(argvalue) {
argvalue = argvalue.toString();

if (argvalue.length == 0)
return false;

for (var n = 0; n < argvalue.length; n++)
if (argvalue.substring(n, n+1) < "0" || argvalue.substring(n, n+1) > "9")
return false;

return true;
}

/*************************************************************************\
boolean luhnCheck([String CardNumber])
return true if CardNumber pass the luhn check else return false.
Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
\*************************************************************************/
function luhnCheck() {
var argv = luhnCheck.arguments;
var argc = luhnCheck.arguments.length;

var CardNumber = argc > 0 ? argv[0] : this.cardnumber;

if (! isNum(CardNumber)) {
return false;
  }

var no_digit = CardNumber.length;
var oddoeven = no_digit & 1;
var sum = 0;

for (var count = 0; count < no_digit; count++) {
var digit = parseInt(CardNumber.charAt(count));
if (!((count & 1) ^ oddoeven)) {
digit *= 2;
if (digit > 9)
digit -= 9;
}
sum += digit;
}
if (sum % 10 == 0)
return true;
else
return false;
}

/*************************************************************************\
ArrayObject makeArray(int size)
return the array object in the size specified.
\*************************************************************************/
function makeArray(size) {
this.size = size;
return this;
}

/*************************************************************************\
CardType setCardNumber(cardnumber)
return the CardType object.
\*************************************************************************/
function setCardNumber(cardnumber) {
this.cardnumber = cardnumber;
return this;
}

/*************************************************************************\
CardType setCardType(cardtype)
return the CardType object.
\*************************************************************************/
function setCardType(cardtype) {
this.cardtype = cardtype;
return this;
}

/*************************************************************************\
CardType setExpiryDate(year, month)
return the CardType object.
\*************************************************************************/
function setExpiryDate(year, month) {
this.year = year;
this.month = month;
return this;
}

/*************************************************************************\
CardType setLen(len)
return the CardType object.
\*************************************************************************/
function setLen(len) {
// Create the len array.
if (len.length == 0 || len == null)
len = "13,14,15,16,19";

var tmplen = len;
n = 1;
while (tmplen.indexOf(",") != -1) {
tmplen = tmplen.substring(tmplen.indexOf(",") + 1, tmplen.length);
n++;
}
this.len = new makeArray(n);
n = 0;
while (len.indexOf(",") != -1) {
var tmpstr = len.substring(0, len.indexOf(","));
this.len[n] = tmpstr;
len = len.substring(len.indexOf(",") + 1, len.length);
n++;
}
this.len[n] = len;
return this;
}

/*************************************************************************\
CardType setRules()
return the CardType object.
\*************************************************************************/
function setRules(rules) {
// Create the rules array.
if (rules.length == 0 || rules == null)
rules = "0,1,2,3,4,5,6,7,8,9";
  
var tmprules = rules;
n = 1;
while (tmprules.indexOf(",") != -1) {
tmprules = tmprules.substring(tmprules.indexOf(",") + 1, tmprules.length);
n++;
}
this.rules = new makeArray(n);
n = 0;
while (rules.indexOf(",") != -1) {
var tmpstr = rules.substring(0, rules.indexOf(","));
this.rules[n] = tmpstr;
rules = rules.substring(rules.indexOf(",") + 1, rules.length);
n++;
}
this.rules[n] = rules;
return this;
}


function updateUser(form){
	form.action.value = 'profile';
	form.submit();	
}		

//==============================================================================
// VALIDATE FIELDS FUNCTIONS
// ----------------
//
//==============================================================================

//zip code

function validateZIP(strng,field) {
	var valid = "0123456789-";
	var hyphencount = 0;
	var error="";

	if (strng.length!=5 && strng.length!=10) {
		alert("Please enter your 5 digit or 5 digit+4 zip code.");
		field.focus();
		return false;
	}
for (var i=0; i < strng.length; i++) {
	temp = "" + strng.substring(i, i+1);
	if (temp == "-") hyphencount++;
if (valid.indexOf(temp) == "-1") {
alert("Invalid characters in your zip code.  Please try again.");
field.focus();
return false;
}
if ((hyphencount > 1) || ((strng.length==10) && ""+strng.charAt(5)!="-")) {
alert("The hyphen character should be used with a properly formatted 5 digit+four zip code, like '12345-6789'.   Please try again.");
field.focus();
return false;
   }
}
return true;
}



// email

function checkEmail (strng,field) {
var error="";
if (strng == "") {
	alert("You didn't enter an email address.");
field.focus;
return false;
}

    var emailFilter=/^.+@.+\..{2,3}$/;
    if (!(emailFilter.test(strng))) { 
       alert("Please enter a valid email address.");
	field.focus;
	return false;
    }
    else {
//test email for illegal characters
       var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/
         if (strng.match(illegalChars)) {
          alert("The email address contains illegal characters.");
          field.focus;
	  return false;
       }
    }
return true;    
}


// phone number - strip out delimiters and check for 10 digits

function checkPhone (strng) {
var error = "";
if (strng == "") {
   error = "You didn't enter a phone number.\n";
}

var stripped = strng.replace(/[\(\)\.\-\ ]/g, ''); //strip out acceptable non-numeric characters
    if (isNaN(parseInt(stripped))) {
       error = "The phone number contains illegal characters.";
  
    }
    if (!(stripped.length == 10)) {
	error = "The phone number is the wrong length. Make sure you included an area code.\n";
    } 
return error;
}


// password - between 6-8 chars, uppercase, lowercase, and numeral

function checkPassword (strng) {
var error = "";
if (strng == "") {
   error = "You didn't enter a password.\n";
}

    var illegalChars = /[\W_]/; // allow only letters and numbers
    
    /*
    if ((strng.length < 6) || (strng.length > 8)) {
       error = "The password is the wrong length.\n";
    }
    */
    if (illegalChars.test(strng)) {
      error = "The password contains illegal characters.\n";
			alert(error);
			return false; 
    }
    /* 
    else if (!((strng.search(/(a-z)+/)) && (strng.search(/(A-Z)+/)) && (strng.search(/(0-9)+/)))) {
      error = "The password must contain at least one uppercase letter, one lowercase letter, and one numeral.\n";
			alert(error);
			return false; 
    }  
   */
   return true;
}    



// first name - 1-40 chars, uc, lc, and underscore only.

function checkFirstName(strng,field) {
var error = "";
if (strng == null) {
   alert("You didn't enter a first name.");
	field.focus;
	return false;
}


    var illegalChars = /\W/; // allow letters, numbers, and underscores
    if ((strng.length < 1) || (strng.length > 40)) {
       alert("The first name is the wrong length.");
	field.focus;
	return false;
    }
    else if (illegalChars.test(strng)) {
    alert("The first name contains illegal characters.");
	field.focus;
	return false;
    } 
return true;
}    


// first name - 1-40 chars, uc, lc, and underscore only.

function checkLastName(strng,field) {
var error = "";
if (strng == null) {
   alert("You didn't enter a last name.");
	field.focus;
	return false;
}
    var illegalChars =/[^ ]\W/; // allow letters, numbers, and underscores
    if ((strng.length < 1) || (strng.length > 40)) {
       alert("The last name is the wrong length.");
	field.focus;
	return false;
    }
    else if (illegalChars.test(strng)) {
    alert("The last name contains illegal characters.");
	field.focus;
	return false;
    } 
return true;
}    


function checkAddress(strng,field) {
var error = "";
if (strng == null) {
   alert("You didn't enter an address.");
	field.focus;
	return false;
}
    var illegalChars = /[^a-zA-Z0-9\s]/ ; // allow letters, numbers, and underscores
    if ((strng.length < 1) || (strng.length > 40)) {
       alert("The address is the wrong length.");
	field.focus;
	return false;
    }
    else if (illegalChars.test(strng)) {
    alert("The address contains illegal characters.");
	field.focus;
	return false;
    } 
return true;
}    

function checkCity(strng,field) {
var error = "";
if (strng == null) {
   alert("You didn't enter a city.");
	field.focus;
	return false;
}
    var illegalChars = /[^a-zA-Z0-9\s]/; // allow letters, numbers, and underscores
    if ((strng.length < 1) || (strng.length > 40)) {
       alert("The city is the wrong length.");
	field.focus;
	return false;
    }
    else if (illegalChars.test(strng)) {
    alert("The city contains illegal characters.");
	field.focus;
	return false;
    } 
return true;
}    


// username - 4-10 chars, uc, lc, and underscore only.

function checkUsername (strng) {
var error = "";
if (strng == "") {
   error = "You didn't enter a username.\n";
}


    var illegalChars = /\W/; // allow letters, numbers, and underscores
    if ((strng.length < 4) || (strng.length > 10)) {
       error = "The username is the wrong length.\n";
    }
    else if (illegalChars.test(strng)) {
    error = "The username contains illegal characters.\n";
    } 
return error;
}       


// non-empty textbox

function isEmpty(strng) {
var error = "";
  if (strng.length == 0) {
     error = "The mandatory text area has not been filled in.\n"
  }
return error;	  
}

// was textbox altered

function isDifferent(strng) {
var error = ""; 
  if (strng != "Can\'t touch this!") {
     error = "You altered the inviolate text area.\n";
  }
return error;
}

// exactly one radio button is chosen

function checkRadio(checkvalue) {
var error = "";
   if (!(checkvalue)) {
       error = "Please check a radio button.\n";
    }
return error;
}

// valid selector from dropdown list

function checkDropdown(choice) {
var error = "";
    if (choice == 0) {
    error = "You didn't choose an option from the drop-down list.\n";
    }    
return error;
}    
