﻿
var service = new CHI.SiteCore.ProjectService();

function TopicClick(extras, content, updateFunc, initialSort)
{
    if ( extras.visible() )
    {
        extras.hide();
        content.hide();
    }    
    else if (content.innerHTML.length > 0)
    {
        extras.show();
        content.show();    
    }
    else
    {
        sortDiv = extras.down('div.Sort');
        pageDiv = extras.down('div.crumb');

        // Set initial sort to TITLE and initial page to 1.
        if (initialSort != null) {
        	SetSort(sortDiv, initialSort, pageDiv, updateFunc);
        }
        else {
        	SetSort(sortDiv, 'DATE', pageDiv, updateFunc);
        }
        pageDiv.writeAttribute('page', '1');

        updateFunc(sortDiv, pageDiv);
    }
}

function UpdateEvents(sortDiv, pageDiv)
{
    service.GetEvents( scDatabase, projectId, sortDiv.readAttribute('sort'), pageDiv.readAttribute('page'), 5, EventsSuccess, failure, null );
}

function UpdateAllEvents(sortDiv, pageDiv)
{
    service.GetAllEvents( scDatabase, sortDiv.readAttribute('sort'), pageDiv.readAttribute('page'), 5, AllEventsSuccess, failure, null );
}

function UpdateUpcomingEvents(sortDiv, pageDiv)
{
    service.GetUpcomingEvents( scDatabase, sortDiv.readAttribute('sort'), pageDiv.readAttribute('page'), 5, UpcomingEventsSuccess, failure, null );
}


function UpdatePubAndPres(sortDiv, pageDiv)
{
    service.GetPublicationsAndPresentations(scDatabase, projectId, sortDiv.readAttribute('sort'), pageDiv.readAttribute('page'), 5, PubAndPresSuccess, failure, null);
}

function UpdateDataRes(sortDiv, pageDiv)
{
    service.GetDataRes(scDatabase, projectId, sortDiv.readAttribute('sort'), pageDiv.readAttribute('page'), 5, DataResSuccess, failure, null);
}

function UpdateInitiatives(sortDiv, pageDiv)
{
    service.GetInitiatives(scDatabase, projectId, sortDiv.readAttribute('sort'), pageDiv.readAttribute('page'), 5, InitiativesSuccess, failure, null);
}

function UpdateRelRes(sortDiv, pageDiv)
{
    service.GetRelRes(scDatabase, projectId, sortDiv.readAttribute('sort'), pageDiv.readAttribute('page'), 5, RelResSuccess, failure, null);
}

function UpdateRelMaps(sortDiv, pageDiv)
{
    service.GetRelMaps(scDatabase, projectId, sortDiv.readAttribute('sort'), pageDiv.readAttribute('page'), 5, RelMapsSuccess, failure, null);
}

function UpdateRelTables(sortDiv, pageDiv) {
	service.GetRelTables(scDatabase, projectId, sortDiv.readAttribute('sort'), pageDiv.readAttribute('page'), 5, RelTablesSuccess, failure, null);
}

function UpdateCurrProjs(sortDiv, pageDiv)
{
    service.GetCurrProjs(scDatabase, projectId, sortDiv.readAttribute('sort'), pageDiv.readAttribute('page'), 5, CurrProjsSuccess, failure, null);
}

function UpdateIndicators(sortDiv, pageDiv)
{
    service.GetIndicators(scDatabase, projectId, sortDiv.readAttribute('sort'), pageDiv.readAttribute('page'), 5, IndicatorsSuccess, failure, null);
}


function failure( errors, userContext, methodName )
{
    alert( errors.get_message() );
}

