//  raj base

//  images

//  masonry

function raj_masonry()  {
    
    if($(".masonry").length)  {
        
        $(".masonry").masonry({

            columnWidth: 1,
            isAnimated: false,
            itemSelector: '.masonry-brick'

        });
        
    }
 
}

//

function raj_masonry_thumbs()  {
    
    if($(".masonry").length)  {
        
        switch(new_size)	{

            case "MOBILELAND":
            case "PAD":
            case "DESKTOP":
            case "SUPER":

                h_image_switch_folders(".masonry-brick-2x2 .raj_img_thumb_large", "small", "medium");
                h_image_switch_folders(".masonry-brick-1x2 .raj_img_thumb_large", "small", "medium");

            break;

        }
        
    }
 
}

//

function h_image_fit(img_class)	{
	
    if($(img_class).length)  {
    
        $( img_class ).each(function() {

            var el	=	$(this);
            var asp	=	parseFloat(el.attr("data-asp"));
            var par	=	el.parent().parent();	
            var cw	=	parseFloat(par.width());
            var ch	=	parseFloat(par.height());
            var nw	=	cw;	
            var nh	=	nw/asp;

            if(nh<ch)	{

                nh	=	ch;
                nw	=	nh*asp;

            }	

            var nt		=	(ch/2)-(nh/2);
            var nl		=	(cw/2)-(nw/2);

            el.attr("height", nh).attr("width", nw);
            el.parent().css("height", nh+"px").css("width", nw+"px").css("left", nl+"px").css("top", nt+"px");		

        });	
        
    }

}

//	preload

function h_image_preload(s, callback){
        
	var im	=	[];
	var li	=	0;
	var ic 	= 	s.length;
	
	if(ic==0)	{
		
		callback();
		
	}
	
	for (var i=0; i < ic; i++) {
		
		im[i] = new Image();
		
		im[i].onload = function(){
			
			if (++li >= ic) {
				
				callback();
				
				return;
				
			}
			
		};
		
		im[i].src = s[i]; 
		
	}
		
}

//

function h_image_retina()	{
	
	var im	= 	jQuery( 'img.r2x' ).get();
	var it	=	im.length;

	for (var i=0,l=it; i<l; i++) {
		
		var s = im[i].src;
	
		s = s.replace(/\.(png|jpg|gif)+$/i, '@2x.$1');
	
		im[i].src = s;
				
	}

}

//

function h_image_force_retina()	{
	
	var im	= 	jQuery( 'img.forcer2x' ).get();
	var it	=	im.length;

	for (var i=0,l=it; i<l; i++) {
		
		var s = im[i].src;
	
		s = s.replace(/\.(png|jpg|gif)+$/i, '@2x.$1');
	
		im[i].src = s;
				
	}

}

//

function h_image_switch_folders(id, sf, df)	{
	
	$( id ).each(function() {
		
		var src = $(this).attr("src");
		
		src = src.replace('/'+sf+'/','/'+df+'/');
		
		src = $(this).attr("src", src);
		
	});			

}

//

function h_image_switch_order_folders(id, sf, df, order)	{
	
	$( id ).each(function() {
		
		var el	=	$(this);
		var ord	=	el.attr('data-o');
		
		if(order==ord)	{
		
			var img	=	el.find('img');
			var src = 	img.attr("src");

			src = src.replace('/'+sf+'/','/'+df+'/');

			img.attr("src", src);

			window.setTimeout(h_image_switch_order_other_folders(id, sf, df, order), 2000);
			
			return;
			
		}
		
	});			

}

//

function h_image_switch_order_other_folders(id, sf, df, order)	{
	
	$( id ).each(function() {
		
		var el	=	$(this);
		var ord	=	parseInt(el.attr('data-o'));
		
		if(order!=ord)	{
		
			var img	=	el.find('img');
			var src = 	img.attr("src");

			src = src.replace('/'+sf+'/','/'+df+'/');

			img.attr("src", src);
			
			return;
			
		}
		
	});			

}

//

function raj_show_image(img)	{
	
	img	=	img.split('/').pop();
	
	window.open(pr+'show_raj_image.php?token='+p_token+'&img='+img, '_top');
	
}

