// Share and Sell
// Main Javascript Functions

var SAS_Main = {
	change_button_state: function(mode, button) {
		jQuery("#" + button + "").attr("src", "/storeadmin/images/admin_bar/" + button + "_s" + (mode === 0 ? "1" : "2") + ".png");
	},

	float_price_breaks: function(product_no) {
		jQuery("#price_breaks_" + product_no).toggle();
	},
	
	get_object_position: function(obj) {
		var curleft, curtop = 0;
		
		if(obj.offsetParent) {
			curleft = obj.offsetLeft;
			curtop = obj.offsetTop;
			
			while(obj == obj.offsetParent) {
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop;
			}
		}
		
		return [curleft, curtop];
	},
	
	hover_button: function(id, path, button, ext) {
		if(button.indexOf("hover") !== -1) {
			document.getElementById(id).src = path + button + "_hover." + ext;
		} else {
			document.getElementById(id).src = path + button + "." + ext;
		}
	},
	
	product_design: function(product_no) {
		if((jQuery("#prod_" + product_no + "").attr('src')).indexOf("widget_large") != -1) {
			jQuery("#prod_" + product_no + "").attr('src', (jQuery("#prod_" + product_no + "").attr('src')).replace("widget_large", "widget_design")).addClass('product_detail');
		} else {
			jQuery("#prod_" + product_no).attr('src', (jQuery("#prod_" + product_no + "").attr('src')).replace("widget_design", "widget_large")).removeClass('product_detail');
		}
	},
	
	switch_alt_placement: function(num, placement) {
		jQuery("#add_to_cart_product_image").attr('src', (jQuery("#add_to_cart_placement_image_" + num + "").attr('src')).replace("_placement", "_Xlarge"));
		jQuery(".add_to_cart_alternate_placement").removeClass("add_to_cart_placement_selected");
		jQuery("#add_to_cart_alternate_placement_container_" + num + "").addClass("add_to_cart_placement_selected");
		jQuery(".add_to_cart_checkmark").hide();
		jQuery("#add_to_cart_checkmark_" + num + "").show();
		jQuery("#add_to_cart_main_image_placement").html(' ' + placement + ' ');
	},

	switch_placement: function(product_no, placement_no, file_ext) {
		jQuery('#prod_' + product_no).attr('src', (jQuery('#thumb_' + product_no + '-' + placement_no).attr('src')).replace("_tiny", "_large"));
		
		jQuery('.arrow_' + product_no + '').attr('src', '/storeglobals/images/arrow_placeholder.' + file_ext + '').css('cursor', 'pointer');
		jQuery('#arrow_' + product_no + '-' + placement_no + '').attr('src', '/storeglobals/images/arrow_holder.' + file_ext + '').css('cursor', 'default');
	},
	
	switch_tab: function(tab_id, tab_class, content_id, generic_div_class) {
		jQuery("." + tab_class + "").removeClass(tab_class);
		jQuery("#" + tab_id + "").addClass(tab_class);
		jQuery("." + generic_div_class + "").hide();
		jQuery("#" + content_id + "").show();
	},
	
	tooltip: function(element, contents) {
		
	}
};

function carousel() {
	return {
		elems: 0,
		count: 0,
		eid: "",
		page: 1,
		pages: 0,
		
		init: function(tid, tcount) {
			this.count = tcount ? parseInt(tcount, 10) : 4;
			this.elems = jQuery("#" + tid + " li").length;
			this.eid = tid;
			this.pages = Math.ceil(parseInt(this.elems) / this.count);
			
			var $this = this; // object literal alias when in jquery scope
			
			jQuery("#" + this.eid + " li").each(function(index, e) {
				var page_num = Math.ceil((index + 1) / $this.count);
				
				jQuery(e).addClass("" + $this.eid + "_" + page_num);
				
				if(page_num > 1) {
					jQuery(e).hide();
				}
			});
		},
		
		prev: function() {
			if(this.page > 1 && this.pages > 1) {
				this.page = this.page - 1;
				
				if(this.page == 1) {
					jQuery("#" + this.eid + "_button_left").addClass("" + this.eid + "_button_disabled");
				}
				
				if(this.pages > 1) {
					jQuery("#" + this.eid + "_button_right").removeClass("" + this.eid + "_button_disabled");
				}
				
				jQuery("#related_products li").hide();
				jQuery(".related_products_" + this.page + "").show();
			}
		},
		
		next: function() {
			if((this.page != this.pages) && this.pages > 1) {
				this.page = this.page + 1;
				
				if(this.page == this.pages) {
					jQuery("#" + this.eid + "_button_right").addClass("" + this.eid + "_button_disabled");
				}
				
				if(this.page != 1) {
					jQuery("#" + this.eid + "_button_left").removeClass("" + this.eid + "_button_disabled");
				}
				
				jQuery("#related_products li").hide();
				jQuery(".related_products_" + this.page + "").show();
			}
		}
	};
}

