function popup(url,name,w,h)
{
    newWindow = window.open (url, name, 'resizable=no,scrollbars=no,width='+w+',height='+h);
    newWindow.focus();
}
function MM_openBrWindow(theURL,winName,features) { //v2.0
    window.open(theURL,winName,features);
}

function getElementsById(sId)
{
    // From http://www.hedgerwow.com/360/dhtml/dom-getElementsById.html
    var outArray = new Array();
    if(typeof(sId)!='string' || !sId)
        {
	    return outArray;
        };
    
    if(document.evaluate)
        {
	    var xpathString = "//*[@id='" + sId.toString() + "']"
                var xpathResult = document.evaluate(xpathString, document, null, 0, null);
	    while ((outArray[outArray.length] = xpathResult.iterateNext())) { }
	    outArray.pop();
        }
    else if(document.all)
        {
	    
	    for(var i=0,j=document.all[sId].length;i<j;i+=1){
                outArray[i] =  document.all[sId][i];}
	    
        }else if(document.getElementsByTagName)
        {
	    
	    var aEl = document.getElementsByTagName( '*' );
	    for(var i=0,j=aEl.length;i<j;i+=1){
		
		if(aEl[i].id == sId )
		    {
			outArray.push(aEl[i]);
		    };
	    };
	    
        };
    
    return outArray;
}

// Radio button accessors, from http://www.somacon.com/p143.php

// 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 "";
}

// set the radio button with the given value as being checked
// do nothing if there are no radio buttons
// if the given value does not exist, all the radio buttons
// are reset to unchecked
function setCheckedValue(radioObj, newValue) {
    if(!radioObj)
	return;
    var radioLength = radioObj.length;
    if(radioLength == undefined) {
	radioObj.checked = (radioObj.value == newValue.toString());
	return;
    }
    for(var i = 0; i < radioLength; i++) {
	radioObj[i].checked = false;
	if(radioObj[i].value == newValue.toString()) {
	    radioObj[i].checked = true;
	}
    }
}

function setSelectionRange(input, selectionStart, selectionEnd) {
    if (input.setSelectionRange) {
	input.focus();
	input.setSelectionRange(selectionStart, selectionEnd);
    }
    else if (input.createTextRange) {
	var range = input.createTextRange();
	range.collapse(true);
	range.moveEnd('character', selectionEnd);
	range.moveStart('character', selectionStart);
	range.select();
    }
}

function format_template(string, template) {
    var newstring = '';
    var length;
    
    length = string.length;
    if (length > template.length) {
	length = template.length;
    }
    // Strip out any non-numeric characters and make a properly formatted number
    var t=0;
    var ch;
    for (i=0; i<length; i++) {
	ch = string.substring(i, i+1);
	if ((ch >= '0' && ch <= '9') || ch == '-' || ch == '(' || ch == ')' || ch == '.' || ch == '/') {
	    while (template.substring(t, t+1) != 'X' && t < length) {
		newstring = newstring + template.substring(t, t+1);
		t++;
	    }
	    if (ch >= '0' && ch <= '9') {
		newstring = newstring + ch;
		t++;
	    }
	}
    }
    return newstring;
}

function phone_verify(id) {
    var template = '(XXX) XXX-XXXX';

    field = document.getElementById(id);
    phone = field.value;
    field.value = format_template(phone, template);
    setSelectionRange(field, field.value.length, field.value.length);
}

// Hidden DIV functions
function showBlock(blockId)
{
    document.getElementById(blockId).style.display = "block";
}
function hideBlock(blockId)
{
    document.getElementById(blockId).style.display = "none";
}

// Functions for the form class
function calculate_form_total(field_id, value) {
    var total = formatCurrency(document.getElementById('total_select_'+field_id).value * value);
    document.getElementById('total_div_'+field_id).innerHTML = "<b>Total:</b> $ "+total;
}

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 form_dollar(field_id) {
    var value = document.getElementById(field_id).value;
    if (value) {
	value = formatCurrency(value);
    }
    document.getElementById(field_id).value = value;
}

function form_credit_card(field_id) {
    var visatemplate = 'XXXX-XXXX-XXXX-XXXX';
    var amextemplate = 'XXXX-XXXXXX-XXXXX';
    var template;
    
    card = document.getElementById('cc_type_'+field_id);
    number = document.getElementById('cc_num_'+field_id);
    
    var entry = number.value;
    
    // Find out what card from the number
    ch = entry.substring(0,1);
    if (ch == '4') {
	card.value = 'Visa';
	template = visatemplate;
    } else if (ch == '5') {
	card.value = 'MasterCard';
	template = visatemplate;
    } else if (ch == '6') {
	card.value = 'Discover';
	template = visatemplate;
    } else if (ch == '3') {
	card.value = 'American Express';
	template = amextemplate;
    } else {
	number.value = '';
	return;
    }
    number.value = format_template(entry, template);    
}

