YAHOO.namespace("EDA.UGC");

var Mugc = YAHOO.EDA.UGC;

Mugc.host           = "http://" + window.location.host + "/";
Mugc.accessorBase   = Mugc.host + "eda/common/includes/asp/ugcAccessor.asp?phugcPId=" + Mugc.phugcPId
Mugc.activeVideoObj =false;

Mugc.videoPanelinit = function()
{
    panelData = {pId:"eda_ugc_panel_items", assetType:"video", assetModifier:"recent", page:"1", assetAction:"getVideo"};
    Mugc.tabElf.init("eda_group_ugcTabGroup")
    Mugc.panelFactory.getPanelData(panelData, videoSectionRender);        
    
    Mugc.averageRatingWidget    = new Mugc.ratingElf("eda_ugc_submitter_averageRatingControl");
    Mugc.viewerRatingWidget     = new Mugc.ratingElf("eda_ugc_viewer_RatingControl");
    
    Mugc.tabModule      = "module5";
    Mugc.commentPager   = new Mugc.pagerElf("commentPager", commentSectionRender);
    Mugc.videoPager     = new Mugc.pagerElf("videoPager", videoSectionRender);
    Mugc.userComment    = new Mugc.comment("eda_cmpt_ugcComment_leaveCommentInput");
    Mugc.myComments     = {};
   
    if( (Mugc.defaultVideo != "false") && (Mugc.defaultVideo != undefined))
    {
        var sUrl        = Mugc.accessorBase + "&assetAction=getSingleVideo&assetType=video&assetId=" + Mugc.defaultVideo
		var callback    = {success: Mugc.videoPanelinitDefaultSuccess, failure: Mugc.videoPanelinitDefaultFailure, args: null};
		var transaction = YAHOO.util.Connect.asyncRequest("GET", sUrl, callback, null);
    }
    else
    {
        if( (Mugc.introVideo != "false") && (Mugc.introVideo != undefined) && ((Mugc.introAuto == "true") || (Mugc.introAuto == "1")) )
        {
            Mugc.playVideo(Mugc.introVideo);
        }
    }
}

Mugc.videoPanelinitDefaultSuccess = function(oResp)
{
    try
    {
        var oData   = eval("(" + oResp.responseText + ")");
        var obj     = oData.video[0];
        
	    var sClipId = obj.clip_id
	    clipId = sClipId;
	
	    Mugc.playVideo(sClipId);
    	
	    vYid = obj.yid
        var phugcVideoId        = obj.id;
        var ratingPanelData     = {pId:"eda_cmpt_ugcSubmitter", assetType:"video", page:"1", assetAction:"getAll", panelItemCount:Mugc.commentParams.nCom, assetId:phugcVideoId, yid:vYid};
        var commentPanelData    = {pId:"eda_cmpt_ugcComment_items", assetType:"video", page:"1", assetAction:"getAll", panelItemCount:Mugc.commentParams.nCom, assetId:phugcVideoId, yid:vYid};

	    Mugc.panelFactory.getPanelData(commentPanelData, commentSectionRender);
        Mugc.panelFactory.getPanelData(ratingPanelData, ratingSectionRender);
       
    }
    catch(e)
    {}
}
Mugc.videoPanelinitDefaultFailure = function(){}
 
 
Mugc.panelFactory = new function()
{
    var self        = this;											
    var panels      = {};
    var dataQueue   = [];

    this.panelPreRender = function(oData, args)
    {						
		try {
			if(getIndex(dataQueue, dataObjectHelper.buildQueueId(args.data)) != -1) dataQueue.splice(getIndex(dataQueue, dataObjectHelper.buildQueueId(args.data)), 1);
			var panelContentHtmlHolder = false;
			
			if (oData)
			{
			    panelContentHtmlHolder = args.renderFunctor(oData, args.data);
			}
			else
			{
			    panelContentHtmlHolder = args.renderFunctor(false);
			}
			
			if (panelContentHtmlHolder)
			{
			   document.getElementById(args.data.pId).innerHTML = panelContentHtmlHolder;
			}
		}
		catch (e) {};
	}    

    this.getPanelData = function(data, renderFunctor)
    {
	    var queueId = dataObjectHelper.buildQueueId(data);
	    if (getIndex(dataQueue, queueId) != -1)
	    {
		    // data being looked up already by someone else, wait a bit and retry
		    setTimeout(function(){ self.getPanelData(data, renderFunctor)}, 100);  
		    return 0;
	    }	
	    dataQueue.push(queueId);
	    
	    var dataId          = dataObjectHelper.buildUniqueId(data);
	    var getDataReturn   = {data:data,renderFunctor:renderFunctor};			
	    var getDataCallback = self.panelPreRender;
	    			
	    var data        = Mugc.cacheManager.getData(dataId, dataObjectHelper.buildUgcAccessorUrl(data ), getDataCallback, getDataReturn);
	    
	    return dataId;
    }    
    
    this.responseFailure = function(oData, dataId)
    {
	    var panelId = dataId.split("_")[0];
	    faderElf.fade({elementId: panelId, direction: true});
    }
}
   