// alternative tooltip system
var tip = {
	elem: "",
	selector: "",

	bind: function(selector, elem, message, padding) {
		this.elem = elem;
		this.selector = selector;
		
		jQuery(elem).html(message).css('position', 'absolute');
		
		jQuery(selector).bind('mouseover', function() {
			jQuery(elem).show();
		});
		
		jQuery(selector).bind('mousemove', function(e) {
			jQuery(elem).css('top', parseInt(e.pageY) + padding).css('left', parseInt(e.pageX) + padding);
		});
		
		jQuery(selector).bind('mouseout', function() {
			jQuery(elem).hide();
		});
	},
	
	unbind: function() {
		jQuery(this.elem).html('').hide();
		jQuery(this.selector).unbind('mouseover');
		jQuery(this.selector).unbind('mousemove');
		jQuery(this.selector).unbind('mouseout');
	}
};

// super simple new roster system for share and sell
var roster = {
	inited: false,
	iter: 0,
	list: [],
	names: false,
	numbers: false,
	obj: [],
	quantity: 0,
	sizes: [],
	
	add: function(size, update) {
		var output = '';
		
		if(!jQuery("#rosters_table").html()) {
			this.build();
		}
	
		output += '<tr id="roster_item_' + this.iter + '" class="roster_item_inputs">';
		output += '<td width="25%">';
		output += '<select onchange="roster.update();" style="width: 90px;">';
		
		for(k in this.sizes) {
			var selected = (this.sizes[k] == size) ? ' selected="true"' : '';
			var upcharge = (this.obj.upcharges[k] > 0) ? ' (+' + money_format(this.obj.upcharges[k]) + ' e.)' : '';
			
			output += '<option value="' + this.sizes[k] + '" ' + selected + '>' + this.sizes[k] + upcharge + '</option>';
		}
		
		output += '</select>';
		output += '</td>';
		
		if(this.numbers) {
			output += '<td width="15%">';
			output += '<input type="text" size="6" maxlength="2" onkeyup="roster.update();" class="input_numbers_field" />';
			output += '</td>';
		}
		
		if(this.names) {
			output += '<td width="40%">';
			output += '<input type="text" size="28" style="width: 100%;" maxlength="20" onkeyup="roster.update();" class="input_names_field" />';
			output += '</td>';
		}
		
		output += '<td align="center" width="5%">';
		output += '<img src="/storeglobals/images/delete_mini.png" class="roster_delete_name_number" onclick="roster.remove(' + this.iter + ');" />';
		output += '</td>';
		
		jQuery("#rosters_table").append(output);
		
		window.location.hash = "bottom";
		
		this.iter++;
		this.quantity++;
		
		if(update) {
			this.update();
		}
	},
	
	build: function() {
		output = '<table id="add_to_cart_roster" cellspacing="0" cellpadding="0"><thead><th>Size</th>';
		
		if(this.numbers) {
			output += '<th>Number</th>';
		}
		
		if(this.names) {
			output += '<th>Name</th>';
		}
		
		output += '<th>&nbsp;</th></thead><tbody id="rosters_table"></tbody></table>';
		output += '<div id="add_to_cart_table_foot">';
		output += '<div style="float: left;"><span id="remove_name_and_numbers"><a href="javascript:;" onclick="roster.empty();">Remove Roster</a></span></div>';
		output += '<div style="float: right;"><input type="button" value="Add More Players" onclick="javascript:roster.add(\'\', true);" /></div>';
		output += '<div style="clear: both;"></div>';
		output += '</div>';
		output += '<div id="add_to_cart_quantity_discounts_breaker"></div>';
		output += '<div id="add_to_cart_roster_notice"><strong>Please Note:</strong> "PLAYER NAME" and "00" are sample placeholders. On your actual finished product, we will center and space each player name and number from your roster above. Depending on the product, names / numbers may be screenprinted or heat transfer CAD printed.</div>';
		output += '<a name="bottom"></a>';
		
		jQuery("#add_to_cart_name_number_table").html(output);
	},
	
		
	discounter: function() {
		var first_break = true;
		var got_first_break = false;
		var got_break = false;
		var current_break = 0;
		var initial_break = 0;
		var price_break = 0;
		var max_break = 0;
		var total_savings = 0;
		
		for(k in this.obj.breaks) {
			if(k > max_break) {
				max_break = parseInt(k);
			}
		
			if(!got_first_break) {
				initial_break = k;
				got_first_break = true;
			}
		
			if(k > this.quantity && !got_break) {
				price_break = k;
				got_break = true;
			}
			
			if(this.quantity >= k || first_break) {
				current_break = k;
				
				if(first_break) {
					first_break = false;
				}
			}
		}
		
		var quantity_left = (price_break - this.quantity);
		
		if(current_break < max_break) {
			jQuery("#add_to_cart_quantity_discounts_breaker").html("Save " + money_format((this.obj.breaks[current_break] * price_break) - (this.obj.breaks[price_break] * price_break)) + " on your purchase, buy just " + (price_break - this.quantity) + " more!");
		} else {
			total_savings = ((this.quantity * this.obj.breaks[initial_break]) - (this.quantity * this.obj.breaks[current_break]));
			jQuery("#add_to_cart_quantity_discounts_breaker").html("You've saved " + money_format(total_savings) + " with quantity discounts");
		}
	},
	
	empty: function(hide_confirm) {
		if(!hide_confirm) {
			var are_you_sure = confirm('Warning: This action will remove all size, quantity, name and number information. You will need to start your roster from scratch. Are you sure you want to reset your roster?\r\n\r\nPress "OK" to reset your roster.');
		}
		
		if(are_you_sure || hide_confirm) {
			jQuery("#names_numbers").empty();
			jQuery(".add_to_cart_tab").removeClass("add_to_cart_tab_active");
			jQuery(".add_to_cart_tab_content_container").hide();
			jQuery("#roster_tab").hide().removeClass("add_to_cart_tab_active");
			jQuery("#roster_container").hide();
			jQuery("#product_description_tab").addClass("add_to_cart_tab_active");
			jQuery("#product_description_container").show();
			jQuery(".size_qty_inputs").removeAttr('disabled');
			jQuery("#add_to_cart_roster_verb").html('Add');
			jQuery("#add_to_cart_roster").remove();
			jQuery("#add_to_cart_roster_remove").hide();
			
			this.inited = false;
			this.list = [];
			this.quantity = 0;
			this.update();
			
			tip.unbind();
		}
	},
	
	get_list: function() {
		return this.list;
	},
	
	init: function(price_obj, supports_names, supports_numbers) {
		if(this.inited) {
			window.location.hash = "roster";
			SAS_Main.switch_tab('roster_tab', 'add_to_cart_tab_active', 'roster_container', 'add_to_cart_tab_content_container');
		} else {
			this.obj = price_obj;
			this.sizes = price_obj.sizes;
			this.names = supports_names;
			this.numbers = supports_numbers;
			
			var has_quantity = false;
			var i = 0;
			
			while(document.getElementById("size_" + i + "")) {
				if(has_quantity) {
					break;
				}
				
				if(jQuery("#size_" + i + "").val() >= 1) {
					has_quantity = true;
				}
				
				i++;
			}
			
			this.populate();
		
			jQuery(".add_to_cart_tab").removeClass("add_to_cart_tab_active");
			jQuery(".add_to_cart_tab_content_container").hide();
			jQuery("#roster_tab").show().addClass("add_to_cart_tab_active");
			jQuery("#roster_container").show();
			jQuery("#add_to_cart_roster_verb").html('Edit');
			jQuery("#add_to_cart_roster_remove").show();
			
			window.location.hash = "roster";
		
			var i = 0;
			
			if(has_quantity) {
				while(document.getElementById("size_" + i + "")) {
					for(var j = 0; j < jQuery("#size_" + i + "").val(); j++) {
						this.add(jQuery("#size_" + i + "").attr('gmnt'), false);
					}
					
					i++;
				}
			} else {
				this.add(this.sizes[0], true);
			}
			
			tip.bind("#add_to_cart_price_container, .size_qty_inputs", "#generic_tooltip", "You can change sizes and quantities by using<br/>the Roster tool below. Any changes in<br/>sizes/quantities selections will be automatically<br/>reflected here.", 15);
			
			var blinks = 0;
			
			var blinker = setInterval(function() {
				if(blinks > 5) {
					clearInterval(blinker);
				} else {
					if(blinks % 2 === 0) {
						jQuery(".roster_item_inputs select, .roster_item_inputs input").css('background', '#FFFF9B');
					} else {
						jQuery(".roster_item_inputs select, .roster_item_inputs input").css('background', '#FFFFFF');
					}
					
					blinks++;
				}
			}, 200);
			
			this.inited = true;
			this.update();
		}
	},
	
	output: function() {
		var output = '';
		var table_contents = '';
	
		for(item in this.list) {
			if(typeof this.list[item] === "object") {
				table_contents += '<tr>';
				table_contents += '<td>' + this.list[item].size + '</td>';
				table_contents += '<td>' + this.list[item].name + '</td>';
				table_contents += '<td>' + this.list[item].number + '</td>';
				table_contents += '</tr>';
			}
		}
		
		if(table_contents) {
			output = '<table id="add_to_cart_roster" width="100%"><thead><th>Size</th>';
		
			if(this.numbers) {
				output += '<th>Number</th>';
			}
			
			if(this.names) {
				output += '<th>Name</th>'
			}
			
			output += '</thead><tbody id="rosters_table">' + table_contents + '</tbody></table>';
		} else {
			output = '<p>You have not added any names / numbers to your products</p>';
		}
		
		jQuery("#add_to_cart_names_numbers_container").html(output);
		this.update();
	},
	
	populate: function() {
		if(jQuery("#names_numbers").val() !== "") {
			var names_and_numbers_temp = (jQuery("#names_numbers").val()).split("\r\n") || jQuery("#names_numbers").val();
			var names_and_numbers = new Array();
			var i = 0;
			
			for(k in names_and_numbers_temp) {
				if(typeof names_and_numbers_temp[k] === "string") {
					names_and_numbers[i] = names_and_numbers_temp[k];
					i++;
				}
			}
			
			i = 0;

			for(k in names_and_numbers) {
				if(typeof names_and_numbers[k] === "string" && names_and_numbers[k] !== "") {
					var split_names_and_numbers = names_and_numbers[k].split(": ");
					var size = split_names_and_numbers[0];
					var name_and_number_pairs = split_names_and_numbers[1].split("||");
					
					for(pair in name_and_number_pairs) {
						if(typeof name_and_number_pairs[pair] !== "string" || name_and_number_pairs[pair] === "") {
							continue;
						}
						
						var splitting_pairs = name_and_number_pairs[pair].split("|");
						var name = splitting_pairs[1];
						var number = splitting_pairs[0];
						
						this.list[i] = {
							name: name,
							number: number,
							size: size
						};
						
						i++;
					}
				}
			}
		}
		
		jQuery(".size_qty_inputs").attr('disabled', true);
	},
	
	remove: function(num) {
		jQuery("#roster_item_" + num + "").remove();
		
		this.quantity--;
		this.update();
		
		if(this.get_list().length === 0) {
			this.empty(true);
		}
	},
	
	stringify: function() {
		var output = "";
		var temporary_list = [];
		var each_item;
		
		for(each_item = 0; each_item < this.list.length; each_item++) {
			if(typeof this.list[each_item].size === "string" && this.list[each_item].size !== "") {
				if(!temporary_list[this.list[each_item].size]) temporary_list[this.list[each_item].size] = this.list[each_item].size + ": ";
				
				temporary_list[this.list[each_item].size] += this.list[each_item].number + "|" + this.list[each_item].name + "|| ";
			}
		}
		
		for(k in temporary_list) {
			if(typeof temporary_list[k] === "string" && temporary_list[k] !== "") {
				if(i > 0) {
					output += " ";
				}
			
				output += temporary_list[k] + "\r\n";
				
				i++;
			}
		}
		
		jQuery("#names_numbers").val(output);
	},
	
	update: function() {
		// empty the list
		this.list = [];
	
		// create an alias for jquery
		var $this = this;
		
		jQuery(".roster_item_inputs").each(function(i, e) {
			var match_flag = (/(\|)/gi.test(jQuery("#" + e.id + " .input_names_field").val()) || /[^0-9]/gi.test(jQuery("#" + e.id + " .input_numbers_field").val())) ? true : false;
		
			$this.list[i] = {
				name: jQuery("#" + e.id + " .input_names_field").val() ? jQuery("#" + e.id + " .input_names_field").val().replace(/(\|)/gi, "") : " ",
				number: jQuery("#" + e.id + " .input_numbers_field").val() ? jQuery("#" + e.id + " .input_numbers_field").val().replace(/[^0-9]/gi, "") : " ",
				size: jQuery("#" + e.id + " select").val()
			};
			
			if(match_flag) {
				jQuery("#" + e.id + " .input_names_field").val($this.list[i].name);
				jQuery("#" + e.id + " .input_numbers_field").val($this.list[i].number);
			}
		});
		
		jQuery(".size_qty_inputs").val(0);
		
		for(k in this.list) {
			var index = jQuery.inArray(this.list[k].size, this.sizes);
			
			if(document.getElementById("size_" + index + "")) {
				var val = parseInt(document.getElementById("size_" + index + "").value);
			
				document.getElementById("size_" + index + "").value = val + 1;
			}
		}
		
		this.stringify();
		
		update_prices(price_obj);
		this.discounter();
		
		jQuery(".roster_item_inputs").css('background', 'transparent');
		jQuery(".roster_item_inputs:even").css('background', '#E1E1E1');
	}
};