function EventsSuccess( data )
{
    $('contentEvents').update();
    /*
    if (data.Items.length == 0)
    {
        $('divEvents').hide();
        return;    
    }
    */
    sortDiv = $('ExtrasEvents').down('div.Sort');
    var sort = sortDiv.readAttribute('sort');
    

    
    for ( i=0; i<data.Items.length; i++ )
    {
        cssClass = "first";
        if ( i > 0 ) cssClass = "contentBlock";
        if ( i == data.Items.length-1 ) cssClass = "last";

        div = new Element('div');
        div.className = 'content';
        if (sort == 'DATE')
        {
        	//div.update('<div class="' + cssClass + '">' + getDateString(data.Items[i].Date) + ' ' + data.Items[i].Date.getHours() + ':' + data.Items[i].Date.getMinutes().toPaddedString(2) + '<h3><a href="' + data.Items[i].Url + '">' + data.Items[i].Title + '</a></h3> ' + data.Items[i].FileData + '<br/>' + data.Items[i].Summary + '</div>');
        	div.update('<div class="' + cssClass + '">' + getDateString(data.Items[i].Date) + '<h3><a href="' + data.Items[i].Url + '">' + data.Items[i].Title + '</a></h3> ' + data.Items[i].FileData + '<br/>' + data.Items[i].Summary + '</div>');                	        
        }
        else
        {
        	//div.update('<div class="' + cssClass + '"><h3><a href="' + data.Items[i].Url + '">' + data.Items[i].Title + '</a></h3>' + getDateString(data.Items[i].Date) + ' ' + data.Items[i].Date.getHours() + ':' + data.Items[i].Date.getMinutes().toPaddedString(2) + '<br />' + data.Items[i].FileData + '<br/>' + data.Items[i].Summary + '</div>');
        	div.update('<div class="' + cssClass + '"><h3><a href="' + data.Items[i].Url + '">' + data.Items[i].Title + '</a></h3>' + getDateString(data.Items[i].Date) + '<br />' + data.Items[i].FileData + '<br/>' + data.Items[i].Summary + '</div>');                	        
        }        

        $('contentEvents').insert( div ); 
    }

    SetPages($('ExtrasEvents').down('div.crumb'), $('ExtrasEvents').down('div.Sort'), data.TotalCount, UpdateEvents);

   $('ExtrasEvents').show();
   $('contentEvents').show();
   processExternalLinks();
  }

function AllEventsSuccess( data )
{
    $('contentAllEvents').update();
    for ( i=0; i<data.Items.length; i++ )
    {
        cssClass = "first";
        if ( i > 0 ) cssClass = "contentBlock";
        if ( i == data.Items.length-1 ) cssClass = "last";

        div = new Element('div');
        div.className = 'content';
        //div.update('<div class="' + cssClass + '"><a href="' + data.Items[i].Url + '">' + data.Items[i].Title + '</a> ' + getDateString(data.Items[i].Date) + ' ' + data.Items[i].Date.getHours() + ':' + data.Items[i].Date.getMinutes().toPaddedString(2) + '<br/>' + data.Items[i].Summary + '</div>');
        div.update('<div class="' + cssClass + '"><a href="' + data.Items[i].Url + '">' + data.Items[i].Title + '</a> ' + getDateString(data.Items[i].Date) + '<br/>' + data.Items[i].Summary + '</div>');        
        $('contentAllEvents').insert( div );
    }

    SetPages($('ExtrasAllEvents').down('div.crumb'), $('ExtrasAllEvents').down('div.Sort'), data.TotalCount, UpdateAllEvents);

    //$('ExtrasAllEvents').show();
    //$('contentAllEvents').show();
    processExternalLinks();
   }