//

//	raj useful functions

function array_is_empty(the_array)	{
	
	if (typeof the_array !== 'undefined' && the_array.length > 0) {
		
		return false;
		
	}	
	
	return true;

}

//

function is_normal_integer(str) {
	
    return /^\+?(0|[1-9]\d*)$/.test(str);
	
}

//


function raj_mobile_menu()	{
	
	if($("#mobile_menu_image").length)  {
    
        $("#mobile_menu_image").click(function( event )	{

            event.preventDefault();

            if($("#raj_menu_items").css("display")==="none")	{

                $( "#raj_menu_items" ).slideDown(250, function(){

                    h_resize(function(){h_resize(function(){});});

                });			

            }	else	{

                $( "#raj_menu_items" ).slideUp(250, function(){

                    h_resize(function(){h_resize(function(){});});

                });				

            }

        });
        
    }
	
}

//

function raj_mini_search()	{
	
    if($("#mobile_mini_search").length)  {
    
        $("#mobile_mini_search").click(function( event )	{

            event.preventDefault();

            if($("#search_mini").css("display")==="none")	{

                $( "#search_mini" ).slideDown(250, function(){

                    h_resize(function(){h_resize(function(){});});

                });			

            }	else	{

                $( "#search_mini" ).slideUp(250, function(){

                    h_resize(function(){h_resize(function(){});});

                });				

            }

        });
        
    }
	
}

//

function raj_resize_menu()	{
	
    if($("#raj_menu").length)  {
    
        switch(new_size)	{

            case "MOBILE":
            case "MOBILELAND":

                $("#raj_menu_items").insertAfter("#raj_menu_bottom").hide();
                $("#menu_text").insertBefore("#mobile_mini_search");

                //	mini search

                $("#search_mini").insertAfter("#raj_menu_items").hide();

            break;

            default:

                $("#raj_menu_items").insertBefore("#raj_menu_bottom").show();
                $("#menu_text").insertAfter("#mobile_menu");

                //	mini search

                $("#search_mini").appendTo('.pcvs').show();

            break;

        }
        
    }

}

//

//	raj form

var form_errors = [];

//	form common here

$(document).on("submit", "form", function(e){
	
    e.preventDefault();
	
    return  false;
	
});

//

//  spinner

function init_raj_spinner(id)	{
	
	var min_val	=	$( "#"+id ).attr("data-min_val");
	var max_val	=	$( "#"+id ).attr("data-max_val");

    $( "#"+id ).spinner({
      spin: function( event, ui ) {
        if ( ui.value > max_val ) {
          $( this ).spinner( "value", min_val );
          return false;
        } else if ( ui.value < min_val ) {
          $( this ).spinner( "value", max_val );
          return false;
        }
      }
    });

}


// datepicker

function init_raj_datepicker(id, date_format)	{
	
	var min_date	=	$( "#"+id ).attr("data-min_val");	
	var max_date	=	$( "#"+id ).attr("data-max_val");
	
	$( "#"+id ).datepicker({
		
	  dateFormat: date_format, minDate: min_date, maxDate: max_date
		
	});
	
}

// radio_group

function init_raj_radio_group(id, icons)	{
	
    $( "#"+id+" > .rfrgi" ).checkboxradio({
		
      icon: icons
		
    });
	
}


function init_raj_form_product_options_button()	{
	
	$("#raj_product_components_email").click(function( event )	{
		
		event.preventDefault();
		
		var el	=	$("#raj_product_components_mailer_form_container");	
		
		if(el.css("display")=="none"){
			
			el.slideDown(250);

		}	else	{

			el.slideUp(250);	

		}
		
	});

}

//

function raj_form_display_errors(form_id, callback)	{
	
	var error_array			=	[];
	var error_field_type	=	"";
	var error_field			=	"";
	var error_text			=	"";
	
	for(var i = 0; i < form_errors.length; i++)	{
		
		error_array			=	[];
		error_array			=	form_errors[i].split("|");
		
		error_field			=	error_array[0];
		error_text			=	error_array[1];
		
		error_field_type	=	raj_form_get_field_type(form_id, error_field);
		
		raj_form_display_error(form_id, error_field, error_field_type, error_text);
		
	}

	callback();
	
}