/******************************************** Elves ***************************/    
 
Mugc.tabElf = new function()
{
    this.tabs = {};
    var self = this;

    this.init = function(id)
    {
        var tabDom = document.getElementById(id);							
        var currentNode = tabDom.firstChild;
        this.loadTab(currentNode);
        while (currentNode = currentNode.nextSibling)
        {	
	        this.loadTab(currentNode);
        }																		
    }		

    this.getTabIdByData = function(data)
    {
        var d;
        for (d in self.tabs)
        {
	        if (self.tabs[d].data == data)
	        {
		        return d;
	        }
        }
    }

    this.loadTab = function(tabDom)
    {							
        if (tabDom.nodeName != "a" && tabDom.nodeName != "A")
        {
	        return false;
        }	      
        
        var tabObj = this.tabs[tabDom.getAttribute("id")] =
        {
            id:         tabDom.getAttribute("id"),
	        img:        tabDom.getAttribute("img"),
            data:       tabDom.getAttribute("data"),  
	        txt:        tabDom.getAttribute("txt"),
	        sc:         tabDom.getAttribute("selectedClass"),
	        dsc:        tabDom.getAttribute("deselectedClass"),
	        assetType:  tabDom.getAttribute("assetType"),
	        sortBy:     tabDom.getAttribute("sortBy"),
	        isDefault:  tabDom.getAttribute("isDefault"),
	        functor:    eval(tabDom.getAttribute("callback"))
        }                        

        tabDom.innerHTML = tabObj.txt
        attachEvt(tabObj.id, "click", self.switchTab);
        
        if (Boolean( parseInt(tabObj.isDefault) ))
        {
            tabDom.className = tabDom.className + " " + tabObj.sc;
        }
        else
        {
            tabDom.className = tabDom.className + " " + tabObj.dsc;
        }	
    }		   

    this.switchTab = function()
    { 
        if (isIE)
        {
	        elem = event.srcElement;
        }
        else
        {
	        elem = this;
        }
        var dispatchHandler = false;
        for (var tab in Mugc.tabElf.tabs)
        {		
	        var current = Mugc.tabElf.tabs[tab];														
	        var currentElem = document.getElementById(current.id);														
	        if (elem.id == current.id)
	        {
		        if (elem.selected)
		        {	
			        return false;
		        } 						
		        // switch to selected css class
		        currentElem.className = currentElem.className.replace(current.dsc, current.sc);    
		        dispatchHandler = true;
	        }
	        else
	        {
		        currentElem.className = currentElem.className.replace(/(.*\s)(eda_ugc.*)/, "$1" + current.dsc);
	        }
	        currentElem=null;
        }   
        if (dispatchHandler)
        {
	        var current = Mugc.tabElf.tabs[elem.getAttribute("id")];
	        try
	        {
		        return true;
	        }
	        finally
	        {
		        var tabPanelData = {pId:"eda_ugc_panel_items", assetType:current.assetType, assetModifier:current.sortBy, page:"1", assetAction:"getVideo"};
		        current.functor(tabPanelData, videoSectionRender);
	        }
        }
    }           
}