function UpcomingEventsSuccess( data )
{
    $('contentUpcomingEvents').update();
 
    if (data.Items.length == 0)
    {
        cssClass = "last";
        div = new Element('div');
        div.className = 'content';
        div.update( '<div class="'+cssClass+'"><p>There are currently no upcoming events.</p><p>To view presentations from previous events, go to the Publications and Presentations page.</p></div>' );
        $('contentUpcomingEvents').insert( div );
        $('ExtrasUpcomingEvents').up('div.TopicItem').show();    
    }
    else
    {        
        for ( i=0; i<data.Items.length; i++ )
        {
            cssClass = "first";
            if ( i > 0 ) cssClass = "contentBlock";
            if ( i == data.Items.length-1 ) cssClass = "last";

            div = new Element('div');
            div.className = 'content';
            div.update('<div class="' + cssClass + '"><a href="' + data.Items[i].Url + '">' + data.Items[i].Title + '</a> ' + getDateString(data.Items[i].Date) + ' ' + data.Items[i].Date.getHours() + ':' + data.Items[i].Date.getMinutes().toPaddedString(2) + '<br/>' + data.Items[i].Summary + '</div>');
            $('contentUpcomingEvents').insert( div );
        }

        SetPages($('ExtrasUpcomingEvents').down('div.crumb'), $('ExtrasUpcomingEvents').down('div.Sort'), data.TotalCount, UpdateUpcomingEvents);
    }
    //$('ExtrasUpcomingEvents').show();
    //$('contentUpcomingEvents').show();
    processExternalLinks();
   }



function PubAndPresSuccess( data )
{
    $('contentPubAndPres').update();
    /*
    if (data.Items.length == 0)
    {
        $('divPubAndPres').hide();
        return;    
    }    
    */
    for ( i=0; i<data.Items.length; i++ )
    {
        cssClass = "first";
        if ( i > 0 ) cssClass = "contentBlock";
        if ( i == data.Items.length-1 ) cssClass = "last";

        div = new Element('div');
        div.className = 'content';
        var chi_pub = '';
        var url_target = '_window';
        if (data.Items[i].CHIPub)
        {
        	chi_pub = '<img border="0" alt="CHI Publication" src="/images/chi_publication.gif" class="chiPubImg"></img>';
        	url_target = '_self';
        }

        div.update('<div class="' + cssClass + '"><div>' + getShortDateString(data.Items[i].Date) + '<br/>' + chi_pub + '<strong><a href="' + data.Items[i].Url + '" target="' + url_target + '">' + data.Items[i].Title + '</a></strong><br />' + data.Items[i].Summary + '</div></div>');
        $('contentPubAndPres').insert( div );
    }

    SetPages($('ExtrasPubAndPres').down('div.crumb'), $('ExtrasPubAndPres').down('div.Sort'), data.TotalCount, UpdatePubAndPres);

    //$('ExtrasPubAndPres').show();
    //$('contentPubAndPres').show();
    processExternalLinks();
   }

function DataResSuccess( data )
{

    $('contentDataRes').update();
    /*
    if (data.Items.length == 0)
    {
        $('divDataRes').hide();
        return;    
    }    
    */
    for ( i=0; i<data.Items.length; i++ )
    {
        cssClass = "first";
        if ( i > 0 ) cssClass = "contentBlock";
        if ( i == data.Items.length-1 ) cssClass = "last";

        div = new Element('div');
        div.className = 'content';
        var chi_pub = '';
        if (data.Items[i].CHIPub)
        {
        chi_pub = '<img border="0" alt="CHI Publication" src="/images/chi_publication.gif" class="chiPubImg"></img>';
       }
       if (getHostname(data.Items[i].Url) != location.hostname) {
       	div.update('<div class="' + cssClass + '"><div>' + chi_pub + '<strong><a target="_blank" href="' + data.Items[i].Url + '">' + data.Items[i].Title + '</a></strong>' + data.Items[i].FileData + '<br/>' + data.Items[i].Summary + '</div></div>');
       }
       else {
       	div.update('<div class="' + cssClass + '"><div>' + chi_pub + '<strong><a href="' + data.Items[i].Url + '">' + data.Items[i].Title + '</a></strong>' + data.Items[i].FileData + '<br/>' + data.Items[i].Summary + '</div></div>');
       }
        $('contentDataRes').insert( div );
    }

    SetPages($('ExtrasDataRes').down('div.crumb'), $('ExtrasDataRes').down('div.Sort'), data.TotalCount, UpdateDataRes);

    //$('ExtrasDataRes').show();
    //$('contentDataRes').show();
    processExternalLinks();
   }

