// SuperFit.co.uk
// AJAX Basket & Overlay Engine
// Uses 2 slightly different techniques
// 1 For Grid View
// 1 For product view to allow configurable products to be added to basket

// Release Version 1.0
// 18th October 2010


// prepare the form when the DOM is ready 
var basket_in_action = false;
var overlayTimeoutId = 0;
var perfect_partner = false;
// Useful javascript routines

// Simple StrPos function for Javascript
	function strpos (haystack, needle, offset) {
	var i = (haystack+'').indexOf(needle, (offset ? offset : 0));
	return i === -1 ? false : i;
	}
	
// Simple Left function for Javascript	
	function Left(str, n){
	if (n <= 0)
	    return "";
	else if (n > String(str).length)
	    return str;
	else
	    return String(str).substring(0,n);
	
}

// Simple Right function for Javascript
function Right(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str; 
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}



jQuery(document).ready(function() { 
jQuery('#basket').wrap('<div id="basket_content" />');
jQuery('#ajax_basket').hide();
		
	  var options = { 
        target:        '#ajax_basket',   // target element(s) to be updated with server response 
        beforeSubmit:  showRequest,  // pre-submit callback 
        success:       showResponse  // post-submit callback 
 
        // other available options: 
        //url:       url         // override for form's 'action' attribute 
        //type:      type        // 'get' or 'post', override for form's 'method' attribute 
        //dataType:  null        // 'xml', 'script', or 'json' (expected server response type) 
        //clearForm: true        // clear all form fields after successful submit 
        //resetForm: true        // reset the form after successful submit 
        // $.ajax options can be used here too, for example: 
        // timeout:   000 
    } ;
	jQuery('#perfect_partner_form').ajaxForm(options);
	jQuery('#product_addtocart_form').ajaxForm(options);
}); 
 
// pre-submit callback 
// Main Handler for Adding item to basket on Product Page
function showRequest(formData, jqForm, options) { 
	if (validateForm()) {
		if( basket_in_action == true ){
			alert("Please wait...An item is being added to your basket.");
			return false;
		}else{
			//check for perfect partner
			jQuery.each(formData, function(e, f){
				var is_partner = f.name.indexOf('partners');
				if(is_partner != -1){
					perfect_partner = true;
				}

			});
		
			basket_action_main("product",0,"");
			return true;
		}
	}else{
		return false;
	}
} 
 
// post-submit callback 
function showResponse(responseText, statusText)  { 	
basket_action_process_product();
	//grayOut(false);
    // for normal html responses, the first argument to the success callback 
    // is the XMLHttpRequest object's responseText property 
    // if the ajaxSubmit method was passed an Options Object with the dataType 
    // property set to 'xml' then the first argument to the success callback 
    // is the XMLHttpRequest object's responseXML property 
 
    // if the ajaxSubmit method was passed an Options Object with the dataType 
    // property set to 'json' then the first argument to the success callback 
    // is the json data object returned by the server 
	// $('#ajax_loader').fadeOut('fast');
    // jQuery('#basket_wrapper').fadeOut('slow');	
//	handle_BasketResponse("product","");	

 }
 

 // Basket Action Invoke

function basket_action_main(pageType,butId,locString)
	{
		if( check_basket_action_state() == false )
			{
			return false;
			}
			else
			{
			basket_in_action = true;
			
			if(pageType == "product")
				{
				locString = "";
				}
			toggle_buy_buttons(pageType,butId,"on");
			if( pageType == "grid")
				{
				basket_action_process_grid(butId,locString);
				}
				if( pageType == "related")
				{
				basket_action_process_related(butId,locString);
				}
			}
	}
	
// Process Grid Call
function basket_action_process_grid(butId,locString)
	{
	jQuery.post(locString,function(data) { 
		verify_post_data = check_post_data_message(data);
		build_screen_messages(verify_post_data,data);
		toggle_buy_buttons("grid",butId,"off");	
		});
	}
