﻿// JScript File
var FilterMode = 'drop';

var ContentBackgroundColor = '';
var ContentTypeName = '';
var ContentAliasPath = '';
var ContentChildTypes = '';
var ContentOrderBy = '';
var ContentPageSize = 2;
var ContentPageNumber = 1;
var ContentFilterList = new Array();

function FieldNameAndValue(n, v)
{
    this.FieldName = n;
    this.FieldValue = v;
}

function ContentFilter(n, q, i, t, test, v)
{
    if (!v) v = -1;
    this.FilterName = n;
    this.FilterQuery = q;
    this.FilterIDField = i;
    this.FilterTextField = t;
    this.FilterTest = test;
    this.FilterValue = v;
}

function LoadContentList(doc)
{
    var xml = GetXMLObject(doc).childNodes[0];
    var fieldcount = xml.getAttribute('FieldCount');
    
    var Filters = xml.childNodes[0].childNodes;
    var OrderBys = xml.childNodes[1].childNodes;
    var template = getInnerText(xml.childNodes[2]);
    var templateAlt = getInnerText(xml.childNodes[3]);
    var contentitems = xml.childNodes[4].childNodes;
    var tbl = document.getElementById('tblList');
    
    var PageNumber = xml.getAttribute('PageNumber');
    var TotalPages = xml.getAttribute('TotalPages');
    var TotalRecords = xml.getAttribute('TotalRecords');
    var StartRecord = xml.getAttribute('StartRecord');
    var EndRecord = xml.getAttribute('EndRecord');
    var PageSizes = xml.getAttribute('PageSizes');
    
    TotalPages++;
    TotalRecords ++;
    StartRecord++;
    EndRecord++;
    BuildContentListPaging(PageNumber, TotalPages, TotalRecords, StartRecord, EndRecord);

    for (r = tbl.rows.length-1; r>=0; r--)
        tbl.deleteRow(r);
      
    var runScript = '';  
    if (contentitems.length > 0)
    {
        var usetmp = 0
        for (var ccount=0; ccount<contentitems.length; ccount++)
        {
            var row = tbl.insertRow(tbl.rows.length);
            var cell = row.insertCell(0);
            
            var fields = new Array();  
            var id = contentitems[ccount].getAttribute("id");     
            for (var i=0; i<fieldcount; i++)
            {
                var n = contentitems[ccount].childNodes[i].getAttribute('FieldName');
                var v = getInnerText(contentitems[ccount].childNodes[i]);
                fields[i] = new FieldNameAndValue(n, v);
            }
            var settemplate = template;
            
            if ((templateAlt != '') && (usetmp == 1))
            {
                settemplate = templateAlt;
                usetmp = 0;
            }
            else
                usetmp = 1;
            
            var rep = ReplaceVariableTags(id, settemplate, fields);
            //alert(rep.Content);
            cell.innerHTML = rep.Content;
            runScript += rep.scriptToRunAtEnd;
        }
    }
    else
    {
        var row = tbl.insertRow(tbl.rows.length);
        var cell = row.insertCell(0);
        cell.innerHTML = getInnerText(xml.childNodes[4]);
    }
    ContentPageNumber = PageNumber;
    
    var FilterSpacer = ', &nbsp; ';
    var ob = '';
    if (FilterMode == 'drop')
        ob = '<select onchange="ChangeContentListViewData(\'OrderBy\', this.value);">';
    for (var i=0; i<OrderBys.length; i++)
    {
        if (OrderBys[i].getAttribute('selected') == 'true')
        {
            ContentOrderBy = OrderBys[i].getAttribute('value');
            //document.getElementById('spnContentOrderByTitle').innerHTML = getInnerText(OrderBys[i]);
            if (FilterMode == 'drop')
                ob += '<option value="' + OrderBys[i].getAttribute('value') + '" selected="selected">' + getInnerText(OrderBys[i]) + '</option>';
            else
                ob += '<span class="ContentBrowserRefineSearchSelectedItem">' + getInnerText(OrderBys[i]) + '</span>' + FilterSpacer;
        }
        else
        {
            if (FilterMode == 'drop')
                ob += '<option value="' + OrderBys[i].getAttribute('value') + '">' + getInnerText(OrderBys[i]) + '</option>';
            else
                ob += '<a href="javascript:ChangeContentListViewData(\'OrderBy\', \'' + OrderBys[i].getAttribute('value') + '\')">' + getInnerText(OrderBys[i]) + '</a>' + FilterSpacer;
        }
    }
    if (FilterMode == 'drop')
        ob += '</select>';
    else
    {
        if (ob.substr(ob.length-FilterSpacer.length)) ob = ob.substr(0, (ob.length-FilterSpacer.length));
    }
    document.getElementById('clContentOrderBy').innerHTML = ob;
    
    var Sizes = PageSizes.split(',');
    var s = '';
    if (FilterMode == 'drop')
        s = '<select onchange="ChangeContentListViewData(\'PageSize\', this.value);">';

    for (var i=0; i<Sizes.length; i++)
    {
        if ((1*Sizes[i]) == (1*ContentPageSize))
        {
            if (FilterMode == 'drop')
                s += '<option value="' + ContentPageSize + '" selected="selected">' + ContentPageSize + '</option>';
            else
                s += '<span class="RefineSearchSelectedItem">' + ContentPageSize + '</span>' + FilterSpacer;
            ContentPageSize = ContentPageSize;
        }
        else
        {
            
            if (FilterMode == 'drop')
                s += '<option value="' + Sizes[i] + '">' + Sizes[i] + '</option>';
            else
                s += '<a href="javascript:ChangeContentListViewData(\'PageSize\', \'' + Sizes[i] + '\')">' + Sizes[i] + '</a>' + FilterSpacer;
        }
    }
    if (FilterMode == 'drop')
        s += '</select>';
    else
    {
        if (s.substr(s.length-FilterSpacer.length)) s = s.substr(0, (s.length-FilterSpacer.length));
    }
    document.getElementById('clContentPageSize').innerHTML = s;

    var tblF = document.getElementById('tblFilters');
    if (tblF)
    {
        while (tblF.rows.length>0)
            tblF.deleteRow(0);
            
        ContentFilterList.length = 0;
        var cnt = 0;
        for (var f=Filters.length-1; f>=0; f--)
        {
            var FName = getInnerText(Filters[f].childNodes[0].childNodes[0]);
            var FQuery = getInnerText(Filters[f].childNodes[0].childNodes[1]);
            var FIDField = getInnerText(Filters[f].childNodes[0].childNodes[2]);
            var FTextField = getInnerText(Filters[f].childNodes[0].childNodes[3]);
            var FTest = getInnerText(Filters[f].childNodes[0].childNodes[4]);
            var FValue = getInnerText(Filters[f].childNodes[0].childNodes[5]);
            var values = Filters[f].childNodes[1].childNodes;
            ContentFilterList[cnt] = new ContentFilter(FName, FQuery, FIDField, FTextField, FTest, FValue);
            cnt++;
            var rw = tblF.insertRow(0);
            var cl = rw.insertCell(0);
            cl.innerHTML = FName + ':';
            cl.className = 'ContentBrowserFilterName';
            cl = rw.insertCell(1);
            var fil = '';
            if (FilterMode == 'drop')
                fil += '<select onchange="SetContentFilterValue(\'' + FName + '\', this.value);">';
            for (v=0; v<values.length; v++)
            {
                var curval = values[v].getAttribute('value');
                
        
                if (curval == FValue)
                {
                    if (FilterMode == 'drop')
                        fil += '<option value="' + curval + '" selected="selected">' + getInnerText(values[v]) + '</option>';
                    else
                        fil += '<span class="ContentBrowserRefineSearchSelectedItem">' + getInnerText(values[v]) + '</span>' + FilterSpacer;
                }
                else
                {
                    if (FilterMode == 'drop')
                        fil += '<option value="' + curval + '" >' + getInnerText(values[v]) + '</option>';
                    else
                        fil += '<a href="javascript:SetContentFilterValue(\'' + FName + '\', \'' + curval + '\')">' + getInnerText(values[v]) + '</a>' + FilterSpacer;
                }
            }
            if (FilterMode == 'drop')
                fil += '</select>';
            else
            {
                if (fil.substr(fil.length-FilterSpacer.length)) fil = fil.substr(0, (fil.length-FilterSpacer.length));
            }
            cl.innerHTML = fil;
        }
    }
    eval(runScript);
    //SlideHolderToChildSize('Content', 'tblList');
}