function show_loader(q) {
	if(q !== '') {
		jQuery(q).hide(function() {
			jQuery("#loadingSS2").show();
		});
	} else {
		jQuery("#loadingSS2").show();
	}
	
	jQuery("#modal_window_login_container").show();
}

function fix_footer() {
	if(document.getElementById("main-container").offsetHeight < 700) {
		document.getElementById("main-container").style.height = (Math.max(
			Math.max(document.body.scrollHeight, document.documentElement.scrollHeight),
			Math.max(document.body.offsetHeight, document.documentElement.offsetHeight),
			Math.max(document.body.clientHeight, document.documentElement.clientHeight)
		) - 105) + "px";
	}
}

function startTooltip(elem, h) {
	jQuery("#tooltip_container").html(jQuery(elem).attr('tip'));
	
	jQuery("#tooltip_container").css('left', (elem.offsetLeft  - 110) + (elem.clientWidth / 2));
	jQuery("#tooltip_container").css('top', (((window.pageYOffset || document.documentElement.scrollTop) + parseInt(h, 10)) + 'px'));
	
	if(jQuery(elem).attr('tip-class')) {
		jQuery("#tooltip_container").addClass(jQuery(elem).attr('tip-class'));
	}
	
	jQuery("#tooltip_container").show();
}