//

function raj_form_display_error(form_id, error_field, error_field_type, error_text)	{
	
	switch(error_field_type)	{

		case 'spinner':
		case 'radio_group':
		case 'inline-checkbox':
		case 'inline-checkbox-start-checked':

			var input_el	=	$("#"+form_id).find('.rfe[name="'+error_field+'"]');
			var error_el	=	input_el.parent().next();
			
			
		break;
			
		default:

			var input_el	=	$("#"+form_id).find('.rfe[name="'+error_field+'"]');	
			var error_el	=	input_el.next();

	}
	
	error_el.find(".rferrortxt").html('<p>'+error_text+'</p>');

	error_el.slideDown(100);
	
}

//

function raj_form_get_field_type(form_id, field)	{
	
	var form 	=	$("#"+form_id);

	return form.find('.rfe[name="'+field+'"]').attr("data-t");
	
}

//

function raj_form_get_field_validation(form_id, field)	{
	
	var form 	=	$("#"+form_id);

	return form.find('.rfe[name="'+field+'"]').attr("data-v");
	
}

//

function raj_form_get_field_value(form_id, field)	{
	
	var form 	=	$("#"+form_id);

	return form.find('.rfe[name="'+field+'"]').val();
	
}

//

function raj_form_init(form_id)	{
	
	var form 			=	$("#"+form_id);	
	
	//	clear errors
	
	$("#"+form_id+" .rfe").each(function()	{
		
		var el				=	$(this);
		
		el.focus(function() 	{
			
			var error_field			=	el.attr("name");
			var error_field_type	=	raj_form_get_field_type(form_id, error_field);			

			switch(error_field_type)	{

				case 'spinner':
				case 'radio_group':
				case 'inline-checkbox':
				case 'inline-checkbox-start-checked':
					
					var error_el	=	el.parent().next();	
					
				break;

				default:

					var error_el	=	el.next();				

			}
			
			error_el.slideUp(100);
			
			//	slide up success or error
			
			$("#"+form_id+"_submit").next().slideUp(100);
			$("#"+form_id+"_submit").next().next().slideUp(100);
			
		});
		
	});
	
	//	radio groups
	
	$("#"+form_id+" input[type='radio']").on("change", function()	{
		
		var el	=	$(this);	
		
		el.parent().find(".rfe").val(el.val());
		
		//	error
		
		el.parent().next().slideUp(100);
		
		$("#"+form_id+"_submit").next().slideUp(100);

	});
	
	//	inline checkboxes

	$("#"+form_id+" .rfscb").on("change", function()	{
		
		var el			=	$(this);	
		var check_el	=	el.parent().find(".rfe");
		
		if(el.is(":checked"))	{
		   
		   	check_el.val("on");
		   
		}	else	{
			
			check_el.val("");
			
		}
		
		//	error
		
		el.parent().next().slideUp(100);
		
		$("#"+form_id+"_submit").next().slideUp(100);

	});

	//	reset for default values
	
	raj_form_reset(form_id);
	
		
}

//

function raj_form_init_submit(form_id, secondary_submit_item)	{
	
	//	unbind default
	
	$("#"+form_id+"_submit button"+secondary_submit_item).click(function(event) {
		
		var form			=	$("#"+form_id);
		
		if(raj_form_debug=='YES')	{
		   
			form.submit();

			return;		   
		   
		 }

  		event.preventDefault();
		
		var el				=	$(this);
		
		var form_handler	=	form.attr("action");
		var submit_div		=	$("#"+form_id+"_submit");	
		
		var form_valid		=	true;
		
		var form_data		=	"";
		
		//	loader
		
		raj_form_shield_up(form_id);
		
		//	submit, 2nd par debug mode
		
		raj_form_submit(form_id, raj_form_debug, function(form_valid){

			//console.log(form_valid);
			
			if(form_valid==true)	{
				
				raj_form_send(form_id);

				raj_form_reset(form_id);

			 }	else	{

				raj_form_display_errors(form_id, function(){

					raj_form_submit_error(form_id, 'Please check for errors in the form.');

				});

			}

		});

	});

}