function SetContentFilterValue(FName, FValue)
{
    for (var f=0; f<ContentFilterList.length; f++)
    {
        if (ContentFilterList[f].FilterName == FName)
        {
            ContentFilterList[f].FilterValue = FValue;
            break;
        }   
    }
    ContentPageNumber = 1;
    GetContentList();
}

function BuildContentListPaging(PageNumber, TotalPages, TotalRecords, StartRecord, EndRecord)
{
    var clPrevious = document.getElementById('clContentBrowserPrevious');
    var clNext = document.getElementById('clContentBrowserNext');
    var clPaging = document.getElementById('clContentBrowserPaging');
    
    if (PageNumber != 1)
        clPrevious.innerHTML = '<a href="javascript:ChangeContentListViewData(\'Page\', \'' + ((PageNumber*1)-1) + '\')"><img src="' + jsImagePath + 'Content/previousBtn.jpg" border="0" /></a>';
    else
        clPrevious.innerHTML = '<img src="' + jsImagePath + 'Content/previousBtn_dis.jpg" />';
        
    if (PageNumber != TotalPages)
        clNext.innerHTML = '<a href="javascript:ChangeContentListViewData(\'Page\', \'' + ((PageNumber*1)+1) + '\')"><img src="' + jsImagePath + 'Content/nextBtn.jpg" border="0" /></a>';
    else
        clNext.innerHTML = '<img src="' + jsImagePath + 'Content/nextBtn_dis.jpg" />';

    clPaging.innerHTML = BuildContentListPagesList(TotalPages, PageNumber, 3, "...&nbsp;", "&nbsp;", 'test')
    var clTotals = document.getElementById('clPagingTotals');
    clTotals.innerHTML = 'Showing&nbsp;<span class="ContentBrowserPageTotalsNumbers">' + StartRecord + '</span>-<span class="ContentBrowserPageTotalsNumbers">' + EndRecord + '</span>&nbsp;of&nbsp;<span class="ContentBrowserPageTotalsNumbers">' + TotalRecords + '</span>';
}