Mugc.pagerElf = function(pId, renderFunctor)
{ 
    var self = this;
    this.renderer = renderFunctor;
    this.id = pId;
    
    this.div;
    this.numPerPage
    this.numPages;
    this.totalItems;
    this.buildItems = function(page)
    {
        var upperLimit  = self.data.page * self.numPerPage;
        var actualUpper = (upperLimit > self.totalItems)? self.totalItems:upperLimit;
        var lowerLimit  = upperLimit - (self.numPerPage-1);
        return lowerLimit + "-" + actualUpper + " of " + self.totalItems + " Items";
    }
    
    this.loadPager = function(data, totalItems, numPerPage)
    {
        self.div = document.getElementById(data.pId.replace("items","pager"));
        self.data = data;
        self.numPerPage = numPerPage;
	    self.totalPages = Math.ceil(totalItems/numPerPage);
	    
	    if (self.numPages <= 1)
	    {
		    document.getElementById(self.id).innerHTML = "";
		    return false;
	    }
	    self.totalItems = totalItems;
	    var sPagerHTML = [];
	    var i = 0;
	    var iterator = 1;

        var firstStyle  = (self.data.page > 1)? "eda_ugc_pager_active":"eda_ugc_pager_inactive";
        var lastStyle   = (self.data.page != self.totalPages)? "eda_ugc_pager_active":"eda_ugc_pager_inactive";

	    sPagerHTML[i++] = '<div class="eda_ugc_pager eda_ugc_pager_' + this.id + '">';
	    sPagerHTML[i++] = '<div class="eda_ugc_pager_count" id="eda_ugc_pager_count' + this.id +'" current="1">' + self.buildItems();;
	    sPagerHTML[i++] = '</div>';
	    sPagerHTML[i++] = '<div class="eda_ugc_pager_pagination">';
	    sPagerHTML[i++] = '<span onclick="Mugc.'+ this.id +'.first()" id="Mugc_'+ this.id +'_first" class="eda_ugc_pager_first ' + firstStyle + '">First</span>';
	    sPagerHTML[i++] = '<span class="eda_ugc_pager_pipe">|</span>';
	    sPagerHTML[i++] = '<span onclick="Mugc.'+ this.id +'.previous()" id="Mugc_'+ this.id +'_previous" class="eda_ugc_pager_previous ' + firstStyle + '">« Previous</span>';
	    sPagerHTML[i++] = '<span class="eda_ugc_pager_pipe">|</span>';
	    sPagerHTML[i++] = '<span onclick="Mugc.'+ this.id +'.next()" id="Mugc_'+ this.id +'_next" class="eda_ugc_pager_next ' + lastStyle + '">Next »</span>';
	    sPagerHTML[i++] = '<span class="eda_ugc_pager_pipe">|</span>';
	    sPagerHTML[i++] = '<span onclick="Mugc.'+ this.id +'.last()" id="Mugc_'+ this.id +'_last" class="eda_ugc_pager_last ' + lastStyle + '">Last</span>';
	    sPagerHTML[i++] = '</div>';
	    sPagerHTML[i++] = '</div>';
	    
	    self.div.innerHTML = sPagerHTML.join('');	
    }

    this.previous = function()
    {
	    if(self.data.page > 1)
	    {
	        self.data.page--;
	        Mugc.panelFactory.getPanelData(self.data, renderFunctor);
	    }
    }
    this.next = function()
    {
	    if(self.data.page < self.totalPages)
	    {
	        self.data.page++;
	        Mugc.panelFactory.getPanelData(self.data, renderFunctor);
	    }
    }
    this.first = function()
    {
        self.data.page=1; 
        Mugc.panelFactory.getPanelData(self.data, renderFunctor);
    }					
    this.last = function()
    {
        self.data.page=self.totalPages;
        Mugc.panelFactory.getPanelData(self.data, renderFunctor);
    }
}

Mugc.ratingElf = function(id)
{
	var self = this;
	var data;
	this.id = id;
	
	this.setStaticRating = function()		
	{
		try
		{
			var con = document.getElementById(this.id);
			var stars;
			if (isIE)
			{
				stars = con.children;
			}
			else
			{
				stars = con.childNodes;
			}
			var valFound = false;
			for (var i=stars.length-1; i>-1; i--)
			{
				var item = stars[i];
				if (item.getAttribute("selected"))
				{
					valFound = true;
				}
				if (valFound)
				{
					var sOverBPos = "0 -" + item.offsetHeight + "px";
					item.style.backgroundPosition =  sOverBPos;						
				}
				else
				{
					item.style.backgroundPosition =  "0% 0%";
				}
			}
		}
		catch (e) {}
	}
	this.wireEvents = function(controlId)
	{
		var con = document.getElementById(controlId);
		var stars;
		if (isIE)
		{
			stars = con.children;							
		}
		else
		{
			stars = con.childNodes;
		}
		for (var i=0; i<stars.length; i++)
		{
			var item = stars[i];
			attachButtonEvents(item, self.ratingHover);
		}					
	}
	this.ratingHover = function(e)
	{
		var evt, obj;
		if (isIE) { evt = event; obj = event.srcElement; }
		else { evt = e; obj = e.target; }

		if (evt.type == "mouseover")
		{						
			var sOverBPos = "0 -" + obj.offsetHeight + "px";
			obj.style.backgroundPosition =  sOverBPos;		
			var item = obj;
			while (item = item.previousSibling)
			{
				var sOverBPos = "0 -" + item.offsetHeight + "px";
				item.style.backgroundPosition =  sOverBPos;						
			}	
			item = obj;															
			while (item = item.nextSibling)
			{
				item.style.backgroundPosition =  "0% 0%";						
			}								
		}	
		else
		{
			self.setStaticRating();
		}
	}
	this.changeRating = function(num, oData)
	{	    
		try {
		    if (typeof oData != "undefined") {
		        data = oData;
		    }
			var con = document.getElementById(this.id);
			var stars;				
			if (isIE)
			{
				stars = con.children;
			}
			else 
		    {
				stars = con.childNodes;
			}
			
			for (var i=0; i<stars.length; i++)
			{
				var item = stars[i];
				if (i+1 == num)
				{
					item.setAttribute("selected", "true");
				}
				else
				{
					item.removeAttribute("selected");
				}
			}	
		}
		catch (e) {}
	}
	this.saveRating = function(rating)
	{
	    if(Mugc.user.id == "")
	    {
	       // login({vid:data.assetId});
	       // return;
	    }
	
		var obj = Mugc.cacheManager.retrieve(dataObjectHelper.buildUniqueId(data));
		obj.getrating.userRating    = rating;
		obj.getrating.success       = 1;
		
		var yid         = Mugc.user.id;
		var crumb       = Mugc.user.crumb; 
		
		var sUrl        = Mugc.accessorBase + "&assetAction=setRating&assetType=video&assetId=" + data.assetId + "&yid=" + yid + "&crumb=" + crumb + "&rating=" + rating;
		var callback    = {success: self.ratingSuccess, failure: self.ratingFailure, args: null};
		var transaction = YAHOO.util.Connect.asyncRequest("GET", sUrl, callback, null);
		
		self.changeRating(rating);
	}
	this.ratingSuccess = function(o) {}
	this.ratingFailure = function(o) {}
}

