//globals
var g_img_timer;
var g_eventImages = new Array();
var g_events_per_page = 12;
var g_preload_timeout= 0;

//event object
function eventObject(id,name,date,displayinfo) {
this.eventid = id;
this.eventname=name;
this.eventdate=date;
this.queryInfo = displayinfo;
}

var g_events = new Array();
showLoadingAnimation();
loadEvents(window.location.href);
//JAVASCRIPT HERE==================================================================================================
function loadEvents(url) {
	if(url.search(/index.php/)=='-1') {
		url = 'browse.php';
	}
	url = url.replace('index.php','browse.php');
	var poundIndex = url.search(/#/);
	if(poundIndex != -1){
		url = url.substring(0,poundIndex);
	} 
	//url = url.replace('#','');
	
	//download more if the screen can hold more
	
	
try {
		req = new XMLHttpRequest(); /* e.g. Firefox */
	} catch(e) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
			/* some versions IE */
		} catch (e) {
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
				/* some versions IE */
			} catch (E) {
			req = false;
			}
		}
	}
	req.open("POST",url,true);
	
	//the ajax target will return an array of event objects
	req.onreadystatechange = function() {
		if(req.readyState == 4) {
			if(req.status == 200) {
			
				//evaluate the array object
				var JSONarray=eval(req.responseText);
				g_events = JSONarray;
				preloadImages();
				showPageNumbers();
				setTimeout('initPreload()',260);
			}
		}
	};

	req.send(null);
	
}

function initPreload() {
	//generate the table
	regenerateTable();
	//if all images loaded then show
	g_img_timer = setInterval('checkImgs()', 250);

}
function preloadImages() {
	for (var i = 0; i < g_events.length;i++) {
		g_eventImages[i] = new Image();
		g_eventImages[i].src = 'crop.php?id='+g_events[i].eventid;
	}
}