function BuildContentListPagesList(TotalPages, CurrentPage, EitherSide, Gap, Spacer)
{
        
    var p = AddContentListPage(1, CurrentPage) + Spacer;
       
    
    if (TotalPages <= (EitherSide+5))
    {
        //1, 2, 3, 4, 5
        for (i=2; i<TotalPages; i++)
            p+= AddContentListPage(i, CurrentPage) + Spacer;
    }
    else
    {
        if (CurrentPage < (EitherSide+3))
        {
            //1, 2, 3, 4 ... 10
            
            for (i=2; i<(EitherSide+4); i++)
                p+= AddContentListPage(i, CurrentPage) + Spacer;
            if (CurrentPage == (EitherSide+3)) 
            {
                for (x=1; x<=EitherSide; x++)
                    p+= AddContentListPage((EitherSide+x+3), CurrentPage) + Spacer;
            }
            p+= Gap;
        }
        else if (CurrentPage > (TotalPages-(EitherSide+2)))
        {
            //1...7, 8, 9, 10
            p+= Gap;
            if (CurrentPage == (TotalPages-(EitherSide+2))) 
            {
                for (x=1; x<=EitherSide; x++)
                    p+= AddContentListPage((TotalPages-(EitherSide+(5-x))), CurrentPage) + Spacer;
            }
            for (i=TotalPages-(EitherSide+2); i<TotalPages; i++)
                p+= AddContentListPage(i, CurrentPage) + Spacer;
        }
        else
        {
            //1...3, 4, 5...10
            p+= Gap;
            for (i=CurrentPage-EitherSide; i<((CurrentPage*1)+(EitherSide+1)); i++)
                p+= AddContentListPage(i, CurrentPage) + Spacer;
                
            p+= Gap;
        }
    }
    if (TotalPages != 1) p+= AddContentListPage(TotalPages, CurrentPage) + Spacer;
    return p
    
}

