// <!-- Begin

function validate_form(form)
{
	var agreement_msg = "";
	var message = "Please, fix the following errors to continue:\n\n";
	var prefix;
	var result;
	var status = true;
	var type;

	if (form['contact_type']) {
		prefix = '';
		if (form['contact_type'].value == "affiliate") {
			prefix = 'affiliate_';
		}
		type = form['contact_type'].value.toUpperCase();
	} else {
		prefix = 'owner_';
		type = 'OWNER';
	}

	result = verify_contact(form, prefix);
	if (result[0] == false) {
		message += "\nPlease correct the " + type + " contact:\n";
	}
	status = status && result.status;
	message += result.message;

	if (form['flag_use_detailed'] && form['flag_use_detailed'].value > 0) {
		result = verify_contact(form, 'billing_');
		if (result[0] == false) {
			message += "\nPlease correct the BILLING contact:\n";
		}
		status = status && result[0];
		message += result[1];
	}

	if (form['termsandconditions'] && ! form['termsandconditions'].checked) {
		agreement_msg += "- the Registration Agreement is not checked.\n";
		status = false;
	}

	if (form['ciraverify'] && ! form['ciraverify'].checked) {
		agreement_msg += "- the CIRA Canadian Presence Agreement is not checked.\n";
		status = false;
	}
	
	if (form['transferverify'] && ! form['transferverify'].checked) {
		agreement_msg += "- the domain Owner Confirmation is not checked.\n";
		status = false;
	}
	
	if (agreement_msg != "") {
		message += "\nPlease correct the Agreement section:\n";
		message += agreement_msg;
	}

	if ( status == false ) {
		alert(message);
	}

	return status;
}