//show navigation controls
function showPageNumbers() {
	if (g_events.length == 0) {
		document.getElementById('pageNumbers').innerHTML = "0 Results Found";
		document.getElementById('resultsFound').innerHTML = "0 Results Found";
		document.getElementById('browsingMessage').innerHTML = "0 Results Found. Try your Search in another network or with another Tag.";
		return;
	}
	var perPage = g_events_per_page;
	var pageNum = parseInt(g_events[0].page);
	var startingEventNum = ((pageNum-1)*perPage+1);
	var endingEventNum = g_events[0].totalevents;
	var url = "" + window.location.href;
	var totalEvents = g_events[0].totalevents;
	var pagesRequired = Math.ceil(totalEvents/perPage);
	var nextPage = 0;
	var urlNoPage = url;
	var nextLink ='';
	var prevLink ='';
	var bFirstParam = false;
	//replace any #'s
	url = url.replace('#','');
	if (url.search('index.php')==-1) {
		urlNoPage = 'index.php';
	}

	if (url.search('&page=') > -1 || url.search('\\?page=') > -1) {
		var re = new RegExp('page=[0-9]+$', "g");
		urlNoPage = url.replace(re,'');
	}else if (urlNoPage.search('index.php\\?') == -1) {
		urlNoPage= 'index.php?';
		bFirstParam = true;
	}else {
		//need to add amp;
		urlNoPage += '&';
	}
	
	if (totalEvents >= perPage) {
		if (pageNum*perPage > totalEvents) {
			endingEventNum = totalEvents;
		}else {
			endingEventNum = (pageNum * perPage);
		}
	}
	
	urlNoPage = urlNoPage.replace('#','');
	
	//next page
	if ((pageNum * perPage)<totalEvents) {
		nextPage = pageNum+1;
		urlNext = urlNoPage +"page=" + nextPage;
		nextLink = "<a href='" + urlNext + "'>&gt;</a>";
	}
	//previous page
	if ((pageNum-1) > 0){ 
		var prevPage = pageNum-1;
		urlPrev = urlNoPage +"page=" + prevPage;
		prevLink = "<a href='" + urlPrev + "'>&lt;</a>";
	}
	
	//show browsing message
	document.getElementById('browsingMessage').innerHTML += "" + startingEventNum + "-" + endingEventNum + ", of " + totalEvents + " Events Total";
	//show page numbers
	var pageNumText ='';

	//if there are 20 pgs, for example. only show the immediate 5 and use an elipses for the rest
	var visiblePageLimit = 5;

	//algorithm
	//1 show first page
	//show 5 closest pages
	//show last page
	
	//check to see if there are more than 5 pages
	
	

	
	//show five visible pages
	if (pagesRequired <= visiblePageLimit ) {
		for (var i = 1; i <= pagesRequired; i++) {
			if (i == pageNum) {
				pageNumText +="<font color='yellow'>"+i+"</font>";
			}else {
				pageNumText += "<a href='" + urlNoPage + 'page='+ (i) + "'>"+i+"</a>";
			}
		}
	}else { //6 or more

		var visibleStartPage = 1;

		
		if (pageNum >= 4) {
			visibleStartPage = pageNum - 2;
		}else {
			visibleStartPage = 1;
		}
		var visibleEndPage = visibleStartPage + 4;
		
		if (pageNum > pagesRequired - 3) {
			visibleEndPage = pagesRequired;
			visibleStartPage = pagesRequired - 4;
		}
		
	
		//show page 1
		if (visibleStartPage != 1) {
			if (pageNum == 1) {
			pageNumText +="<font color='yellow'>"+1+"</font>";
			}else {
				pageNumText += "<a href='" + urlNoPage + 'page='+ (1) + "'>"+1+"</a>";
			}
		}
		
		//post 1 ellipses
		if (pageNum >=4) {
			pageNumText +='...';
		}
			
		for (var i = visibleStartPage; i <= visibleEndPage; i++) {
			if (i == pageNum) {
				pageNumText +="<font color='yellow'>"+i+"</font>";
			}else {
				pageNumText += "<a href='" + urlNoPage + 'page='+ (i) + "'>"+i+"</a>";
			}
		}
		//pre last page ellipses
		
		if (visibleEndPage != pagesRequired) {
			pageNumText +='...';
			
			
			if (pageNum == pagesRequired) {
				pageNumText +="<font color='yellow'>"+pagesRequired+"</font>";
			}else {
				pageNumText += "<a href='" + urlNoPage + 'page='+ (pagesRequired) + "'>"+pagesRequired+"</a>";
			}
		}
	
	}
	
	
	/*
	for (var i = visibleStartPage; i < visibleEndPage; i++) {
		if (i == pageNum) {
			pageNumText +="<font color='dodgerBlue'>"+i+"</font>";
		}else {
			pageNumText += "<a href='" + urlNoPage + 'page='+ (i) + "'>"+i+"</a>";
		}
	}

	//show last page
	if (pageNum == pagesRequired)
		pageNumText +="<font color='dodgerBlue'>"+pagesRequired+"</font>";
	else
		pageNumText += "<a href='" + urlNoPage + 'page='+ (pagesRequired) + "'>"+pagesRequired+"</a>";	*/

	document.getElementById('pageNumbers').innerHTML =prevLink +" Navigate: "+ pageNumText + nextLink;
	document.getElementById('resultsFound').innerHTML =prevLink +" Navigate: "+ pageNumText + nextLink;
	//document.getElementById('resultsFound').innerHTML = prevLink.replace(/\>&lt;/,">&lt;Prev") + " (" + totalEvents + " Events) " + nextLink.replace(/\>/,">Next");
	
}

//this method inserts a loading animation in place of the events
function showLoadingAnimation(){
	//var eventContainer = document.getElementById('eventContainer');
	var loadingImgDiv = document.getElementById('loadingImgDiv');
	loadingImgDiv.style.border='0px solid black';
	loadingImgDiv.style.position='relative';
	loadingImgDiv.style.top='5%';
	loadingImgDiv.style.textAlign='center';
	//loadingImgDiv.style.marginLeft='-56px';
	
	var loadingImg = document.createElement('img');
	
	loadingImg.setAttribute('src','images/10-1.gif');
	loadingImgDiv.appendChild(loadingImg);
	loadingImgDiv.appendChild(document.createElement('br'));
	loadingImgDiv.appendChild(document.createTextNode('Loading Events...'));
}


