var gvx_UserAgentStr = navigator.userAgent.toLowerCase();
var gvx_isWin = navigator.appVersion.toLowerCase().indexOf("win") != -1;
var gvx_isGecko = gvx_UserAgentStr.indexOf("gecko") != -1;
var gvx_isFFg4 = gvx_UserAgentStr.indexOf("firefox/") != -1 && gvx_UserAgentStr.indexOf("firefox/3") == -1 && gvx_UserAgentStr.indexOf("firefox/2") == -1;
var gvx_isOpera = gvx_UserAgentStr.indexOf("opera") != -1;
var gvx_isSafari = gvx_UserAgentStr.indexOf("safari") != -1;
var gvx_isChrome = gvx_UserAgentStr.indexOf("chrome") != -1;
var gvx_isIE = gvx_UserAgentStr.indexOf("msie") != -1;
var gvx_isIE7 = (window.XMLHttpRequest != null && window.ActiveXObject != null);

var __vhx_insertscrpt = function(url)
{
	try
	{
		var b = false;
		var scripts = document.getElementsByTagName('script');
		for (var i = 0; i < scripts.length; i++)
		{
			var o = scripts[i];
			if (o.src == url)
				b = true;
		}
		if(!b)
		{
			try
			{
				var scrpt = document.createElement("script");
				scrpt.setAttribute("type", "text/javascript");
				scrpt.setAttribute("src", url);
				document.getElementsByTagName("head")[0].appendChild(scrpt);
			}
			catch(err)
			{
				document.write('<s' + 'cript type="text/javascript" src="');
				document.write(url + '"></s' + 'cript>');
			}
		}
	}
	catch(er){}
}

var __vhx_insertcss = function(url)
{
	try
	{
		var b = false;
		var links = document.getElementsByTagName('link');
		for (var i = 0; i < links.length; i++)
		{
			var o = links[i];
			if (o.href == url)
				b = true;
		}
		if(!b)
		{
			try
			{
			  var lnk = document.createElement("link");
			  lnk.type="text/css";
			  lnk.rel="stylesheet";
			  lnk.href=url;
			  document.getElementsByTagName("head")[0].appendChild(lnk);
			}catch(err){
			  document.write('<link rel="stylesheet" type="text/css" href="');
			  document.write(url + '" />');
			}
		}
	}
	catch(er){}
}

var $GetVehixWidgetsPanelsSearch = function()
{
	try{
		var cnfg = arguments[0];
		Vehix.Widgets.Panels.Search = new Vehix$Widgets$Panels$Search(cnfg);
	}catch(er)
	{
		var inc = 0;
		if(arguments.length > 1 && !isNaN(arguments[1]))
		{
			inc = arguments[1];
		}
		if(inc < 10)
		{
			setTimeout(function()
				{
					$GetVehixWidgetsPanelsSearch(cnfg, inc+1);
				}, 500);
		}
		else
		{
			return er;
		}
	}
	if(typeof(Vehix.Widgets.Panels.Search) != "undefined")
	{
		Vehix.Widgets.Panels.Search._buildWidget();
	}
}

var __vehixRegisterNameSpace = function(nspath)
{
	var p = window;
	var nsp = nspath.split('.');

	for (var i = 0; i < nsp.length; i++) 
	{
		var c = nsp[i];
		var ns = p[c];
		if (ns && !ns.__namespace){ throw 'invalid namespace';}
		if (!ns) 
		{
			ns = p[c] = 
				{	__namespace: true
				, __typeName: nsp.slice(0, i + 1).join('.')
				, getName: function() {return this.__typeName;}
				};
			var n;
			try {n = eval(ns.__typeName);}
			catch(e){n = null;}
			if (n !== ns) {
					delete p[c];
					throw 'invalid namespace: '+nspath;
			}										
		}
		p = ns;
	}
}

try {Type.registerNamespace("Vehix.Widgets.Panels.Search");}
catch(er)
{
	__vehixRegisterNameSpace("Vehix.Widgets.Panels.Search");
}	

var $WidgetResolveUrl = function(url)
{
	if(url && typeof(url.replace) == "function")
		return "http://widgets.vehix.com" + url.replace("~", "");
}