function InitiativesSuccess( data )
{
    $('contentInitStud').update();

    /*
    if (data.Items.length == 0)
    {
        $('divDataRes').hide();
        return;    
    }
    */
    for ( i=0; i<data.Items.length; i++ )
    {
        cssClass = "first";
        if ( i > 0 ) cssClass = "contentBlock";
        if ( i == data.Items.length-1 ) cssClass = "last";

        div = new Element('div');
        div.className = 'content';
        var chi_pub = '';
        if (data.Items[i].CHIPub)
        {
            chi_pub = '<img border="0" alt="CHI Publication" src="/images/chi_publication.gif" class="chiPubImg"></img>';
        }
        div.update('<div class="' + cssClass + '"><div>' + chi_pub + '<a href="' + data.Items[i].Url + '">' + data.Items[i].Title + '</a>' + data.Items[i].FileData + '<br/>' + data.Items[i].Summary + '</div></div>');
        $('contentInitStud').insert( div );
    }

    SetPages($('ExtrasInitStud').down('div.crumb'), $('ExtrasInitStud').down('div.Sort'), data.TotalCount, UpdateInitiatives);

    //$('ExtrasInitStud').show();
    //$('contentInitStud').show();
	// Don't show sort for Initiatives
	sortDiv = $('ExtrasInitStud').down('div.Sort');
	sortDiv.hide();    
    processExternalLinks();
   }

function RelResSuccess(data)
{
    $('contentRelRes').update();

    for (i = 0; i < data.Items.length; i++)
    {
        cssClass = "first";
        if (i > 0) cssClass = "contentBlock";
        if (i == data.Items.length - 1) cssClass = "last";

        div = new Element('div');
        div.className = 'content';
        div.update('<div class="' + cssClass + '"><a href="' + data.Items[i].Url + '">' + data.Items[i].Title + '</a> ' + data.Items[i].FileData + '<br/>' + data.Items[i].Summary + '</div>');
        $('contentRelRes').insert(div);
    }

    SetPages($('ExtrasRelRes').down('div.crumb'), $('ExtrasRelRes').down('div.Sort'), data.TotalCount, UpdateRelRes);

    //$('ExtrasRelRes').show();
    //$('contentRelRes').show();
    processExternalLinks();
   }

function RelMapsSuccess(data)
{
    $('contentRelMaps').update();

    for (i = 0; i < data.Items.length; i++)
    {
        cssClass = "first";
        if (i > 0) cssClass = "contentBlock";
        if (i == data.Items.length - 1) cssClass = "last";

        div = new Element('div');
        div.className = 'content';
        div.update( '<div class="'+cssClass+'"><div class="ListingThumbnail"><a href="' + data.Items[i].Url + '" target="_blank"><img src="'+data.Items[i].FileData+'" /></a></div><div class="ListingText ListingTextWithImage"><h3><a class="ListingTitle" href="' + data.Items[i].Url + '" target="_blank">' + data.Items[i].Title + '</a></h3>'+data.Items[i].Summary+'</div></div><div class="clearer"></div>');
        $('contentRelMaps').insert(div);
    }
    SetPages($('ExtrasRelMaps').down('div.crumb'), $('ExtrasRelMaps').down('div.Sort'), data.TotalCount, UpdateRelMaps);

    // Don't show sort for Related Maps
    //sortDiv = $('ExtrasRelMaps').down('div.Sort');
    //sortDiv.hide();
    processExternalLinks();
   }