// Process related Call
function basket_action_process_related(butId,locString)
	{
	jQuery.post(locString,function(data) { 
		verify_post_data = check_post_data_message(data);
		build_screen_messages(verify_post_data,data);
		toggle_buy_buttons("related",butId,"off");	
		});
	}
	
// Process Product Page Call
function basket_action_process_product()
	{
	pp_data = jQuery('#ajax_basket').html();
	verify_post_data = check_post_data_message(pp_data);
	build_screen_messages(verify_post_data,pp_data);
	toggle_buy_buttons("product",0,"off");	
	}
	
	
	// Entry point for Grid Buy Button Call
	
	function action_grid_button(butId,locString)
		{
		basket_action_main("grid",butId,locString)
	//	basket_action_process_grid("grid",butId,locString)
		}

	
  // If we are already performing a basket action then alert the customer and do nothing

 function check_basket_action_state()
		{
		if( basket_in_action == true )
			{
			alert("Please wait...An item is being added to your basket.");
			return false;	
			}		
		}
		
	//Fade Out Buttons
	function toggle_buy_buttons(pageType,butId,switchType){
		
		//turn ajax loaders on
		if( switchType == "on" ){
			if(perfect_partner){
				jQuery('#perfect_submit').removeClass('buyBoth_btn buyAll_btn')
				jQuery('#perfect_submit').addClass('buy_btn_perfect_wait');
			}else{
				if( pageType == "product" ){
					for(var i=0; i<10; i++) {
						jQuery('#buy_submit_button'+i).removeClass('buy_btn');
						jQuery('#buy_submit_button'+i).addClass('buy_btn_wait');
					}
				}
				if( pageType == "grid" ){
					jQuery('#bbg_'+butId).removeClass('buy_btn');
					jQuery('#bbg_'+butId).addClass('buy_btn_wait');
				}
				
				if( pageType == "related" ){
					jQuery('#bbg_'+butId).removeClass('buy_sml');
					jQuery('#bbg_'+butId).addClass('buy_sml_wait');
				}
			}
		}
		
		//turn ajax loaders off
		if( switchType == "off"){
			if(pageType == "product" ){
				jQuery('#perfect_submit').removeClass('buy_btn_perfect_wait');
				jQuery('#perfect_submit').addClass('buyBoth_btn');
				for(var i=0; i<10; i++) {
					jQuery('#buy_submit_button'+i).removeClass('buy_btn_wait');
					jQuery('#buy_submit_button'+i).addClass('buy_btn');
				}
			}
			if( pageType == "grid" ){
				jQuery('#bbg_'+butId).removeClass('buy_btn_wait');
				jQuery('#bbg_'+butId).addClass('buy_btn');
			}
			
			if( pageType == "related" ){
				jQuery('#bbg_'+butId).removeClass('buy_sml_wait');
				jQuery('#bbg_'+butId).addClass('buy_sml');
			}
			basket_in_action = false;
		}
	}
	

