var downPager;
function SelectSortItem(index,requestData)
{
    //SetcionName=0,PostTitle=1,Replies=2,PostAuthor=3,ThreadDate=4
    var idsArr=['postFilterTitle','repliesFilterTitle','authorFilterTitle','threadFilterTitle'];
    var valsArr=['1','2','3','4'];
    if(index<0||index>=idsArr.length)
    {
        return;
    }
    HighLight(idsArr,idsArr[index]);
    if(requestData)
    {
        var option=GetOptionVal();
                    
        var sbVal=getValue('sb',option);
        var val=valsArr[index];
        //if the user still click the same sort item, we need reverse the sort
        if(sbVal.length==3 && sbVal.substring(0,1)==valsArr[index])           
        {
                if(sbVal.substring(2,3)=='0')
                    val=val+':1';
                else
                    val=val+':0';
        }
        else
        {
                if(val=='4')
                {
                    val=val+':1';
                }               
                else
                {
                     val=val+':0';
                }
        }
        setOptionValue('sb',val);
        if(downPager)
        {
            downPager.GoToPage(1);
        }
        else
        {
            OptionInit();
        }
    }
}

function ResetMenu()
{
    var idsArr=['sectionMenuTitle','postMenuTitle','authorMenuTitle','threadDateMenu'];
    var valuesArr=['All forums','All posts','All authors','All'];
    ResetAllMenu(idsArr,valuesArr);
}


//var ajaxUrl; It has been defined in the server client;
function RequestData(hash)
{
    var queryStr=GetAjaxQueryString(hash);
    document.getElementById('forumlist').innerHTML='<div class="loading"><img src="http://im.morningstar.com/im/GlobalHome/LoadingScreenAnimation.gif" /></div>';
    $.ajax({ type: "GET", url: ajaxUrl,data:queryStr, dataType: "json", success: handleResponse,error:null});
}
//$(document).ready(OptionInit);
function handleResponse(data)
{
    if(data.error==null)
    {              
        document.getElementById('forumlist').innerHTML='';
        var fragment=document.createDocumentFragment();
        if(data.value.length==0)
        {        
            var cnt=document.createElement('div');
            cnt.className='drow2';
            var prompt=document.createElement('div');
            prompt.className='dcolm_c1 dtitle_read';
            prompt.innerHTML='<i>No matching posts were found</i>';
            cnt.appendChild(prompt);
            fragment.appendChild(cnt);
        }
        for(var i=0;i<data.value.length;i++)
        {
            var cnt=document.createElement('div');
            cnt.className='drow2';
//            cnt.onclick=GoToPost.bind(data.value[i].PUrl);
            var resetRegion=document.createElement('div');
            resetRegion.className="dcolm_reset2";
            resetRegion.innerHTML='&nbsp;';
            cnt.appendChild(resetRegion);
            
            var subject=document.createElement('h3');
            subject.className='dcolm_c1';
            if(data.value[i].PostFlagStatus && !data.IsAdmin)
            {            
                var prmpt=document.createElement('a');
                if(data.value[i].HasRead)
                {
                    prmpt.className='dtitle_read';
                }
                else
                {
                    prmpt.className='dtitle_unread';
                }
                prmpt.href=data.value[i].PUrl;
                prmpt.innerHTML=data.value[i].PostFlagMsg;
                subject.appendChild(prmpt);
            }
            else
            {
                var subjectLink=document.createElement("a");
                if(data.value[i].HasRead)
                    subjectLink.className='dtitle_read';
                else
                    subjectLink.className='dtitle_unread';
                subjectLink.title=data.value[i].Subject;
                subjectLink.innerHTML=data.value[i].SSubject;
                subjectLink.href=data.value[i].PUrl;
                subject.appendChild(subjectLink);
                
                if(data.value[i].PostFlagStatus || data.value[i].Ignored)
                {
                    var innerHTML=subject.innerHTML;
                    subjectLink.style.display='none';
                    var prmpt=document.createElement('a');
                    prmpt.href=data.value[i].PUrl;
                    if(data.value[i].PostFlagStatus)
                        prmpt.innerHTML=data.value[i].PostFlagMsg;
                    else
                        prmpt.innerHTML=data.value[i].IgnoredMsg;
                    subject.appendChild(prmpt);
                    var viewLink=document.createElement("a");
                    if(data.value[i].HasRead)
                    {
                        prmpt.className='dtitle_read';
                        viewLink.className='dtitle_read';
                    }
                    else
                    {
                        prmpt.className='dtitle_unread';
                        viewLink.className='dtitle_unread';
                    }
                    if(data.value[i].PostFlagStatus)
                        viewLink.innerHTML='View';
                    else
                        viewLink.innerHTML='View Post';
                    viewLink.href="javascript:void(0)";
                    viewLink.onclick=ShowPost.bind(subject,innerHTML);
                    subject.appendChild(viewLink);
                }               
                
            }
            cnt.appendChild(subject);
            var replies=document.createElement('div');
            if(data.value[i].HasRead)
                replies.className='dcolm_a3 dtitle_read';
            else
                replies.className='dcolm_a3 dtext_unread2';
            replies.innerHTML=data.value[i].Replies;
            cnt.appendChild(replies);
            var author=document.createElement('div');
            author.className='dcolm_a4';
            if(data.value[i].HasSharedPortfolio)
            {
                var sharedIconLink=document.createElement("a");
                sharedIconLink.className='port_icon';
                sharedIconLink.href=data.value[i].SPUrl;
                sharedIconLink.innerHTML='&nbsp;';
                author.appendChild(sharedIconLink);
            }
            else
            {
                var portBlank=document.createElement("div");
                portBlank.className='port_blank';
                author.appendChild(portBlank);
            }
            var authorLink=document.createElement("a");
            if(data.value[i].HasRead)
                authorLink.className='dtitle_read';
            else
                authorLink.className='dtext_unread';
            authorLink.title=data.value[i].UserName;
            authorLink.innerHTML=data.value[i].SUserName;
            authorLink.href=data.value[i].UUrl;
            author.appendChild(authorLink);
            cnt.appendChild(author);
            var threadDate=document.createElement('div');
            if(data.value[i].HasRead)
                threadDate.className='dcolm_a5 dtitle_read';
            else
                threadDate.className='dcolm_a5 dtext_unread2';
            threadDate.innerHTML=data.value[i].ThreadDate
            cnt.appendChild(threadDate);                
              
            fragment.appendChild(cnt);
        }
        
       downPager=new DClientPager(30,parseInt(data.totalrecords),'downPager',RequestData);
       if(document.getElementById('totalPages'))
       {
          var re=/(\d{1,3})(?=(\d{3})+(?:$|\D))/g
          document.getElementById('totalPages').innerHTML=downPager.PageCount.toString().replace(re,"$1,");
       }
        if(document.getElementById('pageinput'))
        {
            document.getElementById('pageinput').removeAttribute("disabled");
            document.getElementById('pageinput').value=downPager.PagerIndex;
        }
        
        document.getElementById('forumlist').appendChild(fragment);
        if(pmNav)
            pmNav();
    }
}