//

function raj_form_reset(form_id)	{
	
	$("#"+form_id+" .rfe").each(function()	{

		var el				=	$(this);
		var type			=	el.attr("data-t");
		var default_value	=	el.attr("data-dv");
				
		switch(type)	{
			   
			case 'textbox':
			case 'textarea':
			case 'datepicker':
				
				el.val(default_value);
				
			break;

			case 'radio_group':
				
				el.val(default_value);
				
				var parent		=	el.parent();	
				var parent_id	=	parent.attr('id');	
				
				$("#"+parent_id+" .rfrgi").each(function()	{
					
					var ell		=	$(this);
					var ell_val	=	ell.val();
					
					if(ell_val==default_value)	{
					   
						ell.prev().addClass("ui-checkboxradio-checked ui-state-active");
					   
					}	else	{
						
						ell.prev().removeClass("ui-checkboxradio-checked ui-state-active");
						
					}

				});
				
			break;
				
			case 'inline-checkbox':

				el.val(default_value);
				el.parent().find(".rfscb").prop('checked', false);
				
			break;
				
			case 'inline-checkbox-start-checked':

				el.val(default_value);
				el.parent().find(".rfscb").prop('checked', true);
				
			break;			   
		}
		
	});

}

//

function raj_form_returns(form_id, form_return_data)	{
	
	var submit_div	=	$("#"+form_id+"_submit");	
	var notice_div	=	submit_div.next().next();
	
	//	basic
    
	switch(form_return_data['result'])	{
            
		case 'bad':
			
			raj_form_submit_error(form_id, form_return_data['bad_message']);
			
		break;
			
		default:
			
			switch(form_id)	{

				case 'raj_add_to_basket':
					
					$("#raj_add_to_basket").fadeOut(100, function(){
						
						$("#raj_product_buy").html('<p>ITEM ADDED TO YOUR BASKET.</p>');
						
					});
					
				break;
					
				default:
					
					notice_div.slideDown(100);	
					
				break;
				   
			}

		break;
		   
	}
	
	//	updates
	
	if(form_return_data['updates']!=="")	{
	   
	 	var updates	=	form_return_data['updates'].split("*");
		
		updates.forEach(raj_form_returns_update);
	   
	}
	
}

//


function raj_form_returns_update(currentValue)	{
	
	if(currentValue==="")	{
	   
	 	return;  
	   
	}
	
	//	format update_name|id|value
	
	var update			=	currentValue.split("|");

	var update_type		=	update[0];
	var update_id		=	update[1];
	var update_value	=	update[2];
	var update_value_2	=	update[3];
	
	switch(update_type)	{
		   
		case 'MINI_BASKET':
		
			update_mini_basket(update_value);	
			
		break;
			
		case 'SHOW_ADDRESS_CHOOSER':
			
			$("#checkout_address_choice").html(update_value);

			if($("#raj_checkout_choose_address_form").css("display")==="none")	{

				$("#raj_checkout_choose_address_form").slideDown(); 
				
				$("#find_address_buttons").slideUp();

			}
			
			var basket_vals		=	update_value_2.split("-");
			
			raj_checkout_update_basket_summary(basket_vals[0], basket_vals[1], basket_vals[2], basket_vals[3], basket_vals[4]);
			
		break;
			
		case 'INVALID_POSTCODE':
		
			var error_div	=	$("#raj_checkout_postcode").find(".rferror");
			
			error_div.find(".rferrortxt").text("This postcode could not be found.");
			
			error_div.slideDown();
			
		break;
			
		case 'CHECKOUT_UPDATE_BASKET_SUMMARY':

			var basket_vals		=	update_value_2.split("-");
			
			raj_checkout_update_basket_summary(basket_vals[0], basket_vals[1], basket_vals[2], basket_vals[3], basket_vals[4]);

		break;			
	
	}
	
}

//

