/*
	A collection of general site functions.
	Requires jQuery.
*/

/* Modal Logic */
function zip_finder() {
	var address = $('#modal_zf_address').val();
	var city = $('#modal_zf_city').val();
	var state = $('#modal_zf_state').val();
	
	$.get(
		'/global/modals/zip_finder.php?address='+address+'&city='+city+'&state='+state,
		function(data){
			data = $.trim(data);
			if (data == 'blank_info') alert("Please fill in all of the forms.");
			else if (data == 'not_found') {
				var show_string = 'Not found.';
			}
			else if (!isNaN(data)) {
				var show_string = data;
			}
			else alert("An error occured, please try again.");
		
			if (typeof show_string != "undefined") {
				$('#modal_zf_results').slideDown().children('strong').html(show_string);
			}
		}
	);
}

function load_modal(modal_url, shade_exit_url ) {
	//create background shade
	var shade = modal_shade();
	
	//add content div to the dom
	$('body').prepend('<div id="modal_content" style="position: absolute;"></div>');

	//make it invisible, inject the remote modal markup into it, then fade it in
	$('#modal_content').css({
		'visibility'		: 'hidden',
		'opacity'			: 0
	}).load(modal_url, null, function(){
		//ie6 doesn't like position fixed, so just use absolute:
		if (is_ie6()) $(this).css('position', 'absolute');
		else $(this).css('position', 'fixed');

		$(this).css({
			'left'			: '50%',
			'top'			: (window.innerHeight || document.documentElement.clientHeight)/2,
			'background'	: 'white',
			'z-index'		: '1001',
			'visibility'	: 'visible',
			'margin-left'	: ($(this).width()/-2) -3,
			'margin-top'	: ($(this).height()/-2) -3,
			'border'		: '3px solid #BFBFBF'
		}).animate({ opacity: 1 }, 'fast');
	});
	
	//give the background shade click instructions:
	$(shade).click(function(){
		$('#modal_content').animate({ opacity: 0 }, function() { $(this).remove(); });
		$(this).animate({ opacity: 0 }, function() { $(this).remove(); });
		if (shade_exit_url) document.location = shade_exit_url;
	});
}

function modal_shade(destroyFlag) {
	if (typeof destroyFlag != 'undefined' && destroyFlag == 'destroy') {
		$('#modal_shade').remove();
		return;
	}
	
	$('#modal_shade').remove();

	$('body').prepend('<div id="modal_shade"></div>');
	
	if (!isNaN(window.scrollMaxY)) var height = window.innerHeight + window.scrollMaxY;
	else if (!isNaN(document.height)) var height = document.height;
	else if (!isNaN(document.documentElement.scrollHeight)) var height = document.documentElement.scrollHeight;
	else var height = '100%';
	
	$('#modal_shade').css({
		'position'		: 'absolute',
		'left'			: '0',
		'top'			: '0',
		'width'			: '100%',
		'height'		: height,
		'opacity'		: '0',
		'z-index'		: '1000',
		'background'	: 'black'
	}).animate({ opacity: 0.75 }, 'slow');
	
	return $('#modal_shade')[0];
}

/* !Modal */

function scroll_to(obj_id) {
	var destination = $('#'+obj_id);	
	$('html,body').animate({ scrollTop: destination.offset().top }, "slow");
	
	$('#info_faqcol strong').css('color', 'black');
	destination.css('color', 'red');
}

function scroll_top() {
	$('html,body').animate({scrollTop: 0}, 'slow');
}

function close_menus() {
	//if we're using ie6, show the select menus that were previously hidden when the nav opened
	if (is_ie6()) $('select').css('visibility', 'visible');

	$('.header_navdrop').hide();
	window.menuTimer = false;
}

function scrollLeftNav() {
	//if initial leftnav offset hasn't been cached, do so:
	if (typeof init_leftnav_offset == "undefined") init_leftnav_offset = $('#leftnav').offset().top;
	
	var footerOffset = $('#footer').offset().top;		
	var scrolledAmount = window.pageYOffset || document.documentElement.scrollTop || 0;

	//if scrolled amount has exceeded the top of the left nav, pin it to the top of the screen.
	if (init_leftnav_offset < scrolledAmount && scrolledAmount < footerOffset - $('#leftnav').height()) {
		$('#leftnav').css({
			position: 'fixed',
			top: '-5px'
			//right: '50px'
		});

		//ie6 doesn't do position: fixed, so fall back to relative
		if ($('#leftnav').offset().top <= init_leftnav_offset) {
			$('#leftnav').css({
				position: 'relative',
				top: (scrolledAmount - init_leftnav_offset + 10),
				left: 10
			});
		}
	}
	//if the bottom of the nav is about to collide with the footer, unpin it
	else if (scrolledAmount > footerOffset - $('#leftnav').height()) {
		$('#leftnav').css({
			top: $('#footer').offset().top - $('#leftnav').height() - init_leftnav_offset,
			position: 'relative'
		});
	}
	//if the normal nav location is in view, unpin the nav
	else {
		$('#leftnav').css('position', '');
	}
}

function tell_friend(bpid, version) {	
	$.post(
		'/global/modals/tell_a_friend.php',
		{
			'bpid': bpid,
			'version': version,
			'f_n': $('#modal_taf_friend_name').val(),
			'f_e': $('#modal_taf_friend_email').val(),
			'y_n': $('#modal_taf_your_name').val(),
			'y_e': $('#modal_taf_your_email').val(),
			'msg': $('#modal_taf_your_message').val(),
			'e_m': $('#modal_taf_email_me').is(':checked')
		},
		function(data) {
			if (data == 'success') {
				$('#modal_taf_forms').slideUp('slow');
				$('#modal_taf_success').slideDown('slow');
			}
			else {
				alert('Email could not be sent, please try again.');
			}
		}
	);
}



function enter_promo_code(cart_hash) {	
	$.post(
		'/global/modals/enter_promo_code.php',
		{
			'cart_hash': cart_hash,
			'new_promo_code': $('#modal_new_promo_code').val()
		},
		function(data) {
			if (data == 'false') {
                // $('#modal_epc_forms').slideUp('fast'); 
				$('#modal_epc_failure').slideDown('fast');
			}
			else {
                $('#modal_epc_success').prepend(data);

			    $('#modal_epc_forms').slideUp('fast');
				$('#modal_epc_forms2').slideUp('fast');
				$('#modal_epc_failure').slideUp('fast');
				$('#modal_epc_success').slideDown('fast');
			}
		}
	);
}


function is_ie6() {
	return (window.navigator.userAgent.search(/MSIE 6/) > 0);
}

/* window.location upgrades */
window.location.queryVars = function() {
	var query = this.search.substr(1);
	
	var query_vars = query.split('&');
	var query_hash_table = [];
	for (var i = 0; i < query_vars.length; i++) {
		var key_val = query_vars[i].split('=');
		query_hash_table[key_val[0]] = key_val[1];
	}
	
	return query_hash_table;
}

window.location.hashVars = function() {
	var hash = this.hash.substr(1);
	
	var hash_vars = hash.split('&');
	var hash_hash_table = [];
	for (var i = 0; i < hash_vars.length; i++) {
		var key_val = hash_vars[i].split('=');
		hash_hash_table[key_val[0]] = key_val[1];
	}
	
	return hash_hash_table;
}

window.location.isSecure = function() { return (this.protocol == 'https:'); }
window.location.dirName = function(dir_level) { return window.location.pathname.split('/')[dir_level]; }
window.location.fileName = window.location.dirName( window.location.pathname.split('/').length - 1 );