function RelTablesSuccess(data) {
	$('contentRelTables').update();

	for (i = 0; i < data.Items.length; i++) {
		cssClass = "first";
		if (i > 0) cssClass = "contentBlock";
		if (i == data.Items.length - 1) cssClass = "last";

		div = new Element('div');
		div.className = 'content';
		div.update('<div class="' + cssClass + '"><div class="ListingText ListingTextWithImage"><h3><a class="ListingTitle" href="' + data.Items[i].Url + '" target="_blank">' + data.Items[i].Title + '</a></h3>' + data.Items[i].Summary + '</div></div><div class="clearer"></div>');
		$('contentRelTables').insert(div);
	}
	SetPages($('ExtrasRelTables').down('div.crumb'), $('ExtrasRelTables').down('div.Sort'), data.TotalCount, UpdateRelTables);

	//$('ExtrasRelMaps').show();
	//$('contentRelMaps').show();

	// Don't show sort for Related Maps
	sortDiv = $('ExtrasRelTables').down('div.Sort');
	sortDiv.hide();
	processExternalLinks();
}

function CurrProjsSuccess(data)
{
    $('contentCurrProjs').update();

    for (i = 0; i < data.Items.length; i++)
    {
        cssClass = "first";
        if (i > 0) cssClass = "contentBlock";
        if (i == (data.Items.length - 1) && i != 0) cssClass = "last";

        div = new Element('div');
        div.className = 'content';
   //     var regex = "<br[/]?>\s<br[/]?>"
   //     alert("regex1 = " + regex);
   //     regex = eval(regex);
   //     alert("regex2 = " + regex);
        var summary = data.Items[i].Summary;
        if (summary.indexOf('</p>') > -1)
        	summary = summary.substring(0, summary.indexOf('</p>') + 4);
        else if (summary.indexOf('<br><br>') > -1)
        	summary = summary.substring(0, summary.indexOf('<br><br>') + 8);
        else if (summary.indexOf('<br\/><br\/>') > -1)
        	summary = summary.substring(0, summary.indexOf('<br\/><br\/>') + 10);
        else if (summary.indexOf('<br \/><br \/>') > -1)
        	summary = summary.substring(0, summary.indexOf('<br \/><br \/>') + 12);
  //      else if (summary.search(regex) > -1)
  //      	summary = summary.substring(0, summary.search(regex) + 13);
        div.update('<div class="' + cssClass + '"><a href="' + data.Items[i].Url + '">' + data.Items[i].Title + '</a><br/>' + summary + '</div>');
        $('contentCurrProjs').insert(div);
    }

    SetPages($('ExtrasCurrProjs').down('div.crumb'), $('ExtrasCurrProjs').down('div.Sort'), data.TotalCount, UpdateCurrProjs);

    $('ExtrasCurrProjs').show();
    $('contentCurrProjs').show();
        
    sortDiv = $('ExtrasCurrProjs').down('div.Sort');
    sortDiv.hide();

    processExternalLinks();
   }

function IndicatorsSuccess(data)
{
    $('contentIndicators').update();

    for (i = 0; i < data.Items.length; i++)
    {
        cssClass = "first";
        if (i > 0) cssClass = "contentBlock";
        if (i == (data.Items.length - 1) && i != 0) cssClass = "last";

        div = new Element('div');
        div.className = 'content';
        div.update('<div class="' + cssClass + '"><a href="' + data.Items[i].Url + '">' + data.Items[i].Title + '</a><br/>' + data.Items[i].Summary + '</div>');
        $('contentIndicators').insert(div);
    }

    SetPages($('ExtrasIndicators').down('div.crumb'), $('ExtrasIndicators').down('div.Sort'), data.TotalCount, UpdateIndicators);

    $('ExtrasIndicators').show();
    $('contentIndicators').show();
        
    sortDiv = $('ExtrasIndicators').down('div.Sort');
    sortDiv.hide();

    processExternalLinks();
   }


