// shortcuts
var y = YAHOO.util;
var yc = y.Connect;
var yd = y.Dom;
var ye = y.Event; 

// ajax defaults
var ajax_timeout = 7000;    // in ms, so 7 seconds
var ajax_error = function(res, caller_name) {
    var err_str = caller_name + ' : ' + res.status + ' : ' + res.statusText;
    _hbLink('AJAX Error : ' + err_str);
    alert('An error occured, please try again! \n\n (' + err_str + ')');
}

// mimic prototype.js $() function
var $ = function(el_id) { return yd.get(el_id); }

// mimic prototype.js $F() function
var $F = function(form, name) { return eval('document.' + form + '.' + name + '.value'); }

// clear an input field
var FieldClear = function(form, name) { eval('document.' + form + '.' + name + '.value = "";'); }

var fade_duration = 0.3;
var fade_method = y.Easing.easeNone;

var fade = function(el_id, opac, on_complete, on_start, display_none)  {
    var oAnim = new y.Anim(el_id, { opacity: opac }, fade_duration, fade_method);
    if(on_complete) oAnim.onComplete.subscribe(on_complete);
	if(display_none) {
		oAnim.onComplete.subscribe(function() {
			yd.setStyle(el_id, 'display', 'none');
		});
	}   
	if(on_start) oAnim.onStart.subscribe(on_start);
    oAnim.animate();
}

// fade opacity from invisible to fully visible
var fade_in = function(el_id, on_complete, on_start) {
    fade(el_id, { from: 0, to: 1 }, on_complete, on_start);
}

// fade opacity from fully visible to invisible
var fade_out = function(el_id, on_complete, on_start, display_none) {
    fade(el_id, { from: 1, to: 0 }, on_complete, on_start, display_none);
}

// simple fade in or out toggle
var fade_in_out_toggle = function(el_id, on_complete_in, on_complete_out) {
	if(yd.getStyle(el_id, 'display') == 'none') { fade_in(el_id, on_complete_in); }
	else { fade_out(el_id, on_complete_out); }
}

// fade in, but turns css display (hiding) on first
var fade_on = function(el_id, on_complete, on_start) {
	yd.setStyle(el_id, 'opacity', 0);
	yd.setStyle(el_id, 'display', '');
	fade_in(el_id, on_complete, on_start);
}

// fade out, turning off css display when complete
var fade_off = function(el_id, on_complete, on_start) {
	fade_out(el_id, on_complete, on_start, 1);
}

// simple fade on or off toggle
var fade_on_off_toggle = function(el_id, on_complete_on, on_complete_off) {
	if(yd.getStyle(el_id, 'display') == 'none') { fade_on(el_id, on_complete_on); }
	else { fade_off(el_id, on_complete_off); }
}

// ajax call, pass url, form cgi var args, oncomplete function ref, method (post or get, optional)
var ajax = function(url, args, todo, method) {
	var mthd = method || 'POST';
	var cb = { success: todo }
	var cObj = yc.asyncRequest(mthd, url, cb, args);
}