function check_post_data_message(data_message)
	{
	data_message = data_message.toLowerCase();
		// Correct basket message should contain a double || in it.
		pipe_point = data_message.indexOf("||");
		cookies_disabled = data_message.indexOf("what are cookies");
		if(cookies_disabled > 1 )
			{
			return "cookies";
			}	
		if(!data_message || data_message == "" || data_message.length < 5 )
			{
			return "empty";
			}
		if(!pipe_point || pipe_point == 0 || pipe_point == -1 )
			{
			return "nopipes";
			}	
	 // Basket message should never be longer than 2500 bytes, if it is then error.	
	// If the basket message can genuinely be longer than this then raise this threshold.
		/*if( data_message.length > 2500 )
			{
			return "longstring";
			}*/
			return "passed";
		}
		
	function build_screen_messages(verify_post_data,post_data)
		{
		if( verify_post_data == "cookies" )
				{
				basket_overlay_message = "You seem to have cookies disabled. Please enable to continue shopping. Refresh and try again";
				render_overlay(basket_overlay_message,"cookies");
				}
			if( verify_post_data == "pipes" || 	verify_post_data == "empty" || verify_post_data == "longstring" )
				{
				basket_overlay_message = "Error encountered. Please try again";
				render_overlay(basket_overlay_message,"error");
				}
			if( verify_post_data == "passed" )
				{
				basket_overlay_message = split_basket_message_dialogue_box(post_data);
				basket_box_html = split_basket_message_basket_controller(post_data);
				render_overlay(basket_overlay_message,"passed");
				update_basket_box(basket_box_html);
				}
		}
		
	// Get message for dialogue box overlay	
	function split_basket_message_dialogue_box(basket_message)
		{
		pipe_point = strpos(basket_message,'|',0);
		dialogue_box_message = Left(basket_message,pipe_point);
		return dialogue_box_message;
		}
		
	// Get message for basket controller at top of the page	
	function split_basket_message_basket_controller(basket_message)
		{
		pipe_point = strpos(basket_message,'|',0);
		basket_controller_message = Right(basket_message,(basket_message.length-pipe_point)-2);
		return basket_controller_message;
		}	
		
	function update_basket_box(basket_box_html)
		{
		jQuery('#basket_content').empty(); // Empty the basket box
		jQuery('#basket_content').hide();
		jQuery('#basket_content').html(basket_box_html);
		jQuery('#basket_content').fadeIn('slow');
		}
		
	function render_overlay(basket_overlay_message,action_outcome)
		{
		clearTimeout(overlayTimeoutId);
		jQuery('#basket_dialogue_box').empty();
		jQuery('#basket_dialogue_overlay').show();
		jQuery('#basket_dialogue_box').fadeIn("800");
		jQuery('#basket_dialogue_box').append(render_message(basket_overlay_message,action_outcome));
		
		jQuery(document).ready(function() {
			jQuery('#overlay_close').click(function() {
					clearTimeout(overlayTimeoutId); 
					clear_overlay(); 
				});
		});
		overlayTimeoutId = setTimeout( function() { 	clear_overlay(); },10000 );
		}
		
	function render_message(basket_overlay_message,action_outcome)
		{
		lowercase_basket_overlay_message = basket_overlay_message.toLowerCase();
		bdo_msg_class = "";
		bdo_title_class = "";
		bdo_title_string = "";
		if(action_outcome == "passed")
			{
			outcome_success = lowercase_basket_overlay_message.indexOf("successfully added to your shopping");
			outcome_nostock = lowercase_basket_overlay_message.indexOf("not available");
			//alert(outcome_success+' '+outcome_nostock);
			
			if( outcome_success > 1 )
				{
				bdo_title_class = "basket_dialogue_overlay_title_success";
				bdo_title_string = "Thank You";
				bdo_msg_class = "basket_dialogue_overlay_msg_success";
				if(perfect_partner){
					tmp_success_msg = 'Items were successfully added to your cart';
					perfect_partner = false;
				}else{
					tmp_success_msg = basket_overlay_message;
					tmp_success_msg = tmp_success_msg.replace("success:","");
					tmp_success_msg = tmp_success_msg.replace("was successfully added to your shopping cart.","");
					tmp_success_msg = tmp_success_msg.replace("was successfully added to your shopping basket.","");
					tmp_success_msg = tmp_success_msg.replace("was successfully added to your basket.","");
				}
				basket_overlay_product = tmp_success_msg;
				basket_overlay_message = '<div id="basket_dialogue_overlay_product">' + basket_overlay_product + '</div>';
				basket_overlay_message += '<div id="basket_dialogue_overlay_msg_success">has been added to your shopping basket.</div>';
				}
				
			if( outcome_nostock > 1 )
				{
				bdo_title_class = "basket_dialogue_overlay_title_stock";
				bdo_title_string = "Sorry...";
				bdo_msg_class = "basket_dialogue_overlay_msg_error";
				basket_overlay_message = '<div id="basket_dialogue_msg_error">We have just gone out of stock of that item</div>';
				}
			}
		if( action_outcome == "cookies" )
			{
			bdo_title_class = "basket_dialogue_overlay_title_error";
			bdo_title_string = "Ooops...";
			basket_overlay_message = '<div id="basket_dialogue_msg_error">' + basket_overlay_product + '</div>';
			}
		if( bdo_title_string == "" )
			{
			action_outcome = "error";
			}
			
		if( action_outcome == "error" )
			{
			bdo_title_class = "basket_dialogue_overlay_title_error";
			bdo_title_string = "Sorry...";
			basket_overlay_message = '<div id="basket_dialogue_msg_error">' + basket_overlay_product + '</div>';
			}
		
		m_html = '<div id="basket_dialogue_overlay_wrapper"><div id="basket_dialogue_overlay_main_area">';
		m_html += '<div id="'+bdo_title_class+'">' + bdo_title_string + '</div>';
		m_html += basket_overlay_message;
		m_html += '</div>';
		m_html += '<div id="overlay_buttons"><a class="form-button-alt left" href="../../../../../../../../../../checkout/cart"></a><a class="form-button-alt right" href="#" onclick="clearTimeout(overlayTimeoutId); clear_overlay();"></a></div>';
		m_html += '</div>';
		return m_html;
		}
	
	jQuery(document).ready(function() {
		jQuery('#basket_dialogue_overlay').click(function() {clear_overlay();});
	});	
	
	function clear_overlay() {
		jQuery('#basket_dialogue_overlay').hide(); 
		jQuery('#basket_dialogue_box').fadeOut(1500); 
	}
	

	// Basket Action Invoke for configs
	function action_grid_button_config(butId, locString)
	{
		var addConfig = new VarienForm('addConfigForm_'+butId);
		if (addConfig.validator.validate()) {
			if( check_basket_action_state() == true ){
				alert("Please wait...An item is being added to your basket.");
				return false;
			}else{
				basket_in_action = true;
				toggle_buy_buttons("grid",butId,"on");
				basket_action_process_grid_config(butId,locString);
			}
		}else{
			return false;
		}
	}
	
	// Process Grid Call when there is a configurable option
	function basket_action_process_grid_config(butId,locString)
	{
		var configPost = $("addConfigForm_"+butId).serialize();
		jQuery.ajax({
			type: "POST",
			url: locString,
			data: configPost,
			success: function(data){ 
				verify_post_data = check_post_data_message(data);
				build_screen_messages(verify_post_data,data);
				toggle_buy_buttons("grid",butId,"off");	
			}
		});
	}
	