function SetSort(sortDiv, sortValue, pageDiv, updateFunc)
{
    if (sortValue == 'TITLE')
    {
        a = new Element('a', { 'href': '#' }).insert('Date ');
        a.onclick = function()
            {
                SetSort(sortDiv, "DATE", pageDiv, updateFunc);
                updateFunc(sortDiv, pageDiv);
                return false;
            };

        sortDiv.update().insert('Sort by: ').insert(a).insert(' | Title');
    }
    else if (sortValue == 'DATE')
    {
        a = new Element('a', { 'href': '#' }).insert('Title');
        a.onclick = function()
            {
                SetSort(sortDiv, "TITLE", pageDiv, updateFunc);
                updateFunc(sortDiv, pageDiv);
                return false;
            };

        sortDiv.update().insert('Sort by: Date | ').insert(a);
    }

    sortDiv.writeAttribute('sort', sortValue);
}

function SetPages( pageDiv, sortDiv, totalCount, updateFunc )
{
    if (totalCount == 0)
    {
        //pageDiv.update().insert('No Results Found');
        pageDiv.up('div.TopicItem').hide();
        return;
    }
    else
    {
        pageDiv.up('div.TopicItem').show();
    }
    
    if (totalCount % 5 > 0) pages = Math.floor((totalCount / 5) + 1);
    else pages = Math.floor(totalCount / 5);
    pageDiv.writeAttribute('pages', pages);

    pageNum = pageDiv.readAttribute('page');

    pageDiv.update().insert('Pages: ');

    frontEllipsePage = (pageNum % 3 == 0) ? pageNum - 3 : 3 * (Math.floor(pageNum / 3));
    if (frontEllipsePage > 0)
    {
        a = new Element('a', { 'href': '#', 'page': frontEllipsePage }).insert('...');
        a.onclick = function()
        {
            pageDiv.writeAttribute('page', $(this).readAttribute('page'));
            updateFunc(sortDiv, pageDiv);
            return false;
        }

        pageDiv.insert(a).insert(' ');
    }

    for (i = frontEllipsePage + 1; i <= frontEllipsePage + 3; i++)
    {
        if (i > pages) break;

        pageDiv.insert(' ');
        if (i != pageNum)
        {
            a = new Element('a', { 'href': '#', 'page': i }).insert(i);
            a.onclick = function()
            {
                pageDiv.writeAttribute('page', $(this).readAttribute('page'));
                updateFunc(sortDiv, pageDiv);
                return false;
            }

            pageDiv.insert(a).insert(' ');
        }
        else
            pageDiv.insert(i).insert(' ');
    }

    if (pages > frontEllipsePage + 3)
    {
        a = new Element('a', { 'href': '#', 'page': frontEllipsePage+4 }).insert('...');
        a.onclick = function()
        {
            pageDiv.writeAttribute('page', $(this).readAttribute('page'));
            updateFunc(sortDiv, pageDiv);
            return false;
        }

        pageDiv.insert(a);
    }

    pageDiv.writeAttribute('page', pageNum);
   }

   function getDateString(dttm) {
   	//Formats date as MM/dd/yyyy
   	var dd = dttm.getDate();
   	var mm = dttm.getMonth() + 1; //January is 0!
   	var yyyy = dttm.getFullYear();
   	var HH = dttm.getHours();
   	var minutes = dttm.getMinutes();
   	var timestring = '';
   	if (dd < 10) { dd = '0' + dd }
   	if (mm < 10) { mm = '0' + mm }
   	if (HH > 0) { timestring = ' ' + HH + ':' + minutes.toPaddedString(2)}
   	return (mm + '/' + dd + '/' + yyyy + timestring);
   }
   function getShortDateString(dttm) {
       //Formats date as MM/dd/yyyy
       var dd = dttm.getDate();
       var mm = dttm.getMonth() + 1; //January is 0!
       var yyyy = dttm.getFullYear();
       if (dd < 10) { dd = '0' + dd }
       if (mm < 10) { mm = '0' + mm }       
       return (mm + '/' + dd + '/' + yyyy);
   }


   function getHostname(str) {
       var result = '';
       var re = new RegExp('^(?:f|ht)tp(?:s)?\://([^/]+)', 'im');
       var matches = str.match(re)

       if (matches != null && matches.length > 1) {        
         result = matches[1].toString();
        }
       return result;
   }