function AddContentListPage(no, currentpage)
{

    if (no == currentpage)
        return '<span class="ProductPagingSelected">' + no + '</span>';
    else
        return '<a href="Javascript:ChangeContentListViewData(\'Page\', \'' + no  + '\')">' + no + '</a>';
}

function ChangeContentListViewData(field, newvalue)
{
    StopAllSlideShows();
    switch (field.toLowerCase())
    {
        case 'page':
            ContentPageNumber = newvalue;
            break;
        case 'orderby':
            ContentOrderBy = newvalue;
            break;
        case 'pagesize':
            ContentPageSize = newvalue;
            ContentPageNumber = 1;
            break;
    }
    //GetContentList();
    if (ScrollAfterAjaxPaging)
        ScrollToObject('clJumpTo', '', 'GetContentList();');
    else
        GetContentList();
}

function ReplaceVariableTags(id, Template, fields)
{
    var script = '';
    var output = '';
    var PlaceHolderName = '';
    var InPlaceHolder = false;
    for (var i = 0; i < Template.length; i++)
    {
        if (i < Template.length - 1)
        {
            if ((!InPlaceHolder) && (Template.substr(i, 2) == '%%'))
            {
                //Moving into placeholder
                InPlaceHolder = true;
                PlaceHolderName = '';
                i += 2;
            }

            if ((InPlaceHolder) && (Template.substr(i, 2) == '%%'))
            {
                //Moving out of placeholder
                InPlaceHolder = false;
                if (PlaceHolderName.substr(0,10) == ('LoadImage#'))
                { 
                    //LoadImage#Name(optional)#SelectedImage|Size|ShowNoImage(can be blank)|ImageGallery(can be blank)
                    PlaceHolderName = PlaceHolderName.substr(10);
                    var imgName = '';
                    
                    var firstparts = PlaceHolderName.split('#');
                    if (firstparts.length > 1)
                    {
                        imgName = firstparts[0];
                        PlaceHolderName = firstparts[1];
                    }
                    else
                        PlaceHolderName = firstparts[0];

                    var parts = PlaceHolderName.split('|');
                    var ShowNoImage = true;
                    var ImageGallery = '';
                    if (parts.length >= 3)
                        ShowNoImage = parts[2].toLowerCase();
                        
                    if (parts.length >= 4)
                        ImageGallery = parts[3].toLowerCase();

                    var noImage = jsImagePath + 'Browser/noimage_' + parts[1] + '.gif';
                    var pth = noImage;
                    var ImageExists = false;
                    
                    if (getFieldValue(fields, parts[0]) != '')
                    {
                        ImageExists = true;
                        pth = '/getfile/' + getFieldValue(fields, parts[0]) + '/image.aspx?MaxSideSize=' + parts[1] ;
                    }
                    
                    var GalleryValue = '';
                    if (ImageGallery != '')
                        GalleryValue = getFieldValue(fields, ImageGallery);
                        
                    if ((ImageExists) || (ShowNoImage=='true'))
                    {
                        output += '<img onerror="this.src=\'' + noImage + '\'; if (document.getElementById(\'lnkEnlarge' + id + '\')) document.getElementById(\'lnkEnlarge' + id + '\').style.display=\'none\'" id="' + imgName + id + '" border="0" src="' + pth + '" ';
                        //PositionSlideshowControls(id, doSlide)
                        if (GalleryValue != '')
                            output += " onload='PositionSlideshowControls(\"" + imgName + id + "\", true)'";
                        output += ' />';
                    }
                        
                    if (GalleryValue != '')
                        script += 'AddSlideshowControls("' + imgName + id + '", "GetGalleryItems#' + GalleryValue + '", ' + parts[1] + ', "' + ContentBackgroundColor + '");'
                
                }
                else if (PlaceHolderName.substr(0,11) == ('FormatDate#'))
                {
                    //FormatDate
                    PlaceHolderName = PlaceHolderName.substr(11);
                    var dte = getFieldValue(fields, PlaceHolderName);
                    output += new Date(dte).toLocaleDateString();
                }
                else if (PlaceHolderName.substr(0,16) == ('FormatDateRange#'))
                {
                    //FormatDateRange#StartDate|EndDate
                    PlaceHolderName = PlaceHolderName.substr(16);
                    var parts = PlaceHolderName.split('|');
                    output += FormatDateRange(getFieldValue(fields, parts[0]), getFieldValue(fields, parts[1]));
                }
                else if (PlaceHolderName.substr(0,16) == ('ImagePopupLinks#'))
                {
                    //ImagePopupLinks#Image|ImageGallery
                    PlaceHolderName = PlaceHolderName.substr(16);
                    var parts = PlaceHolderName.split('|');
                    var img = getFieldValue(fields, parts[0]);
                    var gal = getFieldValue(fields, parts[1]);
                    var title = getFieldValue(fields, parts[2]);
                    var lnk = '';
                    if ((img != '') && (gal == ''))
                    {
                        //Enlarge link
                        lnk = '<a id="lnkEnlarge' + id + '" href="javascript:ShowImage(\'' + title + '\', \'' + img + '\')">';
                        lnk += '<img alt=\'Enlarge Image\' border=\'0\' src=\'' + jsImagePath + 'Content/enlarge.gif\'></a>';
                    }
                    if (gal != '')
                    {
                        //Gallery link
                        lnk = '<a href="javascript:ShowGallery(\'' + title + '\', \'' + gal + '\')">';
                        lnk += '<img alt=\'View Product Gallery\' border=\'0\' src=\'' + jsImagePath + 'Content/gallery.gif\'></a>';
                    }
                    output += '<div style="padding-top:10px; width:100%">' + lnk + '</div>';
                }
                else if (PlaceHolderName == 'IDField')
                    output += id;
                else
                    output += getFieldValue(fields, PlaceHolderName);
                i += 2;
            }
        }

        if (!InPlaceHolder)
            output += Template.substr(i, 1);
        else
            PlaceHolderName += Template.substr(i, 1);
    }
    return {Content:output,scriptToRunAtEnd:script}
}