/******************************************** Handle Video Click ***************************/    

function resetAdServer()
{
	document.getElementById("adFrame").src = document.getElementById("adFrame").src;
	document.getElementById("adFrameTop").src = document.getElementById("adFrameTop").src;
}
function handleVideoClick(o)
{			
	var obj         = obev(o).o;
	var sClipId     = obj.getAttribute("clipId");
	var universalId = obj.getAttribute("universalId");
	
	clipId = sClipId;
	Mugc.playVideo(sClipId);
	
	vYid    = obj.getAttribute("yid");
	userId  = Mugc.user.id;
    
    var phugcVideoId        = obj.getAttribute("videoId");
    var ratingPanelData     = {pId:"eda_cmpt_ugcSubmitter", userId:userId, assetType:"video", page:"1", assetAction:"getAll", panelItemCount:Mugc.commentParams.nCom, assetId:phugcVideoId, yid:vYid, did:obj.getAttribute("did"), universalId:universalId};
    var commentPanelData    = {pId:"eda_cmpt_ugcComment_items", userId:userId, assetType:"video", page:"1", assetAction:"getAll", panelItemCount:Mugc.commentParams.nCom, assetId:phugcVideoId, yid:vYid, universalId:universalId};

    if(Mugc.activeVideoObj) Mugc.activeVideoObj.className = Mugc.activeVideoObj.className.replace(" eda_ugc_videoThumb_active", "");
    obj.className += " eda_ugc_videoThumb_active";

	Mugc.panelFactory.getPanelData(commentPanelData, commentSectionRender);
    Mugc.panelFactory.getPanelData(ratingPanelData, ratingSectionRender);
    
    Mugc.activeVideoObj = obj
    document.getElementById("videoTrackingPixel").src = "http://video.yahoo.com/video/sping?vid=" + obj.getAttribute("universalId");
}	
    
/******************************************** RENDERERS ***************************/    
    
