// Base URL for the paypal shopping cart
// includes first static option, as they don't want the leading &
var add_base_url = "https://www.paypal.com/?cmd=_cart&add=1";
var sub_base_url = "https://www.paypal.com/subscriptions/no_shipping=1";
var disp_base_url = "https://www.paypal.com/subscriptions/display=1";
var add_valid_url = "http://www.rdrop.com/cgi-bin/cart-validate?";
var sub_valid_url = "http://www.rdrop.com/cgi-bin/sub-validate?";

var email_fee = 2;
var wader_fee = 5;
var disk_fee = 1;
var server_fee = 10;
var vhsetup_fee = 25;
var domain_fee = 15;
var domset_fee = 10;
var machine_fee = 10;
var vmdisk_fee = 1;
var vmsetup_fee = 100;

// Very important!  Who gets the money!
var paypal_id = "&business=billing%40rdrop.com";

var item_name = "&item_name=";
var item_number = "&item_number=";
var amount_field = "&amount=";
var acct_field = "&on0=Account%20Name&os0=";
var type_field = "&on1=Account%20Type&os1=";

// Miscellaneous static options
var add_opts = "&no_shipping=1";
var sub_opts = "&a1=0&t1=D&p3=1&t3=M&src=1&sra=1&no_note=1";
var logo_url = "&image_url=https%3a//" + 
     "ssl.rdrop.com/agora/raindrop-paypal-logo.gif";

// Controls for the pop-up window
var win_opts = "width=600,height=600,scrollbars,location,resizable,status";

// call the PayPal shopping cart
function CallPay (level_desc, level_name, fee, acct_name, update_info)
{
  var win_url;

  win_url = add_valid_url + add_base_url + add_opts + paypal_id +
	       item_name + level_desc +
	       item_number + update_info +
	       amount_field + fee +
	       acct_field + acct_name +
	       type_field + level_name +
	       logo_url;

  window.open (win_url, "cartwin", win_opts);
}

function CallView () { // call the PayPal shopping cart view
  window.open (base_url + display_cart + paypal_id + logo_url,
               "cartwin",
               win_opts);
}