function regenerateTable() {
	//image preloader
	
	//var eventsPerPage=<?echo $numperpage;?>;
	var eventsPerPage=g_events_per_page;

//1012
	var screenWidth = document.body.clientWidth - 230;
	//var screenWidth = document.getElementById('main').style.width;
	var boxWidth = 248;
	var maxBoxesPerRow = parseInt(screenWidth / boxWidth);
	
	//hardcode for now
	if (screenWidth < 1007 && screenWidth >= 752) {
		maxBoxesPerRow = 3;
	}else if (screenWidth < 752 && screenWidth > 500) {
		maxBoxesPerRow = 2;
	}
	

	if (maxBoxesPerRow > 5)
		maxBoxesPerRow=5;
	
	//hardcode
	if (g_eventImages.length < maxBoxesPerRow) {
		document.getElementById('eventtable').setAttribute('width','50%');
		document.getElementById('eventtablediv').setAttribute('width','50%');
		document.getElementById('eventtable').style.margin = '0px';
		document.getElementById('eventtablediv').style.margin = '0px';
	}

	var rowsRequired = Math.ceil(eventsPerPage / maxBoxesPerRow);
	//alert("screenWidth: " + screenWidth + " ,maxBoxesPerRow: "+ maxBoxesPerRow + " ,rowsRequired: "+ rowsRequired + "g_events:" + g_events.length);	

	//keep track of events created;
	var eventNumber = 0;
	var table=document.getElementById('tablebody');
	//first remove all rows
	while ( table.childNodes.length >= 1 )
	{
	        table.removeChild( table.firstChild );       
	}




for(rowNum=1;rowNum<=rowsRequired;rowNum++){
	//create a row and add it

	var row = document.createElement('tr');
	row.setAttribute('id','row' + rowNum);

	//regenerate the table

	//first remove all nodes
	while ( row.childNodes.length >= 1 )
	{
	        row.removeChild( row.firstChild );       
	}
	

	
	for(i=0;i< maxBoxesPerRow;i++) {
		if (eventNumber < eventsPerPage && eventNumber < g_events.length) {
		
			//create TD cells
			var cell = document.createElement('td');
			if (g_eventImages.length <= 2) {
				//cell.setAttribute('align','left');
				cell.style.textAlign='left';
			}else {
				//cell.setAttribute('align','center');
				if (i ==0 || i == maxBoxesPerRow-1){
					cell.style.width='248px';
					if (i == maxBoxesPerRow-1){
						cell.style.marginRight='0px';
					}
				}else {
					cell.style.textAlign='center';				
				}
			}
			cell.style.padding='0px';
			
			var altText =g_events[eventNumber].fullname +" - "+ "Event Id: "+g_events[eventNumber].eventid + " " + g_events[eventNumber].displayinfo;
			
			//display the ad
			var eventDiv = document.createElement('div');
			eventDiv.setAttribute('class','eventDiv');
			eventDiv.setAttribute('className','eventDiv');
			if (g_events.length > 1) {
				eventDiv.style.marginLeft = 'auto';
				eventDiv.style.marginRight = 'auto';
			}else {
				eventDiv.style.marginLeft = '0px';
				eventDiv.style.marginRight = 'auto';
			}
			//<div class='eventDiv'>
			eventDiv.innerHTML = "<a href='eventdetails.php?id="+g_events[eventNumber].eventid+"'><img title='" + altText +"' src='crop.php?id="+g_events[eventNumber].eventid +"'></a><br>"+ g_events[eventNumber].eventname + '<br>' + g_events[eventNumber].eventdate	+" " + g_events[eventNumber].displayinfo;
			
			/*if(i == maxBoxesPerRow-1){
				eventDiv.style.marginLeft='20px';
			}*/
			
			cell.appendChild(eventDiv);
			row.appendChild(cell);
			eventNumber++;
		}
	} 
	table.appendChild(row);

}
} //end regenerate table

function checkImgs() {
	if (allImagesLoaded(document.images)) { 
		clearInterval(g_img_timer) ;
		//clear the loading image
		document.getElementById('loadingImgDiv').style.display='none';
		setTimeout('showEvents()',250);
	}
}

//this function is to be called after all the images have loaded
function showEvents() {
	document.getElementById('eventtable').style.visibility = 'visible';
	//hack
	document.getElementById('eventtable').style.marginLeft = '-1px';
	delete g_eventImages;
}

function allImagesLoaded(imgArr) {
        
                // return variable
                var imagesloaded = 1;
        
                // Loop through all the images
                for (var i = 0;i< imgArr.length;i++)
                {
                        // If the image isnt loaded we set the return varible to 0
                        if(imgArr[i].complete == false) {
                                return 0;
                        }
                        g_preload_timeout++;
                        if(g_preload_timeout > 40) {
				return 1;
                        }
                }
        
                // This will return 0 if one or more images are not loaded and 1 if all images are loaded.
                return imagesloaded;
}