__vhx_insertcss("http://widgets.vehix.com/_css/CssHandler.ashx?f=../Panels/_css/Vehix.Widgets.Panels.Search.css");

var Vehix$Imports$Presentation;__vhx_insertscrpt("http://widgets.vehix.com/_importJs/JsImport.ashx?f=Widgets.Imports.Presentation.js");
__vhx_insertscrpt("http://widgets.vehix.com/_importJs/Widgets.Imports.Communications.js");var Vehix$Imports$Flash;__vhx_insertscrpt("http://widgets.vehix.com/_importJs/JsImport.ashx?f=Widgets.Imports.Flash.js");
__vhx_insertscrpt("http://widgets.vehix.com/_importJs/JsImport.ashx?f=Widgets.Imports.Selectors.Vehicle.js");

Vehix$Widgets$Panels$Search = function(config)
{
	if(config && typeof(config) == "object")
	{
		this._container = this.$(config.Container);
		this._callback = config.Callback;
		if(config.HeaderText)
		{
			this._htext = config.HeaderText
		}
		else
		{
			if(config.SelectorType == "ConditionMPG" || config.SelectorType == "CategoryMPG")
				this._htext = "Search by MPG on Vehix";
			else
				this._htext = "Find Your Car with Vehix";
		}
		this._config = config;
	}
}