function raj_form_send(form_id)	{
	
	var form				=	$("#"+form_id);
	var form_handler		=	form.attr("action");
	var form_data			=	"";
	var form_return_data	=	"";
	
	//	non standard data?
	
	switch(form_id)	{
		  
		//	product options etc ?
		
		default:
			
		form_data	=	form.serialize();	
		   
	}

    //  recaptcha
    
    if(form_id=='raj_contact')    {
       
        form_data=form_data+'&rctoken='+rc_token;    
       
    }
    
    if(form_id=='raj_request_quote')    {
       
        form_data=form_data+'&rctoken='+rc_token;    
       
    }
    
	//	go
	
    $.ajax({
		
        url: form_handler,
        type: 'post',
        dataType: 'json',
        data: form_data,
		cache: false,
		
        success: function(form_return_data) {
						
			$("#paypal_loader").hide();
			
			if(form_return_data['redirect']!=="NONE")	{
			   
			   	window.location.href=form_return_data['redirect'];
				
				return;

			}
			
			$(".raj_form_loader, #raj_shield").hide();
			
			raj_form_shield_down(form_id);
			
			raj_form_returns(form_id, form_return_data);
			
        },
		
		error: function(form_return_data)	{
		
			raj_form_submit_error(form_id, 'There was a technical error submitting the form. Please try again later.');
			
		}
		
    
	});

}

//

function raj_form_set_field_value(form_id, field, value)	{
	
	var form 	=	$("#"+form_id);

	form.find('.rfe[name="'+field+'"]').val(value);
	
}

//

function raj_form_shield_down(form_id)	{
	
	var submit_div	=	$("#"+form_id+"_submit");
	
	$("#raj_shield").hide();
	
	submit_div.find(".raj_form_loader").hide(); 
	
}

//

function raj_form_item_shield_down(form_id, form_item_name)	{
	
	var div	=	$("#"+form_id+" [name="+form_item_name+"]");
	
	$("#raj_shield").hide();
	
	div.parent().next().find(".raj_form_loader").hide(); 
	
}

//

function raj_form_item_shield_up(form_id, form_item_name)	{
	
	var div	=	$("#"+form_id+" [name="+form_item_name+"]");
	
	$("#raj_shield").show();
	
	div.parent().next().find(".raj_form_loader").show(); 
	
}

//

function raj_form_shield_up(form_id)	{
	
	var submit_div	=	$("#"+form_id+"_submit");
	
	$("#raj_shield").show();
	
	submit_div.find(".raj_form_loader").show(); 
	
}

//

function raj_form_submit(form_id, debug_mode, callback)	{
	
	var form_valid		=	true;
	
	if(debug_mode=='YES')	{
		
		callback(form_valid);
		
		return;
	   
	}
	
	raj_form_validate(form_id, function(form_valid)	{

		callback(form_valid);
		
	});
}

//

function raj_form_submit_error(form_id, error_text)	{
	
	var submit_div	=	$("#"+form_id+"_submit");
	
	raj_form_shield_down(form_id);
	
	submit_div.next().find(".rferrortxt").html('<p>'+error_text+'</p>');

	submit_div.next().slideDown(100);	
	
}

//

function raj_form_validate(form_id, callback)	{
	
	//	reset

	form_errors				=	[];

	var form 				=	$("#"+form_id);
	var field_array			=	[];
	var field				=	"";
	var field_value			=	"";
	var field_validation	=	"";
	var field_valid			=	true;

	//	get applicable fields
	
	$("#"+form_id+" .rfe").each(function()	{

	var el	=	$(this);

		field_array.push(el.attr("name")); 

	});

	//	validate

	for(var i = 0; i < field_array.length; i++)	{

		field				=	field_array[i];
		field_value			=	raj_form_get_field_value(form_id, field);
		field_validation	=	raj_form_get_field_validation(form_id, field);
		field_valid			=	raj_form_validate_item(field, field_value, field_validation);

		raj_form_set_field_value(form_id, field, field_value.trim());

	}

	callback(array_is_empty(form_errors));
	
}

//

