Site = function() {

	return {
		imgRoot : '',
		
        loginUrl: '',
        
		init : function() {
			Sfx.Form.Util.blankImg = Site.imgRoot + '/blank.gif';
			Sfx.Ajax.Indicator.spinner = Site.imgRoot + '/loadingsm.gif';

			var siteRules = {
				'.dtPick' : function(element) {
					$(element).removeClassName('dtPick');
					Sfx.Form.Util.injectDatePicker($(element));
				},

				'a.modal-close' : function(element) {
					Element.stopObserving(element, 'click', Site.modalClose);
					Element.observe(element, 'click', Site.modalClose);
				},
				
				'div.pager a' : function(element) {
					Element.stopObserving(element, 'click', Site.doPaging);
					Element.observe(element, 'click', Site.doPaging);
				},

				'table.grid tr th a' : function(element) {
					Element.stopObserving(element, 'click', Site.doSorting);
					Element.observe(element, 'click', Site.doSorting);
				},

				'.listing-chkAll' : function(element) {
					Element.stopObserving(element, 'click', Site.doCheckAll);
					Element.observe(element, 'click', Site.doCheckAll);
				},

				'.listing-chk' : function(element) {
					Element.stopObserving(element, 'click', Site.doGridCheckClick);
					Element.observe(element, 'click', Site.doGridCheckClick);
				},

				'.acText' : function(element) {
					new Sfx.Controls.AutoComplete(element, 'acText', 'autocomplete');
				}
			};
			
			Behaviour.register(siteRules);
			Behaviour.apply();
			
			if($('top'))
			{
			    $('top').observe('click', function(evt) {
			        Event.stop(evt);
			        $('thetop').scrollTo();
			    });
			}
			
			Ajax.Responders.register( {				
				onComplete : function(transport, xm) {
				    if(xm.status == 403)
				    {
				        Site.doSessionLogout();
				    }	    
				}
			});
		},

        doSessionLogout: function() {
            Modalbox.show($('session-logout'), {title: 'Session Expired!', width: 400});
            
            try
            {
                setTimeout(function() {
                    try
                    {
	                    window.location.href = Site.loginUrl;				            
	                }
	                catch(e)
	                {
	                }
	            }, 5000);
	        }
	        catch(e)
	        {
	        }
        },
        
		Alert : function(msg) {
			alert(msg);
		},

		serverError : function() {
			alert('Internal Server Error!!!' 
				+ '\n\nAn email is sent to the technical team about the error\n' 
				+ 'and will be resolved soon.');
		},

		modalClose : function(evt) {
			Event.stop(evt);

			if (Modalbox.isShown()) {
				Modalbox.hide();
			}
		},

		doPaging : function(evt) {
			Event.stop(evt);

			var aEle = $(Event.findElement(evt, 'a'));
			var grid = aEle.up('div.paged-list-wrap');

			new Ajax.Updater(grid, aEle.readAttribute('href'), {});
		},

		doSorting : function(evt) {
			Event.stop(evt);

			var aEle = $(Event.findElement(evt, 'a'));
			if(!aEle.hasClassName('nosort'))
			{
			    var grid = aEle.up('div.paged-list-wrap');

			    new Ajax.Updater(grid, aEle.readAttribute('href'), {});
			}
		},

		doCheckAll : function(evt) {
			var chkAll = $(Event.element(evt));
			var grid = $(chkAll.up('table'));

			grid.getElementsBySelector('.listing-chk').each(function(chk) {
				chk.checked = chkAll.checked;
			});

		},

		doGridCheckClick : function(evt) {
			var chk = $(Event.element(evt));
			var grid = $(chk.up('table'));
			var chkAll = $(grid.getElementsBySelector('.listing-chkAll')[0]);
			var bVal = true;

			grid.getElementsBySelector('.listing-chk').each(function(obj) {
				if (!obj.checked) {
					bVal = false;
				}
			});

			chkAll.checked = bVal;
		}
		
	};
}();

var emailVal = (function() {
  var pattern = /^([\w]+)(.[\w]+)*@([\w-]+\.){1,5}([A-Za-z]){2,4}$/;
  return function(args) {
	var str = args;
	if(str.indexOf('@') == -1)
		return false;

	if(str.indexOf('.') == -1)
		return false;

	if(str.split('@')[1].indexOf('.') == -1)
		return false;

	if(str.split('@')[1].split('.')[1].length <= 1)
		return false;

	return pattern.test(str);
  };
})();

Sfx.Form.FormValidator.isEmail = function(str) {
	return emailVal(str);
};

document.observe("dom:loaded", function() {
	Site.init();
});