function endTooltip() {
	jQuery("#tooltip_container").removeClass().hide();
}

function scroll_pos() {
	var scroll_top = document.body.scrollTop;
	
	if(scroll_top === 0) {
		if(window.pageYOffset) {
			scroll_top = window.pageYOffset;
		} else {
			scroll_top = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
		}
	}
	
	return scroll_top;
}

function prefill_with_zero(t, p) {
	if(t.value == "") {
		t.value = 0;
		update_prices(p);
	}
}

function update_prices(price_obj) {
	var price = price_obj.price;
	var breaks = price_obj.breaks;
	var upcharges = price_obj.upcharges;
	var iter = 0;
	var total_quantity = 0;
	var price_break = 0;
	var total_price = 0;
	
	if(jQuery("#add_to_cart_subtotal").html() !== "/subtotal") {
		jQuery("#add_to_cart_subtotal").html('');
	}
	
	while(document.getElementById("size_" + iter + "")) {
		var quantity = force_numeric(document.getElementById("size_" + iter + "").value);
		document.getElementById("size_" + iter + "").value = quantity;
		total_quantity += (quantity) ? parseInt(quantity) : 0;
		iter++;
	}
	
	for(k in breaks) {
		if(k <= total_quantity) {
			price_break = k;
		} else {
			break;
		}
	}
	
	iter = 0;
	
	while(document.getElementById("size_" + iter + "")) {
		if(!isNaN(document.getElementById("size_" + iter + "").value) && !isNaN(breaks[price_break])) {
			var upcharge_amt = upcharges[iter] ? upcharges[iter] : 0;
		
			total_price += ((breaks[price_break] + upcharge_amt) * document.getElementById("size_" + iter + "").value);
		}
		
		iter++;
	}
	
	if(parseInt(total_price) < 9999999) {
		document.getElementById("add_to_cart_subtotal").style.display = 'inline';
	} else {
		document.getElementById("add_to_cart_subtotal").style.display = 'none';
	}
	
	var pretext = (total_quantity > 0) ? "Total: " : "";
	
	document.getElementById("add_to_cart_price_text").innerHTML = pretext + money_format(total_price);
	document.getElementById("add_to_cart_price_each").innerHTML = money_format(total_price / total_quantity);
	
	if(total_quantity == 0) {
		jQuery("#add_to_cart_subtotal").html('/each');
		jQuery("#add_to_cart_price_text").html("$" + price_obj.breaks[1] + "");
	}
	
	return total_quantity;
}

