function Site(config){
	var Site = this; // leave "this" alone	
	Site.config = config; // namespace	
	Site.defaults = {
		report 		: false,
		fxspeed 	:	200
	};
	Site.initialized = {};
		
	// Check passed params against defaults
	for(var index in Site.defaults) {
		if(typeof Site.config[index] == "undefined") {
			Site.config[index] = Site.defaults[index];
		}
	}
	
	Site.gvars = {
		$siteErrors 	: $('#siteErrors'),
		$siteErrorsTitle : $('h1#siteErrorsTitle'),
		$siteErrorsMessage : $('p#siteErrorsMessage'),
		base_url			: returnBaseURL()
	};

	Site.filters = {
		email	:	/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/,
		phone : /^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/,
		zip 	: /^(\d{5}-\d{4})|(\d{5})$/
	}
		
	Site.init = function(){		
		Site.interface.init();
		Site.security.init();
		Site.initialized['master'] = true; 
		if(Site.config.report===true){
			Site.utilities.report();	
		};
	};

	
	Site.interface = {
		init : function(){
			Site.interface.header.init();
			Site.interface.errors.init();
			Site.interface.nav.init();
			Site.interface.splash();
			return Site.initialized['interface'] = true;
		}, // end interface.init
		
		header : {
			init : function(){
				return Site.initialized['interface.header'] = true;		
			}
		},
		
		errors : {
			init : function(){
				if(Site.gvars.$siteErrors.hasClass('open')===true){
					Site.interface.errors.open();
					Site.interface.errors.observe();
					return Site.initialized['interface.errors'] = true;
				}
			},
			open : function(){
				Site.gvars.$siteErrors.show();			
			},
			close : function(){
				Site.gvars.$siteErrors.remove();	
			},			
			observe : function(){	
				Site.gvars.$siteErrors.find('.close').live('click',function(e){
					Site.interface.errors.close();
					e.preventDefault();
				});
				$(window).keyup(function(e) {
					if(e.keyCode == 27) {
						Site.interface.errors.close();
						e.preventDefault();
					}
					if(e.keyCode == 13) {
						Site.interface.errors.close();
						e.preventDefault();
					}					
				});    				
			},
			trigger : function(title,message){
				Site.gvars.$siteErrorsTitle.text(title);
				Site.gvars.$siteErrorsMessage.text(message);				
				Site.interface.errors.open();
				Site.interface.errors.observe();			
			}
					
		}, // end interface.errors
		nav : {
			
			init : function(){
				Site.interface.nav.build();
				Site.interface.nav.observe();				
				return Site.initialized['interface.nav'] = true; 
			}, // end interface.nav.init			
			
			build : function(){
				$('ul#topnav li:first').addClass('first');
				$('ul.footerproductnav li:first').addClass('first');
			}, // end interface.nav.build		
			
			observe : function(){
				$("#mainNav a").hover(
					function(){ 
						Site.interface.nav.openNavPanel($(this)); 
					},
					function(){ 
						Site.interface.nav.closeNavPanel($(this)); 
					}
				);				
			}, // end interface.nav.observe
			
			openNavPanel : function($link){

				var menuid = $link.attr("rel");
				$link.addClass("active");
								
				$(menuid).show().hover(
					function(){ 
						Site.interface.nav.openNavPanel($link); 
					},
					function(){ 
						Site.interface.nav.closeNavPanel($link); 
					}
				);

							
			}, // end openNavPanel
			
			closeNavPanel : function($link){

				var menuid = $link.attr("rel");
				$link.removeClass("active");
				$(menuid).hide();
				
			
			} // end closeNavPanel
						
		},	// end interface.nav		
		
		splash : function(){
			$("a#close_splash").click(function(e){
				e.preventDefault();
				$("#splash_overlay").remove();
			});
		
		}
		
	}; // end interface
	
	Site.home = {
		init : function() {
			Site.home.interface.init();
			return Site.initialized['home'] = true;			
		},		
		interface : {			
			init : function(){
			  // enable hovers for featured products
			  $("div.ephimage").hover(
			  	function() { $(this).css("border-color","#feee3a"); },
			    function() { $(this).css("border-color","#BCBEC0"); }
				);				
				// fire up the featured products slideshow
		    $('#featured_products_gallery').cycle({ 
					fx:     'scrollDown', 
					speed:   500, 
					timeout: 15000, 
			    pager:  '#gallery_nav', 
			     
			    // callback fn that creates a thumbnail to use as pager anchor 
			    pagerAnchorBuilder: function(idx, slide) { 
			        return '<li><a href="#">' + (idx+1) + '</a></li>'; 
			    }, 
					fastOnEvent: true
		    }); 
		 	// fire up the manufacturers scroller
		    $('#manslider').cycle({ 
					fx:     'scrollLeft', 
					speed:   500, //500
					timeout: 4000, //4000
					pause: 1,
					fastOnEvent: true
		    }); 			
			  return Site.initialized['home.interface'] = true;											
			}	// end home.interface.init
		} // end home.interface		
	}; // end home	
	
	
	Site.products = {
		init : function(){
			Site.products.interface.init();
			return Site.initialized['products'] = true;
		}, // end products.init
		interface : {
			init : function(){
				Site.products.interface.observe();
				return Site.initialized['products.interface'];			
			},
			observe : function(){				
				$('a.modalImage').click( function(e){
					e.preventDefault();
					var href = $(this).attr("href");		
					var $wrapper = $("<div />").attr("className","modalImageWrapper");		
					var $image = $("<img />").attr("src",href);
					$wrapper.append($image);		
					var $content = $wrapper;		
					var modal = new Modal("Image Preview",$content,900,600,'Close');
					modal.init(); // fire it up						
				});				
				// endable the grid->list switcher
				$('ul.grid-list').each(function(){
					var title = $(this).attr("title");
					var $list = $(title);					
					$(this).find('button').click( function(e){
						var newClass = $(this).attr("rel");			
						$list.removeClass('list grid').addClass(newClass);
						$(this).addClass("hit");	
						$(this).parents('li').siblings().children('button').removeClass('hit');
					});
				});
								
			} // end observe		
		}
	};


	Site.register = {

		init : function(){
			Site.register.observe();
			return Site.initialized['register'] = true;		
		},
		
		observe : function(){
			$('#phone_input').keyup(function() {
				var cL = $(this).val().length; // number of characters
				if(cL == 3 || cL == 7){
					var chars = $(this).val();
					$(this).val(chars+"-");
				}
					
			});
			
			
		}
		
	
	}; // end register



	Site.cart = {
		init : function(){
			Site.cart.interface.init();
			return Site.initialized['cart'] = true;
		}, // end products.init
		interface : {
			init : function(){
				Site.cart.interface.messages.init();
				Site.cart.interface.observe();
				return Site.initialized['cart.interface'];			
			},
			observe : function(){
				$("li.quantity form").submit( function(e){
					e.preventDefault();
				});
				
				$("li.quantity form input").change( function(e) {
					e.preventDefault();
					Site.cart.updateQuantity($(this));
				});
			},
			
			messages : {
				init : function() {
					$('#cart_message_wrapper').delay(4000).fadeOut(Site.config.fxspeed);		
					$('#cart_message_wrapper').click(function(){
						$(this).hide();
					});		
				}
			
			
			}
			
			
		},
		updateQuantity : function($input){
			var $form = $input.parent('form');
			$.post($form.attr("action"),	{
					quantity : $input.val()
				}, function (data) {
					console.log(data);
				}				
			);				
			
		}		
	};
	
	
	Site.security = {
		init: function(){
			Site.security.gutcheck.init();
			return Site.initialized['security'] = true;		
		},

		gutcheck : {
			init : function() {
				$('a.gutCheck').click(function(e) {
					e.preventDefault();
					var href = $(this).attr("href");
					var message = $(this).attr("title");
					gutCheck({
						message: message,
						run : function(){
							window.location.href = href;
						}
					});	
					return false;	
				});
			}
		} // end gutcheck
	};
	
	
	Site.utilities = {
		report : function(){
			for(var i in Site.initialized) {
				if(Site.initialized[i]===true){
					console.log('Site.'+i+': '+Site.initialized[i]);
				}
			}
		}	
	}; // end utilities






}



function livechat(){
	var URL = "http://settings.messenger.live.com/Conversation/IMMe.aspx?invitee=674f1b305feb7e29@apps.messenger.live.com&amp;mkt=en-US";
	day = new Date();
	id = day.getTime();
	eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=300,height=300');");
}













$(document).ready(function(){
//	initTypography();
	var body_id = $('body').attr('id');

	switch (body_id) {

	case "home":
		var site = new Site({});
			site.init();
			site.home.init();
	  break;

	case "users_register":
	case "pages_contact":
		var site = new Site({});
			site.init();
			site.register.init();
	  break;

	case "products_show":
	case "manufacturers_show":
	case "divisions_show":
	case "categories_show":
	case "types_show":
	case "featured_show":
		var site = new Site({});
	 		site.init();
	 		site.products.init();
	 	break;	 	 		
	 		 		 	
	case "quote_cart":
		var site = new Site({});
	 		site.init();
	 		site.products.init();
	 		site.cart.init();
	 	break;	 	
	 	
	default:
		var site = new Site({});
			site.init();
	}
});	
