/// this extends the core mootools ajax call to fix issues w/ IE
Request.HTML.implement({

	processHTML: function(text){
		var match = text.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
		text = (match) ? match[1] : text;

		var container = new Element('div');

		return $try(function(){
			var root = '<root>' + text + '</root>', doc;
			doc = new DOMParser().parseFromString(root, 'text/html');
			root = doc.getElementsByTagName('root')[0];
			for (var i = 0, k = root.childNodes.length; i < k; i++){
				var child = Element.clone(root.childNodes[i], true, true);
				if (child) container.grab(child);
			}
			return container;
		}) || container.set('html', text);
	}

});

/// this extends the core mootools ajax calls to include blank vars in the qry string
Element.implement({
	toFullQueryString: function(){
		var queryString = [];
		this.getElements('input, select, textarea').each(function(el){
			if (!el.name || el.disabled) return;
			var value = (el.tagName.toLowerCase() == 'select') ?
			Element.getSelected(el).map(function(opt){
			return opt.value;
			}) : ((el.type == 'radio' || el.type == 'checkbox') && ! el.checked) ? null : el.value;
			$splat(value).each(function(val){
				queryString.push(el.name + '=' + encodeURIComponent(val));
			});
		});
		return queryString.join('&');
	}
});

/*
var StatusClearAjax = function(el){
	if(el==null){
		el='status_log';
	}
	var status_log = $(el);
	status_log.fancyShow();
	status_log.empty().removeClass('ajax-loading');
	status_log.empty().removeClass('ajax-success');
	status_log.empty().removeClass('ajax-error');
};

var StatusRequestAjax = function(msg,el){
	if(el==null){
		el='status_log';
	}
	var status_log = $(el);
	StatusClearAjax(status_log);
	status_log.empty().addClass('ajax-loading');
	if(msg==null){
		msg='Requesting Data...';
	}
	status_log.set('html',msg);
}

var StatusSuccessAjax = function(msg,el){
	if(el==null){
		el='status_log';
	}
	var status_log = $(el);
	StatusClearAjax(status_log);
	status_log.empty().addClass('ajax-success');
	if(msg==null)	{
		msg='Success!';
	}
	status_log.set('html',msg);
	FadeOut.delay(4000,status_log);
}

var StatusFailAjax= function(msg,el){
	if(el==null){
		el='status_log';
	}
	var status_log = $(el);
	StatusClearAjax(status_log);
	status_log.empty().addClass('ajax-error');
	if(msg==null)	{
		msg='Error!';
	}
	status_log.set('html',msg);
	FadeOut.delay(5000,status_log);
}

var FadeOut = function() {
	this.fancyHide();
};

// in order for the above to work - this my be started
window.addEvent('domready', function() {

				 //time to implement fancy show / hide
			 Element.implement({
				 //implement show
				 fancyShow: function() {
					 this.fade('in');
				 },
				 //implement hide
				 fancyHide: function() {
					 this.fade('out');
				 }
			 })
		});

*/
var StatusRequest = function(msg,el){
	if(el==null){	el='status_log';}
	var status_log = $(el);
	var status_log_span = $('status_log_span');
	if(msg==null){	msg='Requesting Data...';}
	status_log_span.set('html',msg);
	status_log_span.addClass('ajax-loading');
	showStatus.delay(0);
}

var StatusSuccess = function(msg,time){
	var status_log = $('status_log');
	var status_log_span = $('status_log_span');
	if(msg==null)	{msg='Success!';	}
	if(time==null)	{time=1000;	}
	status_log_span.removeClass('ajax-loading');
	status_log.tween("background-color", "#E6EEF7");
	status_log_span.set('html',msg);
	showStatus.delay(time);
}
var StatusFail = function(msg,time){
	var status_log = $('status_log');
	var status_log_span = $('status_log_span');
	if(msg==null)	{msg='Error';	}
	if(time==null)	{time=4000;	}
	status_log_span.removeClass('ajax-loading');
	status_log.tween("background-color", "#FF0000");
	status_log_span.set('html',msg);
	showStatus.delay(time);
}
function toggleDiv(id)
{
	$(id).style.display = $(id).style.display =='none' ? '' : 'none';
}

function DispatcherFunction(function_name,form_data,status_message,update_div)
{
	var uniqueUrlId = new Date();
	StatusRequest(status_message);

	var myHTMLRequest = new Request.HTML({
		url:function_name+'/'+uniqueUrlId.getTime()+'/',
		evalScripts : true,
		update: $(update_div),
		onComplete : function() {
			StatusSuccess();
		}
	}).post(form_data);
	return false;
}

function DispatcherFunctionForm(function_name,form_data,status_message,update_div)
{
	var uniqueUrlId = new Date();
	StatusRequest(status_message);

	var myHTMLRequest = new Request.HTML({
		url:function_name+'/'+uniqueUrlId.getTime()+'/',
		evalScripts : true,
		update: $(update_div),
		onComplete : function() {
			StatusSuccess();
		}
	}).post(form_data);
	return false;
}
function DispatcherFunctionNoForm(function_name,status_message,update_div)
{
	var uniqueUrlId = new Date();
	StatusRequest(status_message);

	var myHTMLRequest = new Request.HTML({
		url:function_name+'/'+uniqueUrlId.getTime()+'/',
		evalScripts : true,
		update: $(update_div),
		onComplete : function() {
			StatusSuccess();
		}
	}).post();
	return false;
}


/// usage : onkeypress="return isNumberKey(event);"
function isNumberKey(evt)
{
	var charCode = (evt.which) ? evt.which : event.keyCode;
	if (charCode > 31 && (charCode < 46 || charCode > 57))
		return false;
	return true;
}

///
/// usage : myRedirect.delay(<INT>,url);
var myRedirect = function() {
	location.href =this;
};

function loadTab(tab)
{
	var function_name='display_tabs/active/'+tab;
	DispatcherFunctionNoForm(function_name,'Loading','display_profile_tabs_container')
}

function print_r(theObj,indent){
	var output="";
	if (indent == undefined) {
		indent = "  ";
	} else {
		indent += "  ";
	}
	if(theObj.constructor == Array || theObj.constructor == Object) {
		for(var p in theObj){
			if(theObj[p].constructor == Array|| theObj[p].constructor == Object){
				var type = (theObj[p].constructor == Array) ? "Array" : "Object";
				output += indent+"["+p+"]("+type+")=>\n";
				output += print_r(theObj[p],indent);
			} else {
				output += indent+"["+p+"]:"+theObj[p]+"\n";
			}
		}
	}
	return output;
}

function checkUserName(el)
{
	var error_id = el.getProperty('error_id');
	var error_el =  $(error_id);
	var error_text_el =  $(error_id+'_text');
	var errors = "OOPS! <span class='nobold'>That EMAIL IS ALREADY IN USE</span>";
	var user_name = el.value;
	var url = FORM_PATH_ROOT+'check_user/user_name/'+user_name+'/'+uniqueUrlId.getTime();
	var usernameValid = true;
	var myJSONRemote  = new Request.JSON({
		url:FORM_PATH_ROOT+'check_user/user_name/'+user_name+'/'+uniqueUrlId.getTime(),
		async :false,
		onComplete : function(json_obj) {
			if(json_obj.exist > 0)
			{
				el.addClass('error_f');
				error_el.addClass('error');
				error_text_el.addClass('error_text');
				error_text_el.set('html',errors);
				usernameValid = false;
			}
		}
	}).get({'user_name':user_name});
	return usernameValid;
}