function validate_field(field)
{
    if (!field)
        return false;
    var valid_regex = /^[^&_\-\.,\/\'\(\)\s][^_]+$/;
    if (!field.value.match(valid_regex))
        return false;
    return true;
}

function verify_contact(form, type)
{
	var status = true;
	var message = "";
	var result = new Object();

	var country     = form[type + "country"];
	var province    = form[type + "province"];
	var state       = form[type + "state"];
	
	var first_name  = form[type + "first_name"];
	var last_name   = form[type + "last_name"];
	var org_name    = form[type + "org_name"];

	var address     = form[type + "address1"];
	var city        = form[type + "city"];
	var postal_code = form[type + "postal_code"];

	var phone       = form[type + "phone"];
	var phone_cc    = form[type + "phone_cc"];
	var phone_num   = form[type + "phone_num"];

	var fax         = form[type + "fax"];
	var fax_cc      = form[type + "fax_cc"];
	var fax_num     = form[type + "fax_num"];

	var email       = form[type + "email"];

    var field_names = new Array(
            "first_name",
            "last_name",
            "org_name",
            "address1",
            "city",
            "postal_code",
            "email"
    );

    // note: the regex is intentionally "weak".
	var email_regex = /^.+@.+\..+$/;

	if (!validate_field(first_name)) {
        first_name = null;
		message += "- a first name is required.\n";
		status = false;
	}
	if (!validate_field(last_name)) {
        last_name = null;
		message += "- a last name is required.\n";
		status = false;
	}
	if (!validate_field(org_name)) {
		org_name.value = 'N/A';
	}
	if (!validate_field(address)) {
        address = null;
		message += "- a street address is required.\n";
		status = false;
	}
	if (!validate_field(city)) {
        city = null;
		message += "- a city name is required.\n";
		status = false;
	}
    if (email) {
        if (email.value == "" ) {
            email = null;
            message += "- an email address is required.\n";
            status = false;
        } else if (!email.value.match(email_regex)) {
            message += "- invalid email address.\n";
            status = false;
        }
    }
	if ( country && province && state &&
	 	 ! (country.selectedIndex || province.selectedIndex || state.selectedIndex) )
	{
		message += "- please, select ONE of: state, province or country outside US & Canada.\n";
		status = false;
	}

	if ( province && state && postal_code &&
	 	 (province.selectedIndex || state.selectedIndex) && postal_code.value == "" )
	{
		message += "- please, enter a valid postal/zip code\n";
		status = false;
	}

    if (phone_cc.options)
        phone_cc = phone_cc.options[phone_cc.selectedIndex]
    if (phone_num) {
        match = phone_num.value.match(intl_phone_regex);
        if (match) {
            phone_cc.value = match[1];
            phone_num.value = match[2];
            if (match[3])
                phone_num.value += "x" + match[3];
        }
    }
    if (phone_num.value && (! phone_cc.value || phone_cc.value == '--')) {
        phone_cc.value = 1;
    }
    phone_cc.value  = phone_cc.value.replace(/\D/g, "");
    phone_num.value = phone_num.value.replace(/[\s-\+:.et]/g, "");

    var phone_parts = split_phone(phone_num.value);
    str = phone_cc.value + phone_parts.num + phone_parts.ext;

    if (country.value == '--' && phone_cc.value.length == 3 && phone_parts.num.length == 7) {
        phone_num.value = phone_cc.value + phone_num.value;
        phone_parts.num = phone_cc.value + phone_parts.num;
        phone_cc.value = 1;
    }
    if (str == "") {
        phone = null;
        message += "- a valid phone number is required.\n";
        status = false;
    } else {
        phone.value = "+" + phone_cc.value + "." + phone_parts.num;
        if (phone_parts.ext != "")
            phone.value += "x" + phone_parts.ext;
    }
    if (false && phone && phone.value != "")
        alert("phone number is: " + phone.value);

    if (fax_cc.options) {
        fax_cc = fax_cc.options[fax_cc.selectedIndex]
    }
    if (fax_num) {
        match = fax_num.value.match(intl_phone_regex);
        if (match) {
            fax_cc.value = match[1];
            fax_num.value = match[2];
            if (match[3])
                fax_num.value += "x" + match[3];
        }
    }
    if (fax_num.value && (! fax_cc.value || fax_cc.value == '--')) {
        fax_cc.value = 1;
    }
    fax_cc.value  = fax_cc.value.replace(/\D/g, "");
    fax_num.value = fax_num.value.replace(/[\s-\+:.et]/g, "");

    var fax_parts = split_phone(fax_num.value);
    str = fax_cc.value + fax_parts.num + fax_parts.ext;

    if (country.value == '--' && fax_cc.value.length == 3 && fax_parts.num.length == 7) {
        fax_num.value = fax_cc.value + fax_num.value;
        fax_parts.num = fax_cc.value + fax_parts.num;
        fax_cc.value = 1;
    }
    if (str == "") {
        fax.value = "";
    } else {
        fax.value = "+" + fax_cc.value + "." + fax_parts.num;
        if (fax_parts.ext != "") {
            fax.value += "x" + fax_parts.ext;
        }
    }
    if (false && fax && fax.value != "") {
        alert("fax number is: " + fax.value);
    }

	if (form['biz'] && form['biz'].value == "1") {
		n_chars  = first_name ? first_name.value.length : 0;
		n_chars += last_name ? last_name.value.length : 0;
		if (n_chars > 30) {
			message += "- number of characters for first and last name combined needs to be 30 or less.\n";
			status = false;
		}
		n_chars = org_name ? org_name.value.length : 0;
		if (n_chars > 30) {
			message += "- number of characters for company name needs to be 30 or less.\n";
			status = false;
		}
		n_chars = address ? address.value.length : 0;
		if (n_chars > 30) {
			message += "- number of characters for address needs to be 30 or less.\n";
			status = false;
		}
	}
		
    if ( phone && !phone.value.match(intl_phone_regex) ) {
        message += "- invalid phone number (country code & number required).  For the US & Canada, the country code is 1.\n";
        status = false;
    }

    if ( fax && fax.value != "" && !fax.value.match(intl_phone_regex) ) {
        message += "- invalid fax number (country code & number required).\n- For the US & Canada, the country code is 1.\n";
        status = false;
    }

	result.status = status;
	result.message = message;

	return result;
}

function select_product()
{
    if (document.products) {
        var idx = document.products['selected_product'].selectedIndex;

        // These are set in the data/buy_services.tt.html template
        var product_info       = String(document.products['selected_product'].options[idx].value).split(':');
        var name               = product_info[0];
        var unit_price         = product_info[2];
        var unit_monthly_price = product_info[3];

        if (name == "none") {
            document.products['unit_price'].value = "";
            document.products['unit_monthly_price'].value = "";
            document.products['total_price'].value = "";
            return true;
        }

        var qty = Math.floor(document.products['qty'].value);
        var total_price = qty * unit_price;

        document.products['qty'].value = qty;
        document.products['unit_price'].value = "$" + (unit_monthly_price * 12).toFixed(2);
        document.products['unit_monthly_price'].value = "$" + (unit_monthly_price * 1).toFixed(2);
        document.products['total_price'].value = "$" +total_price.toFixed(2);
    }

    return true;
}

function validate_selection(form) {
    var n = $("[type=checkbox][name=domain]:checked").size();
    if (form.action.value == 'lookup' || form.action.value == 'check_transfer') {
        return true;
    }
    if (! n) {
        alert("You must select at least one domain.");
        return false;
    }
    if (form.reg_type.value == 'transfer') {
        var error=0;
        $("[type=checkbox][name=domain]:checked").each(function() {
            domain = $(this).val();
            auth_code = form["authcode:" + domain];
            if (! auth_code.value) {
                error += 1;
            }
        });
        if (error >= 1) {
            alert("You must provide a transfer authorization code for all selected domains.");
            return false;
        }
    }
    if (form.session.value != 0) {
        return true;
    }
    // check form fields for credentials
    if (form.reg_username.value && form.reg_password.value) {
        if (! form.reg_domain.value) {
            alert("You must provide an existing domain for your profile. Otherwise, register as a new customer.");
            return false;
        }
        return true;
    }
    if (form.new_reg_username.value && form.new_reg_password.value) {
        if (form.new_reg_password.value != form.confirm_password.value) {
            alert("The password and confirmation password must match.");
            return false;
        }
        return true;
    }
    if (! (form.reg_username.value || form.new_reg_username.value) ) {
        alert("You must provide a username.");
    } else if (! (form.reg_password.value || form.new_reg_password.value) ) {
        alert("You must provide a password (6-19 characters).");
    } else {
        alert("Please register as an EXISTING customer *OR* as a NEW customer.");
    }
    return false;
}
// End -->