function videoSectionRender(o, data)
{	
	// HACK ALERT This whole thing needs to be rewritten for reuse
	var returnvar;
	
	if(o && (o.videos.length > 0) )
	{
	    var videos = o.videos;
	    var sContent = [];
	    var idx = 0;
    	
    	
	    var aData = [];
	    aData[0] = "myCommentLeft";
	    aData[1] = data.assetType;
	    aData[2] = data.assetModifier;
	    aData[3] = 1;
	    aData[4] = "getall";
    	
    	var presentationID, item;
    	
	    for(var i=0; i < o.videos.length; i++)
	    {
		    item            = videos[i];
		    presentationID  = (/@/.test(item.yid))? item.yid.split("@")[0]:item.yid;
		    
		    aData[5] = item.id;
		    sContent[idx++] = '<div class="eda_ugc_videoThumb_div">';
		    sContent[idx++] = '<img class="eda_ugc_videoThumb" onmouseover="toggleOverlay(this)" onmouseout="toggleOverlay(this)" incrament="' + i + '" width="101" height="71" src="';
		    sContent[idx++] = item.thumbnail_url;
		    sContent[idx++] = '" videoId="';
		    sContent[idx++] = item.id;	
		    sContent[idx++] = '" clipId="';
		    sContent[idx++] = item.clip_id;	
		    sContent[idx++] = '" universalId="';
		    sContent[idx++] = item.universal_id;
		    sContent[idx++] = '" did="';
		    sContent[idx++] = item.did;	
		    sContent[idx++] = '" yid="';
		    sContent[idx++] = item.yid;	
		    sContent[idx++] = '" data="';						
		    sContent[idx++] = aData.join("_");						 
		    sContent[idx++] = '" onclick="handleVideoClick(this)" id="eda_ugc_videoThumb_div_' + i + '"/>';	
		    sContent[idx++] = '<div class="eda_ugc_videoThumb_text">';
		    sContent[idx++] = item.did;
		    sContent[idx++] = '</div><div onmouseover="overlayOn(this)" onclick="handleVideoClickProxy(this)" incrament="' + i + '" onmouseout="overlayOff(this)" class="bgHolder_inactive" id="eda_ugc_videoThumbBG_div_' + i + '"></div></div>';
	    } 			
     
        if(videos.total_rows > Mugc.videoParams.nCom)
        {
            Mugc.videoPager.loadPager(data, videos.total_rows, Mugc.videoParams.nCom)
    	    document.getElementById("eda_ugc_panel_pager").style.display   = "block";
        }
        else
        {
    	    document.getElementById("eda_ugc_panel_pager").style.display   = "none";
        }        
       
        var videoRows = Math.min( 5, ( Math.ceil((o.videos.total_rows/4)) ) );
        var videoOffset = (videoRows < 5)? 60:80;
	    var videoHeight = videoOffset + (114 * videoRows);
	    try
	    {
	        document.getElementById(Mugc.tabModule).style.display   = "block";
	        document.getElementById(Mugc.tabModule).style.height    = videoHeight;
	    }catch(e){}

	    returnvar = sContent.join("");
	}
	else
	{
	    try
	    {
	        document.getElementById(Mugc.tabModule).style.display   = "block";
	        document.getElementById(Mugc.tabModule).style.height    = 220;
	    }catch(e){}
	    
	    returnvar = document.getElementById("eda_group_ugcTabGroup_nocontentHolder").innerHTML;
	}
	    
	    //MAJOR HACK ALERT This whole thing needs to be rewritten for reuse
	    try
	    {
	        var columntop = (parseInt(document.getElementById(Mugc.tabModule).offsetHeight) + parseInt(document.getElementById(Mugc.tabModule).offsetTop));
	        document.getElementById("module14").style.top = columntop;
	        document.getElementById("module15").style.top = columntop;
	        document.getElementById("module18").style.top = (parseInt(document.getElementById("module15").offsetHeight) + parseInt(document.getElementById("module15").offsetTop));
	    }
	    catch(e)
	    {}
	
	return returnvar;
}

function handleVideoClickProxy(elm)
{
    var divNum = elm.getAttribute("incrament");
    var thediv = document.getElementById("eda_ugc_videoThumb_div_" + divNum);
    handleVideoClick(thediv);
}

function toggleOverlay(elm)
{
    var divNum = elm.getAttribute("incrament");
    var thediv = document.getElementById("eda_ugc_videoThumbBG_div_" + divNum);
    thediv.className = (/bgHolder_inactive/.test(thediv.className))? "bgHolder_active":"bgHolder_inactive";
}
function overlayOn(elm)
{
    var divNum = elm.className = "bgHolder_active"
}
function overlayOff(elm)
{
    var divNum = elm.className = "bgHolder_inactive"
}

