	var loader = new YAHOO.util.YUILoader({
	
		// Identify the components you want to load.  Loader will automatically identify
		// any additional dependencies required for the specified components.
		require: ["connection","get","event","container","dragdrop","animation","carousel"],
	
		// Configure loader to pull in optional dependencies.  For example, animation
		// is an optional dependency for slider.
		loadOptional: true,
		
		// Debug
		filter: "debug",
	
		// The function to call when all script/css resources have been loaded
		onSuccess: function() {
		
			YAHOO.namespace("EPM");
			
			var handleYes = function() {
		 		window.location = "/cart.php";
			 }
		 
			 var handleNo = function() {
				YAHOO.EPM.CartDialog.hide();
				YAHOO.EPM.CartDialog.destroy();
			 }
			 
			 var handleLogin = function() {
			 
			 }
			 
			 var cancelEdit = function() {
			 	YAHOO.EPM.EditDialog.hide();
			 }
			 
			 var handleUpdate = function() {
			 	
				var handleEditSuccess = function(o) {
					// alert(o.responseText);
					YAHOO.EPM.EditDialog.hide();
					location.reload(true);
				}
				
				var handleEditFailure = function() {
					alert("There was an error updating the product.");
				}
				
				// Send the data to the server through a post
				var fd = YAHOO.EPM.EditDialog.getData();
				var postData = 	"id=" + fd.productCode + 
								"&name=" + escape(fd.name) +
								"&description=" + escape(fd.description) +
								"&isActive=" + fd.isActive +
								"&isBundle=" + fd.isBundle +
								"&isTaxable=" + fd.isTaxable +
								"&isDiscountable=" + fd.isDiscountable +
								"&discountPercent=" + fd.discountPercent +
								"&isEDelivery=" + fd.isEDelivery +
								"&downloadFile=" + fd.downloadFile +
								"&price=" + fd.price +
								"&shipping=" + fd.shipping +
								"&subPrice=" + fd.subPrice +
								"&thumbnail=" + fd.thumbnail +
								"&path=" + fd.path +
								"&UpdateProduct=true";
				
				var editcallback = {success:handleEditSuccess, failure:handleEditFailure, cache: false};
				YAHOO.util.Connect.asyncRequest('POST','/admin/editProductAjax.php', editcallback, postData);
				
			 }
			 
			 YAHOO.EPM.MessagePanelConfig = 
			 {
				modal: true,	
				visible: false,
				draggable: false,
				constraintoviewport: true,
				fixedcenter: true,
				close: false
			};
        
			// Instantiate the Dialog
			YAHOO.EPM.LoadingPanel = new YAHOO.widget.Dialog("LoadingPanel", YAHOO.EPM.MessagePanelConfig);
			
			FetchLoadingPanel();
			
			YAHOO.EPM.CartDialogConfiguration = {
				width: '600px',
				fixedcenter: true,
				visible: false,
				draggable: false,
				modal: true,
				constraintoviewport: true,
				buttons: [ 
						  	{
								text: "Continue Shopping", 
								handler: function(o) {
									YAHOO.EPM.CartDialog.hide();
									YAHOO.EPM.CartDialog.destroy();
								}
							},
							{
								text: "Go To Cart",
								handler: function(o) {
									YAHOO.EPM.CartDialog.destroy();
									window.location = "/cart.php";
								}
							}
						]
			};
						 
			YAHOO.EPM.EditDialog =
				new YAHOO.widget.Dialog("EditDialog",
						{fixedcenter: true,
						   visible: false,
						   draggable: true,
						   modal: true,
						   constraintoviewport: true,
						   postmethod: "form",
						   close: true,
						   buttons: [{text:"Update Product", handler:handleUpdate, isDefault:true}, {text:"Cancel", handler:cancelEdit}]
						} );
				
			
			// InitCarousel();
			
		}
		
	});
	
	// Load the files using the insert() method. The insert method takes an optional
	// configuration object, and in this case we have configured everything in
	// the constructor, so we don't need to pass anything to insert().
	loader.insert();
	
	function InitCarousel() {

		YAHOO.EPM.Carousel = new YAHOO.widget.Carousel("MarketingCarousel",
			{
				isCircular: true,
				animation: {speed: 1.25, effect: YAHOO.util.Easing.easeBothStrong},
				numVisible: 1, 
				numItems: 4
			}
		);
		
		YAHOO.EPM.Carousel.on("beforeScrollEvent", function(obj) {
			alert("test");
		});
		
		YAHOO.EPM.Carousel.set("autoPlayInterval",2000);
		YAHOO.EPM.Carousel.render();
		YAHOO.EPM.Carousel.show();
		YAHOO.EPM.Carousel.startAutoPlay();
		
	}
	
	function ShowLoadingPanel() {	
		YAHOO.EPM.LoadingPanel.show();	
	}
	
	function HideLoadingPanel() {
		YAHOO.EPM.LoadingPanel.hide();
	}
	
	function FetchLoadingPanel(m) {
		
		var m ="Loading, please wait...";
	
		var sUrl = "/ajaxCart.php?action=getLoadingPanel";
		
		var postData = "message=" + m;
		
		var callback = 
		{
			success: function(o) {
				YAHOO.EPM.LoadingPanel.setBody(o.responseText);
				YAHOO.EPM.LoadingPanel.render(document.body);
			},
			failure: function(o) {
				YAHOO.EPM.LoadingPanel.setBody("Loading...");
				YAHOO.EPM.LoadingPanel.render(document.body);
			}
		};
		
		var request = YAHOO.util.Connect.asyncRequest("POST",sUrl,callback,postData);
	
	}
	
	function ShowTemplatePanel(template,params,timeout) {
		
		var sUrl = "/ajaxCart.php?action=getTemplate&template=" + template;
		var count = 0;
		var postData = "";
		for (var i in params) {
			if (count != 0) {postData += "&";}
			postData += (i + "=" + params[i]);
			count++;
		}

		var callback =
		{
			success: function(o) {
				YAHOO.EPM.TemplatePanel = new YAHOO.widget.Dialog("TemplatePanel",YAHOO.EPM.MessagePanelConfig);
				YAHOO.EPM.TemplatePanel.setBody(o.responseText);
				YAHOO.EPM.TemplatePanel.render(document.body);
				HideLoadingPanel();
				YAHOO.EPM.TemplatePanel.show();
				if (timeout != null) {
					setTimeout("YAHOO.EPM.TemplatePanel.hide()",timeout);	
				}

			},
			failure: function(o) {
				HideLoadingPanel();
				alert(o.statusText);
				
			}
		};
		
		var request = YAHOO.util.Connect.asyncRequest("POST",sUrl,callback,postData);

	}

	function ShowSampleTemplatePanel(template,params,timeout) {

		var sUrl = "/ajaxSample.php?action=getTemplate&template=" + template;
		var count = 0;
		var postData = "";
		for (var i in params) {
			if (count != 0) {postData += "&";}
			postData += (i + "=" + params[i]);
			count++;
		}

		var callback =
		{
			success: function(o) {
				YAHOO.EPM.TemplatePanel = new YAHOO.widget.Dialog("TemplatePanel",YAHOO.EPM.MessagePanelConfig);
				YAHOO.EPM.TemplatePanel.setBody(o.responseText);
				YAHOO.EPM.TemplatePanel.render(document.body);
				HideLoadingPanel();
				YAHOO.EPM.TemplatePanel.show();
				if (params['download']) {
					// window.location = params['sample'];
				}
				if (timeout != null) {
					setTimeout("YAHOO.EPM.TemplatePanel.hide()",timeout);
				}

			},
			failure: function(o) {
				HideLoadingPanel();
				alert(o.statusText);

			}
		};

		var request = YAHOO.util.Connect.asyncRequest("POST",sUrl,callback,postData);

	}

	function validateSampleDownload()
	{
		var name = $('realname').value;
		var email = $('email').value;
		var valid = true;

		$('realname').style.border = '1px solid black';
		$('realname').style.backgroundColor = '#FFFFFF';
		$('email').style.border = '1px solid black';
		$('email').style.backgroundColor = '#FFFFFF';

		if (name == '') {
			$('realname').style.border = '1px solid #FF0000';
			$('realname').style.backgroundColor = '#FFDCE8';
			$('invalid-sample').style.display = 'block';

			valid = false;
		}

		if (!email.match(/@/)) {
			$('email').style.border =  '1px solid #FF0000';
			$('email').style.backgroundColor = '#FFDCE8';
			$('invalid-sample').style.display = 'block';

			valid = false;
		}

		return valid;
	}

	function submitSampleForm(sample)
	{
		if (validateSampleDownload()) {
			YAHOO.EPM.TemplatePanel.hide();
			ShowLoadingPanel();
			ShowSampleTemplatePanel('samples/extra.tpl', {
															sample: sample,
															download: 1,
															name: $('realname').value,
															email: $('email').value
														}, null);
		}
	}

	function submitSampleExtraForm(sample)
	{
		YAHOO.EPM.TemplatePanel.hide();
		ShowLoadingPanel();
		ShowSampleTemplatePanel('samples/thanks.tpl', {
														sample: sample,
														thanks: 1,
														name: $('realname').value,
														email: $('email').value,
														title: $('title').value,
														company: $('company').value,
														phone: $('phone').value,
														street1: $('street1').value,
														street2: $('street2').value,
														city: $('city').value,
														country: $('country').value,
														state: $('state').value,
														zip: $('zip').value,
														interests_1: ($('interests_1').checked) ? $('interests_1').value : '',
														interests_2: ($('interests_2').checked) ? $('interests_2').value : '',
														interests_3: ($('interests_3').checked) ? $('interests_3').value : '',
														interests_4: ($('interests_4').checked) ? $('interests_4').value : '',
														interests_5: ($('interests_5').checked) ? $('interests_5').value : ''
													}, null);
	}
	
	function ShowMessagePanel(message) {
		params = new Array();
		params["message"] = message;
		ShowTemplatePanel("site/messagepanel.tpl",params,1000);		
	}
	
	
	// Create the Add To Cart Function
	function AddToCart(id) {
		
		ShowLoadingPanel();
	
		var sUrl = "/ajaxCart.php?action=cart&caction=add&pid=" + id;
		
		var handleSuccess = function(o) {
		
			if(o.responseText !== undefined){
				
				if (o.responseText == "Success") {

					RefreshTopBar();
					ShowConfirmation(id);
				
				}
				else if (o.responseText == "Exists") {
					ShowMessagePanel("That item already exists in your cart!");
				}
				else {
					// Error message - could not add product to cart	
					HideLoadingPanel();
				}
				
			}
			else {
				// alert("o.responseText Undefined");	
				HideLoadingPanel();
			}
			
		}
		
		var handleFailure = function(o) {
			HideLoadingPanel();
			alert("Error Adding to Cart");
		}	
		
		var callback = {success:handleSuccess, failure:handleFailure, cache: false};
		
		var request = YAHOO.util.Connect.asyncRequest('GET',sUrl, callback);		
	
	}

	// Create the GetSample Function
	function GetSample(sample) {

		ShowLoadingPanel();

		var sUrl = "/ajaxSample.php?sample=" + sample;

		var handleSuccess = function(o) {

			if(o.responseText !== undefined){

				if (o.responseText == "Success") {
					ShowSampleTemplatePanel('samples/form.tpl',{sample: sample}, null);
				}
				else {
					// Error message - could not add product to cart
					HideLoadingPanel();
				}

			}
			else {
				// alert("o.responseText Undefined");
				HideLoadingPanel();
			}

		}

		var handleFailure = function(o) {
			HideLoadingPanel();
		}

		var callback = {success:handleSuccess, failure:handleFailure, cache: false};

		var request = YAHOO.util.Connect.asyncRequest('GET',sUrl, callback);

	}
	
	function LoadEditPage(id) {
	
		var sUrl = "/admin/editProductAjax.php?action=show&id=" + id;
		
		var handleSuccess = function(o) {
			if (o.responseText !== undefined) {
				YAHOO.EPM.EditDialog.setHeader("<center>Edit Product " + id + "</center>");
				YAHOO.EPM.EditDialog.setBody(o.responseText);
				YAHOO.EPM.EditDialog.render(document.body);
				YAHOO.EPM.EditDialog.show();
			}
		}
		
		var handleFailure = function(o) {
			alert("Could not load editing dialog.");
		}
		
		var callback = {success:handleSuccess, failure:handleFailure, cache: false, argument: {prodid: id}};
		
		var request = YAHOO.util.Connect.asyncRequest('GET',sUrl,callback);
	
	}
	
	function ShowConfirmation(pid) {
		
		var params = new Array();
		params["prod"] = pid;
		ShowTemplatePanel("cart/productinfo.tpl",params,null);
	
		/*
		var sUrl = "/ajaxCart.php?ajaxaction=getproductinfo&pid=" + pid;
		
		var handleSuccess = function(o){
		
			if(o.responseText !== undefined){

				YAHOO.EPM.CartDialog = new YAHOO.widget.Dialog("CartDialog",YAHOO.EPM.CartDialogConfiguration);
				YAHOO.EPM.CartDialog.setHeader("Product Added To Cart");
				YAHOO.EPM.CartDialog.setBody(o.responseText);	
				YAHOO.EPM.CartDialog.render(document.body);
				YAHOO.EPM.CartDialog.show();
				HideLoadingPanel();
				
			}
		}
		
		var handleFailure = function(o) {
			
		}	
		
		var callback = { success:handleSuccess, failure:handleFailure, cache: false, argument: { prodid: pid } };
		
		var request = YAHOO.util.Connect.asyncRequest('GET',sUrl, callback);
		*/
	
	}
	
	function RefreshTopBar() {
		
		/*
	
		var div = document.getElementById('TopBar_Cart');
	
		var sUrl = "/ajaxCart.php?ajaxaction=gettopbar";
		
		var responseText = '';
		
		var handleSuccess = function(o){
		
			if(o.responseText != ""){
				div.innerHTML = o.responseText;
			}
		}
		
		var handleFailure = function(o) {
			return null;
		}
		
		var callback = { success:handleSuccess, failure:handleFailure, cache: false };
		
		var response = YAHOO.util.Connect.asyncRequest('GET',sUrl, callback);

		return responseText;
		
		*/
	
	}

	function $(id)
	{
		return document.getElementById(id);
	}