function raj_form_validate_item(field, value, validation)	{
	
	value 				= 	value.trim();
	
	var valid_array		= 	validation.split("|");
	var valid			=	false;
	
	for(var i = 0; i < valid_array.length; i++)	{
		
		switch(valid_array[i])	{

			case 'EMAIL':

				var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    			
				valid	=	re.test(String(value).toLowerCase());	
				
				if(valid!==true)	{
					
					form_errors.push(field+"|Please enter a valid email address."); 

					return false;					

				}

			break;

			case 'MUST_BE_NUMBER':

				if(!is_normal_integer(value))	{

					form_errors.push(field+"|Please enter a number here."); 

					return false;

				}

			break;
				
			case 'MUST_AGREE':

				if(value=="")	{

					form_errors.push(field+"|Please tick the box if you wish to submit the form."); 

					return false;


				}

			break;
				
			case 'MUST_CHOOSE_OPTION':

				if(value=="")	{

					form_errors.push(field+"|Please choose an option."); 

					return false;

				}

			break;
				
			case 'NONE':
				
				return true;	
				
			break;
	
			case 'NOT_BLANK':

				if(value=="")	{

					form_errors.push(field+"|Please enter a value here."); 

					return false;

				}

			break;

			case 'NOT_BLANK_ADDRESS':

				if(value=="")	{

					form_errors.push(field+"|Please enter your address here."); 

					return false;

				}

			break;
				
			case 'NOT_BLANK_COUNTY':

				if(value=="")	{

					form_errors.push(field+"|Please enter your county here."); 

					return false;

				}

			break;
				
			case 'NOT_BLANK_DATE':

				if(value=="")	{

					form_errors.push(field+"|Please enter a date here."); 

					return false;

				}

			break;

			case 'NOT_BLANK_FIRST_NAME':

				if(value=="")	{

					form_errors.push(field+"|Please enter your first name here."); 

					return false;

				}

			break;
				
			case 'NOT_BLANK_NAME':

				if(value=="")	{

					form_errors.push(field+"|Please enter your name here."); 

					return false;

				}

			break;
				
			case 'NOT_BLANK_POSTCODE':

				if(value=="")	{

					form_errors.push(field+"|Please enter a postcode here."); 

					return false;

				}

			break;

			case 'NOT_BLANK_SECOND_NAME':

				if(value=="")	{

					form_errors.push(field+"|Please enter your second name here."); 

					return false;

				}

			break;
				
			case 'NOT_BLANK_TEXTAREA':

				if(value=="")	{

					form_errors.push(field+"|Please enter some text here."); 

					return false;

				}

			break;

			case 'NOT_BLANK_TOWN_CITY':

				if(value=="")	{

					form_errors.push(field+"|Please enter your town/city here."); 

					return false;

				}

			break;
				
			case 'QTY_MUST_BE_GREATER_THAN_ZERO':

				if(value<1)	{

					form_errors.push(field+"|Please enter a valid quantity."); 

					return false;

				}

			break;
				
			case 'QTY_MUST_BE_LESS_THAN_MAX':

				var max_qty	=	parseInt($("#"+field).attr('data-max_val'));
				
				if(value>max_qty)	{

					if(max_qty==1)	{
					   
					 	form_errors.push(field+"|Please enter a valid quantity. Only one item is allowed.");   
					   
					}	else	{
						
						form_errors.push(field+"|Please enter a valid quantity less or equal to "+max_qty+"."); 	
						
					}

					return false;

				}

			break;
				
			case 'QTY_MUST_BE_NUMBER':

				if(!is_normal_integer(value))	{

					form_errors.push(field+"|Please enter a number in the quantity field."); 

					return false;

				}

			break;
				
			case 'TELEPHONE':

				var phoneno	= /^(\s*[0-9]+\s*)+$/;	
				
				valid	=	phoneno.test(value);
				
				if(valid!==true)	{
					
					form_errors.push(field+"|Please enter a phone number here."); 

					return false;					

				}

			break;
				
		}
		
	}
	
	return true;
	
}

//

function recaptcha_contact(token) {
    
    rc_token    =   token;   
    
    $('#raj_contact_submit').show();
    
    raj_form_init_submit('raj_contact','');
    
    
}

function recaptcha_request_quote(token) {
    
    rc_token    =   token;   
    
    $('#raj_request_quote_submit').show();
    
    raj_form_init_submit('raj_request_quote','');
    
    
}
