﻿var m_listTags = new Array();                   // The cache
var m_nTotalTags = 0;
var m_bFirst = true;
var m_nLastTag = -1;
var m_sLastTag = "";
var m_sCurrentTagName = "";

var m_nCurrentTagID  = "";
var m_bTagBrowser = false;

function Tag()
{
}

function ResolveLimit()
{
    var elFresh = document.getElementById('freshness');
    
    var nLimit = 0;
    if(elFresh != null)
    {       
        var sFresh = "";
        if(document.all)
        {
            sFresh = document.getElementById('freshness').innerText;
        } 
        else
        {
            sFresh = document.getElementById('freshness').textContent;
        }
        
        switch(sFresh)
        {
            case "No Limit":
                nLimit = 0;
                break;            
            case "24 Hours":
                nLimit = 1;
                break;
            case "15 Days":
                nLimit = 2;
                break;                        
            case "30 Days":
                nLimit = 3;
                break;
            case "365 Days":
                nLimit = 4;
                break;

        }
    }
    
    var elID = document.getElementById('freshness_value');
    if(elID != null)
    {
        elID.value = nLimit;     
    }
    
    //alert(nLimit);   
    return(nLimit);
}
function SelectTagForSearch(tagID, tagText)
{
    
    var elID = document.getElementById('current_tag');
    if(elID != null)
        elID.value = tagID;
        
    var elIDT = document.getElementById('current_tag_text');
        if(elIDT != null)
            elIDT.value = tagText;           
                
                 
    ResolveLimit();
    var buttonSearch = document.getElementById("pbSearch");
    if (buttonSearch)
    {
        DebugOut("  Auto clicking pbSearch");
        buttonSearch .click();        
     }

}
function SelectTag(tagID, sResultControl)
{
    SetWaiting(sResultControl);
    var nLimit = ResolveLimit();
    m_nLastTag = tagID;
    TagZar.ListRelatedTags(
        nLimit, tagID,
        SucceededCallbackWithContext, FailedCallback,
        sResultControl);
}

function SelectTagByText(sTagText, sResultControl)
{
    SetWaiting(sResultControl);
    var nLimit = ResolveLimit();
    toggleBox("divSearch", 0);
    
    m_sLastTag = sTagText;
    m_nLastTag = -2;
    DebugOut("Setting m_sLastTag to " + m_sLastTag);
    TagZar.ListRelatedTagsByText(
        nLimit, sTagText,
        SucceededCallbackWithContext, FailedCallback,
        sResultControl);
}


function GetTopTags(sResultControl) 
{
    SetWaiting(sResultControl);
    var nLimit = ResolveLimit();
    TagZar.GetTopTags(nLimit,
        SucceededCallbackWithContext, FailedCallback,
        sResultControl);
        
}

function GetAllTags(sResultControl) 
{
    SetWaiting(sResultControl);
    var nLimit = ResolveLimit();
    TagZar.GetAllTags(nLimit, 
        SucceededCallbackWithContext, FailedCallback,
        sResultControl);
        
}

function SetWaiting(sResultControl)
{
    var elOutput = document.getElementById(sResultControl);
    elOutput.innerHTML = "<center>Loading Tags</center>";
    
}

