YUI().use("node", "io-form", "json", "anim", function(Y) {
	var onReqComplete = function(id, o, args){
		var feedback = Y.JSON.parse(o.responseText); 
		switch (feedback.action) {
			case "show_products":
				if (feedback.result == 'true') {
					/* 
						Set border for currrently shown line.
					*/
					Y.all("img").each(function(obj) {
						obj.set("style.border", "0 none");
					});
					Y.one("#"+feedback.cur_line_img).set("style.border", "3px solid orange");
					
					var old_productsContainer = Y.one("#"+Y.all(".productsContainer").get("id")[0]);
					var old_span = Y.one("#page1");
					var old_paginator = Y.one("#pg_pagination");

					Y.one("#sa_products").all(".produtcs_page").each(function(obj) {
        				Y.one("#sa_products").removeChild(obj);
    				});

					Y.one("#pg_pagination")._node.innerHTML = "";

					for (var i=1; i<=feedback.page_cnt; i++) {
						var span_style = i===1?'inline':'none';	
						var span_id = "page"+i;
						var new_span = old_span.cloneNode("false");
						new_span.set("innerHTML", "");
						new_span.set("id", span_id);
						new_span.set("style.display", span_style);
						Y.one("#sa_products").appendChild(new_span);
						for (var j=0; j<feedback.prod_per_page; j++) {
							if (feedback.query_result[i][j]) {
								var new_productsContainer = old_productsContainer.cloneNode(true);
 								new_productsContainer.set("id", "product_container_"+feedback.query_result[i][j].product_id);
								var link = "index.php?action=products&function=details&id="+feedback.query_result[i][j].product_id;
								new_productsContainer.one("#img_link").set("href", link);
								new_productsContainer.one("#view_details_link").set("href", link);
								new_productsContainer.one("#name_link").set("href", link);
								new_productsContainer.one("#descr_link").set("href", link);
								new_productsContainer.one("#product_img").set("src", "images/products/"+feedback.query_result[i][j].product_pict);
								new_productsContainer.one("#product_img").set("alt", feedback.query_result[i][j].product_pict);
								new_productsContainer.one("#prod_price").set("innerHTML", "$"+feedback.query_result[i][j].product_price);
								new_productsContainer.one("#name_input").set("value", feedback.query_result[i][j].product_name);
								new_productsContainer.one("#item_number_input").set("value", feedback.query_result[i][j].product_id);
								new_productsContainer.one("#price_input").set("value", feedback.query_result[i][j].product_price);
								
								/* Because saying "null" is not nice. */
								if (feedback.query_result[i][j].availability ) {
									new_productsContainer.one("#availability").set("innerHTML", feedback.query_result[i][j].availability);
								} 
								else {
									/* or display none? */
									new_productsContainer.one("#availability").set("innerHTML", "N/A");
								}

								if (feedback.query_result[i][j].availability === "In Stock") {
									new_productsContainer.one("#availability").set("style.color", "green");
								}
								else {
									new_productsContainer.one("#availability").set("style.color", "orange");
								}

								new_productsContainer.one("#name_link").set("innerHTML", feedback.query_result[i][j].product_name);
								new_productsContainer.one("#prod_descr").set("innerHTML", feedback.query_result[i][j].short_descr);
								new_productsContainer.all(".add_to_cart_form").each(
									function(obj){
										obj.set("id", "add_to_cart_form_"+feedback.query_result[i][j].product_id);
									});
	
								new_productsContainer.one(".add_to_cart_button").set("id", "product_"+feedback.query_result[i][j].product_id);

								Y.one("#"+span_id).appendChild(new_productsContainer);
							}
						}
					}

					var pages = "";
					for (var i=2; i<=feedback.page_cnt ; i++) {
						pages += "<li class='page_select'><a href='#' id='pg_"+i+"'>"+i+"</a>\
						</li>";
					}

					Y.one("#pg_pagination")._node.innerHTML = "<ul>\
								<li><a href='#'  class='off' id='first_pg' onclick='return false;'>First</a></li>\
								<li><a href='#'  class='off' id='prev_pg' onclick='return false;'>Prev</a></li>\
								<li class='page_select'><a class='selected' href='#' id='pg_1'>1</a></li>\
								"+pages+" \
								<li><a href='#' id='next_pg'>Next</a></li>\
						</ul>\
						<div class='clearing'>&nbsp;</div>\
						<div id='pg_paginationRight'></div>\
					</div>";
						
				}
				if ( Y.all(".page_select")) {
					Y.on("click", show_page, Y.all(".page_select"));
				}
				if ( Y.one("#first_pg")) {
					Y.on("click", show_first_page, Y.one("#first_pg"));
				}
				if ( Y.one("#prev_pg")) {
					Y.on("click", show_prev_page, Y.one("#prev_pg"));
				}
				if ( Y.one("#next_pg")) {
					Y.on("click", show_next_page, Y.one("#next_pg"));
				}
				break;

			case "details":
				if (feedback.result == 'true') {
					Y.one("#ligthbox_img").set("src", "images/products/"+feedback.product_info.product_pict);
					Y.one("#main_img").set('src', "images/products/"+feedback.product_info.product_pict);
					Y.one("#thumb_1").set('src', "images/products/"+feedback.product_info.product_pict);
					Y.one("#thumb_2").set('src', "images/products/"+feedback.product_info.screenshot1);
					Y.one("#thumb_3").set('src', "images/products/"+feedback.product_info.screenshot2);
					Y.one("#thumb_4").set('src', "images/products/"+feedback.product_info.screenshot3);
					Y.one("#pr_title").set('innerHTML', feedback.product_info.product_name);
					Y.one("#pr_price").set('innerHTML', "$"+feedback.product_info.product_price);				
					Y.one("#pr_descr").set('innerHTML', feedback.product_info.description);	
					Y.one("#item_name_input").set('value', feedback.product_info.product_name);
					Y.one("#item_number_input").set('value', feedback.product_info.product_id);
					Y.one("#price_input").set('value', feedback.product_info.product_price);
					Y.one("#quantity_input").set('value', "1");
					Y.one("#products_list").all("A").setStyle("color", "black");
					Y.one("#products_list").all("A").setStyle("fontWeight", "normal");
					Y.one("#"+feedback.submenu_item_id).all("A").setStyle("color", "#0068B3");
					Y.one("#"+feedback.submenu_item_id).all("A").setStyle("fontWeight", "bold");
					if (Y.one("#brochure_pointer")) {
						if (feedback.product_info.product_brochure != "") {
							Y.one("#brochure_link").set("href", "pdf/"+feedback.product_info.product_brochure);
							Y.one("#brochure_pointer").set("style.display", "block");
						}
						else {
							Y.one("#brochure_pointer").set("style.display", "none");
						}
					}
					if (Y.one("#video_pointer")) {
						if (feedback.product_info.product_video != "") {
							Y.one("#video_pointer").set("href", feedback.product_info.product_video);
							Y.one("#video_pointer").set("style.display", "block");
						}
						else {
							Y.one("#video_pointer").set("style.display", "none");
						}
					}
					if (feedback.product_info.availability === "In Stock") {
						Y.one("#availability").set("style.color", "green");
					}
					else {
						Y.one("#availability").set("style.color", "orange");
					}
					Y.one("#availability").set("innerHTML", feedback.product_info.availability);
					/* 
						Now we need to change the src for the iframe containing facebook
						"Like" button
					*/
					var src_start = "http://www.facebook.com/plugins/like.php?href=";
					var src_end = "&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light";
					Y.one("#like_btn").set("src", src_start+feedback.fb_uri+src_end);
					Y.one("#og_title").set("content", feedback.product_info.product_name);
					Y.one("#og_url").set("content", feedback.uri);
				}
				break;
			case "change_mini_cart":
				var ul = Y.one("#mini_cart_list");
				var li = Y.one("#placeholder_li");
				ul.set("innerHTML", "");
				for (var i in feedback.cart) {
					/* this can be done in the old-clone way also. */
					var new_li = (Y.Node.create(li.get("parentNode").get("innerHTML")));
					/*
					var new_li = li.cloneNode(true);
					*/
					
					new_li.one("#_name_input").set("value", feedback.cart[i].name);
					new_li.one("#_price_input").set("value", feedback.cart[i].unit_price);
					new_li.one("#_id_input").set("value", i);
					new_li.one("#_item_name").set("innerHTML", feedback.cart[i].name);
					new_li.one("#_item_qty").set("value", feedback.cart[i].qty);
					new_li.set("style.display", "block");
					ul.appendChild(new_li);
				}
				Y.one("#shopping_cart_items").set("innerHTML", feedback.items);
				Y.one("#shopping_cart_total").set("innerHTML", feedback.total_price);
				if (feedback.items > 0) {
					Y.one("#shopping_cart_image").set("src", "images/shopping_cart_full.jpg");
					Y.one("#mini_cart_buttons").set("style.display", "block");
					Y.one("#menu_shoppin_cart_icon").set("src", "images/shopping_cart_full_menubar.gif");
					Y.one("#menu_shoppin_cart").set("href", "index.php?action=view_cart");
				}
				else {
					Y.one("#shopping_cart_image").set("src", "images/shopping_cart_empty.jpg");
					Y.one("#mini_cart_buttons").set("style.display", "none");
					Y.one("#menu_shoppin_cart_icon").set("src", "images/shopping_cart_empty_menubar.gif");
					Y.one("#menu_shoppin_cart").set("href", "#");
				}
				break;
			case "change_full_cart":
				var rowsDiv = Y.one("#cart_data_rows");
    			var row = rowsDiv.get("firstElementChild");
    			rowsDiv.set("innerHTML", "");
				for (var i in feedback.cart) {
    				var newRow = row.cloneNode('true');
    				newRow.set("id", "cart_row_"+i);
					newRow.one("#name_input").set("value", feedback.cart[i].name);
					newRow.one("#price_input").set("value", feedback.cart[i].unit_price);
					newRow.one("#id_input").set("value", i);
					newRow.all(".col1").set("id", "item_"+i);
					newRow.one("#item_name").set("innerHTML", feedback.cart[i].name);
					newRow.all(".col2").set("id", "options_"+i);
					newRow.all(".col3").set("id", "qty_"+i);
					newRow.one("#item_qty").set("value", feedback.cart[i].qty);
					newRow.all(".col4").set("id", "remove_"+i);
					newRow.one("#remove_checkbox").set("value", i);
					newRow.all(".col5").set("id", "amount_"+i);
					newRow.one("#item_price").set("innerHTML", feedback.cart[i].price);
					rowsDiv.appendChild(newRow);
				}
				Y.one("#total_amount").set("innerHTML", feedback.total_price);
    			break;
			case "save_order":
				if (feedback.result == 'true') {
					Y.one("#paypal_form").submit();
				}
				break;
		}
	};
	
	function ajax_request (url, postData, request_type) {
		switch (request_type) {
			case "POST": 
				var cfg = { 
					method: "POST",
					data: postData,
					headers: { 'X-Transaction': 'POST Request'}
				};
				break
			case "GET" :  
				var cfg = { 
					method: "GET",
					headers: { 'X-Transaction': 'GET Request'}
				};
				break
		}	
		Y.io(url, cfg);	
	}

	function show_products(e) {
		var p_line_id = this._node.id.split("_").pop();
		var url 		= "index.php";
		var postData 	= "action=products&function=show&line="+p_line_id;
		var request 	= "POST";
		ajax_request (url, postData, request);
		
/*
		Stop Event:  stopPropagation() and preventDefault()
*/
		e.halt();
	}
	
	function show_page() {
		var page_to_show = this.get("firstChild").get("innerHTML");
		var curr_page	 = Y.all(".selected").get("innerHTML");
		if (page_to_show != curr_page) {
			Y.one("#page"+page_to_show).set("style.display", 'inline');
			Y.one("#page"+curr_page).set("style.display", 'none');
			Y.all(".selected").set("className",'');
			this.get("firstChild").set("className", "selected");

			/* Disable "First" and "Prev" links if the page to show is page 1 */
			if (page_to_show != "1") {
				Y.one("#first_pg").set("className", 'on');
				Y.one("#prev_pg").set("className", 'on');
			}
			else {
				Y.one("#first_pg").set("className", 'off');
				Y.one("#prev_pg").set("className", 'off');
			}
			/* 	Find total number of pages. If the page to show is the last one, 
				"disable" the "Next" Link
			*/
			var last_page = Y.all(".page_select")._nodes.length;
			if ((+page_to_show) === last_page) {
				Y.one("#next_pg").set("className", 'off');
			}
			else {
				Y.one("#next_pg").set("className", 'on');
			}
		}
	}
	
	function show_first_page() {
		/* 	Check that "First" link is not "disabled". If not
			show page one and "disable" "First" and "Prev" links.
			There is no need to check if the current page is the
			first page. This is taken care of by turning "Prev"
			and "First" links off in show_page() function.
		*/
		if (Y.one("#first_pg") && Y.one("#first_pg")._node.className != 'off') {
			var curr_page = Y.all(".selected").get("innerHTML");
			Y.one("#page1").set("style.display",'inline');
			Y.one("#page"+curr_page).set("style.display",'none');
			Y.all(".selected").set("className",'');
			Y.one("#pg_1").set("className", "selected");
			Y.one("#first_pg").set("className",'off');
			Y.one("#prev_pg").set("className", 'off');
			Y.one("#next_pg").set("className", 'on');
		}
	}
	
	
	function show_prev_page () {
		/* 	Check that "Prev" link is not "disabled". There is
			no need to check if the current page is the first page.
			This is taken care of by turning "Prev" and "First" links
			off in show_page() function.
		*/
		if (Y.one("#prev_pg") && Y.one("#prev_pg")._node.className != 'off') {
			Y.one("#next_pg")._node.className = 'on';
			var curr_page = Y.all(".selected").get("innerHTML");
			var prev_page_number = (+curr_page) -1;
			Y.one("#page"+prev_page_number).set("style.display", 'inline');
			Y.one("#page"+curr_page).set("style.display", 'none');
			Y.all(".selected").set("className",'');
			Y.one("#pg_"+prev_page_number).set("className","selected");
			if (prev_page_number === 1) {
				Y.one("#first_pg").set("className",'off');
				Y.one("#prev_pg").set("className",'off');
			}
		}
	}
	
	function show_next_page() {
		/* 	Check that "Next" link is not "disabled". There is
			no need to check if the current page is the last page.
			This is taken care of by turning "Next" link
			off in show_page() function.
		*/
		if (Y.one("#next_pg") && Y.one("#next_pg")._node.className != 'off') {
			Y.one("#first_pg")._node.className = 'on';
			Y.one("#prev_pg")._node.className = 'on';
			var curr_page = Y.all(".selected").get("innerHTML");
			var next_page_number = (+curr_page) + 1;
			Y.one("#page"+next_page_number)._node.style.display = 'inline';
			Y.one("#page"+curr_page).set("style.display", 'none');
			Y.all(".selected").set("className",'');
			Y.one("#pg_"+next_page_number)._node.className = "selected";
			
			/* 	Find total number of pages. If the page to show is the last one, 
				"disable" the "Next" Link
			*/
			var last_page = Y.all(".page_select")._nodes.length;
			if (next_page_number === last_page) {
				Y.one("#next_pg")._node.className = 'off';
			}
		}
	}

	function show_large_image(e) {
		var src = this.get("children.0").get("src");
		Y.one("#main_img").set("src", src);
		Y.one("#ligthbox_img").set("src", src);
		e.halt();
	}
	
	function show_product (e) {
		var submenu_item_id = this.get("id");
		var pr_id = submenu_item_id.split("_").pop();
		var url 		= "index.php";
		var postData 	= "action=products&function=details&caller=sidebar&id="+pr_id+"&submenu_item_id="+submenu_item_id;
		var request 	= "POST";
		ajax_request (url, postData, request);
		
		e.halt();
	}
	
	function add_to_cart(e) {
		var product_id = (e.target.get("id")).match(/[0-9]+/)[0];
		var form_id = this.get("form").get("id").replace(/[0-9]+/, "");
		var uri = "index.php";
		var cfg = { 
			method: 'POST', 
			data: "action=products&function=add_to_cart",
			form: { 
				id: form_id+product_id,
				upload: false 
			} 
		}; 
		/* Start the transaction. */
		var request = Y.io(uri, cfg); 	
	}
	
	function clear_cart() {
		var uri = "index.php";
		var cfg = { 
			method: 'POST', 
			data: "action=products&function=clear_cart"
		}; 
		/* Start the transaction. */
		var request = Y.io(uri, cfg); 	
	}
	
	function update_mini_cart() {
		var uri = "index.php";
		var cfg = { 
			method: 'POST', 
			data: "action=products&function=update_cart",
			form: { 
				id: "mini_cart_form", 
				upload: false 
			} 
		}; 
		var request = Y.io(uri, cfg); 	
	}
	
	function update_full_cart() {
		var uri = "index.php";
		var cfg = { 
			method: 'POST', 
			data: "action=view_cart&function=update_cart",
			form: { 
				id: "full_cart_form", 
				upload: false 
			} 
		}; 
		var request = Y.io(uri, cfg); 	
	}
	
	function populate_shipping_info() {
		if (Y.one("#user_info_btn").get("checked") == true) {
			Y.one("#first_name").set("value", Y.one("#user_first_name").get("value"));
			Y.one("#last_name").set("value", Y.one("#user_last_name").get("value"));
			Y.one("#address").set("value", Y.one("#user_address").get("value"));
			Y.one("#city").set("value", Y.one("#user_city").get("value"));
			Y.one("#state").set("value", Y.one("#user_state").get("value"));
			Y.one("#zip_code").set("value", Y.one("#user_zip_code").get("value"));
			Y.one("#phone").set("value", Y.one("#user_phone").get("value"));
			Y.one("#email").set("value", Y.one("#user_email").get("value"));
		}
		else {
			Y.one("#first_name").set("value", "");
			Y.one("#last_name").set("value", "");
			Y.one("#address").set("value", "");
			Y.one("#city").set("value", "");
			Y.one("#state").set("value", "");
			Y.one("#zip_code").set("value", "");
			Y.one("#phone").set("value", "");
			Y.one("#email").set("value", "");
		}
	}

	function expand_collapse_list(e) {
		if (this.hasClass("expand") === true) {
			this.replaceClass("expand", "collapse");
			this.all("img").set("src", "images/liststyle_down.gif");
			this.get("parentNode").all("ul").each(function(obj){ obj.setStyle("display", "block"); });
		} else {
			this.replaceClass("collapse", "expand");		
			this.all("img").set("src", "images/liststyle.gif");
			this.get("parentNode").all("ul").each(function(obj){ obj.setStyle("display", "none"); });
		}
		e.halt();
	}
	
	function show_lightbox(e) {
		var fade_node = (Y.Node.create('<div id="fade" class="black_overlay"></div>'));
		Y.one("#lightbox").appendChild(fade_node);
		var fadeIn = new Y.Anim({
			node: '#fade',
			from: {
				opacity: 0
			},
			to: {
				opacity: 0.8
			}
		});
 		fadeIn.set('duration', 1.2);

 		Y.one("#fade").setStyle("display", "block");
		Y.one("#light").setStyle("display", "block");
		fadeIn.run();
		e.halt();
	}

	function hide_lightbox(e) {
		Y.log("Hide Lightbox");
		var fadeOut = new Y.Anim({
			node: '#fade',
			to: {
				opacity: 0
			}
		});

		fadeOut.run();
		fadeOut.on('end', function() {
			Y.log(Y.one("#fade"));
			Y.one("#lightbox").removeChild(Y.one("#fade"));
		});
 		
		Y.one("#light").setStyle("display", "none");
		e.halt();
	}

	if ( Y.one("#update_full_cart")) {
		Y.on("click", update_full_cart, Y.one("#update_full_cart"));
	}

	if (Y.one("#user_info_btn")) {
		Y.on("click", populate_shipping_info, Y.one("#user_info_btn"));
	}
	
	if (Y.one("#checkout_btn")) {
		Y.on("click", clear_cart, Y.one("#checkout_btn"));
	}

	if ( Y.one("#update_mini_cart")) {
		Y.on("click", update_mini_cart, Y.one("#update_mini_cart"));
	}

	if(Y.one("#clear_cart")){
		Y.on("click", clear_cart, Y.one("#clear_cart"));
	}	
	if ( Y.one("#next_pg")) {
		Y.on("click", show_next_page, Y.one("#next_pg"));
	}

	
	if ( Y.all(".thumb")) {
		Y.on("click", show_large_image , Y.all(".thumb"));
	}
	
		if ( Y.all(".submenuListItem")) {
		Y.on("click", show_product, Y.all(".submenuListItem"));
	}
	
	if ( Y.all(".add_to_cart_button")) {
		Y.delegate("click", add_to_cart, "#content", ".add_to_cart_button");
	}

	if ( Y.all(".product_line")) {
		Y.on("click", show_products, Y.all(".product_line"));
	}
	

	if ( Y.all(".page_select")) {
		Y.on("click", show_page, Y.all(".page_select"));
	}


	if ( Y.one("#first_pg")) {
		Y.on("click", show_first_page, Y.one("#first_pg"));
	}

	if ( Y.one("#prev_pg")) {
		Y.on("click", show_prev_page, Y.one("#prev_pg"));
	}

	if (Y.all(".productLineListItem")) {
		Y.delegate("click", expand_collapse_list, "#leftbar", ".productMainClick");
	}
	
	if (Y.all(".productImage")) {
		Y.on("click", show_lightbox, Y.all(".productImage"));
	}

	if (Y.one("#ligthbox_img")) {
		Y.on("click", hide_lightbox, Y.one("#lightbox_img"));
	}

	if (Y.one("#close")) {
		Y.on("click", hide_lightbox, Y.one("#close"));
	}

	Y.on('io:complete', onReqComplete);
	
});
