function popup(url,name,w,h)
{
    newWindow = window.open (url, name, 'resizable=no,scrollbars=no,width='+w+',height='+h);
    newWindow.focus();
}

function hide_div(id) {
    document.getElementById(id).style.display = 'none';
}

function getElementsById(sId) {
    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;
}

function createRequestObject() {
    var ro;
    var browser = navigator.appName;
    if(browser == "Microsoft Internet Explorer"){
        ro = new ActiveXObject("Microsoft.XMLHTTP");
    }else{
        ro = new XMLHttpRequest();
    }
    return ro;
}

var http = createRequestObject();

var renweb_active = 'parents';
function renweb_select(id) {
    document.getElementById(renweb_active).style.display = 'none';
    document.getElementById(id).style.display = 'inline';
    renweb_active = id;
}

var enroll_active = 'enrollment';
function enroll_select(id) {
    document.getElementById(enroll_active+'-content').style.display = 'none';
    document.getElementById(id+'-content').style.display = 'inline';
    enroll_active = id;
}

var about_active = 'accreditation';
function show_about(id) {
    document.getElementById(about_active).style.display = 'none';
    document.getElementById(id).style.display = 'inline';
    document.getElementById(id+'_arrow').className = 'active';
    document.getElementById(about_active+'_arrow').className = '';
    about_active = id;
}

function close_calendar_details() {
    document.getElementById('currenteventbox').style.display = 'none';
}

function calendar_event(id) {
    if (http.readyState == 0 || http.readyState == 4) {
	http.open('get', 'calendar_data.html?calendar_id='+id);
	http.onreadystatechange = show_calendar_event;
	http.send(null);
	document.getElementById('currenteventbox').innerHTML = '<div style="height: 75px; text-align: center"><h1>Loading</h1><img src="images/main/calendar_loader.gif"></div>';
	document.getElementById('currenteventbox').style.display = 'inline';
    }
}

function show_calendar_event() {
    if (http.readyState == 4) {
	var response = http.responseText;
	document.getElementById('currenteventbox').innerHTML = response;
    }
}

function show_schedule(id) {
    document.getElementById('schedule_'+current_schedule).style.display = 'none';
    document.getElementById('schedule_'+id).style.display = 'inline';
    current_schedule = id;
}

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 calculate_payment() {
    var fields = getElementsById("payment");
    var val;
    var total = 0;
    var length;
    var newval;
    var ch;
    for (var i=0; i<fields.length; i++) {
	newval = '';
	val = fields[i].value;
	length = val.length;
	for (var j=0; j<length; j++) {
	    ch = val.substring(j, j+1);
	    if ((ch >= '0' && ch <= '9') || ch == '.') {
		newval += ch;
	    }
	}
	fields[i].value = newval;
	val = parseFloat(fields[i].value);
	if (val) {
	    total += val;
	}
    }
    document.getElementById('total_field').value = total;
    document.getElementById('total').innerHTML = '$ '+formatCurrency(total)+'';    
}

var student_expand = '';

function add_student_payment(id) {
    if (!student_expand) {
	document.getElementById('add_student_button_'+id).style.display = 'none';
	document.getElementById('add_student_progress_'+id).style.display = 'inline';
	student_expand = id;
	http.open('get', 'add_student_payment.html');
	http.onreadystatechange = add_student_payment_response;
	http.send(null)
    }
}

function add_student_payment_response() {
    if (http.readyState == 4) {
	var response = http.responseText;
	document.getElementById('add_student_progress_'+student_expand).style.display = 'none';
	var newDiv = document.createElement("div");
	newDiv.innerHTML = response;
	document.getElementById('students').appendChild(newDiv);
	student_expand = '';
    }
}

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 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 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);
}

function checkcc() {
    var visatemplate = 'XXXX-XXXX-XXXX-XXXX';
    var amextemplate = 'XXXX-XXXXXX-XXXXX';
    var template;
    var ch;
    
    card = document.getElementById('card');
    number = document.getElementById('ccnum');
    
    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);
    setSelectionRange(number, number.value.length, number.value.length);
}