Vehix$Widgets$Panels$Search.prototype =
{
	_hasValue : function()
	{
		var res = false;
		if(arguments.length)
		{
			var arg = arguments;
			var v = arg[0];
			var t = null;
			if(arg.length > 1) t = arg[1];
			if(typeof(v) != "undefined" && (t == null || typeof(v) == t))
			{
				res = true;
			}
		}
		return res;
	},
	
	_bind : function(fnc) 
	{ 
		var obj = this;
		temp = function() 
		{ 
			return fnc.apply(obj, arguments); 
		}; 

		return temp; 
	},
	
	_bindOther : function(fnc, obj) 
	{ 
		temp = function() 
		{ 
			return fnc.apply(obj, arguments); 
		}; 

		return temp; 
	},
	
	_cancelEvent : function(e)
	{
		if(typeof(e) == "undefined")
		{
			if(typeof(event) != "undefined") e = event;
		}
		if (e && e.preventDefault)
		{
			e.preventDefault();
		}
		if (e && e.preventBubble)
		{
			e.preventBubble();
		}
		else if(e)
		{
			e.returnValue = false;
		}
	},
	
	_trycatchrepeat : function(fnc, interval, args, loop, limit)
	{
		try
		{
			if(typeof(args) != "undefined")
			{
				fnc(args);
			}
			else
			{
				fnc();
			}
		}
		catch(er)
		{
			if(isNaN(loop)) loop = 0;
			if(isNaN(limit)) limit = 20;
			if(loop <= limit)
			{
				var cb = this._bind(this._trycatchrepeat);
				var inc = loop + 1;
				this._trycatchrepeat_timeout = setTimeout
				(
					function()
					{
						cb(fnc, interval, args, inc, limit);
					}
				, interval);
			}
		}
	},
	
	_getEventTarget : function(e)
	{
		var a;
		if(typeof(e) == "undefined")
		{
			if(typeof(event) != "undefined") e = event;
		}
		typeof(e.currentTarget) != "undefined" ? a = e.currentTarget : a = e.srcElement;
		return a;
	},
	
	_addRenderDependancy: function(arg)
	{
		if(this._renderDependencies)
			this._renderDependencies.push(arg);
		else
		{
			this._renderDependencies = new Array();
			this._renderDependencies.push(arg);
		}
	},
	
	_callRender: function(d, args)
	{
		var isready = typeof(Vehix$Imports$Presentation) != "undefined" && Vehix$Imports$Presentation.Ready;
		
		if(this._renderDependencies && this._renderDependencies.length > 0)
		{
			for(var i = 0; i < this._renderDependencies.length; i++)
			{
				if(!isready)
					break;
				else
				{
					if(typeof(this._renderDependencies[i]) == "string")
					{
						try
						{
							isready = eval("typeof(" + this._renderDependencies[i] + ") != 'undefined'");
						}
						catch(er){isready = false;}
					}
					else
						isready = this._renderDependencies[i];
				}
			}
		}
			
		if(isready)
		{
			if(Vehix$Imports$Communication)
			{
				if(Vehix$Imports$Communication.CheckCommunicationsObject(d))
					this._render();
			}
			else
				this._render();
		}
		else
		{
			var inc = 0;
			if(arguments.length > 1)
			{
				if(arguments[1] && arguments[1].length > 0 && !isNaN(arguments[1][0]))
					inc = arguments[1][0];
			}
			if(inc < 20)
			{
				var rend = this._bind(this._buildWidget);
				this._renderDependencies = new Array();
				setTimeout(function()
					{
						rend(inc+1);
					}, 500);
			}
			else
			{
				alert("Cannot load Vehix.Widgets.Panels.Search.");
			}
		}
	},
	
	$ : function(oid)
	{
		return document.getElementById(oid);
	},
	
	_wait : function(s)
	{
		var date = new Date();
		var curDate = null;
		do 
		{ 
			curDate = new Date(); 
		} 
		while(curDate-date < s);
	},

	_buildWidget : function()
	{
		this._addRenderDependancy(typeof(Vehix$Imports$Flash) != "undefined");
		this._callRender(this._container, arguments);
	},
	
	_render : function()
	{
		var p = Vehix$Imports$Presentation;
		var css = "vx_panels-search-findYourCar";
		var cfgst = this._config.SelectorType; 
		if(cfgst && (cfgst == "ConditionMakeModel" || cfgst == "YearMakeModel" || cfgst == "TypeMakeModel"))
			css += " h_126";
		else if(cfgst && (cfgst == "TypeYearMakeModel" || cfgst == "ConditionYearMakeModel"))
			css += " h_153";
		var d = p.div(css);
		var dc = p.div("fyc_contents");
		var dh = p.div("header");
		this._dscp = p.div("selector_container_panel");

		dh.appendChild(p.textNode(this._htext));
		
		p._ac(dc, [dh, this._dscp]);
		d.appendChild(dc);
		this._container.appendChild(d);
		var cs = this._bind(this._createSelectors);
		this._trycatchrepeat(cs, 500);
	},
	
	_createSelectors : function()
	{
		var p = Vehix$Imports$Presentation;
		this._fycss = new Vehix$Imports$Selectors$Vehicle(this._config, this._bind(this._sendCall));
		if(this._fycss._selectorsEnabled.Condition)
			this._dscp.appendChild(this._fycss._conditionddl);
		if(this._fycss._selectorsEnabled.BodyStyle)
			this._dscp.appendChild(this._fycss._bodystyleddl);
		if(this._fycss._selectorsEnabled.Year)
			this._dscp.appendChild(this._fycss._yearddl);
		if(this._fycss._selectorsEnabled.Make)
			this._dscp.appendChild(this._fycss._makeddl);
		if(this._fycss._selectorsEnabled.Model)
			this._dscp.appendChild(this._fycss._modelddl);
		if(this._fycss._selectorsEnabled.MPG)
			this._dscp.appendChild(this._fycss._mpgpanel);
		this._dscp.parentNode.appendChild(this._fycss._zipinput);
		this._dscp.parentNode.appendChild(this._fycss._button);
	},
	
	_sendCall : function(sevnt,cobj)
	{
		var pobj = {"Condition":"","Type":"","Year":"","Radius":"","Make":"","Model":"","Zip":"","MPG":""};
		try{
			pobj.Event = sevnt;	pobj.Condition = cobj.Condition; pobj.Type = cobj.Type; pobj.Year = cobj.Year == "0" ? "" : cobj.Year; pobj.Radius = cobj.Radius;
			pobj.Make = cobj.Make; pobj.Model = cobj.Model; pobj.Zip = cobj.Zip; pobj.MPG = cobj.MPG;
			Vehix$Imports$Communication._sendCommunication(this._callback, pobj);
		}catch(er){}
	}
}



