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 $GetVehixWidgetsPanelsVideosNewestByCategories = function()
{
	try{
		var cnfg = arguments[0];
		Vehix.Widgets.Panels.VideosNewestByCategories = new Vehix$Widgets$Panels$VideosNewestByCategories(cnfg);
	}catch(er)
	{
		var inc = 0;
		if(arguments.length > 1 && !isNaN(arguments[1]))
		{
			inc = arguments[1];
		}
		if(inc < 10)
		{
			setTimeout(function()
				{
					$GetVehixWidgetsPanelsVideosNewestByCategories(cnfg, inc+1);
				}, 500);
		}
		else
		{
			return er;
		}
	}
	if(typeof(Vehix.Widgets.Panels.VideosNewestByCategories) != "undefined")
	{
		Vehix.Widgets.Panels.VideosNewestByCategories._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.VideosNewestByCategories");}
catch(er)
{
	__vehixRegisterNameSpace("Vehix.Widgets.Panels.VideosNewestByCategories");
}	

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.VideosNewestByCategories.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/Widgets.Imports.Endeca.js");

Vehix$Widgets$Panels$VideosNewestByCategories$Video = function(id,url,title,thumbnail,averageRating,numberOfRatings,views)
{
    this._id = id;
    this._url = url;
    this._title = title;
    this._thumbnail = thumbnail;
    this._averageRating = averageRating;
    this._numberOfRatings = numberOfRatings;
    this._views = views;
}
Vehix$Widgets$Panels$VideosNewestByCategories$Video.prototype = 
{
    get_Id: function()
    {
        return this._id;
    },
    get_Url: function()
    {
        return this._url;
    },
    get_Title: function()
    {
        return this._title;
    },
    get_Thumbnail: function()
    {
        return this._thumbnail;
    },
    get_AverageRating: function()
    {
        return this._averageRating;
    },
    get_NumberOfRatings: function()
    {
        return this._numberOfRatings;
    },
    get_Views: function()
    {
        return this._views;
    }
}

Vehix$Widgets$Panels$VideosNewestByCategories = function(config)
{
	if(config && typeof(config) == "object")
	{
		this._container = this.$(config.Container);
		this._callback = config.Callback;
		this._config = config;
		this._selected = config.Selected;
		this._categories = config.Categories;
	}
}

Vehix$Widgets$Panels$VideosNewestByCategories.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.VideosNewestByCategories.");
			}
		}
	},
	
	$ : 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);
	},
	
	_render : function()
	{
	    try
	    {
	        var p = Vehix$Imports$Presentation;
	        p._removeChildren(this._container);
            ///search-newest-by-category.js?limit=4&category=Test%20Drive
            var ds = new Vehix$Imports$Endeca$DataSource('Video','~/Services/Video.svc/search-newest-by-category.js?limit='+ this._config.NumberOfItems +'&category='+ this._selected);
		    
		    var c = p.div('vx_widgets-panels-video-popularity-container');
		    var sd = p.div('selectedContainer');
            var sch = p.div('selectedContainerHeading');
            sch.appendChild(p.textNode(this._selected));
  		    sd.appendChild(sch);
  		    
  		    var count;
  			
  		    for(i = 0; i < this._categories.length; i++)
  		    {
  				if(this._selected == this._categories[i])
  					count = i;
  		    }
  		    
  		    var rd = p.div('records','Records');
		    rd.appendChild(p.textNode('Loading...'))
	        sd.appendChild(rd);
	        var r = new Vehix$Imports$Endeca$Records('Video',rd);
	        r.get_OnRow().subscribe(Vehix$Imports$Endeca$Events.createDelegate(this,function(sender,args)
	        {
	            var row = args[0];
	            var ele = row.get_Element();
	            var v = new Vehix$Widgets$Panels$VideosNewestByCategories$Video(row.firstPropertyOf('pID'),this._config.Player,row.firstPropertyOf('pTitle'),row.firstPropertyOf('pImage'),row.firstPropertyOf('pAverageRating'),row.firstPropertyOf('pNumberOfRatings'),row.firstPropertyOf('pViews'))
	            
	            var ovrs;
  			
  				if(count == 0)
  				{
  					ovrs = this._config.Overrides1;
  				}
				if(count == 1)
				{
					ovrs = this._config.Overrides2;
				}
				if(count == 2)
				{
					ovrs = this._config.Overrides3;
				}
			
	            if(row.get_Index() < ovrs.length)
	            {
	                var ov = ovrs[row.get_Index()];
	                if(ov != null)
	                {
	                    v = ov;
	                }
	            }
	            var anc = p.anchor(v.get_Url() + v.get_Id());
	            var tn = p.image('thumbnail',v.get_Thumbnail());
	            tn.alt = v.get_Title();
	            var drc = p.div("right");
	            anc.appendChild(tn);
	            var ranc = p.anchor(v.get_Url() + v.get_Id())
	            ranc.appendChild(p.textNode(v.get_Title()));
	            drc.appendChild(ranc);
	            p._ac(ele, [anc, drc]);
	          
				var rating = parseInt(v.get_AverageRating())
				if(rating != null)
				{
					var rtgs = p.div('ratings' + ((rating > 0) ? ' active' : ' inactive'),'ratings')
					for(var ratg = 0;ratg < 5;ratg++)
					{
						var rtgimg = ratg < rating ? p.image('star selected') : p.image('star');
						rtgs.appendChild(rtgimg);
					}
					var cou = p.span('count');
					cou.appendChild(p.textNode(v.get_NumberOfRatings() + ' VOTES'));
					rtgs.appendChild(cou);
					drc.appendChild(rtgs);
				}
				anc.id= this._selected +'Spot'+ row.get_Index();
				
	        }))
	        c.appendChild(sd);
	        for(i = 0; i < this._categories.length; i++)
            {
                if(this._selected != this._categories[i])
                {
                  var ochcb;
                  (function()
                  {
					var ocat = arguments[0];
					ochcb = function()
					{
						  this._selected = ocat;
						  this._render();
					}
                  })(this._categories[i]);
                  var och1a = p.anchor('javascript:void(0)', this._categories[i], "optionAnchor");
                  och1a.onclick = Vehix$Imports$Endeca$Events.createDelegate(this,ochcb);
                  c.appendChild(och1a);
                }
            }

            this._container.appendChild(c);
	    }
	    catch(e)
	    {
	        alert(e.message);
	    }

	}
}