function commentSectionRender(o, data)
{
	var comments;				
	try
	{
		comments = o.getcomments;
		comments.length;
	}
	catch(e) {
		document.getElementById("commentItems").innerHTML = "";						
		return "";
	}
	
	var sContent = [];
	var idx = 0;
	
	if ( ( typeof(comments[0]) == 'undefined') && ( (typeof(Mugc.myComments[data.assetId]) == 'undefined') || (Mugc.myComments[data.assetId].length < 1) ) )
	{	
		document.getElementById("eda_cmpt_ugcComment_num").style.display = "none";
		document.getElementById("eda_cmpt_ugcComment_items").style.display = "none";
		document.getElementById("eda_cmpt_ugcComment_pager").style.display = "none"
	}
	else
	{
		document.getElementById("eda_cmpt_ugcComment_num").style.display = "block";
		document.getElementById("eda_cmpt_ugcComment_items").style.display = "block";
        document.getElementById("eda_cmpt_ugcComment_pager").style.display = (typeof comments.total_rows == 'undefined' ||  comments.total_rows <= Mugc.commentParams.nCom)? "none":"block";
	}	

	document.getElementById("eda_cmpt_ugcComment_leaveComment").style.display = ((Mugc.myComments && Mugc.myComments[data.assetId]) || (Mugc.user.id == ""))? "none":"block";
	document.getElementById("commentSignIn").vidID =  data.assetId ;
	document.getElementById("eda_cmpt_ugcComment_leaveCommentLogin").style.display = (Mugc.user.id == "")? "block":"none";
	
	var increment = (typeof(Mugc.myComments[data.assetId]) == "undefined")? 0:Mugc.myComments[data.assetId].length;
	document.getElementById("eda_cmpt_ugcComment_num").innerHTML = comments.total_rows + increment + " comments";
	
	var now = new Date();
	var tzo = (now.getTimezoneOffset()*60*1000);
	
	var dateCreated;
    if (data.page == 1)
	{					
        sContent[idx++] = renderMyComments(data);
    }
    
	for (var i=0; i < comments.length; i++)
	{
		var item = comments[i];
		dateCreated = new Date(Date.parse(item.date_created.replace(/-/g,"/")) - tzo );

		sContent[idx++] = '<div class="eda_ugc_commentItem_container">';
		sContent[idx++] = '<div class="eda_ugc_commentItem_innerContainer">';
		sContent[idx++] = '<div class="eda_ugc_commentItem_img"><img class="eda_ugc_avatar" src="http://lookup.avatars.yahoo.com/images?yid=' + item.yid + '&size=medium&type=jpg"/></div>';
		sContent[idx++] = '<div class="eda_ugc_commentItem_content">';
		//sContent[idx++] = '<div class="eda_ugc_commentItem_head"><a href="ymsgr:sendIM?' + item.yid  + '"><img class="eda_ugc_online" src="http://opi.yahoo.com/online?u=' + item.yid + '&m=g&t=0" style="margin-right: 3px; margin-top: 1px; float: left; display: block; border: 0;" /></a><span class=eda_ugc_commentItem_head>' + item.did + ' - ' + dateCreated + '</span></div>';
		sContent[idx++] = '<div class="eda_ugc_commentItem_head" title="' + item.did + ' - ' + dateCreated + '"><span class="eda_ugc_commentItem_head">' + item.did + ' - ' + dateCreated + '</span></div>';
		sContent[idx++] = '<div class="eda_ugc_commentItem_text">';
		sContent[idx++] = decodeURIComponent(item.comment_text);
		sContent[idx++] = '</div>';
		sContent[idx++] = '</div>';
		sContent[idx++] = '<div class="eda_ugc_commentItem_abuse" title="report abuse"><a href="http://help.yahoo.com/l/us/yahoo/abuse/abuse_ugc.html" target="_new"></a></div>';
		sContent[idx++] = '</div>';
		sContent[idx++] = '</div>';
	}
	Mugc.userComment.setData(data);
    Mugc.commentPager.loadPager(data, comments.total_rows, Mugc.commentParams.nCom);
	
    document.getElementById("eda_cmpt_ugcComment_container").style.display = "block";
	
	return sContent.join("");
}

function renderMyComments(data) 
{
	
	
	var sContent    = [];
	var idx         = 0;
	var aComments   = Mugc.myComments[data.assetId];

	var now         = new Date();
	var tzo         = (now.getTimezoneOffset()*60*1000);
	
	if(typeof(aComments) != "undefined")
	{
	    for (var i=0; i < aComments.length; i++)
	    {
		    var item = aComments[i];
		    dateCreated = new Date(Date.parse(item.date_created.replace(/-/g,"/")) - tzo );
		    sContent[idx++] = '<div class="eda_ugc_commentItem_container">';
		    sContent[idx++] = '<div class="eda_ugc_commentItem_innerContainer">';
		    sContent[idx++] = '<div class="eda_ugc_commentItem_img"><img class="eda_ugc_avatar" src="http://lookup.avatars.yahoo.com/images?yid=' + item.yid + '&size=medium&type=jpg"/></div>';
		    sContent[idx++] = '<div class="eda_ugc_commentItem_content">';
		    sContent[idx++] = '<div class="eda_ugc_commentItem_head"><span class=eda_ugc_commentItem_head>' + item.did + ' - ' + dateCreated + '</span></div>';
		    sContent[idx++] = '<div class="eda_ugc_commentItem_text">';
		    sContent[idx++] = decodeURIComponent(item.comment_text);
		    sContent[idx++] = '</div>';
		    sContent[idx++] = '</div>';
		    sContent[idx++] = '</div>';
		    sContent[idx++] = '</div>';
	    }
	}
	return sContent.join("");
}