function SucceededCallbackWithContext(result, userContext, methodName)
{    
    var elOutput = document.getElementById(userContext);
    
    m_lisTags = new Array();
    
    var tags = result.selectNodes("//tags/tag");
    m_nTotalTags = 0;
    
    for(j = 0;j < tags.length; j++)
    {	           		
        var tagNode = new Tag();
        
        if(tags[j].selectSingleNode("TagID").text == null)
        {
            tagNode.TagID = tags[j].selectSingleNode("TagID").textContent;        
            tagNode.TagText = tags[j].selectSingleNode("TagText").textContent;
            tagNode.DateAdded = tags[j].selectSingleNode("DateAdded").textContent;        
            tagNode.TagRelate = tags[j].selectSingleNode("TagRelate").textContent;        
        }
        else
        {
            tagNode.TagID = tags[j].selectSingleNode("TagID").text;        
            tagNode.TagText = tags[j].selectSingleNode("TagText").text;
            tagNode.DateAdded = tags[j].selectSingleNode("DateAdded").text;      
            tagNode.TagRelate = tags[j].selectSingleNode("TagRelate").text;          
        }
        
       	m_listTags[j] = tagNode;                                      
       	m_nTotalTags++;
    }   
    
    
    
    DebugOut("  " + m_nTotalTags + " tags loaded.");
    
    //
    // Right now, just clear this out. Want to do some kind of transition here
    //
    elOutput.innerHTML = "";
    
    if(m_bFirst == false)
    {
       // elOutput.innerHTML += "<div><a href=\"#\" onclick=\"SelectTag(" + m_nLastTag + ", '" + userContext + "')\" >Back</a></div>";
    }
    
    var bSetSel = false;
    var bLast = false;
    var sOutput = "";
    DebugOut(" m_sLastTag = " + m_sLastTag + ", m_nLastTag = " + m_nLastTag);
    for(j = 0; j < m_nTotalTags; j++)
    {
        //DebugOut("Processing " + j);
        var sTagTax  = "";
        var sDivID = "";
        var sTagClass = "";
        
        
        ocTag = m_listTags[j].TagText;
                
        if(m_sLastTag.length > 0)
        {            
            if(m_listTags[j].TagText == m_sLastTag)
            {            
                m_nLastTag = m_listTags[j].TagID;            
                m_sLastTag = "";                         
            }                       
        }
        
        if(m_listTags[j].TagID == m_nLastTag ||  (m_nLastTag ==-1 &&  m_listTags[j].TagID == 0))
        {        
            
            // DebugOut("Setting to cur: " + m_listTags[j].TagText);
            var elID = document.getElementById('current_tag');
            if(elID != null)
                elID.value = m_listTags[j].TagID;
            
            var elIDT = document.getElementById('current_tag_text');
            if(elIDT != null)
                elIDT.value = m_listTags[j].TagText;           
            m_sCurrentTagName = m_listTags[j].TagText;
            m_nCurrentTagID = m_listTags[j].TagID;
      

           ocTag = "<b>" + ocTag + "</b>";            
           sDivID = "tag_selected";
           
        }
        else
        {
            sDivID = "tag_" + m_listTags[j].TagID;
            
        }
        
        var tagSize = "";
    
        if (sDivID == "tag_selected")
        {
            tagSize = "font-size: 30px; text-decoration: underline; color: #4B72A9;";
            tagSize = "";
            sTagClass = "cloudItem_Selected";
            
        }
        else
        {                      
            var nRelated = parseInt(m_listTags[j].TagRelate);
            nRelated = nRelated + 11;
            
            if(nRelated > 30)
                nRelated = 30;
             
             if(nRelated == 0)
                nRelated = 1;
                
             if (m_listTags[j].TagID == 0)
             {
                nRelated = 25;
             }
             
             tagSize = "style = \"font-size: " + nRelated + "px;\"";
             sTagClass = "cloudItem";
         }
            
            
            
           //        <span style="font-size: 11px;">         
        //var tagClass = "cloud_tag_" + nRelated;
        
        
        //elOutput.innerHTML += "<div class=\"" + tagClass + "\" id =\"" + sDivID + "\"><a href=\"#\" onclick=\"SelectTag(" + m_listTags[j].TagID + ", '" + userContext + "')\" >" + ocTag + "</a>&nbsp;&nbsp;&nbsp;</div>";        
        
         //if( g_bAutoSearch == false)
         //   elOutput.innerHTML += "<div class=\"" + tagClass + "\" id =\"" + sDivID + "\"><a href=\"#\" onclick=\"SelectTag(" + m_listTags[j].TagID + ", '" + userContext + "')\" >" + ocTag + "</a>&nbsp;&nbsp;&nbsp;</div>";        
        //else
        //    elOutput.innerHTML += "<div class=\"" + tagClass + "\" id =\"" + sDivID + "\"><a href=\"#\" onclick=\"SelectTagForSearch(" + m_listTags[j].TagID + ", '" + m_sCurrentTagName + "')\" >" + ocTag + "</a>&nbsp;&nbsp;&nbsp;</div>";        
        
        var sImg = "";
        
        if(m_bTagBrowser == true)
            sImg = "<a href='tags.aspx?l=" + m_listTags[j].TagID + "'><img border='0' width='12' height='12'  src='images/info.gif' title = 'View sites in this tag'  align='bottom'></a>";
            
        if( g_bAutoSearch == false)
            sOutput += "<span class='" + sTagClass + "' " + tagSize + " id =\"" + sDivID + "\"><a href=\"#\" onclick=\"SelectTag(" + m_listTags[j].TagID + ", '" + userContext + "')\" >" + ocTag + sImg  + "</a></span> &nbsp;";        
        else
            sOutput += "<span class='" + sTagClass + "' " + tagSize + " id =\"" + sDivID + "\"><a href=\"#\" onclick=\"SelectTagForSearch(" + m_listTags[j].TagID + ", '" + m_sCurrentTagName + "')\" >" + ocTag + sImg  + "</a></span> &nbsp;";        
      
      
    }
    
    elOutput.innerHTML = sOutput;
    m_sLastTag = "";
    if (methodName != "GetAllTags" && m_bTagBrowser != true)
        elOutput.innerHTML += "<span style=\"font-size: 25px;  \"><a href='tagsearch.aspx'>More tags...</a></span> &nbsp;";
    
    elOutput.innerHTML += "<span style=\"font-size: 15px;  \"><a href='#' onclick='OpenTagSearch();'><img border='0' src='images/system-search.png' title='find tags'</img></a></span> &nbsp;";
    //elOutput.innerHTML += "<div id='divSearch' style='visibility:hidden;'>HERE</div> &nbsp;";
    
    
    //DebugOut(elOutput.innerHTML);        
 
  if(methodName == "ListRelatedTags" && m_bFirst == false)
  {
    var buttonSearch = document.getElementById("pbSearch");
    if (buttonSearch)
    {
        DebugOut("  Auto clicking pbSearch");
        buttonSearch .click();        
     }
  }
 
     DebugOut("  Done processing new tags.");   
  m_bFirst = false;
  
  
}