//SuperFit Homepage slideshow js
//Ben Cole
//25th November 2010
	
		jQuery(document).ready(function() {
			if(jQuery('#featured').length>0){
				jQuery('#featured').tabs({fx:{opacity: 'toggle'}}).tabs('rotate', 5000, true);
				
				jQuery("#featured").hover(
					function() {
						jQuery("#featured").tabs("rotate",0,true);
					},
					function() {
						jQuery("#featured").tabs("rotate",5000,true);
					}
				);


				jQuery(".slider-lbl1").hover(
					function() {
						jQuery("#featured").tabs("select", '1');
					}
				);
				jQuery(".slider-lbl2").hover(
					function() {
						jQuery("#featured").tabs("select", '2');
					}
				);
				jQuery(".slider-lbl3").hover(
					function() {
						jQuery("#featured").tabs("select", '3');
					}
				);
				jQuery(".slider-lbl4").hover(
					function() {
						jQuery("#featured").tabs("select", '4');
					}
				);
			}
		})
	
	//GA JS tracking call - js page event tracking fix for cached on click url's
	//Ben Cole
	//25th November 2010

	function pageEventTracking(element, category, showUrl){
		var current_url = location.href;
		if(showUrl){
			_gaq.push(['_trackEvent', element, category, current_url]);
		}else{
			_gaq.push(['_trackEvent', element, category]);
		}
	}

	//clubs and socities sign up page on click and overlay functions
	//Ben Cole
	//23rd Feb 2011
	
	jQuery(document).ready(function() {
		//click event for selecting a logo
		jQuery('#clubs_logos li').click(function() {
			
			//reset all logos by remove class and unchecking all boxes
			jQuery('#clubs_logos li').each(function() {
				var current = jQuery(this);
				current.find('input[type ="checkbox"]').attr('checked', false);
				current.removeClass('active');
			});
			
			//add active class and check the checkbox to the selected logo
			var logo_li = jQuery(this);
			logo_li.addClass('active');
			var logo = logo_li.find('input[type ="checkbox"]');
			logo.attr('checked', true);
		});
	
		//clear overlay click events
			jQuery('#clubs_overlay_close').click(function() {
				clearClubsOverlay();
			}); 
			
			jQuery('#close_topCorner').click(function() {
				clearClubsOverlay();
			}); 
			
			jQuery('#club_dialogue_overlay').click(function() {
				clearClubsOverlay();
			}); 
	});
	
	function bookmark_us(url, title){
		if (window.sidebar) {
			window.sidebar.addPanel(title, url, "");
		}else if(window.opera && window.print){ 
			var elem = document.createElement('a');
			elem.setAttribute('href',url);
			elem.setAttribute('title',title);
			elem.setAttribute('rel','sidebar');
			elem.click();
		} else if(window.chrome){
			alert('Press ctrl+D to bookmark (Command+D for macs) after you click Ok');
		} else if(document.all) {
			window.external.AddFavorite(url, title);
		}
	}
	
	function clearClubsOverlay() {
		var code = jQuery('.vouchercode span').text();
		pageEventTracking('clubs', code, false)
		jQuery('#club_dialogue_overlay').hide(); 
		jQuery('#club_dialogue_box').fadeOut(1500); 
	}

	