function GoToPost(url)
{
   self.location.href=url;
   return false;
}


function ShowPost(subject,innerHTML)
{    
    subject.innerHTML=innerHTML;
}

function GoToPage(fevent)
{
    var event=fevent||window.event;  
    var currentKey = event.charCode||event.keyCode;     
    var eventSource =event.srcElement||event.target;  
    
    if(currentKey==13)
    {       
        if(!isNaN(parseInt(eventSource.value)))
        {
            var pIndex=parseInt(eventSource.value);
            if(pIndex>0&&pIndex<=downPager.PageCount)
            {
                 downPager.GoToPage(parseInt(pIndex));
            }
        }
        return false;
    }
}

function GetAjaxQueryString(hash)
{
    var option=GetOptionVal();
    var queryString='';
    if(option)
    {
        switch(getValue('sb',option))
        {
            case '1:0':
                queryString=AddQueryString(queryString,'sb=1');
                queryString=AddQueryString(queryString,'so=0');
                break;
            case '1:1':
                queryString=AddQueryString(queryString,'sb=1');
                queryString=AddQueryString(queryString,'so=1');
                break;
            case '2:0':
                queryString=AddQueryString(queryString,'sb=2');
                queryString=AddQueryString(queryString,'so=0');
                break;
            case '2:1':
                queryString=AddQueryString(queryString,'sb=2');
                queryString=AddQueryString(queryString,'so=1');
                break;
            case '3:0':
                queryString=AddQueryString(queryString,'sb=3');
                queryString=AddQueryString(queryString,'so=0');
                break;
            case '3:1':
                queryString=AddQueryString(queryString,'sb=3');
                queryString=AddQueryString(queryString,'so=1');
                break;
            case '4:0':
                queryString=AddQueryString(queryString,'sb=4');
                queryString=AddQueryString(queryString,'so=0');
                break;
            case '4:1':
                queryString=AddQueryString(queryString,'sb=4');
                queryString=AddQueryString(queryString,'so=1');
                break;
        }
        switch(getValue('sf',option))
        {
            case '0':
                queryString=AddQueryString(queryString,'sf=0');
                break;
            case '1':
                queryString=AddQueryString(queryString,'sf=1');
                break;
            case '5':
                queryString=AddQueryString(queryString,'sf=5');
                break;
        }
        queryString=AddQueryString(queryString,'sid='+secid);
        
        switch(getValue('pf',option))
        {
            case '0':
                queryString=AddQueryString(queryString,'pf=0');
                break;
            case '1':
                queryString=AddQueryString(queryString,'pf=1');
                break;
             case '2':
                queryString=AddQueryString(queryString,'pf=2');
                break;
            case '3':
                queryString=AddQueryString(queryString,'pf=3');
                break;
            case '4':
                queryString=AddQueryString(queryString,'pf=4');
                break;
            case '5':
                queryString=AddQueryString(queryString,'pf=5');
            case '8':
                queryString=AddQueryString(queryString,'pf=8');
                break;  
        }
        switch(getValue('af',option))
        {
            case '0':
                queryString=AddQueryString(queryString,'af=0');
                break;
            case '1':
                queryString=AddQueryString(queryString,'af=1');
                break; 
        }
        switch(getValue('tf',option))
        {
            case '0':
                queryString=AddQueryString(queryString,'tf=0');
                break;
            case '1':
                queryString=AddQueryString(queryString,'tf=1');
                break;
             case '2':
                queryString=AddQueryString(queryString,'tf=7');
                break;
            case '3':
                queryString=AddQueryString(queryString,'tf=30');
                break;
            case '4':
                queryString=AddQueryString(queryString,'tf=180');
                break;
            case '5':
                queryString=AddQueryString(queryString,'tf=365');
                break;  
        }
    }
    if(queryString.length<1)
        queryString='sb=4&sf='+secid+'&pf=0&af=0&tf=0';
    
    var args = hash?hash:location.hash;
    var reg = new RegExp('#?PageIndex=([^#]*)', 'gi');
    var chk = args.match(reg);
    var pIndex=1;
    if(chk!=null)
    {
        if(isNaN(parseInt(RegExp.$1)))
            pIndex='1';
        else
            pIndex=RegExp.$1;
    }
    if (isNaN(parseInt(pIndex))||pIndex<1) pIndex = 1;
    if(downPager)
    {
        if(pIndex>downPager.PageCount)
           pIndex=downPager.PageCount;
    }
    
    pIndex='pi='+pIndex;
    queryString=AddQueryString(queryString,pIndex);
    
    var r = "dt=" + Math.floor(Math.random() * 1000000)
    queryString=AddQueryString(queryString,r);
    return queryString;
}