function form_phone(field_id) {
    var template = '(XXX) XXX-XXXX';
    
    field = document.getElementById('phone_field_'+field_id);
    phone = field.value;
    field.value = format_template(phone, template);
}

function show_subforms(field_id, max) {
    var value = document.getElementById('show_subforms_'+field_id).value;
    var display;
    for(var i=1; i<=max; i++) {
	if (i<=value) {
	    display = 'inline';
	} else {
	    display = 'none';
	}
	document.getElementById('subform_'+field_id+'_'+i).style.display = display;
    }
}

function partnership_marital_change() {
    var value = document.getElementById('Marital_Status').value;
    if (value == 'Married') {
	document.getElementById('Spouse').disabled = false;
	document.getElementById('Spouse_Attending').disabled = false;
	document.getElementById('spouse_label').style.color = '#fff';
	document.getElementById('spouse_attending_label').style.color = '#fff';
    } else {
	document.getElementById('Spouse').disabled = true;
	document.getElementById('Spouse_Attending').disabled = true;
	document.getElementById('spouse_label').style.color = '#4f4f4f';
	document.getElementById('spouse_attending_label').style.color = '#4f4f4f';
    }
}

// AJAX for partnership form
var partnership_http = createRequestObject();

function partnership_class_change() {
    document.getElementById('selected_classes').style.display = 'none';
    document.getElementById('selection_progress').style.display = 'block';
    var url = "partnership_ajax.php?id="+document.getElementById('start_date').value;
    // Abort any existing request
    partnership_http.abort();
    partnership_http.open('get', url);
    partnership_http.onreadystatechange = partnership_class_change_response;
    partnership_http.send(null);
}

function partnership_class_change_response() {
    if (partnership_http.readyState == 4) {
	document.getElementById('selected_classes').innerHTML = partnership_http.responseText;
	document.getElementById('selected_classes').style.display = 'block';
	document.getElementById('selection_progress').style.display = 'none';
    }
}

var current_quick_link;

function open_quick_link(id) {
    if (current_quick_link) {
	document.getElementById('quick_link_content_'+current_quick_link).style.display = 'none';
    }
    document.getElementById('quick_link_content_'+id).style.display = 'block';
    current_quick_link = id;
}

var imageflow_http = createRequestObject();

function imageflow_text(id) {
    imageflow_http.abort();
    imageflow_http.open('get', 'imageflow_text.php?id='+id);
    imageflow_http.onreadystatechange = imageflow_text_response;
    imageflow_http.send(null);
}
function imageflow_text_response() {
    if (imageflow_http.readyState == 4) {
	document.getElementById('image_flow_text').innerHTML = imageflow_http.responseText;
    }
}

var rollover_button_http = createRequestObject();

function rollover_button_text(id) {
    rollover_button_http.abort();
    rollover_button_http.open('get', 'rollover_button_text.php?id='+id);
    rollover_button_http.onreadystatechange = rollover_button_text_response;
    rollover_button_http.send(null);
}
function rollover_button_text_response() {
    if (rollover_button_http.readyState == 4) {
	document.getElementById('rollover_button_list_text').innerHTML = rollover_button_http.responseText;
    }
}

function select_image(id) {
    window.document.imageflowflash.click_image(id-1);
}

var selected_workshop = 0;
function workshop_class_change() {
    if (selected_workshop) {
	Effect.BlindUp(document.getElementById("description_"+selected_workshop));
    }
    selected_workshop = document.getElementById('cotm_workshop_id').value;
    if (selected_workshop) {
	Effect.BlindDown(document.getElementById("description_"+selected_workshop));
    }
    workshop_qty_change();
}
function workshop_childcare_change() {
    if (document.getElementById('childcare').value == '1') {
	document.getElementById('childcare_detail_box').style.display = 'block';
    } else {
	document.getElementById('childcare_detail_box').style.display = 'none';
    }
}
function workshop_qty_change(){
    var total;
    if (selected_workshop) {
	total = document.getElementById('cost_'+selected_workshop).value * document.getElementById('qty').value;
    } else {
	total = 0;
    }
    document.getElementById('total').innerHTML = '$ '+formatCurrency(total);
}

var current_service_video;
function service_video(id) {
    Effect.DefaultOptions.duration = .3;
    if (current_service_video == id) {
	return;
    }
    if (current_service_video) {
	Effect.BlindUp(document.getElementById('video_'+current_service_video));
    }
    current_service_video = id;
    Effect.BlindDown(document.getElementById('video_'+current_service_video));
}