var countStart = 999;
var countDest = 0;
var countCurr = 0;

var mapprojects = new Array();

function counterInit()
{
    countDest = projects.length;
    countCurr = countStart;
    document.getElementById("RunningCounter").firstChild.nodeValue = countCurr;
    counterTick()
}
function counterTick()
{
    countCurr -= parseInt(1+(countStart - countDest)/8);
    if(countCurr < countDest)
    {
        countCurr = countDest;
    }
    else
    {
        setTimeout(counterTick, 50);
    }
    document.getElementById("RunningCounter").firstChild.nodeValue = countCurr;
}

function querystring(name)   // returns a named value from the querystring
{
   var tmp = ( location.search.substring(1) );
   var i   = tmp.toUpperCase().indexOf(name.toUpperCase()+"=");

   if ( i >= 0 )
   {
      tmp = tmp.substring( name.length+i+1 );
      i = tmp.indexOf("&");
      return unescape( tmp = tmp.substring( 0, (i>=0) ? i : tmp.length ));
   }

   return("");
}

function sortByAlphabet()
{
    document.getElementById("SortByName").className = "currentlySelected";
    document.getElementById("SortByTime").className = "";
    if(sortBy != 'name')
    {
        sortBy = 'name';
        sortDir = 'asc';
    }
    else if(sortDir == 'asc')
    {
        sortDir = 'desc';
    }
    else
    {
        sortDir = 'asc';
    }
    
    createCookie("sortBy",sortBy,365);
    createCookie("sortDir",sortDir,365);
    
    refreshPage();    
}

function sortByTime()
{
    document.getElementById("SortByName").className = "";
    document.getElementById("SortByTime").className = "currentlySelected";
    if(sortBy != 'time')
    {
        sortBy = 'time';
        sortDir = 'desc';
    }
    else if(sortDir == 'asc')
    {
        sortDir = 'desc';
    }
    else
    {
        sortDir = 'asc';
    }
    
    createCookie("sortBy",sortBy,365);
    createCookie("sortDir",sortDir,365);
    
    refreshPage();    
}

function refreshPage()
{
    var fullUrl = document.location;
    
    //alert(fullUrl.toString().substring(0, fullUrl.toString().indexOf("?")));
    
    var urlToGo = fullUrl.toString().substring(0, fullUrl.toString().indexOf("?"));
    
    urlToGo += "?page=" + querystring("page") + "&sortBy=" + sortBy + "&sortDir=" + sortDir;
    //alert('going to ' + urlToGo);
    document.location = urlToGo;
    
    return false;
}

function navigate(direction)
{
    if(direction == "next")
    {
        page++;
        if(page > maxpage)
        {
            page = maxpage;
        }
    }
    else
    {
        page--;
        if(page < 1)
        {
            page = 1;
        }
    }
    buildList();  
}
function changeDisplayMode(mode)
{
    display = mode; // 'list', 'thumbs' or 'map'
    createCookie("display",mode,365);
    page = 1;

    document.getElementById("ModeThumbnails").className = "";
    document.getElementById("ModeList").className = "";
    document.getElementById("ModeMap").className = "";

    switch(display)
    {
        case "list":
            pageSize = PAGE_SIZE_LIST;
            document.getElementById("ModeList").className = "currentlySelected";
            break;
        case "thumbs":
            pageSize = PAGE_SIZE_THUMBS;
            document.getElementById("ModeThumbnails").className = "currentlySelected";
            break;
        case "map":
            pageSize = PAGE_SIZE_MAP;
            document.getElementById("ModeMap").className = "currentlySelected";
            //load();
            //alert(map);
            break;
    }
    maxpage = parseInt(projects.length / pageSize) + 1;
    buildList()
}

