function SetGlobalOnLoad(f)
{
	var root = window.addEventListener || window.attachEvent ? window : document.addEventListener ? document : null;
	if (root)
	{
		if(root.addEventListener)
		{
			root.addEventListener("load", f, false);
		}
		else if(root.attachEvent)
		{
			root.attachEvent("onload", f);
		}
	}
	else
	{
		if(typeof window.onload == 'function')
		{
			var existing = window.onload;
			window.onload = function()
			{
				existing();
				f();
			}
		}
		else
		{
			window.onload = f;
		}
	}
}

jQuery.fn.mu_expandables=function(options)
{
	var opts=jQuery.extend({},jQuery.fn.mu_expandables.setup,options);
	var tmp;
	return this.each(function()
	{
		tmp=jQuery(this).attr('id');
		if(tmp.length<1)
		{
			return;
		}
		jQuery('#'+tmp+opts.suffixExpander).attr('expander4id',tmp).attr('collapserid',tmp+opts.suffixCollapser).attr('expanderspeed',opts.speedShow);
		jQuery('#'+tmp+opts.suffixCollapser).attr('collapser4id',tmp).attr('expanderid',tmp+opts.suffixExpander).attr('collapserspeed',opts.speedHide);
		if(opts.hide)
		{
			jQuery(this).hide();
			jQuery('#'+tmp+opts.suffixExpander).show().css(opts.styleExpander).click(function()
			{
				var id=jQuery(this).attr('expander4id');
				var cid=jQuery(this).attr('collapserid');
				var speed=jQuery(this).attr('expanderspeed');
				jQuery(this).hide();
				jQuery('#'+id).show(speed);
				jQuery('#'+cid).show();
			});
			jQuery('#'+tmp+opts.suffixCollapser).hide().css(opts.styleCollapser).click(function()
			{
				var id=jQuery(this).attr('collapser4id');
				var eid=jQuery(this).attr('expanderid');
				var speed=jQuery(this).attr('collapserspeed');
				jQuery(this).hide();
				jQuery('#'+id).hide(speed);
				jQuery('#'+eid).show();
			});
		}
		else
		{
			jQuery('#'+tmp+opts.suffixExpander).show().css(opts.styleExpander).click(function()
			{
				var id=jQuery(this).attr('expander4id');
				var cid=jQuery(this).attr('collapserid');
				var speed=jQuery(this).attr('expanderspeed');
				jQuery(this).hide();
				jQuery('#'+id).show(speed);
				jQuery('#'+cid).show();
			});
			jQuery('#'+tmp+opts.suffixCollapser).hide().css(opts.styleCollapser).click(function()
			{
				var id=jQuery(this).attr('collapser4id');
				var eid=jQuery(this).attr('expanderid');
				var speed=jQuery(this).attr('collapserspeed');
				jQuery(this).hide();
				jQuery('#'+id).hide(speed);
				jQuery('#'+eid).show();
			});
		}
	});
};
jQuery.fn.mu_expandables.setup=
{
	selectorExpandable:'.mu_expandable',
	selectorCollapsable:'.mu_collapsable',
	suffixExpander:'_expander',
	suffixCollapser:'_collapser',
	speedShow:'fast',
	speedHide:'fast',
	hide:true,
	styleExpander:{cursor:'pointer'},
	styleCollapser:{cursor:'pointer'}
};

jQuery.fn.mu_errors=function(options)
{
	var opts=jQuery.extend({},jQuery.fn.mu_errors.setup,options);
	var tmp;
	var template=jQuery('#'+opts.idTemplate).html();
	var curid;
	var container;

	jQuery(opts.selectorError).each(function()
	{
		tmp=jQuery(this).html();
		jQuery(this).remove();
		curid=opts.idTemplate+jQuery.fn.mu_errors.setup.cnt++;
		container=jQuery('#'+opts.idPlaceholder).append('<div id="'+curid+'">'+template+'</div>').
				find('#'+curid).addClass(opts.addClassError);
		container.find(' .'+opts.classContainer).html(tmp);
		container.find(' .'+opts.classCloser).attr('closer4id',curid).attr('timeleft',opts.showTime).
				attr('hidespeed',opts.speedHide).attr('countdownclass',opts.classCountdown).
				click(function()
				{
					jQuery(this).mu_errors_remove();
				}).everyTime(1000,function()
				{
					var timeleft=jQuery(this).attr('timeleft')-1000;
					if(timeleft<=0)
					{
						jQuery(this).mu_errors_remove();
					}
					else
					{
						jQuery(this).attr('timeleft',timeleft);
						var id=jQuery(this).attr('closer4id');
						var cd=jQuery(this).attr('countdownclass');
						jQuery('#'+id+' .'+cd).html(parseInt(timeleft/1000));
					}
				});
	});
	return;
};
jQuery.fn.mu_errors_remove=function()
{
	var id=jQuery(this).attr('closer4id');
	var speed=jQuery(this).attr('hidespeed');
	if(id.length<1)
	{
		return this;
	}
	jQuery('#'+id).slideUp(speed,function()
	{
		var id=jQuery(this).attr('closer4id');
		jQuery('#'+id).remove();
	});
	return this;
}
jQuery.fn.mu_errors.setup=
{
	selectorError:'.mu_error',
	classError:'mu_error',
	addClassError:'errordiv',
	selectorError1:'.mu_error',
	classError1:'mu_error',
	addClassError1:'errordiv',
	selectorError2:'.mu_notification',
	classError2:'mu_notification',
	addClassError2:'notificationdiv',
	speedHide:'fast',
	idTemplate:'mu_error_template',
	idPrefix:'mu_error_',
	idPlaceholder:'mu_error_placeholder',
	classContainer:'mu_error_container',
	classCountdown:'mu_error_countdown',
	classCloser:'mu_error_closer',
	cnt:0,
	showTime:10000,
	showTime1:10000,
	showTime2:5000
};

function AddError(str,notification)
{	var classes=jQuery.fn.mu_errors.setup.classError1+' '+jQuery.fn.mu_errors.setup.addClassError1;
	if(notification)
	{		classes=jQuery.fn.mu_errors.setup.classError2+' '+jQuery.fn.mu_errors.setup.addClassError2;
	}	jQuery('#mu_error_placeholder').append('<div class="'+classes+'">'+str+'</div>');
	SetErrors();}

function SetErrors()
{	jQuery().mu_errors();
	jQuery().mu_errors({selectorError:jQuery.fn.mu_errors.setup.selectorError2,
						classError:jQuery.fn.mu_errors.setup.classError2,
						addClassError:jQuery.fn.mu_errors.setup.addClassError2,
						showTime:jQuery.fn.mu_errors.setup.showTime2});
}

function OnLoadMain()
{	jQuery(jQuery.fn.mu_expandables.setup.selectorExpandable).mu_expandables({hide:true}).removeClass(jQuery.fn.mu_expandables.setup.selectorExpandable);
	jQuery(jQuery.fn.mu_expandables.setup.selectorCollapsable).mu_expandables({hide:false}).removeClass(jQuery.fn.mu_expandables.setup.selectorCollapsable);
	SetErrors();
}

SetGlobalOnLoad(OnLoadMain);