//SuperFit Customer Review Widget js
//Mark Campbell
//03rd Mar 2011

    jQuery(document).ready(function() {

        jQuery('#customer_review_belt').cycle({ 
            fx:         'fade', 
            speed:      500,
            pause:      1,
            timeout:    60000,
			next:	   '#customer_review a#btnNextReview'
        });
    });
	
	//Ben Cole
	//scrolling reviews
	//28th Oct 2011
	jQuery(document).ready(function() {

        jQuery('#prod_customer_reviews').cycle({ 
            fx:         'fade', 
            speed:      200,
            pause:      1,
            timeout:    10000,
			next:	   'a#prodNextReview'
        });
    });

//Ben Cole
//14th March 2011
//Newsletter auto generator
jQuery(document).ready(function() { 
	if(jQuery('#sortable').length >0){
			jQuery( "#sortable" ).sortable();
	}
});

function addProd(){
	var count = jQuery("#count").val();
	var new_li = '<li id ="prodLI_'+count+'" class="ui-state-default">Product Sku '+count+'<input type="text" name="sku['+count+']" value="" id="prod_'+count+'"/></li>';
	jQuery("#sortable").append(new_li);
	var new_count =++count;
	jQuery("#count").val(new_count);
}

function deleteProd(){
	var count = jQuery("#count").val();
	var new_count =--count;
	jQuery("#prodLI_"+count).remove();
	jQuery("#count").val(new_count);
}


//Ben Cole
//19th Oct 2011
//ask trainer js
jQuery(document).ready(function() {
	//click event for selecting a logo
	jQuery('#trainer_logos li').click(function() {
		
		//reset all logos by remove class 
		jQuery('#trainer_logos li').each(function() {
			var current = jQuery(this);
			current.removeClass('active');
			current.addClass('trainer_logo');
		});
		
		//add active class to the selected logo
		var logo_li = jQuery(this);
		logo_li.addClass('active');
		logo_li.removeClass('trainer_logo');
		
		//show the correct trainer bio
		var bio_name= logo_li.attr("id");
		var show_bio = "bio_"+bio_name;
		jQuery('.bio').each(function() {
			var bio = jQuery(this);
			var bio_id = bio.attr("id");
			jQuery("#"+bio_id).hide();
		});
		jQuery("#"+show_bio).show();
		
		//change name of trainer in question
		bio_name = bio_name.replace("_", " ")
		jQuery("#trainer_name").html(bio_name);
		
		//change hidden trainer id
		var trainer_id = logo_li.attr("name");
		jQuery("#trainer_id").val(trainer_id);
	});
});

	
	