// forces numeric entry
function force_numeric(input) {
	// weve got to use this as a string
	var input = "" + ((input !== "0") ? input.replace(/^(0)*/gi, "") : 0);
	input = (input !== "0" || input !== "") ? input.replace(/[^0-9]/gi, "") : input;

	return input;
}

// quick and dirty money formatting function
function money_format(num) {
	var total = num.toFixed(2);
	var splits = total.split(".");
	var dollars = splits[0];
	var cents = parseInt(splits[1], 10);
	var output = new Array();
	
	// reverse the dollars so we can add commas
	var dollar_chars = dollars.split("").reverse();
	
	// build the output
	for(i = 0; i < dollar_chars.length; i++) {
		output[i] = (((i + 1) % 3 === 0) && i < (dollar_chars.length - 1)) ? "," + dollar_chars[i] : dollar_chars[i];
	}
	
	dollars = output.reverse().join("");
	
	if(splits[0] > 9999999) {
		return "Call to Order"; // prevent scientific notation parses
	} else if(isNaN(dollars) && isNaN(cents)) {
		return "0.00";
	} else {
		return "$" + (dollars + "." + ((cents === 0) ? "00" : ((cents <= 9) ? "0" + cents : cents)));
	}
}

// fixes column heights on product blowup page
function fix_column_heights() {
	var left = document.getElementById("add_to_cart_left_panel");
	var right = document.getElementById("add_to_cart_right_panel");
	var right_desc = document.getElementById("add_to_cart_inner_container");
	var right_tabs = document.getElementById("add_to_cart_tabs");
	var right_content = jQuery("#add_to_cart_tab_content");
	var right_share = document.getElementById("add_to_cart_share");
	
	var height = (Math.max(left.clientHeight, left.offsetHeight) - (Math.max(right_desc.clientHeight, right_desc.offsetHeight) + Math.max(right_tabs.clientHeight, right_tabs.offsetHeight) + Math.max(right_share.clientHeight, right_share.offsetHeight)) - 24);
	
	jQuery("#add_to_cart_tab_content").css('max-height', height).css('min-height', height).css('height', height);
	
	if(jQuery("#add_to_cart_roster_tool").html() && jQuery("#add_to_cart_customize_tool").html()) {
		jQuery(".add_to_cart_tool").css('width', '50%');
	} else {
		jQuery(".add_to_cart_tool").css('width', '100%');
	}
}

// submits an item to the cart
function add_to_cart() {
	var has_quantity = (update_prices(price_obj)) ? true : false;
	
	if(has_quantity) {
		if(price_obj.roster === true && roster.get_list().length == 0) {
			alert("Please specify the names and numbers you would like for each size");
			
			roster.init(price_obj, price_obj.names, price_obj.numbers);
		} else {
			jQuery(".size_qty_inputs").removeAttr('disabled');
			document.sizeqtyform.submit();
		}
	} else {
		alert("Please indicate the quantity of each size that you would like prior to adding to the cart.");
		
		return false;
	}
}
