//GLOBAL VARIABLES
var callbackComplete = false;
var preloaderLogoName = 'Beach Soccer Association 2011';

//DECLARE VARIABLES
var processItems = false;
var itemsLoaded = 0;
var totalItems = 0;
var imageData, scriptsData, cssData;
var scriptCallbackVariable;
var destroyCounter = 0;
var destroyLimit = 10;
var destroyType = 'none';
var displayedPercentage = 0;
var frameID = 0;

//PRELOADER
preloader = function(){
	//WRITE PRELOADER
	document.write('<div id="preloader"></div>');
	
	//CREATE LOGO
	var preloadedLogoNode = document.createElement('img');
	preloadedLogoNode.onload = function(){
		//WRITE LOADER
		preloaderHTML = '<div class="preloaderNumberWrapper">';
			preloaderHTML += '<div class="preloaderNumberPosition">';
				preloaderHTML += '<div class="preloaderNumberOverflow">';
					preloaderHTML += '<div id="hundreds" class="preloaderNumberBackground"></div>';
				preloaderHTML += '</div>';
			preloaderHTML += '</div>';
			preloaderHTML += '<div class="preloaderNumberPosition">';
				preloaderHTML += '<div class="preloaderNumberOverflow">';
					preloaderHTML += '<div id="tens" class="preloaderNumberBackground"></div>';
				preloaderHTML += '</div>';
			preloaderHTML += '</div>';
			preloaderHTML += '<div class="preloaderNumberPosition">';
				preloaderHTML += '<div class="preloaderNumberOverflow">';
					preloaderHTML += '<div id="units" class="preloaderNumberBackground"></div>';
				preloaderHTML += '</div>';
			preloaderHTML += '</div>';
		preloaderHTML += '</div>';
	
		document.getElementById('preloader').innerHTML = preloaderHTML;
		
		//CREATE AJAX OBJECTS
		if (window.XMLHttpRequest){
			getImages = new XMLHttpRequest();
			getScripts = new XMLHttpRequest();
			getCss = new XMLHttpRequest();
		} else {
			getImages = new ActiveXObject('Microsoft.XMLHTTP');
			getScripts = new ActiveXObject('Microsoft.XMLHTTP');
			getCss = new ActiveXObject('Microsoft.XMLHTTP');
		}
		
		//RUN AJAX SCRIPT
		getImages.open('POST', 'src/preloader.php', true);
		getImages.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		getImages.send('fileType=images&fileDirectory=../images');
		//CREATE LISTENER
		getImages.onreadystatechange = function(){
			if(getImages.readyState == 4 && getImages.status == 200){
				data = eval(getImages.responseText);
				imageData = data;
				countItems(data);
				//RUN AJAX SCRIPT
				getScripts.open('POST', 'src/preloader.php', true);
				getScripts.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
				getScripts.send('fileType=scripts&fileDirectory=../src');
				//CREATE LISTENER
				getScripts.onreadystatechange = function(){
					if(getScripts.readyState == 4 && getScripts.status == 200){
						data = eval(getScripts.responseText);
						scriptsData = data;
						countItems(data);
						//RUN AJAX SCRIPT
						getCss.open('POST', 'src/preloader.php', true);
						getCss.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
						getCss.send('fileType=css&fileDirectory=../src');
						//CREATE LISTENER
						getCss.onreadystatechange = function(){
							if(getCss.readyState == 4 && getCss.status == 200){
								data = eval(getCss.responseText);
								cssData = data;
								processItems = true;
								countItems(data);
							}
						}
					}
				}
			}
		}
		
		reloadFunction = function(){
			window.location.reload();
		}
		
		destroyLoader = function(){
			if(destroyCounter >= destroyLimit){
				clearTimeout(updateTimeout);
				clearInterval(destroyInterval);				
				if(destroyType == 'images') { clearInterval(checkImagesLoaded); }
				if(destroyType == 'css') { clearInterval(stylesheetInterval); }
				if(destroyType == 'scripts') { clearInterval(scriptsInterval); }
				document.getElementById('preloader').innerHTML = '<div id="percentReset">Server Error: Restarting</div>';
				setTimeout(reloadFunction, 2000);
			}
			destroyCounter++;
		}
		
		//COUNT ITEMS
		countItems = function(data){
			//CREATE ARRAY OF ITEMS
			dataString = '';
			dataString = data.toString();
			dataArray = [];
			dataArray = dataString.split(',');
	
			//COUNT ITEMS
			totalItems = totalItems + dataArray.length;
			
			//CONTINUE WHEN DONE COUNTING
			if(processItems){
				preloadImages();
			}
		}
		
		//PRELOAD IMAGES FIRST
		preloadImages = function(){
			//CREATE ARRAY OF IMAGES
			dataString = '';
			dataString = imageData.toString();
			dataArray = [];
			dataArray = dataString.split(',');
			
			//RESET COUNTER
			i = 0;
			imageArray = [];
			imageArrayLoaded = [];
			
			//DEFINE TYPE
			destroyType = 'images';
			destroyInterval = setInterval(destroyLoader, 1000);
	
			//DEFINE FUNCTION
			preloadImagesLoop = function(){
				imageArray[i] = document.createElement('img');
				imageArrayLoaded[i] = false;
				imageArray[i].onload = function(){
					imageArrayLoaded[i] = true;
				}
				imageArray[i].src = dataArray[i];
			}
			
			checkImagesLoadedFunction = function(){
				if(i == (dataArray.length - 1)){
					if(imageArrayLoaded[i] == true){
						i++;
						itemsLoaded++;
						clearInterval(checkImagesLoaded);
						preloadCss();
					}
				} else {
					if(imageArrayLoaded[i] == true){
						i++;
						itemsLoaded++;
						preloadImagesLoop();
					}
				}
			}
	
			preloadImagesLoop();
			
			//SET INTERVAL
			checkImagesLoaded = setInterval(checkImagesLoadedFunction, 25);
			
			//RUN UPDATED FUNCTION
			updateLoaded();
		}
		
		//PRELOAD CSS SECOND
		preloadCss = function(){
			//CREATE ARRAY OF IMAGES
			dataString = '';
			dataString = cssData.toString();
			dataArray = [];
			dataArray = dataString.split(',');
	
			//COUNT LINKS
			currentLinks = document.styleSheets.length;
			totalLinks = dataArray.length + currentLinks;
			
			//RESET COUNTER
			i = 0;
			cssArray = [];
			
			//DEFINE TYPE
			destroyType = 'css';
	
			//DEFINE FUNCTION
			preloadCssLoop = function(){
				cssArray[i] = document.createElement('link');
				cssArray[i].type = 'text/css';
				cssArray[i].rel = 'stylesheet';
				cssArray[i].href = dataArray[i];
				cssArray[i].media = 'screen';
				document.getElementsByTagName('head')[0].appendChild(cssArray[i]);
				i++;
				itemsLoaded++;
			}
	
			//RUN FUNCTION
			preloadCssLoop();
	
			//UPDATE PERCENT LOADED
			checkStylesheets = function(){
				instantStylesheets = document.styleSheets.length;
				if(instantStylesheets == totalLinks){
					clearInterval(stylesheetInterval);
					preloadScripts();
				} else if(instantStylesheets > currentLinks){
					currentLinks = instantStylesheets;
					preloadCssLoop();
				}
			}
			
			//CHECK STYLESHEETS INTERVAL
			stylesheetInterval = setInterval(checkStylesheets, 25);
		}
		
		//PRELOAD SCRIPTS LAST
		preloadScripts = function(){
			//CREATE ARRAY OF SCRIPTS
			dataString = '';
			dataString = scriptsData.toString();
			dataArray = [];
			dataArray = dataString.split(',');
			
			//FIND jQUERY
			for(var i in dataArray){
				if(dataArray[i].indexOf('jquery') != -1){
					jQueryIndex = i;
				}
			}
			
			//SWITCH ORDER
			temp = dataArray[0];
			dataArray[0] = dataArray[jQueryIndex];
			dataArray[jQueryIndex] = temp;
			 
			//RESET COUNTER
			i = 0;
			
			//DEFINE TYPE
			destroyType = 'scripts';
			
			//DEFINE FUNCTION
			preloadScriptsLoop = function(){
				scriptCallbackVariable = dataArray[i].substring(4, (dataArray[i].length-3)) + 'Loaded';
				eval(scriptCallbackVariable + ' = false');
				eval('scriptNode' + i + ' = document.createElement("script")');
				eval('scriptNode' + i + '.type = "text/javascript"');
				eval('document.getElementsByTagName("head")[0].appendChild(scriptNode' + i + ')');
				eval('scriptNode' + i + '.src = dataArray[i]');
			}
	
			//RUN FUNCTION
			preloadScriptsLoop();
	
			//UPDATE PERCENT LOADED
			checkScripts = function(){
				eval('if(' + scriptCallbackVariable + ' == true && itemsLoaded == (totalItems - 1)){i++;itemsLoaded++;clearInterval(scriptsInterval);} else if(' + scriptCallbackVariable + ' == true && itemsLoaded < totalItems){i++;itemsLoaded++;preloadScriptsLoop();}');
			}
			
			//CHECK STYLESHEETS INTERVAL
			scriptsInterval = setInterval(checkScripts, 25);
		}
		
		//UPDATE GRAPHICS
		function updateLoaded(){		
			//GET NEW PERCENTAGE			
			percentageLoaded = Math.round(itemsLoaded / totalItems * 100);
			//WHEN FINISHED ACTUAL PRELOADING, CLEAR DESTROYER
			if(percentageLoaded >= 100){
				clearInterval(destroyInterval);
			}
			//ANIMATE DISPLAYED PERCENTAGE
			if(displayedPercentage < 100){
				//SEPERATE VALUES INTO HUNDREDS, TENS AND THOUSANDS
				var hundreds = Math.floor(displayedPercentage / 100);
				var tens = Math.floor((displayedPercentage - hundreds * 100) / 10);
				var units = Math.floor((displayedPercentage - hundreds * 100 - tens * 10));
				
				//MOVE UNIT POSITION
				backgroundPosition = parseFloat(units) * 103 * 6 + parseFloat(frameID) * 103;
				document.getElementById('units').style.backgroundPosition = "0px -" + backgroundPosition + "px";
				
				//MOVE TENS POSITION
				if(units >= 9){
					//MOVE UNIT POSITION
					backgroundPosition = parseFloat(tens) * 103 * 6 + parseFloat(frameID) * 103;
					document.getElementById('tens').style.backgroundPosition = "0px -" + backgroundPosition + "px";
				}
				
				//MOVE HUNDREDS POSITION
				if(tens >= 9 && units >= 9){
					//MOVE UNIT POSITION
					backgroundPosition = parseFloat(frameID) * 103;
					document.getElementById('hundreds').style.backgroundPosition = "0px -" + backgroundPosition + "px";
				}

				//COMPLETE ANIMATION OR INCREMENT FRAME
				if (frameID < 5){
					frameID++;
				} else {
					if(displayedPercentage < percentageLoaded){
						//INCREMENT PERCENTAGE
						displayedPercentage++;
						//RESET DESTROYER
						destroyCounter = 0;
						//RESET FRAME ID
						frameID = 0;
					}
				}
				//CALL THIS FUNCTION AGAIN AFTER TIMEOUT
				updateTimeout = setTimeout(updateLoaded, 10);
			} else {
				//DEFINE FUNCTION
				checkCallback = function(){
					if(callbackComplete){
						clearInterval(callbackInterval);
						$('#preloader').animate({opacity:'0'}, 1000, function(){
							$('#preloader').remove();
						});
					}
				}
				//SET INTERVAL
				callbackInterval = setInterval(checkCallback, 25);
				//LOAD FIRST PAGE
				loadContent('indexWrapper', 'default.php');
			}
		}
	}
	preloadedLogoNode.src = 'images/protected/filmstrip.png';
}
preloader();
