//==============================================================================
//                                                                          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 = '.javajet.com';
var secureDomain = '.ribbitfilms.com';
var secureHost = 'https://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();

    //Is this cart already ordered?
    isCartOrdered(get_cookie('CART_SESSION_ID'));

    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="'+secureHost+'/rfilms/content.display.jsp?pid=1&aid=4&action=register'+qsLid+'&skus='+skuarray.join('^')+'&non_secure_host_url='+host+'&cart_id='+get_cookie('CART_SESSION_ID')+'">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_secure_cookie(){
    del_cookie('skus');
    var cookie = 'skus=' + escape(getParm('skus'))+'^' + '; path=/; domain='+ secureDomain;
    console.debug('setting skus: ' + cookie);
    document.cookie = cookie;
    cookie = 'non_secure_host_url=' + escape(getParm('non_secure_host_url'))+'; path=/; domain='+ secureDomain;
    console.debug('non_secure_host_url: ' + cookie);
    document.cookie = cookie;
    cartStatus();
}


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);
        }
    }else{
        console.debug('failure to locate cookie ' + name);
    }
}

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_dialog(){
    alert(global_cid);
}

function add_to_cart_noload(qnty,sku){
    var closeIt = false;
    if (sku == 'null'){
        if (global_cid > 0){
            sku = String(global_cid);
        }else{
            alert('Invalid sku to cart.');
            return false;
        }
        closeIt = true;
    }

    del_cookie('cookieState');
    var isMatch = false;
    var skuarray = init_array(); // if it isn't already defined

    get_array('skus', skuarray);

    /*Set a cart session in cookie for database persistence later */
    if (!get_cookie('CART_SESSION_ID')){
        set_cookie('CART_SESSION_ID',get_cookie('JSESSIONID'),null);
    }

    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();
    if (closeIt){
        slowly.fade('chooser','hidden');
    }
}



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+'&skus='+skuarray.join('^')+'&non_secure_host_url='+host+'&cart_id='+get_cookie('CART_SESSION_ID'));
                return false;
				
            }
        }
        if (document.access != null)
        {
                dojo.byId('non_secure_host_url').value = host;
                dojo.byId('skus_hidden').value = skuarray.join('^')
                dojo.byId('cart_id_hidden').value = get_cookie('CART_SESSION_ID');
                document.access.submit();
        }else{

            location.assign('content.display.jsp?pid=1&aid=4&action=register'+qsLid+'&skus='+skuarray.join('^')+'&non_secure_host_url='+host+'&cart_id='+get_cookie('CART_SESSION_ID'));
        }
    }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  =  '/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  = '/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=\'/site/img/'+objList[k].imgOn+'\';" onMouseUp="this.src=\'/site/img/'+objList[k].imgOff+'\';" onClick='+objList[k].action+'; src="/site/img/'+objList[k].imgOff+'"></td></tr>';
            else
                showHtml += '<tr><td align="center" colSpan=2><img type="image" name="submit" onMouseDown="this.src=\'/site/img/'+objList[k].imgOn+'\';" onMouseUp="this.src=\'/site/img/'+objList[k].imgOff+'\';" onClick='+objList[k].action+'; src="/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;
}    