function FormatDateRange(StartDate, EndDate)
{
    var st = new Date(StartDate).toLocaleDateString();
    var en = new Date(EndDate).toLocaleDateString();
    if (st == en)
        return st
    else 
        return st + ' - ' + en;
}

function FormatDate(StartDate)
{
    return new Date(StartDate).toLocaleDateString();
}

function getFieldValue(fields, fieldname)
{
    for (var i=0; i<fields.length; i++)
    {
        if (fields[i].FieldName.toLowerCase() == fieldname.toLowerCase()) return fields[i].FieldValue;
    }    
    return '';
}

function GetContentList()
{
    var tbl = document.getElementById('tblList');
    for (r = tbl.rows.length-1; r>=0; r--)
        tbl.deleteRow(r);
    var rw = tbl.insertRow(0);
    var cl = rw.insertCell(0); 
    var l = 'loading';
    if (ContentBackgroundColor != '') l += '_' + ContentBackgroundColor;
    cl.innerHTML = '<div style="width:100%;text-align:center" ><br><img src="' + jsImagePath + l + '.gif"><br><br><br>';
    sndReq('/XML/getContentListXML.aspx?Type=' + ContentTypeName + 
           '&AP=' + ContentAliasPath +
           '&ChildTypes=' + ContentChildTypes +
           '&OrderBy=' +  ContentOrderBy +
           '&PageSize=' +  ContentPageSize +
           '&PageNumber=' +  ContentPageNumber +
           BuildContentFiltersQS());
}

function BuildContentFiltersQS()
{
    var ret = '&FilterCount=' + ContentFilterList.length;
    for (var i = 0; i< ContentFilterList.length; i++)
    {
        ret += '&FilterName' + i + '=' +  ContentFilterList[i].FilterName;
        ret += '&FilterQuery' + i + '=' +  ContentFilterList[i].FilterQuery;
        ret += '&FilterIDField' + i + '=' +  ContentFilterList[i].FilterIDField;
        ret += '&FilertTextField' + i + '=' +  ContentFilterList[i].FilterTextField;
        ret += '&FilterValue' + i + '=' +  ContentFilterList[i].FilterValue;
        ret += '&FilterTest' + i + '=' +  ContentFilterList[i].FilterTest;
    }
    return ret;
}