function buildList()
{
    counterInit();

    // Hide all view modes
    workListNode.style.display = "none";
    workThumbnailsNode.style.display = "none";
    workMapNode.style.display = "none";
    
    
    var sortedProjects = projects;
    
    // remove all children previously set
    if (workListNode.hasChildNodes())
    {
        while (workListNode.childNodes.length >= 1)
        {
            workListNode.removeChild(workListNode.firstChild);
        } 
    }
    if (workThumbnailsNode.hasChildNodes())
    {
        while (workThumbnailsNode.childNodes.length >= 1)
        {
            workThumbnailsNode.removeChild(workThumbnailsNode.firstChild);
        } 
    }
    
    
    // Correctly set the paging counters and links
    document.getElementById("PagingCounter").firstChild.nodeValue = (projects.length>0?((page-1) * pageSize + 1):0) + " - " + (((page * pageSize)<projects.length)?(page*pageSize):projects.length);
    if(page == 1)
    {
        document.getElementById("PagingPrev").className = "previousInactive";
    }
    else
    {
        document.getElementById("PagingPrev").className = "previousActive";
    }
    if(page == maxpage)
    {
        document.getElementById("PagingNext").className = "nextInactive";
    }
    else
    {
        document.getElementById("PagingNext").className = "nextActive";
    }
    
    // Next, create the list
    for(var i = ((page-1) * pageSize); i < (page * pageSize); i++)
    {
        if(sortedProjects[i])
        {
            var project = sortedProjects[i];
            var workListNodeChild = document.createElement("LI");
            
            var workListNodeChildLink = document.createElement("A");
            workListNodeChildLink.href = project.url;
            workListNodeChildLink.className = "workListNumber";
            var workListNodeChildLinkText = document.createTextNode(project.workListNumber);
            workListNodeChildLink.appendChild(workListNodeChildLinkText);
            
            var workListNodeChildLink2 = document.createElement("A");
            workListNodeChildLink2.href = project.url;
            workListNodeChildLink2.className = "workListTitle";
            var workListNodeChildLink2Text = document.createTextNode(project.workListTitle);
            workListNodeChildLink2.appendChild(workListNodeChildLink2Text);
            
            workListNodeChild.appendChild(workListNodeChildLink);
            workListNodeChild.appendChild(workListNodeChildLink2);
            
            var workListNodeChildYears;
            if(project.startAssignment != project.endAssignment)
            {
                workListNodeChildYears = document.createTextNode(project.startAssignment + '-' + project.endAssignment);
            }
            else
            {
                workListNodeChildYears = document.createTextNode(project.startAssignment);
            }
            workListNodeChild.appendChild(workListNodeChildYears);
            
            workListNode.appendChild(workListNodeChild);
        }
    }
    
    // create the thumbnails and mark active items
    for(var i = 0; i < sortedProjects.length; i++)
    {
        sortedProjects.onPage = false;
    }
    for(var i = ((page-1) * pageSize); i < (page * pageSize); i++)
    {
        if(sortedProjects[i])
        {
            
            var project = sortedProjects[i];
            project.onPage = true;
            
            var thumbLi = document.createElement("LI");

            var thumbA = document.createElement("A");
            thumbA.href = project.url;

            
            var thumbImg = document.createElement("IMG");
            var re = /src=\"(([^\"])+)\"/;
            var m = re.exec(project.thumbURL);
            if(m != null && m[1] != null)
            {
                project.thumbUrlExtracted = m[1];
                thumbImg.src = "_homethumb2.php?src=" + m[1];
		thumbImg.alt=""+project.workListTitle;
		thumbImg.title=""+project.workListTitle;
            }
            else
            {
                thumbImg.src = "_homethumb2.php?src=blank2.jpg";
            }
            thumbA.appendChild(thumbImg);
            thumbLi.appendChild(thumbA);
            
            var thumbWorkNr = document.createElement("DIV");
            thumbWorkNr.className = "workNumber";
            var thumbWorkNrText = document.createTextNode(project.workListNumber + "/");
            thumbWorkNr.appendChild(thumbWorkNrText);
            
            thumbLi.appendChild(thumbWorkNr);
            
            workThumbnailsNode.appendChild(thumbLi);
        }
    }
    // Display the correct view mode
    switch(display)
    {
        case "thumbs":
            workThumbnailsNode.style.display = "block";
            break;
        case "list":
            workListNode.style.display = "block";
            break;
        case "map":
            workMapNode.style.display = "block";
            load(); // Google Map
            break;
    }
    

}

var PAGE_SIZE_THUMBS = 12;
var PAGE_SIZE_LIST = 20;
var PAGE_SIZE_MAP = 999;

var page = 1;
var sortBy = readCookie("sortBy");
if(!sortBy)
{
    sortBy = 'time';
}
switch(sortBy)
{
    case 'name':
        document.getElementById("SortByName").className = "currentlySelected";
        break;
    case 'time':
        document.getElementById("SortByTime").className = "currentlySelected";
        break;
}

var sortDir = readCookie("sortDir");
if(!sortDir)
{
    sortDir = 'desc';
}
var display = readCookie("display")
if(!display)
{
    display = 'thumbs'
}
var focusedLocation = "0";

if(querystring("map") != null && querystring("map") != "")
{
    focusedLocation = querystring("map");
}
if(focusedLocation != "0")
{
    display = 'map';
}

var pageSize;
switch(display)
{
    case 'thumbs':
        pageSize = PAGE_SIZE_THUMBS;
        document.getElementById("ModeThumbnails").className = "currentlySelected";
        break;
    case 'list':
        pageSize = PAGE_SIZE_LIST;
        document.getElementById("ModeList").className = "currentlySelected";
        break;
    case 'map':
        pageSize = PAGE_SIZE_MAP;
        document.getElementById("ModeMap").className = "currentlySelected";
        //load(); // Google Map
        break;
    default:
        pageSize = PAGE_SIZE_THUMBS;
        document.getElementById("ModeThumbnails").className = "currentlySelected";
        display = 'thumbs';
        break;
}

// Main HTML nodes
var contentNode = document.getElementById("Content");
var workListNode = document.getElementById("WorkList");
var workThumbnailsNode = document.getElementById("WorkThumbnails");
var workMapNode = document.getElementById("WorkMap");

var map

