
    // CBL code
    function createRequestObject() {
        var req;

        try {
            netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
        } catch (e) {
            //alert("Permission UniversalBrowserRead denied.");
        }

        if (window.XMLHttpRequest) {
            req = new XMLHttpRequest();
            if(req.overrideMimeType) {
                req.overrideMimeType('text/xml');
            }
        } else if (window.ActiveXObject) {
            try {
                req = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    req = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!req) {
            alert("couldn't connect");
            return false;
        }

        return req;
    }

    /* pass in part number, quantity and ID of spinner div */
    function sendToPhone() {
         var phone = document.getElementById('phone').value;
         var carrierSelect = document.getElementById('mobile_download_form').carrier;
         var carrier = carrierSelect.options[carrierSelect.selectedIndex].value;
         var platformSelect = document.getElementById('mobile_download_form').platform;
         var platform = platformSelect.options[platformSelect.selectedIndex].value;

         if( platform == '' ) { alert('Please choose a platform'); return; }
         if( carrier == '' ) { alert('Please choose a carrier'); return; }
         if( carrier == 'Other' ) {
             alert('If your carrier is not listed, simply open the App Store on your device and search for "Keeper".'); 
             return;
         }
         if( phone == '' ) { alert('Please enter your mobile phone number'); return; }

         var requestString = '/download_keeper_sms?platform=' + platform + '&carrier=' + carrier + '&phone=' + phone; 
         http = createRequestObject();
         http.open('get', requestString);
         http.onreadystatechange = handleMobileDownload;
         http.send(null);
    }

    function handleMobileDownload() {
         if(http.readyState == 4){
             alert('A link has been sent to your phone.  If you do not receive the message, please open the App Store on your device and search for "Keeper".'); 
         } else {
             // not ready yet 
         }
    }

    /* pass in part number, quantity and ID of spinner div */
    function buyNow(pn, qty, spinner) {
         if( qty == 0 ) { alert('Choose a quantity'); return; }
         document.getElementById(spinner).style.display = "inline";

         var requestString = '/cart?addtocart=yes&buy_' + pn + '=yes&qty_' + pn + '=' + qty + '&response_type=show_cart';
         http = createRequestObject();
         http.open('get', requestString);
         http.onreadystatechange = handleAddToCartResponse;
         http.send(null);
    }

    function addToCart(pn, qty) {
	 if( qty == 0 ) { alert('Choose a quantity'); return; } 
         eval( 'document.getElementById("sb_' + pn + '").style.display = "inline"');

         var requestString = '/cart?addtocart=yes&buy_' + pn + '=yes&qty_' + pn + '=' + qty + '&response_type=show_cart'; 
         http = createRequestObject();
         http.open('get', requestString);
         http.onreadystatechange = handleAddToCartResponse;
         http.send(null);
    }

    function recalculate(itemList, action) {
        var s = "";

	if( itemList != '' )
	{
	    var itemArray = itemList.split(",");
	    for(i in itemArray) {
		s = s + '&mod_' + itemArray[i] + '=yes&qty_' + itemArray[i] + '=' + document.getElementById(itemArray[i]).value;
	    }	
	}

	if( action == 'save')
	{
	    http = createRequestObject();
	    var requestString = '/cart?edit_quote=yes&quote_id=' + document.shopping_cart_form.quote_id.value + '&addtocart=no' + s + '&response_type=save_confirm';
	    http.open('get', requestString);
	    http.onreadystatechange = handleRefreshCartResponse;
	    http.send(null);
	}
	else if( action == 'checkout' )
	{
	    var checkoutText = document.getElementById("checkout_text");
	    setLoading(checkoutText);

	    http = createRequestObject();
	    var requestString = '/cart?edit_quote=yes&quote_id=' + document.shopping_cart_form.quote_id.value + '&addtocart=no' + s + '&response_type=checkout';
	    http.open('get', requestString);
	    http.onreadystatechange = handleCheckoutReady;
	    http.send(null); 
	}
	else if( action == 'checkout_paypal' )
	{
	    var checkoutText = document.getElementById("checkout_text");
	    setLoading(checkoutText);

	    http = createRequestObject();
	    var requestString = '/cart?edit_quote=yes&quote_id=' + document.shopping_cart_form.quote_id.value + '&addtocart=no' + s + '&response_type=checkout_paypal';
	    http.open('get', requestString);
	    http.onreadystatechange = handleCheckoutReadyPaypal;
	    http.send(null); 
	}
	else if( action == 'update' )
	{
	    http = createRequestObject();
	    var requestString = '/cart?edit_quote=yes&quote_id=' + document.shopping_cart_form.quote_id.value + '&addtocart=no' + s + '&response_type=show_cart';
	    http.open('get', requestString);
	    http.onreadystatechange = handleRefreshCartResponse;
	    http.send(null);
	}
	else if( action == 'change_user' )
	{
	    http = createRequestObject();
	    var requestString = '/cart?edit_quote=yes&quote_id=' + document.shopping_cart_form.quote_id.value + '&addtocart=no' + s + '&quote_user_id=' + document.shopping_cart_form.quote_user_id.options[document.shopping_cart_form.quote_user_id.selectedIndex].value + '&response_type=show_cart';
	    http.open('get', requestString);
	    http.onreadystatechange = handleRefreshCartResponse;
	    http.send(null);
	}
	return;
    }

    function deleteItem(pn) {
         var requestString = '/cart?quote_id=' + document.shopping_cart_form.quote_id.value + '&addtocart=no&mod_' + pn + '=yes&qty_' + pn + '=0&response_type=show_cart'; 
         http = createRequestObject();
         http.open('get', requestString);
         http.onreadystatechange = handleRefreshCartResponse;
         http.send(null);
    }

    function handleCheckoutReady() { 
         if(http.readyState == 4){         
	    location = secureHome + "/billing_shipping?type=cc&o=" + document.shopping_cart_form.o.value;
	 }
    }

    function handleCheckoutReadyPaypal() { 
         if(http.readyState == 4){         
	    location = secureHome + "/payforcart_paypal?o=" + document.shopping_cart_form.o.value;
	 }
    }

    function handleRefreshCartResponse() {
         if(http.readyState == 4){         
             currentCart = http.responseText;
             location = '/cart';
         } else {
             //
         }
    }

    function getCurrentCart() {
         var requestString = '/cart?response_type=show_cart';
         http = createRequestObject();
         http.open('get', requestString);
         http.onreadystatechange = handleViewCartResponse;
         http.send(null);    
    }

    function handleViewCartResponse() {
         if(http.readyState == 4){         
             location = '/cart';
         } else {
             //
         }
    }

    function handleAddToCartResponse() {
         if(http.readyState == 4){
             location = '/cart';
         } else {
             // not ready yet 
         }
    }

    function openCartAction() {
        location = '/cart';
    }

    function hideCartAction() {
        location = "/";
    }

    function showCart() {
        location = "/cart";
    }

    function hideCart() 
    {
        location = "/";
    }

    function showChooser() {
        document.getElementById('adapter_selector').style.display = "block";
        document.getElementById('adapters').style.display = "block";
    }

    function hideChooser() {
        document.getElementById('adapter_selector').style.display = "none";
    }

    function hideAdapters() {
        document.getElementById('adapters').style.display = "none";
    }

    function filterModels(manufacturerName, modelName) {
         closeOpenAdapters();
         currentAdapterOem = manufacturerName;
         currentAdapterModel = modelName;

         /* Jump to the anchor find_adapter */
         document.getElementById('find_adapter').scrollIntoView(true);

         if( currentAdapterOem == 'all' ) { 
             document.getElementById('selected_mfg').innerHTML = 'All Manufacturers'
         } else  {
             document.getElementById('selected_mfg').innerHTML = 'Manufacturer: ' + currentAdapterOem;
         }

         document.getElementById('selected_mfg').style.display='block';
         document.getElementById('selected_mfg').style.visibility='visible';

         /* This jumps to handleGetAdapters then to handleFilterModels 
            then displays the resulting adapters */
         var requestString = '/adapters_list?oem=' + currentAdapterOem + '&model=' + modelName;
         http = createRequestObject();
         http.open('get', requestString);
         http.onreadystatechange = handleGetAdapters;
         http.send(null);
    }
  
    function handleGetAdapters() {

        if(http.readyState == 4)
        {
            /* Plug in these adapters but keep it hidden */
            var modelDiv = document.getElementById('adapters');
            modelDiv.innerHTML = http.responseText;

            /* Get the models for this oem */
            if( currentAdapterModel != '' ) {
                showAdapters(); /* Just show the adapters */
                setupZoom(); /* reload image zoom setup */
            } else {
                /* Filter models and show adapters after refresh */
                var requestString = '/models?oem=' + currentAdapterOem;
                http = createRequestObject();
                http.open('get', requestString);
                http.onreadystatechange = handleFilterModels;
                http.send(null);
            }
        }
    }

    function handleFilterModels() 
    {
        if(http.readyState == 4){
            if( currentAdapterOem != 'all' ) 
            {
                var modelDiv = document.getElementById('selectModel');
                modelDiv.innerHTML = http.responseText;
                modelDiv.style.display="block";
	        //document.getElementById('adapter_selector').style.height = "108px";
                showAdapters();
                setupZoom(); /* reload image zoom setup */
             } else {
                modelDiv.style.display="none";
             }
         } 
    }

    function showAdapters()
    {
        var adapters = document.getElementsByName("adapter");

        // adapters is undefined in IE for some fricking reason!!!
        if( adapters.length > 0 ) {
            for( var i=0; i<adapters.length; i++ ) {
                adapters[i].style.display="block";
                adapterArray[adapterArrayLength++] = adapters[i].id;
            }
        }
    }

    function closeOpenAdapters() {
        // close previous and turn all adapters off
        for(var i=0; i<adapterArrayLength; i++) {
            document.getElementById(adapterArray[i]).style.display = "none";
        }
        adapterArray = new Array();
        adapterArrayLength = 0;
    }

    function process_alerts() {
	var name=document.getElementById('alert_name').value;
	var company=document.getElementById('alert_company').value;
	var email=document.getElementById('alert_email').value;
	var qty=document.getElementById('alert_qty').value;
	var product_id=document.getElementById('alert_product_id').value;
	var alertDiv = document.getElementById('alert_div');

        if( name == '' ) { alert('Please enter your name'); return; }
        if( email == '' ) { alert('Please enter your email'); return; }
        if( qty == '' ) { alert('Please enter a quantity'); return; }
        if( qty == 0 ) { alert('Please enter a quantity'); return; }
 
	setLoading(alertDiv);
        var requestString = '/saveNotify?email=' + encodeURIComponent(email) + '&name=' + encodeURIComponent(name) + '&company=' + encodeURIComponent(company) + '&product_id=' + encodeURIComponent(product_id) + '&qty=' + encodeURIComponent(qty);
        http = createRequestObject();
        http.open('get', requestString);
        http.onreadystatechange = handleSaveAlerts;
        http.send(null);
    }

    function process_giveaway() {
	var referral=document.getElementById('referral').value;
	var email=document.getElementById('email').value;
	var alertDiv = document.getElementById('alert_div');
        if( email == '' ) { alert('Please enter your email'); return; }
	setLoading(alertDiv);
        var requestString = '/saveNotify?email=' + encodeURIComponent(email) + '&company=' + encodeURIComponent(referral); 
        http = createRequestObject();
        http.open('get', requestString);
        http.onreadystatechange = handleSaveAlerts;
        http.send(null);
    }

    function add_email() {
	var email=document.getElementById('add_email').value;
	var alertDiv = document.getElementById('add_div');
        if( email == '' ) { alert('Please enter your email'); return; }
        if( email == 'Email address' ) { alert('Please enter your email'); return; }
	setLoadingBig(alertDiv);
        var requestString = '/saveNotify?email=' + encodeURIComponent(email) + '&name=&product_id=&qty=';
        http = createRequestObject();
        http.open('get', requestString);
        http.onreadystatechange = handleSaveEmail;
        http.send(null);
    }

    function handleSaveEmail() 
    {
        if(http.readyState == 4){
            var alertDiv = document.getElementById('add_div');
            alertDiv.innerHTML = http.responseText;
            alertDiv.style.display="block";
	}
    }

    function handleSaveAlerts() 
    {
        if(http.readyState == 4){
            var alertDiv = document.getElementById('alert_div');
            alertDiv.innerHTML = http.responseText;
            alertDiv.style.display="block";
	}
    }

    function showCompat(thisPid) {

        pid = thisPid;

        if( document.getElementById('compat_' + pid).style.display == "block" )
        {
            document.getElementById('compat_' + pid).style.display="none";
            document.getElementById('compat_text_' + pid).innerHTML="show compatibility";
        }
        else
        {
            document.getElementById('compat_' + pid).style.display="block";
            document.getElementById('compat_text_' + pid).innerHTML="hide compatibility";
            setLoading(document.getElementById('compat_' + pid));
            http = createRequestObject();
            var requestString = '/product_oem?pid=' + pid;
            http.open('get', requestString);
            http.onreadystatechange = handleOemResponse;
            http.send(null);
        }
    }

    function handleOemResponse() {
        if(http.readyState == 4){
          document.getElementById('compat_' + pid).innerHTML = http.responseText;
        }
    }

    function setLoading(myDiv) {
        setLoadingRight(myDiv);
    }

    function setLoadingRight(myDiv) {
	myDiv.innerHTML = "<img class=\"align-right\" src=\"/en_US/static/images3/spinner.gif\" height=\"16\" width=\"16\" alt=\"updating\"><br/>";
    }

    function setLoadingLeft(myDiv) {
	myDiv.innerHTML = "<img class=\"align-left\" src=\"/en_US/static/images3/spinner.gif\" height=\"16\" width=\"16\" alt=\"updating\"><br/>";
    }

    function setLoadingShifted(myDiv, amt) {
	myDiv.innerHTML = "<img class=\"align-left\" src=\"/en_US/static/images3/spinner.gif\" height=\"16\" width=\"16\" style=\"margin-left:" + amt + "px;\" alt=\"updating\"><br/>";
    }

    function setLoadingBig(myDiv) {
	myDiv.innerHTML = "<img class=\"align-right\" src=\"/en_US/static/images3/spinner.gif\" height=\"16\" width=\"16\" alt=\"updating\"> wait...";
    }

    function openImage(pn){
	var popup = window.open("/en_US/static/images/shop_lrg_" + pn + ".jpg","Closeup", "location=0,resizable=1,status=0,scrollbars=1,width=640,height=480");
    }

    function openImage2(url){
	var popup = window.open(url,"Closeup", "location=0,resizable=1,status=0,scrollbars=1,width=830,height=640");
    }

    function openImage3(url){
	var popup = window.open("/en_US/products/chargepod_slideshow.jsp?start="+url,"Closeup","location=0,resizable=1,status=0,scrollbars=1,width=700,height=580");
    }

    function open360(name){
	var popup = window.open("/en_US/products/"+name+"_360-view.html","Closeup", "location=0,resizable=1,status=0,scrollbars=1,width=700,height=480");
    }

