window['gReactions']= (function(){
	attachDomEvent= (function(){ 
		if(window.attachEvent) { 
			return function(element,event,handler){ 
				if(!event || typeof event != 'string') return; 
				event='on'+event;
				element.attachEvent(event, handler);
			}
		}else if(window.addEventListener){ 
			return function(element,event,handler){ 
				if(!event || typeof event != 'string') return; 
				if(typeof element=='undefined'||!element)return null; 
				element.addEventListener(event, handler, false);
			}
		}else{
			return function(element,event,handler){ 
				if(!event || typeof event != 'string') return; 
				if(typeof element=='undefined'||!element)return null; 
				event= 'on'+ event; 
				element[event]= handler; 
			}
		}

	})();
	
	detachDomEvent= function(element,event,handler){  
		if(element.removeEventListener){
			try  { return element.removeEventListener(event, handler, false); }
			catch(ignore) { }
		}
		event= 'on'+event; 
		if(element.detachEvent){
			element.detachEvent(event, handler);
		}else{ 
			delete element[event];
		}
	};

	return (function(){ 
		var 	
			cbox= null, 
			destination= null,
			videoObject= null,
			info= (typeof window.gVideoPageInfo === "object")? window.gVideoPageInfo : {},
			site= (window.location.host)? window.location.host.toString().split(".")[1] : ''; 
			pageInfo={ 
				type: info.type || 'dvideos',
				site: info.sitename || site,
				category: info.videopagecategory || 'videos',
				rectype: 'articles',
				section: 'video',
				count: 0,
				videopageurl: info.videopageurl || window.location.href,
				videoidvar: info.videoidvar || 'bctid',
				extrafields: info.extrafields || '',
				divname: info.newdivname || 'gslVideoControl'
			},
			cboxInfo= {
				type: 'image',
				id: 'gslRecommend',
				alt: 'I like this video',
				src: 'http://sdev12.gmti.com/brightcove2/images/Ilikethisvideo.jpg',
				clickedsrc: 'http://sdev12.gmti.com/brightcove2/images/IlikethisvideoDisabled.jpg'
			}
		;
		
		function createImageButton(){ 
			var _r= new ImageButton(cboxInfo); 
			_r.display(destination); 
			_r.on("click", handleClick1); 
			return _r; 
		}
		function handleClick1(){
			if(cbox.disabled()) return;
			document.getElementById(cboxInfo.id).src=cboxInfo.clickedsrc;
			cbox.disable(); 
			var _v= new GVideo(videoObject, pageInfo);
			_v.Recommend();	
		}

		return function(){
			divName= pageInfo.divname;
			videoObject= BCGannett.videoPlayerModule.getCurrentVideo();
			if(videoObject.tags.member("trailer=true")==false||!videoObject.tags){return;}
			if(!videoObject.startDate){
				videoObject.startDate= {
					year: 1970,
					month: 01,
					day: 01
				};
			}
			videoObject['gPluckId']= [
				[
					videoObject.startDate.year, 
					addZero(videoObject.startDate.month.toString()), 
					addZero(videoObject.startDate.day.toString())
				].join(''), 
				pageInfo.site, 
				videoObject.id, 
				pageInfo.section, 
				pageInfo.category
			].join('.');
			var _del = (pageInfo.videopageurl.indexOf('?')==-1) ? '?': '&';
			var _extra= (pageInfo.extrafields) ? ['&',pageInfo.extrafields].join('') : '';
			videoObject['gPageUrl']=[
				pageInfo.videopageurl,
				_del,
				pageInfo.videoidvar,
				"=",
				videoObject.id,
				_extra
			].join('');
			
			
			if(!destination)
				destination= (typeof divName === 'string')? 
					document.getElementById(divName): divName;
			if(!cbox){ 
				try { cbox= createImageButton(); }
				catch(e){ debugger; };
			}else { 
				cbox.reset(cboxInfo.src);
				cbox.enable(); 
			}
			function addZero(v){
				if (v.length == 1) {
					v = "0" + v;
				}
				return v;
			}

		};
	})();		
})();

function GVideo(videoObject, pageInfo){ 
	_recommender= new RecommendVideoBehavior(videoObject,pageInfo);   
	this.setRecommender= function(r){ 
		_recommender= r; 
	}
	this.getRecommender= function(){ return _recommender; }
}

GVideo.prototype= { 
	Recommend: function(){ 
		var _r= this.getRecommender();
		return _r.recommend(); 
	}
};

function RecommendVideoBehavior(videoObject,pageInfo){ 
	this.recommend= function(){
		if(!gsl){return;}
	
		var _rb= new RequestBatch()
			_v= videoObject,
			_p= pageInfo; 
	
		_rb.AddToRequest(new ArticleKey(_v.gPluckId));
		gsl.sitelifeRequest(_rb, "getPluckVideoInfo", function(result){
			var _c= false;
			
			for (var j = 0; j < result.Responses.length; j++) {
				if (result.Responses[j].Article) {
					var video = result.Responses[j].Article;
					if( _v.gPageUrl.toString() == video.PageUrl.toString() && _v.displayName.toString() == video.PageTitle.toString()){
						_c=true;	
					}
					
				}
			}
			
			if(_c==false){
				updateVideoInfo();	
			}
			
			makeRecommendRequest();
		});

	};
	
	function makeRecommendRequest(){
		var _v= videoObject,
			_p= pageInfo,
			_c= parseInt(_p.count);
		gsl.Recommend(_p.rectype, _v.gPluckId, _c);
	};
	
	function updateVideoInfo(){
		var _rb= new RequestBatch(),
			_v= videoObject,
			_p= pageInfo,
			_cat= new Array();
			
			_cat[0] = new Category(_p.category);
			
		_rb.AddToRequest(new UpdateArticleAction(
			new ArticleKey(_v.gPluckId),
			_v.gPageUrl, 
			_v.displayName, 
			new Section(_p.section),  
			_cat
		));  
		gsl.sitelifeRequest(_rb, "updateVideo", function(){});
		
	};
	
};

function ImageButton(options){ 
	var _self= this; 
	options= options || {}; 
	this.element= document.createElement("input"); 
	this.element.setAttribute("id", options.id);
	this.element["type"]=options.type;
	this.element["src"]=options.src;
	this.element["alt"]=options.alt;
	this.isdisplayed= false; 
};

ImageButton.prototype= { 
	display: function(dest) { 
		if(this.isdisplayed) return this; 
		dest.appendChild(this.element); 
	},
	remove: function(dest) {
		if(!this.isdisplayed) return this; 
		dest.removeChild(this.element); 
	},
	show: function(){ 
		this.element.style.display= 'none'; 
	}, 
	hide: function(){ 
		this.element.style.display= 'block'; 
	},
	reset: function(src){
		this.element.src= src;
	},
	disabled: function(){ return this.element.disabled; },
	enable: function(){ this.element.disabled= false; }, 
	disable: function(){ this.element.disabled= true; }, 
	on: function(event,handler){ 
		return attachDomEvent(this.element,event,handler); 
	}
};


	
