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_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 $GetVehixWidgetsPanelsVideoLibrary = function()
{
	try{
		var cnfg = arguments[0];
		Vehix.Widgets.Panels.Video.Library = new Vehix$Widgets$Panels$Video$Library(cnfg);
	}catch(er)
	{
		var inc = 0;
		if(arguments.length > 1 && !isNaN(arguments[1]))
		{
			inc = arguments[1];
		}
		if(inc < 10)
		{
			setTimeout(function()
				{
					$GetVehixWidgetsPanelsVideoLibrary(cnfg, inc+1);
				}, 500);
		}
		else
		{
			return er;
		}
	}
	if(typeof(Vehix.Widgets.Panels.Video.Library) != "undefined")
	{
		Vehix.Widgets.Panels.Video.Library._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.Video.Library");}
catch(er)
{
	__vehixRegisterNameSpace("Vehix.Widgets.Panels.Video.Library");
}	

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.Video.Library.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.Jquery.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/Widgets.Imports.Endeca.js");
__vhx_insertscrpt("http://widgets.vehix.com/_importJs/Widgets.Imports.Web.Uri.js");

Vehix$Widgets$Panels$Video$Library = function(config)
{
	if(config && typeof(config) == "object")
	{
		this._container = this.$(config.Container);
		this._callback = config.Callback;
		this._config = config;
		this._endecaDataSourceUrl = "~/Services/Video.svc/search.js";
		this._recordsPerPage = config.ResultsPerPage ? config.ResultsPerPage : 20;
		this._displayColumns = 4;
	}
}
Vehix$Widgets$Panels$Video$Library.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.Video.Library.");
			}
		}
	},
	
	$ : 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$Endeca$DataSource) != "undefined");
		this._callRender(this._container, arguments);
	},
	
	_render : function()
	{
	    try
	    {
            var ds;
			var eq = new Vehix$Imports$Endeca$Query();
			eq.set_ResultsPerPage(this._recordsPerPage);
			if(this._config)
			{
				for(var sdvi = 0;this._config.SelectedDimensionValues.length > sdvi;sdvi++)
				{
					eq.get_SelectedDimensionValueIds().add(this._config.SelectedDimensionValues[sdvi]);
				}
				var filter = '';
				if(this._config.Section || this._config.Source || this._config.Category)
				{
					filter += 'AND(';
					if(this._config.Section)
					{
						filter += 'Section:' + this._config.Section +',';
					}
					if(this._config.Category)
					{
						filter += 'Category:' + this._config.Category +',';
					}
					if(this._config.Source)
					{
						filter += 'Source:' + this._config.Source +',';
					}
					filter = filter.substring(0,filter.length-1);
					filter += '),'
				}
				if(this._config.Make && this._config.Model && this._config.BodyStyle)
				{
					filter += 'OR(AND(Make:'+ this._config.Make +',Model:' + this._config.Model+'),AND(Category:Buying Guide,Body Style:'+ this._config.BodyStyle +')),';
				}
				
				if(filter != '' && filter.length > 0)
				{
					filter = filter.substring(0,filter.length-1);
					eq.set_RecordFilter(filter);
				}
			}
			ds = new Vehix$Imports$Endeca$DataSource('Video',this._endecaDataSourceUrl,eq);
		    var p = Vehix$Imports$Presentation;
		    var uri = new Vehix$Imports$Web$Uri();
		    var c = p.div('vx_widgets-panels-video-library-container');

            var nc = p.div('navigation-container','NavigationContainer');
            var rightContainerClass = 'right-main-container';
            if(this._config && this._config.HideNavigation)
            {
				p.Hide(nc);
				this._displayColumns = 5;
				rightContainerClass += " wide";
			}
		    var rb = p.div('breadcrumb','Breadcrumb')
		    rb.appendChild(p.textNode('Loading...'));
	        nc.appendChild(rb);
		    var b = new Vehix$Imports$Endeca$Breadcrumb('Video',rb);
    		b.addDependency('Category','Make','Model');
    		b.addDependency('Publisher','Make','Model');
		    var rn = p.div('navigation','Navigation')
		    rn.appendChild(p.textNode('Loading...'))
	        nc.appendChild(rn);
	        
		    var n = new Vehix$Imports$Endeca$Navigation('Video',rn);
    		n.get_OnDimension().subscribe(Vehix$Imports$Endeca$Events.createDelegate(this,function(sender,args)
	        {
				args[1].innerText = 'By '+ args[0].DisplayName
			}));
            c.appendChild(nc);
            var rmc = p.div(rightContainerClass);
            var rlt = p.div('paging-location-top','PagingLocationTop');
            var lt = new Vehix$Imports$Endeca$Location('Video',rlt);
            rmc.appendChild(rlt);
            
            var rpt = p.div('paging-top','PagingTop');
		    rpt.appendChild(p.textNode('Loading...'))
	        rmc.appendChild(rpt);
	        
            var pt = new Vehix$Imports$Endeca$Paging('Video',rpt,5);
    		
		    var rd = p.div('records','Records');
		    rd.appendChild(p.textNode('Loading...'))
	        rmc.appendChild(rd);
    	    
	        var r = new Vehix$Imports$Endeca$Records('Video',rd);
	        var cb = this._callback
	        r.get_OnSelected().subscribe(Vehix$Imports$Endeca$Events.createDelegate(this,function(sender,args)
	        {
				if(typeof(cb) == "function")
					cb(args[0]);
	        }));
	        r.get_OnRow().subscribe(Vehix$Imports$Endeca$Events.createDelegate(this,function(sender,args)
	        {
	            var row = args[0];
	            var bdebg = false;
	            var elem = row.get_Element();
	            if(args[0].get_Index() > 0 && (args[0].get_Index() + 1) % this._displayColumns == 0 && elem.parentNode)
					elem.parentNode.appendChild(p.div("rowbreak"));
	            var a = p.anchor("javascript:void(0)", p.image(), "thumbclick", true);
	            a.onclick=row.get_OnSelectedCallback();
	            a.onmouseover = function()
	            {
					$(elem).addClass("over");
	            }
	            a.onmouseout = function()
	            {
					$(elem).removeClass("over");
	            }
	            var img = row.firstPropertyOf('pImage').indexOf("/chrome/") > 0 ? p.image('thumbnail chrome',row.firstPropertyOf('pImage'), row.firstPropertyOf('pTitle')) : p.image('thumbnail',row.firstPropertyOf('pImage'), row.firstPropertyOf('pTitle'));
	            elem.appendChild(img);
	            if(uri.ContainsKey("debug") && uri.GetValue("debug").toLowerCase() == "true")
	            {
					elem.appendChild(p.div("debug", null, row.get_Record().Id));
					bdebg = true;
	            }
	            
	            var rating = parseInt(row.firstPropertyOf('pAverageRating'))
	            var rtgs = p.div('ratings','ratings')
	            
	            if(rating != null)
	            {
	                for(var ratg = 0;ratg < 5;ratg++)
	                {
	                    var rtgimg = ratg < rating ? p.image('star selected') : p.image('star');
	                    rtgs.appendChild(rtgimg);
	                }
	            }
	            elem.appendChild(rtgs);
	            var titl = p.span('videotitle');
	            titl.appendChild(p.textNode(row.firstPropertyOf('pShortTitle')));
	            elem.appendChild(titl);
	            if(!bdebg)
				 elem.appendChild(a);
	        }))
    	    
    	    var rb = p.div("paging-bottom-row");
    	    var rlb = p.div('paging-location-bottom','PagingLocationBottom');
            var lb = new Vehix$Imports$Endeca$Location('Video',rlb);
            rb.appendChild(rlb);
            
	        var rpb = p.div('paging-bottom','PagingBottom');
		    rpb.appendChild(p.textNode('Loading...'))
		    rb.appendChild(rpb);
	        rmc.appendChild(rb);
    	    
    	    
    	    
	        var pb = new Vehix$Imports$Endeca$Paging('Video',rpb,5);
	        this._container.appendChild(c);
	        if(typeof(this._config.Debug) != 'undefined' && this._config.Debug)
	        {
    	        
	            ds.get_OnDataReady().subscribe(Vehix$Imports$Endeca$Events.createDelegate(this,function(sender,args)
	            {
	                var dbg = p.div();
	                dbg.appendChild(p.textNode(ds.get_Query().toJson()));
	                rmc.appendChild(dbg);
	            }))
	        }
	        c.appendChild(rmc);
	    }
	    catch(e)
	    {}

	}
}