function submit_payment() {
    document.getElementById('submit_button').style.display = 'none';
    document.getElementById('submit_progress').style.display = 'inline';
    document.form.submit();
}

function swap_div(div_off, div_on) {
    document.getElementById(div_off).style.display = 'none';
    document.getElementById(div_on).style.display = 'block';
}

function map_click(id) {
    swap_div('mapbox', 'mapboxprogress');
    http.abort();
    http.open('get', 'map_text.html?id='+id);
    http.onreadystatechange = map_text_response;
    http.send(null);
}

function map_text_response() {
    if (http.readyState == 4) {
	var response = http.responseText;
	document.getElementById('mapbox').innerHTML = response;
	swap_div('mapboxprogress', 'mapbox');
    }
}

var current_teacher_tab;

function teacher_tab(id) {
    document.getElementById('teachers_'+current_teacher_tab).style.display = 'none';
    document.getElementById('teachers_'+id).style.display = '';
    current_teacher_tab = id;
}

document.addEvent('domready',function() {
	$$('.total_calc_form').each(function(item) {
		var total_calc_form = new TotalCalcForm(item);
	    });
	$$('form.validate').each(function(item) {
		var validator = new Form.Validator.Inline(item,{
			evaluateFieldsOnBlur: false,
			evaluateFieldsOnChange: false,
			evaluateOnSubmit: false
		    });
	    });
    });

var TotalCalcForm = new Class({
	Implements: Options,

	options: {
	    calc_field_id_selector: '.total_calc',
	    total_field: '.total_field',
	    total_text: '.total_text',
	    form_ajax: true,
	    submit_button_selector: 'submit_button'
	},

	initialize: function(item, op) {
	    this.setOptions(op);
	    item.getElements(this.options.calc_field_id_selector).each(this.init_total_field,this);
	    this.form = item;
	    if (this.options.form_ajax) {
		item.addEvent('submit',this.submit_form.bind(this));
	    }
	},

	init_total_field: function(item) {
	    var value = item.get('rel');
	    item.addEvent('keyup',this.update_total.bind(this));
	},

	update_total: function(item) {
	    var total = 0;
	    this.form.getElements(this.options.calc_field_id_selector).each(function(item) {
		    total += item.get('value')*item.get('rel');
		});
	    this.form.getElements(this.options.total_field).each(function(item) {
		    item.set('value',total);
		});
	    if (!$chk(total)) {
		total = 'Error, please check your quantities';
		this.form.getElements(this.options.total_field).each(function(item) {
			item.set('value','');
		    });
	    } else {
		total = '$ '+total+'.00';
	    }
	    this.form.getElements(this.options.total_text).each(function(item) {
		    item.set('html',total);
		});
	},

	submit_form: function(event) {
	    var validator = this.form.retrieve('validator');
	    var validated = true;
	    event.stop();
	    // Hide the sumbit button if applicable
	    this.hide_submit_button();
	    if ($chk(validator)) {
		// validator needs to be set to not activate on submit, or else it will submit the form for us
		// and we don't want that
		validated = validator.validate();
	    }
	    if (validated) {
		// Successful form validation, send the request
		var url = this.form.get('action');
		var req = new Request.JSON({'url':url,
					    'data':this.form.toQueryString(),
					    onSuccess: this.ajax_callback.bind(this)
		    });
		if (this.form.get('method') == 'post') {
		    req.post();
		} else {
		    req.get();
		}
	    } else {
		// Restore the submit button
		this.show_submit_button();
	    }
	},

	hide_submit_button: function() {
	    var button = $(this.options.submit_button_selector);
	    if ($chk(button)) {
		button.store('display_style',button.getStyle('display'));
		button.setStyle('display','none');
	    }
	},
	show_submit_button: function() {
	    var button = $(this.options.submit_button_selector);
	    if ($chk(button)) {
		button.setStyle('display',button.retrieve('display_style'));
	    }
	},

	ajax_callback: function(json) {
	    if ($chk(json.message)) {
		alert(json.message);
	    }
	    if ($chk(json.redirect)) {
		document.location.href = json.redirect;
	    } else {
		// Restore the submit button only if we're not redirecting
		this.show_submit_button();
	    }
	}
    });