function AddQueryString(queryString,value)
{
    if(queryString.length>0)
    {
        queryString=queryString+'&'+value;
    }
    else
    {
        queryString=value;
    }
    return queryString;
}

function setOptionValue(name,value)
{
    var option=readWSCookie('NewAllTopPostsOption');
    var reg = new RegExp('('+optionTitle+'[^\|]*)'+name+'=([^;]*)', 'gi');
    if(option==null)
    {
        option=optionTitle+'sb=4:1;pf=0;af=0;tf=0;';
    }
    else if(option.indexOf(optionTitle)<0)
    {
        option=option+'|'+optionTitle+'sb=4:1;pf=0;af=0;tf=0;';
    }
    value=name+'='+value;
    if(option.match(reg)!=null)
        option=option.replace(reg,RegExp.$1+value);
    setMSCookie('NewAllTopPostsOption',option);
}

function ClearOptionValue()
{
    var reg = new RegExp('[\|]?'+optionTitle+'([^\|])*', 'gi');
    var option=readWSCookie('NewAllTopPostsOption');
    if(option==null) 
        setMSCookie('NewAllTopPostsOption','');
    else
    {
        option=option.replace(reg,'');
        setMSCookie('NewAllTopPostsOption',option);
     }
    SetOption(false);
    if(downPager)
    {
        downPager.GoToPage(1);
    }
    else
    {
        OptionInit();
    }
}