Mugc.comment = function(sTAId) 
{ 
    var self = this;
    this.data;
    var oTextArea;
    var sTextAreaId = sTAId;
    this.addComment = function(o) 
    {
        //if(Mugc.user.id == "") login({vid:self.data.assetId})
        
        if (!oTextArea) 
        {
            oTextArea = document.getElementById(sTextAreaId);
        }
        var text = oTextArea.value;	    
	    setMyComments(self.data.assetId, text);
	    var getDataReturn   = {data:self.data};	
	    
	    var commentUrl  = dataObjectHelper.buildUgcAccessorUrl(self.data, Mugc.user.id) + "&crumb=" + Mugc.user.crumb + "&comment=" + encodeURIComponent(text);
	    
	    oTextArea.value="";
   
		var callback = {success:this.commentSuccess, failure:this.commentFailure, args:null};
		var transaction = YAHOO.util.Connect.asyncRequest("GET", commentUrl, callback, null);
    }
    this.commentSuccess = function()
    {
        var cData = new clone(self.data);
        cData.assetAction = "getcomments";
        Mugc.panelFactory.getPanelData(cData, commentSectionRender); 
        
        document.getElementById("eda_cmpt_ugcComment_leaveComment").style.display = "none";
    }
    this.commentFailure = function()
    {
        var cData = new clone(self.data);
        cData.assetAction = "getcomments";
        Mugc.panelFactory.getPanelData(cData, commentSectionRender); 
        
        document.getElementById("eda_cmpt_ugcComment_leaveComment").style.display = "none";
    }
    this.setData = function(oData) 
    {
        self.data = new clone(oData);
        self.data.assetAction = "setcomment";
    } 
    this.processResponse = function(o) 
    {   
    }

}

function setMyComments(id, commentText) 
{
	var date = (new Date()).toString();
	var currentCId;
	var node;
	if (typeof Mugc.myComments[id] == 'undefined') 
	{
		Mugc.myComments[id] = {length: 1};
		currentCId = 0;
		node = Mugc.myComments[id][currentCId] = {};
	}	
	else 
	{
		Mugc.myComments[id].length++;
		currentCId = Mugc.myComments[id].length - 1;
		node = Mugc.myComments[id][currentCId] = {};
	}
	node.comment_text = commentText;
	node.yid = Mugc.user.id;
	node.did = Mugc.user.id;
	node.date_created = date;		
}

function ratingSectionRender(o, data)
{
	Mugc.viewerRatingWidget.wireEvents("eda_ugc_viewer_RatingControl");
	var ratings;
	if (typeof o.getrating == 'undefined')
	{
		ratings = {success:1, key: 0, averageRating:0, ratingCount: 0, userRating: 0};
	}
	else
	{
		ratings = o.getrating;
	}

	if (ratings.success)
	{
		Mugc.averageRatingWidget.changeRating(Math.floor(ratings.averageRating), data);	
		Mugc.viewerRatingWidget.changeRating(ratings.userRating, data);
	    document.getElementById("eda_ugc_submitter_average_text2").innerHTML = document.getElementById("eda_ugc_submitter_average_text2").innerHTML.replace(/(_num_)|(\d)+/, o.getrating.ratingCount);
        document.getElementById("eda_ugc_submitter_average_text2").style.display = "block";
        setTimeout("Mugc.averageRatingWidget.setStaticRating()", 50);
        setTimeout("Mugc.viewerRatingWidget.setStaticRating()", 50);
    }
	else
	{
		Mugc.averageRatingWidget.changeRating(0, data);	
		Mugc.viewerRatingWidget.changeRating(0, data);	
	    document.getElementById("eda_ugc_submitter_average_text2").style.display = "none";
	}
	
	document.getElementById("eda_ugc_submitter_name_avatar").innerHTML  = '<img class="eda_ugc_avatar" src="http://lookup.avatars.yahoo.com/images?yid=' + data.yid + '&size=medium&type=jpg" width="52" height="51" />';
	
	document.getElementById("eda_ugc_submitter_name_text2").innerHTML   = data.did;
	document.getElementById("eda_ugc_submitter_name_text3").innerHTML   = o.plays + " plays";
	
	var directLink = (/\&/.test(document.location.href))? (document.location.href.match(/(.*)\&/)[1] + "&vid=" + data.assetId) : (document.location.href + "&vid=" + data.assetId);
	document.getElementById("eda_cmpt_ugcSubmitter_embed_input").value   = directLink

    document.getElementById("eda_cmpt_ugcSubmitter_container").style.display = "block";

	return false;
}	
				
/******************************************** HELPERS ***************************/    

var isIE = (navigator.userAgent.indexOf("MSIE") != -1) ? true : false;	    
function getIndex(arr, value){for(var i=0; i<arr.length; i++){if(arr[i] = value) return i;} return -1;}
function clone(obj) {for (i in obj) {this[i] = obj[i];}}
function attachEvt(elemName, eventName, func) {try {with (document.getElementById(elemName)) {if (isIE) {attachEvent("on" + eventName, func);}else {addEventListener(eventName, func, false);}}}catch (e) {}}
function attachButtonEvents(btnName, functor) {try {var obj;switch (typeof btnName) {case "string":obj = document.getElementById(btnName);break;case "object":obj = btnName;break;}with (obj) {if (isIE) {attachEvent("onmouseover", functor);attachEvent("onmouseout", functor);}else {addEventListener("mouseover", functor, false);addEventListener("mouseout", functor, false);}}}catch (e) {}}
function obev(ob) {if (typeof ob == 'object') {return {o: ob, e: null};}else {var evt, obj;if (isIE) { evt = event; obj = event.srcElement; }else {evt = e; obj = e.target;}return {o: obj, e: evt};}}	
function limitTextarea(o) { 
    // P2
    var obj = obev(o).o;
    if (parseInt(obj.value.length >= 4)) {       
        obev(o).e.cancelBubble();
    }
}
    
