NFi = {
    init: function(parent){
        NFi.attachEventObservers(parent);
        NFi.fadeElements(parent);
        NFi.WndManager.attachWnds(parent);
    },
	attachEventObservers: function(parent){
	    NFi.attachEventObserver('asyncForm','submit',NFi.Forms.asyncFormSubmit,parent);
	    NFi.attachEventObserver('asyncAction','click',NFi.asyncActionClick,parent);
	    NFi.attachEventObserver('calendar','click',NFi.calendarClick,parent);
	},
	attachEventObserver: function(className,event,observer,parent){
	    if(parent){
	        if(Object.isElement(parent)){
	            $A($(parent).getElementsByClassName(className)).each(function(e){
	                e.observe(event,observer);
	            });
	        }
	    }
	    else{
	       $$('.' + className).each(function(e){
	                e.observe(event,observer);
	       });
	    }
	},
	fadeElements: function(parent){
	   if(parent){
            if(Object.isElement(parent)){
                $A($(parent).getElementsByClassName('fade')).each(function(e){
                    e.fade({ duration: 3.0, delay: 3.0 });
                });
            }
        }
        else{
           $$('.fade').each(function(e){
                e.fade({ duration: 3.0, delay: 3.0 });
           });
        }
	},
	asyncActionClick: function(event){
	   element = event.element();
	   while(!element.href ||  element.tagName != 'A'){
	       element = $(element.up());
	       if(!element){
	           return;
	       }
	   }
	   element.insert({after:'<img src="/images/ajax-loader.gif" />'});
	   element.hide();
	   new Ajax.Request(element.href,{
	       element: $(element),
	       
	       onException: function(requestor,exception){
	           alert(exception);
	       },
	       onFailure: function(request,json){
               alert('There was a problem processing the request');
           }
	   });
	   event.stop();
	},
	calendarClick: function(event)
	{
		element = event.element();
		while(!element.href ||  element.tagName != 'A')
		{
			element = $(element.up());
			if(!element)
			{
				return;
			}
		}
		
		if(!$('calendar'))
		{
			var caldiv = document.createElement('div');
			caldiv.setAttribute('id','calendar');
			document.body.appendChild(caldiv);
		}
		
		var calendar = new CalendarPopup("calendar");
		calendar.select($(element.rel),element.id,'MM/dd/yyyy'); return false;
		event.stop();
	},
	setPageMessage:function setPageMessage (text, cssClass)
	{
		if(typeof cssClass == 'undefined')
		{
			cssClass = 'success';
		}
		
		$('pageMessage').innerHTML = '<div id="appMessage" class="appMessage ' + cssClass + '">' + text + '</div>';
		$('appMessage').fade({delay: 3.0});
	}
};

function toggleDirectoryBox(obj,toggleId)
{
	Effect.toggle( toggleId, 'blind', { duration: .2 } );
	
	if($(toggleId).style['display'] == 'none')
	{
		obj.innerHTML = '<span>minimize</span>';
		obj.className = 'up';
	}
	else
	{
		obj.innerHTML = '<span>maximize</span>';
		obj.className = 'down';
	}
}

function toggleHelpBox(obj,toggleId,mini_text,maxi_text)
{
	Effect.toggle( toggleId, 'blind', { duration: .2 } );
	
	if($(toggleId).style['display'] == 'none')
	{
		obj.innerHTML = '<span>' + mini_text + '</span>';
		obj.className = 'up help';
	}
	else
	{
		obj.innerHTML = '<span>' + maxi_text + '</span>';
		obj.className = 'down help';
	}
}

function toggleSearchBox(obj,toggleId,mini_text,maxi_text)
{
	Effect.toggle( toggleId, 'blind', { duration: .2 } );
	
	if($(toggleId).style['display'] == 'none')
	{
		obj.innerHTML = '<span>' + mini_text + '</span>';
		obj.className = 'up';
	}
	else
	{
		obj.innerHTML = '<span>' + maxi_text + '</span>';
		obj.className = 'down';
	}
}

function toggleDisplay(obj,toggleId)
{
	Effect.toggle( toggleId, 'blind', { duration: .2 } );
	
	if($(toggleId).style['display'] == 'none')
	{
		obj.className = 'up';
	}
	else
	{
		obj.className = 'down';
	}
}

function showActions( element )
{
	status = document.getElementById( element ).style.display;
	if( status == 'block' )
	{
		document.getElementById( element ).style.display =' none';
	}
	else
	{
		document.getElementById( element ).style.display = 'block';
	}
}

document.observe('dom:loaded',function(){NFi.init()});