function payup (order_form) {  //get form data for PayPal
    var level, fee_months, account;
    var level_desc, fee, mword, cred_months;

    //  update_info is for cutting/pasting into the update.info file
    //  when processing the payment
    var update_info;

    level = order_form.level.value;
    fee_months = order_form.months.value;
    account = order_form.account.value;
    update_info = account;

    //  Brute force pricing selection
    //  --- can't trust the form data as that can be forged
    //  --- need to switch to use associative arrays

    if (account == "") {
	alert("Account name is required so the payment can be " +
		"properly applied...");
	return(false);
    }

    if (fee_months == 1) {
	mword = "Month";
    } else {
	mword = "Months";
    }

    cred_months = fee_months;

    //  Check for need to subract fee months for discount
    //  (every 12th month is free, so if they say "12" charge for "11")
    if (level != "disk" && level != "setup") {
	if (fee_months > 11) {
	    if (fee_months > 12) {
		alert("An invalid period has been selected...try again");
		return(false);
	    } else if (fee_months == 12) {
		fee_months = 11;
	    } else {
		fee_months--;
	    }
	}

	//  Check for need to add credit months
	//  (every 12th month is free, so if they say "11" credit for "12")
	if (fee_months == 11) {
	    cred_months = 12;
	}
    }

    if (level == "email") {
	level_desc = cred_months + " " + mword + "  Email-only ($" +
			email_fee + "/mo)";
	fee = email_fee * fee_months;
	update_info = update_info + " e";
    } else if (level == "wader") {
	level_desc = cred_months + " " + mword +
			"  Wader (7 hrs/mo, shell/ppp, $" +
			wader_fee + "/mo)";
	fee = wader_fee * fee_months;
	update_info = update_info + " w";
    } else if (level == "surfer") {
	level_desc = cred_months + " " + mword +
			"  Surfer (30 hrs/mo, shell/ppp, $" +
			surfer_fee + "/mo)";
	fee = surfer_fee * fee_months;
	update_info = update_info + " s";
    } else if (level == "cyber") {
	level_desc = cred_months + " " + mword +
			"  Cybernaut (180 hrs/mo, shell/ppp, $" +
			cyber_fee + "/mo)";
	fee = cyber_fee * fee_months;
	update_info = update_info + " c";
    } else if (level == "disk") {
	level_desc = fee_months + " MB disk quota ($" + disk_fee + "/meg)";
	fee = disk_fee * fee_months;
	if (fee_months < 1) {
	    alert("Illegal value entered for disk space --- make sure it " +
		    "is a positive integer...");
	    return(false);
	}
	if (fee_months > 50) {
	    alert("That's a rather large value for disk space ---" +
		    "please double check the shopping cart and make sure " +
		    "it contains what you intend...");
	}
	update_info = update_info + " - -";
    } else if (level == "domain") {
	level_desc = fee_months + " " + mword +
			"  Domain name registration, $" +
			domain_fee + "/yr)";
	fee = domain_fee * fee_months;
	update_info = update_info + " domain";
    } else if (level == "domset") {
	level_desc = "Domain name registration ($" + domset_fee + " setup fee)";
	fee = domset_fee;
	fee_months = 1;
	update_info = update_info + " domain setup";
    } else if (level == "server") {
	level_desc = fee_months + " " + mword +
			"  Virtual Webserver (low traffic, $" +
			server_fee + "/mo)";
	fee = server_fee * fee_months;
	update_info = update_info + " web";
    } else if (level == "machine") {
	level_desc = fee_months + " " + mword +
			"  Virtual Machine (low traffic, $" +
			server_fee + "/mo)";
	fee = machine_fee * fee_months;
	update_info = update_info + " vm";
    } else if (level == "vmdisk") {
	level_desc = fee_months + " " + mword +
			"  Virtual Disk 1G ($" +
			vmdisk_fee + "/mo)";
	fee = vmdisk_fee * fee_months;
	update_info = update_info + " vmdisk";
    } else if (level == "vhsetup") {
	level_desc = "Virtual Webserver ($" + vhsetup_fee + " setup fee)";
	fee = vhsetup_fee;
	fee_months = 1;
	update_info = update_info + " vh setup";
    } else if (level == "vmsetup") {
	level_desc = "Virtual Machine ($" + vmsetup_fee + " setup fee)";
	fee = vmsetup_fee;
	fee_months = 1;
	update_info = update_info + " vm setup";
    } else {
	alert("Invalid level '" + level + "' specified");
	return(false);
    }

    update_info = update_info + " " + fee;

    CallPay (level_desc, level, fee, account, update_info);
    return(true);
}

function subscribe(order_form) {
    //  From the form
    var level, account;

    //  Locals
    var level_desc, fee;

    //  update_info is for automatically processing the payment
    var update_info;

    level = order_form.level.value;
    account = order_form.account.value;

    //  Brute force pricing selection
    //  --- can't trust the form data as that can be forged
    //  --- need to switch to use associative arrays

    if (account == "") {
	alert("Account name is required so the payment can be " +
		"properly applied...");
	return(false);
    }

    update_info = account;
    if (level == "email") {
	level_desc = "Email-only";
	fee = email_fee;
	update_info = update_info + " e";

    } else if (level == "wader") {
	level_desc = "Wader";
	fee = wader_fee;
	update_info = update_info + " w";

    } else if (level == "surfer") {
	level_desc = "Surfer";
	fee = surfer_fee;
	update_info = update_info + " s";

    } else if (level == "cyber") {
	level_desc = "Cybernaught";
	fee = cyber_fee;
	update_info = update_info + " c";

    } else if (level == "server") {
	level_desc = "Web Server";
	fee = server_fee;
	update_info = update_info + " web";

    } else {
	alert("Invalid level '" + level + "' specified for subscription");
	return(false);
    }

    level_desc = level_desc + "($" + fee  + ")";
    update_info = update_info + " " + fee;

    CallPaySub (account, level, fee, level_desc, update_info);
    return(true);
}

function CallPaySub (acct_name, level_name, fee, level_desc, update_info) {
  var win_url;

  win_url = sub_valid_url + sub_base_url + paypal_id +
	       item_name + level_desc +
	       item_number + update_info +
	       amount_field + fee +
	       acct_field + acct_name +
	       type_field + level_name +
	       logo_url + sub_opts;

  window.open (win_url, "subwin", win_opts);
}