function login(qs)
{
	var done = document.location.href
	var sURL = "http://login.yahoo.com/?.done=";
	if (typeof qs == 'undefined') {
		if (currentCommentsId) {
			done += "currentcommentsid=" + currentCommentsId + "&";
		}
		if (clipId) {
			done += "clipid=" + clipId + "&";
		}	
		if (clipId) {
			done += "vyid=" + vYid + "&";
		}				
	}
	else {
		done += qs;
	}
	done = escape(done);							
	document.location.href = sURL + done;
}    



function login(args)
{
	var done = document.location.href;
	var sURL;
	
	switch (Mugc.env)
	{
		case "dev":
			sURL = "https://alpha.login.yahoo.com/?.done=";
			break;
		case "stage":
			sURL = "https://beta.login.yahoo.com/?.done=";
			break;
		case "": 
			sURL = "https://login.yahoo.com/?.done=";
			break;						
	}
	
	done += "&vid=" + args.vid;
	done = escape(done);							
	
	document.location.href = sURL + done;
}

var dataObjectHelper = new function()
{
    this.buildUniqueId = function(obj)
    {
        var s = "";
        for (var dataItem in obj)
        {
            s += obj[dataItem];
            s += "$";
        } 
        return s.substring(0, s.length - 1);
    }

    this.buildQueueId = function(obj)
    {
        var dataString = this.buildUniqueId(obj);
        return dataString.match(/$(.*)/)[1];
    }
    
    this.buildUgcAccessorUrl = function(obj, yid)
    {
    	var sUrl = Mugc.accessorBase + "&assetAction=" + obj.assetAction + "&assetType=" + obj.assetType;
    	
    	sUrl += (obj.page) ?            "&page=" + obj.page:"";
    	sUrl += (obj.panelItemCount) ?  "&num=" + obj.panelItemCount:"";
	    sUrl += (obj.assetId) ?         "&assetId=" + obj.assetId:"";			
	    sUrl += (obj.assetModifier) ?   "&by=" + obj.assetModifier:"";
	    if(typeof(yid) !== "undefined")
	    {
    	    sUrl += "&yid=" + yid;	    	    	    
    	}
    	else
    	{
    	    sUrl += (obj.userId) ?             ("&yid=" + obj.userId):"";	    	    	    
    	}
	    
	    sUrl += (obj.universalId) ?     "&uid=" + obj.universalId:"";	    	    	    
	    
	    return sUrl;
    }
    this.buildObject = function(obj) 
    {
                       
    }
}

Mugc.cacheManager = new function()
{
	var self = this;
	var theCache = {};					
	
	this.retrieve   = function(cacheId) {var aId = cacheId.split("$");return get(aId.join("$"));}
	this.cache      = function(cacheId, data) {var aId = cacheId.split("$");aId.splice(0, 1);var id = aId.join("$");theCache[id] = data;}					
    this.getData    = function(dataId, sUrl, callback, returnArgs)
    {
        var data;
        if (data = get(dataId))return callback(data, returnArgs);
        var callback = {success: returnData, failure: returnData, argument:{sDataId: dataId, callback: callback, args:returnArgs}};
        var transaction = YAHOO.util.Connect.asyncRequest("GET", sUrl, callback, null);
    }
    
	function get(cacheId) {var aId = cacheId.split("$");aId.splice(0, 1);var id = aId.join("$");if (typeof theCache[id] != 'undefined') {return theCache[id];}}  
	function set(cacheId, data)
	{
	    var aId = cacheId.split("$");
	    aId.splice(0, 1);
	    var id = aId.join("$");
	    theCache[id] = data;
	}
	
	function returnData(oResp)
	{
	    try
	    {
	        var oData = eval("(" + oResp.responseText + ")");
	    }
	    catch(e)
	    {}
	    
	    set(oResp.argument.sDataId, oData);
	    oResp.argument.callback(oData, oResp.argument.args);
	}
}

function submitUgcForm(yDomain, pid, urls)
{
    if( document.getElementById("terms").checked )
    {
      var baseDoneUrl = "http://" + yDomain + "/eda/upload.asp?pid=" + pid + "---";
      document.getElementById("_done").value  = baseDoneUrl + "1---" + urls.success;
      document.getElementById("_error").value = baseDoneUrl + "0---" + urls.fail;
      document.getElementById("uploadForm").submit();
      document.getElementById("submitImageDiv").innerHTML = "Submitting...";
    }
    else
    {
    alert("You must accept Terms and Conditions to submit video");
    }
}