function load() {
  if (GBrowserIsCompatible()) {
    map = null
    if(!map)
    {
        map = new GMap2(document.getElementById("WorkMap"));
        map.setCenter(new GLatLng(52.4, 4.9), 10);


        map.setMapType(G_SATELLITE_MAP);
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        fillMap();
    }
    
    // create the map
    if(map)
    {    
        //fillMap();
    }
  }
}

function fillMap()
{
    /*
    - Go through all works and save a reference + coordinates to the ones that have valid coordinates
    - Draw coordinates on the map, open popup with picture and description
    - Make pop-up clickable
    */
    mapprojects = new Array();
    map.clearOverlays();
    for(var i = 0; i < projects.length; i++)
    {
        if(parseInt(projects[i].breedtegraad) > 0 && parseInt(projects[i].lengtegraad) > 0)
        {
            mapprojects.push(projects[i]);
        }
    }
    
    var minlng, maxlng, minlat, maxlat
    var focusedLng, focusedLat
    var decsep = ".";
    if((parseFloat("5.2")).toString().length < 3)
    {
        decsep = ",";
    }
    for(var i = 0; i < mapprojects.length; i++)
    {
        if(!minlat || minlat > parseFloat(mapprojects[i].breedtegraad.replace(/\./, decsep)))
        {
            minlat = parseFloat(mapprojects[i].breedtegraad.replace(/\./, decsep));
        }
        if(!maxlat || maxlat < parseFloat(mapprojects[i].breedtegraad.replace(/\./, decsep)))
        {
            maxlat = parseFloat(mapprojects[i].breedtegraad.replace(/\./, decsep));
        }
        if(!minlng || minlng > parseFloat(mapprojects[i].lengtegraad.replace(/\./, decsep)))
        {
            minlng = parseFloat(mapprojects[i].lengtegraad.replace(/\./, decsep));
        }
        if(!maxlng || maxlng < parseFloat(mapprojects[i].lengtegraad.replace(/\./, decsep)))
        {
            maxlng = parseFloat(mapprojects[i].lengtegraad.replace(/\./, decsep));
        }
        
        if(focusedLocation == mapprojects[i].ownID)
        {
            focusedLng = parseFloat(mapprojects[i].lengtegraad.replace(/\./, decsep));
            focusedLat = parseFloat(mapprojects[i].breedtegraad.replace(/\./, decsep));
        }
/*
        if(mapprojects[i].thumbUrlExtracted)
        {
		    var icon = new GIcon();
		    icon.image = "_homethumbsm.php?src=" + mapprojects[i].thumbUrlExtracted;
		    icon.shadow = "";
		    icon.iconSize = new GSize(84, 84);
		    icon.shadowSize = new GSize(0, 0);
		    icon.iconAnchor = new GPoint(42, 42);
		    icon.infoWindowAnchor = new GPoint(62, 12);
            mapprojects[i].place = new GMarker(new GLatLng(mapprojects[i].breedtegraad, mapprojects[i].lengtegraad), icon)
        }
        else
        {
*/
            mapprojects[i].place = new GMarker(new GLatLng(mapprojects[i].breedtegraad, mapprojects[i].lengtegraad))
/*
        }
*/
        mapprojects[i].place.parent = mapprojects[i];
        map.addOverlay(mapprojects[i].place);
        
        GEvent.addListener(mapprojects[i].place, "click", function() {
			this.openInfoWindowHtml(this.parent.workListTitle + '<br />' + 'werk ' + this.parent.workListNumber + '<br />' + this.parent.location + '<br />' + this.parent.category + '<br />' + this.parent.startAssignment + '<br /><br />' + '<a href="' + this.parent.url + '">detailpagina &raquo;</a>');
		});
/*
        if(focusedLocation == mapprojects[i].ownID)
        {
            mapprojects[i].place.openInfoWindowHtml(mapprojects[i].place.parent.workListTitle + '<br />' + 'werk ' + mapprojects[i].place.parent.workListNumber + '<br />' + mapprojects[i].place.parent.location + '<br />' + mapprojects[i].place.parent.category + '<br />' + mapprojects[i].place.parent.startAssignment + '<br /><br />' + '<a href="' + mapprojects[i].place.parent.url + '">detailpagina &raquo;</a>');
        }
*/
    }
    if(mapprojects.length > 0)
    {
        var lat1 = (maxlat + minlat)/2;
        var lng1 = (minlng + maxlng)/2;
        var zoomlevel = map.getBoundsZoomLevel(new GLatLngBounds(new GLatLng(minlat, minlng), new GLatLng(maxlat, maxlng)));
        //alert(focusedLocation)
        if(focusedLocation != "0")
        {
            // zoom in on this location
            map.setCenter(new GLatLng(focusedLat, focusedLng), 17);
            //focusedLocation = "0"
        }else         if(zoomlevel > 0)
        {
            map.setCenter(new GLatLng(lat1, lng1), zoomlevel - 1);
        }


    }
}


// Project list is shorter on filtered pages

var maxpage = parseInt(projects.length / pageSize) + 1;

buildList();