function SelectPostMenu(index,requestData)
{
    //NotSet=0,FavoritePosts=1,MyPosts=2,UnreadPosts=3,MostRecommended=4,MostRead=8,
    var menuTitle='postMenuTitle';
    var namesArr=['All posts','Favorite posts','My posts','Unread posts','Most recommended','Most read'];
    var valsArr=['0','1','2','3','4','8'];
    SelectAllPostsMenuItem(menuTitle,namesArr,valsArr,index,requestData,'pf');
}

function SelectAuthorMenu(index,requestData)
{
   //NotSet=0,FavoriteUsers=1,
    var menuTitle='authorMenuTitle';
    var namesArr=['All authors','Favorite authors'];
    var valsArr=['0','1'];
    SelectAllPostsMenuItem(menuTitle,namesArr,valsArr,index,requestData,'af');
}

function SelectDateMenu(index,requestData)
{
   //NotSet=0,PastDay=1,PastWeek=2,PastMonth=3,PastSixMonth=4,PastYear=5,
    var menuTitle='threadDateMenu';
    var namesArr=['All','Past day','Past week','Past month','Past 6 months','Past year'];
    var valsArr=['0','1','2','3','4','5'];
    SelectAllPostsMenuItem(menuTitle,namesArr,valsArr,index,requestData,'tf');
}

function SelectAllPostsMenuItem(titleId,namesArr,valsArr,index,requestData,optionValName)
{
    if(index<0||index>=namesArr.length)
        return;
    SelectMenuItem(titleId,namesArr[index]);
    if(requestData)
    {
        setOptionValue(optionValName,valsArr[index]);
        if(downPager)
        {
            downPager.GoToPage(1);
        }
        else
        {
            OptionInit();
        }
    }
}

function HistoryCallBack(hash)
{
    if(hash)
        RequestData(hash);
    else
        SetOption(true);
}

function OptionInit()
{
    SetOption(false);
    $.historyInit(HistoryCallBack);
}

function SetOption(requestData)
{
    var option=GetOptionVal();
   
    switch(getValue('sb',option).substring(0,1))
    {
        case '1':
            SelectSortItem(0,false);
            break;
        case '2':
            SelectSortItem(1,false);
            break;
        case '3':
            SelectSortItem(2,false);
            break;
        case '4':
            SelectSortItem(3,false);
            break;
        default:
            SelectSortItem(0,false);
            break;
    }
    switch(getValue('pf',option))
    {
        case '0':
            SelectPostMenu(0,false);
            break;
        case '1':
            SelectPostMenu(1,false);
            break;
         case '2':
            SelectPostMenu(2,false);
            break;
        case '3':
            SelectPostMenu(3,false);
            break;
        case '4':
            SelectPostMenu(4,false);
            break;
        case '8':
            SelectPostMenu(5,false);
            break;
        default:
            SelectPostMenu(0,false);
            break; 
    }
    switch(getValue('af',option))
    {
        case '0':
            SelectAuthorMenu(0,false);
            break;
        case '1':
            SelectAuthorMenu(1,false);
            break;
        default:
            SelectAuthorMenu(0,false);
            break;
    }
    switch(getValue('tf',option))
    {
        case '0':
            SelectDateMenu(0,false);
            break;
        case '1':
            SelectDateMenu(1,false);
            break;
         case '2':
            SelectDateMenu(2,false);
            break;
        case '3':
            SelectDateMenu(3,false);
            break;
        case '4':
            SelectDateMenu(4,false);
            break;
        case '5':
            SelectDateMenu(5,false);
            break;  
    }
    if(requestData)
        RequestData();
}


//To avoid wasting the cookie, we shared a cookie for all the similar pages such as all post, threads list page
function GetOptionVal()
{
    var option=readWSCookie('NewAllTopPostsOption');
    var reg = new RegExp('[\|]?'+optionTitle+'([^\|])*', 'gi');
    if(option!=null)
    {
        var optionVal=option.match(reg);
        if(optionVal!=null)
            option=optionVal[0];
        else
            option=optionTitle+'sb=4:1;pf=0;af=0;tf=0;';
    }        
    if(option==null || option=='')
    {
        option=optionTitle+'sb=4:1;pf=0;af=0;tf=0;';
    }
    return option;
}
