/******************************************************************

	quick_search.js
	---------------
	
	Author:			Ashley Meadows
	Created:		09/03/2009
	Copyright:	© Ashley Meadows 2008-2009.
	Version:		1.0.0
	
	Description
	-----------
	
	quick search javascript class with ASHJAX
	
 ******************************************************************/
document.write('<script type="text/javascript" src="/js/ashjax.js"></script>');

var quick_search=
{
	// quick search configuration
	config:
	{
		now:0,
		loadtext:"Please Wait...",
		var_prefix:"se_",
		label_id:["Manufacturer", "Model", "Year", "Engine Size", "Body Type"],
		field_id:["product_ma", "product_mo", "product_yr", "product_es", "product_bt"],
		alert_msg:
		{
			cpwqs_ma:"Unfortunately, no vehicle model(s) could be found for the vehicle manufacturer selected.",
			cpwqs_mo:"Unfortunately, no vehicle year(s) could be found for the vehicle model selected.",
			cpwqs_yr:"Unfortunately, no vehicle engine size(s) could be found for the vehicle year selected.",
			cpwqs_es:"Unfortunately, no vehicle body type(s) could be found for the vehicle engine size selected."
		},
		discarded:
		{
			cpwqs_ma:[],
			cpwqs_mo:[],
			cpwqs_yr:[],
			cpwqs_es:[]
		},
		mandatory_fields:["product_ma", "product_mo"],
		mandatory_error:"Please select a vehicle manufacturer and model.",
		noval_regex:/null|novalue/g
	},
	
	// ajax requests
	request:
	{
		// Get Models
		model:function(combo_box)
		{
			var phase_id=1;
			
			if (combo_box.selectedIndex > 0)
			{
				quick_search.set_now(phase_id);
				quick_search.restart(quick_search.now());
				
				new ashjax(
				{
					//debug:true,
					script:"/includes/ajax_quick_search.php",
					method:"post",
					get_vars:["qsAction=model"],
					post_vars:["ma_id=" + combo_box.value],
					callback:quick_search.response.model
				});
			}
			else
			{
				quick_search.set_now(phase_id-1);
			};
		},
		
		// Get Years
		year:function(combo_box)
		{
			var phase_id=2;
			
			if (combo_box.selectedIndex > 0)
			{
				quick_search.set_now(phase_id);
				quick_search.restart(quick_search.now());
				new ashjax(
				{
					//debug:true,
					script:"/includes/ajax_quick_search.php",
					method:"post",
					get_vars:["qsAction=year"],
					post_vars:["ma_id=" + $_element("id", quick_search.config.field_id[0]).value, "mo_id=" + combo_box.value],
					callback:quick_search.response.year
				});
			}
			else
			{
				quick_search.set_now(phase_id-1);
			};
		},
		
		// Get Engine Sizes
		engine_size:function(combo_box)
		{
			var phase_id=3;
			
			if (combo_box.selectedIndex > 0)
			{
				quick_search.set_now(phase_id);
				quick_search.restart(quick_search.now());
				
				new ashjax(
				{
					//debug:true,
					script:"/includes/ajax_quick_search.php",
					method:"post",
					get_vars:[ "qsAction=engine_size"],
					post_vars:
					[
					 "ma_id=" + $_element("id", quick_search.config.field_id[0]).value,
					 "mo_id=" + $_element("id", quick_search.config.field_id[1]).value,
					 "yr_id=" + combo_box.value
					],
					callback:quick_search.response.engine_size
				});
			}
			else
			{
				quick_search.set_now(phase_id-1);
			};
		},
		
		// Get Body Types
		body_type:function(combo_box)
		{
			var phase_id=4;
			
			if (combo_box.selectedIndex > 0)
			{
				quick_search.set_now(phase_id);
				quick_search.restart(quick_search.now());
				
				new ashjax(
				{
					//debug:true,
					script:"/includes/ajax_quick_search.php",
					method:"post",
					get_vars:[ "qsAction=body_type"],
					post_vars:
					[
					 "ma_id=" + $_element("id", quick_search.config.field_id[0]).value,
					 "mo_id=" + $_element("id", quick_search.config.field_id[1]).value,
					 "yr_id=" + $_element("id", quick_search.config.field_id[2]).value,
					 "es_id=" + combo_box.value
					],
					callback:quick_search.response.body_type
				});
			}
			else
			{
				quick_search.set_now(phase_id-1);
			};
		},
		
		// Store Vehicle
		storeVehicle:function()
		{
			for(var i=0; i<quick_search.config.mandatory_fields.length; i++)
			{
				if(!$_element("id", quick_search.config.mandatory_fields[i]).selectedIndex)
				{
					alert(quick_search.config.mandatory_error);
					return;
				};
			};
			
			new ashjax(
			{
				//debug:true,
				script:"/includes/ajax_quick_search.php",
				method:"post",
				get_vars:[ "qsAction=storeVehicle"],
				post_vars:
				[
				 "ma_id=" + $_element("id", quick_search.config.field_id[0]).value,
				 "mo_id=" + $_element("id", quick_search.config.field_id[1]).value,
				 "yr_id=" + $_element("id", quick_search.config.field_id[2]).value,
				 "es_id=" + $_element("id", quick_search.config.field_id[3]).value,
				 "bt_id=" + $_element("id", quick_search.config.field_id[4]).value
				],
				callback:quick_search.response.storeVehicle
			});
		},
		
		// Reset Vehicle
		resetVehicle:function()
		{
			new ashjax(
			{
				//debug:true,
				script:"/includes/ajax_quick_search.php",
				method:"post",
				get_vars:[ "qsAction=resetVehicle"],
				callback:quick_search.response.resetVehicle
			});
		}
	},
	
	// ajax response (maintain var phase_id. the following code wont need editing)
	response:
	{
		model:function(s)
		{
			var phase_id=1;
			
			quick_search.zero_option(phase_id, true);
			
			if (s!="failed")
			{
				var chunk=s.split("^"), chunk_chunk;
				
				for(var i=1; i<=chunk.length; i++)
				{
					chunk_chunk=chunk[i-1].split(",");
					$_element("id", quick_search.config.field_id[phase_id]).options[i]=new Option(chunk_chunk[0], chunk_chunk[1]);
				};
				
				quick_search.zero_option(phase_id, false);
				$_element("id", quick_search.config.field_id[phase_id]).disabled=false;
				$_element("id", quick_search.config.field_id[phase_id]).options[0].selected="selected";
				$_element("id", quick_search.config.field_id[phase_id]).focus();
			}
			else
			{
				quick_search.zero_option(phase_id, false);
				if(!in_array($_element("id", quick_search.config.field_id[phase_id-1]).value, eval("quick_search.config.discarded." + quick_search.config.field_id[phase_id-1])))
				{
					alert(eval("quick_search.config.alert_msg." + quick_search.config.field_id[phase_id-1]));
				};
			};
		},
		
		year:function(s)
		{
			var phase_id=2;
			
			quick_search.zero_option(phase_id, true);
			
			if (s!="failed")
			{
				var chunk=s.split("^"), chunk_chunk;
				
				for(var i=1; i<=chunk.length; i++)
				{
					chunk_chunk=chunk[i-1].split(",");
					$_element("id", quick_search.config.field_id[phase_id]).options[i]=new Option(chunk_chunk[0], chunk_chunk[1]);
				};
				
				quick_search.zero_option(phase_id, false);
				$_element("id", quick_search.config.field_id[phase_id]).disabled=false;
				$_element("id", quick_search.config.field_id[phase_id]).options[0].selected="selected";
				$_element("id", quick_search.config.field_id[phase_id]).focus();
			}
			else
			{
				quick_search.zero_option(phase_id, false);
				
				if(!in_array($_element("id", quick_search.config.field_id[phase_id-1]).value, eval("quick_search.config.discarded." + quick_search.config.field_id[phase_id-1])))
				{
					alert(eval("quick_search.config.alert_msg." + quick_search.config.field_id[phase_id-1]));
				};
			};
		},
		
		engine_size:function(s)
		{
			var phase_id=3;
			
			quick_search.zero_option(phase_id, true);
			
			if (s!="failed")
			{
				var chunk=s.split("^"), chunk_chunk;
				
				for(var i=1; i<=chunk.length; i++)
				{
					chunk_chunk=chunk[i-1].split(",");
					$_element("id", quick_search.config.field_id[phase_id]).options[i]=new Option(chunk_chunk[0], chunk_chunk[1]);
				};
				
				quick_search.zero_option(phase_id, false);
				$_element("id", quick_search.config.field_id[phase_id]).disabled=false;
				$_element("id", quick_search.config.field_id[phase_id]).options[0].selected="selected";
				$_element("id", quick_search.config.field_id[phase_id]).focus();
			}
			else
			{
				quick_search.zero_option(phase_id, false);
				
				if(!in_array($_element("id", quick_search.config.field_id[phase_id-1]).value, eval("quick_search.config.discarded." + quick_search.config.field_id[phase_id-1])))
				{
					alert(eval("quick_search.config.alert_msg." + quick_search.config.field_id[phase_id-1]));
				};
			};
		},
		
		body_type:function(s)
		{
			var phase_id=4;
			
			quick_search.zero_option(phase_id, true);
			
			if (s!="failed")
			{
				var chunk=s.split("^"), chunk_chunk;
				
				for(var i=1; i<=chunk.length; i++)
				{
					chunk_chunk=chunk[i-1].split(",");
					$_element("id", quick_search.config.field_id[phase_id]).options[i]=new Option(chunk_chunk[0], chunk_chunk[1]);
				};
				
				quick_search.zero_option(phase_id, false);
				$_element("id", quick_search.config.field_id[phase_id]).disabled=false;
				$_element("id", quick_search.config.field_id[phase_id]).options[0].selected="selected";
				$_element("id", quick_search.config.field_id[phase_id]).focus();
			}
			else
			{
				quick_search.zero_option(phase_id, false);
				if(!in_array($_element("id", quick_search.config.field_id[phase_id-1]).value, eval("quick_search.config.discarded." + quick_search.config.field_id[phase_id-1])))
				{
					alert(eval("quick_search.config.alert_msg." + quick_search.config.field_id[phase_id-1]));
				};
			};
		},
		
		storeVehicle:function()
		{
			if ($_element('id', 'searchArea').value == 'admin')
			{
				if ($_element('id', 'formPage').value == 'addOrder')
				{
					location.href = '/intranet/add_order.php'+(($_element('id', 'firstChoiceID').value > 0) ? '?fr_id='+$_element('id', 'firstChoiceID').value : '')+(($_element('id', 'findapartID').value > 0) ? '?findapartID='+$_element('id', 'findapartID').value : '');
				}
				else if ($_element('id', 'formPage').value == 'addProduct')
				{
					location.href = '/intranet/view_add_product.php'+(($_element('id', 'findapartID').value > 0) ? '?findapartID='+$_element('id', 'findapartID').value : '');
				}
			}
			else
			{
				location.href="/products.php";
			}
		},
		
		resetVehicle:function()
		{
			if ($_element('id', 'searchArea').value == 'admin')
			{
				if ($_element('id', 'formPage').value == 'addOrder')
				{
					location.href = '/intranet/add_order.php'+(($_element('id', 'firstChoiceID').value > 0) ? '?fr_id='+$_element('id', 'firstChoiceID').value : '')+(($_element('id', 'findapartID').value > 0) ? '?findapartID='+$_element('id', 'findapartID').value : '');
					
				}
				else if ($_element('id', 'formPage').value == 'addProduct')
				{
					location.href = '/intranet/view_add_product.php'+(($_element('id', 'findapartID').value > 0) ? '?findapartID='+$_element('id', 'findapartID').value : '');
				}
			}
			else
			{
				location.href="/index.php";
			}
		}
	},
	
	/**
	 * set fields label option
	 */
	zero_option:function(id, loading)
	{
		$_element("id", this.config.field_id[id]).options[0]=new Option((loading ? this.config.loadtext : this.config.label_id[id]), '');
	},
	
	/**
	 * set the current field
	 */
	set_now:function(num)
	{
		this.config.now=num;
	},
	
	/**
	 * get current field
	 */
	now:function()
	{
		return this.config.now;
	},
	
	/**
	 * reset all fields upto x
	 */
	restart:function(field)
	{
		if(!isNaN(parseInt(field)))
		{
			for(var i=(field); i<this.config.field_id.length; i++)
			{
				if($_element("id", this.config.field_id[i])!=null)
				{
					$_element("id", this.config.field_id[i]).options.length=1;
					$_element("id", this.config.field_id[i]).options[0].selected="selected";
					$_element("id", this.config.field_id[i]).disabled="disabled";
				};
			};
			if($_element("id", this.config.field_id[field-1])!=null)
			{
				$_element("id", this.config.field_id[field-1]).focus();
			};
		};
	},
	
	/**
	 * submit the form
	 */
	do_id:function()
	{
		for(var i=0; i<this.config.mandatory_fields.length; i++)
		{
			if(!$_element("id", this.config.mandatory_fields[i]).selectedIndex)
			{
				alert(this.config.mandatory_error);
				return;
			};
		};
		
		var yearID = $_element("id", this.config.field_id[4]).value.replace(this.config.noval_regex, "");
		
		if (yearID == 'Year')
		{
			yearID = '';
		}
		
		location.href="/search_results.php?" + $_url(
		[
			this.config.var_prefix + "pc_id=" + $_element("id", this.config.field_id[0]).value,
			this.config.var_prefix + "sc_id=" + $_element("id", this.config.field_id[1]).value,
			this.config.var_prefix + "ma_id=" + $_element("id", this.config.field_id[2]).value.replace(this.config.noval_regex, ""),
			this.config.var_prefix + "mo_id=" + $_element("id", this.config.field_id[3]).value.replace(this.config.noval_regex, ""),
			this.config.var_prefix + "yr_id=" + yearID,
			this.config.var_prefix + "es_id=" + $_element("id", this.config.field_id[5]).value.replace(this.config.noval_regex, "")
		]);
	},
	
	submitRef:function()
	{
		if (document.getElementById("se_pr_ref").value == '')
		{
			alert("Please provide a product reference number or code.");
			return;
		}
		else
		{
			// submit
			location.href="/search_results.php?" + $_url(
			[
				this.config.var_prefix + "pr_ref=" + document.getElementById('se_pr_ref').value
			]);
		}
	}
};