// This is the callback function invoked if the Web service
// failed.
// It accepts the error object as a parameterd.
function FailedCallback(error)
{

    DebugOut("  ERROR HIT: " + error);
/*    var RsltElem = 
        document.getElementById("ResultId");
    RsltElem.innerHTML = 
    "Service Error: " + error.get_message();
    */
}

if (typeof(Sys) !== "undefined") Sys.Application.notifyScriptLoaded();

function freshness(e, sResult)
{		
	var el = document.getElementById("freshness");
	if(el != null)
	{
		el.innerHTML = e.id;
	}
			
	SelectTag(m_nCurrentTagID, sResult);	
}

function freshness_s(e, sResult)
{	
	var el = document.getElementById("freshness");
	if(el != null)
	{
		el.innerHTML = e.id;
	}
			
    SelectTagForSearch(m_nCurrentTagID, sResult);		
}

function OpenTagSearch()
{ 
    toggleBox("divSearch", 1);
    document.getElementById('efTag').focus();              
}

function toggleBox(szDivID, iState) // 1 visible, 0 hidden
{
    if(document.layers)	   //NN4+
    {
       document.layers[szDivID].visibility = iState ? "show" : "hide";
    }
    else if(document.getElementById)	  //gecko(NN6) + IE 5+
    {
        var obj = document.getElementById(szDivID);
        obj.style.visibility = iState ? "visible" : "hidden";
    }
    else if(document.all)	// IE 4
    {
        document.all[szDivID].style.visibility = iState ? "visible" : "hidden";
    }
}