﻿$(document).ready(function() {

	var numProjWorkPage = 7;
	var numFeatProj = 3;
	var numFeatProjPerLine = 6;
	var projObj = new Array();
	var projObjAnon = new Array();
	var projCategory = '';
	var projID = 0;
	var projIndex = 0;
	
	if(GetCurrentPageName() == "project-ptd.aspx") {
		var protectedPage = 1;
	} else {
		var protectedPage = 0;
	}
	
	/* Creat Project object array */
	$().SPServices({
		operation: "GetListItems",
		async: false,
		listName: "Projects",
		valuepairs: [["Title"], 
					["Company"], 
					["Description"], 
					["Tags"], 
					["Media"], 
					["ID"], 
					["Category"], 
					["Front Page Position"], 
					["Work Page Position"], 
					["Thumbnail"], 
					["Protected"], 
					["Demo URL"],
					["Active"],
					["Project Date"]],
		CAMLQuery: '<Query><OrderBy><FieldRef Name="Project_x0020_Date" Ascending="False" /></OrderBy></Query>',
		completefunc: function (xData, Status) {
			var j=k=0;
			$(xData.responseXML).find("[nodeName='z:row']").each(function(i) {
				if ($(this).attr("ows_Active") == 1) {
					projObj[j++] = $(this);
					if ($(this).attr("ows_Protected") == 0) {
						projObjAnon[k++] = $(this);
					}
				}
			});	
			
			projObjAleph = projObj;
			projObjAnonAleph = projObjAnon;
		}
	});
	
	var numProj = projObj.length;
	var numProjAnon = projObjAnon.length;
	
	/* Create Project page main content */
	if ($("#projRotatorWrap").length > 0) {
		var project = getQueryVariable("project");
		project ? project = project.replace(/%20/g, ' ') : null;
		var pid = getQueryVariable("pid");
		
		/* Use ID first, then project if no ID, then random if none */
		var haveid = haveproject = random = 0;
		if (pid) {
			haveid = 1;
		} else if (project) {
			haveproject = 1;
		} else {
			pid = (protectedPage ? $(projObj[0]).attr("ows_ID") : pid = $(projObjAnon[0]).attr("ows_ID"));
			haveid = 1;
			//random = Math.floor(Math.random() * numProjAnon) + 1;
		}
		
		/* Loop through projects and draw what's needed */
		for (var i=0; i < numProj; i++) {
			var id = $(projObj[i]).attr("ows_ID");
			var title = $(projObj[i]).attr("ows_Title");

			if ((haveid == 1) && (pid == id)) {
				drawMainProj(projObj[i]);
				projCategory = $(projObj[i]).attr("ows_Category");
				projID = $(projObj[i]).attr("ows_ID");
				projIndex = i;
				break;
			} else if ((haveproject == 1) && (title == project)) {
				drawMainProj(projObj[i]);
				projCategory = $(projObj[i]).attr("ows_Category");
				projID = $(projObj[i]).attr("ows_ID");
				projIndex = i;
				break;
			} else if (random == i+1) {
				drawMainProj(projObjAnon[i]);
				projCategory = $(projObjAnon[i]).attr("ows_Category");
				projID = $(projObj[i]).attr("ows_ID");
				projIndex = i;
				break;
			} else if (i == numProj-1) {
				$("#projRotator").remove();
				$("#prevNext").append('<h3>No Matching Project</h3>');
			}
		}
		
		$('#projPager').css('width', $('#projRotator img').length * 16);
		$("#projRotator").cycle  ({
			width             : 622,
			height            : 658,
			timeout           : 6000,
			pause             : 1,
			fx                : 'fade',
			pager             : '#projPager',
			prev              : '#projPrev',
			next              : '#projNext'
		});
		
		$("#projRotator").click (function() {
			$("#projRotator").cycle('next');
		});
		
	}
	
	/* Create Work Page or Featured Projects */
	if ($("#work").length > 0 || $("#projFeat").length > 0 || $("#projFeatAll").length > 0 ) {
		if ($("#work").length > 0) {  // Work Page
			var idType = '#work';
			var len = numProjWorkPage;
		} else if ($(".homePage").length > 0) {  // Home Page
			var idType = '#projFeat';
			var len = numFeatProj;
		} else if ( ($("#projFeatAll").length > 0) && (protectedPage == 1) ) {  // Project Page protected
			var idType = '#projFeatAll';
			var len = numProj;
		} else if ( $("#projFeatAll").length > 0 && (protectedPage == 0) ) {  // Project Page anonymous
			var idType = '#projFeatAll';
			var len = numProjAnon;
		}
	
		for (var i=1; i <= len; i++) {	
			if (i % numFeatProjPerLine == 0) { // set right margin to zero if end of line
				$(idType).append('<div id="proj' + i + '" class="projDiv" style="margin-right:0"><div class="projImage"></div></div>');
			} else {
				$(idType).append('<div id="proj' + i + '" class="projDiv"><div class="projImage"></div></div>');
			}

		}
		
		/*var categories = new Array();*/
		for (var i=0/*, catIndex=0*/, hit=0; i < numProjAnon; i++) {
			if ($("#work").length > 0 && i < numProjWorkPage) {
				hit=1;
				//var pos = $(projObjAnon[i]).attr("ows_Work_x0020_Page_x0020_Position");
				var pos = i+1;
			} /*else if ($("#projFeat.homePage").length > 0){  // draw home page featured projects by assignment
				hit=1;
				var pos = $(projObjAnon[i]).attr("ows_Front_x0020_Page_x0020_Position");
			}*/ /*else if ($(projObjA[i]).attr("ows_Category") == projCategory && $(projObj[i]).attr("ows_ID") != projID) { // build same category projects index to be used below
				categories[catIndex] = i;
				catIndex++;
				continue;
			}*/
			if (pos != 'N/A' && hit==1) {
				hit=0;
				drawProj(projObjAnon[i], pos);
			}
		}
		
		// Draw 3 random anonymous projects on home page featured section
		if ($("#projFeat.homePage").length > 0){
			var tempObj = shuffle(projObjAnon);
			
			for (var i=0, len = tempObj.length; i < 3 || i < len; i++) {
				drawProj(tempObj[i], i+1);
			}
		}
		
		// Draw featured projects on project page - random projects from same Category
		/*if (idType == '#projFeat' && $("#projFeat.homePage").length == 0) {
			categories.sort(function() {return 0.5 - Math.random()});
			for (var i=0, len = categories.length; i < numFeatProj; i++) {
				if (i < len) {
					drawProj(projObj[categories[i]], i+1);
				} else {
					$('#proj'+(i+1)).remove();
				}
			}
		}*/
		
	}
	
	/* Draw Featured Projects at bottom of Project page */
	
	if ($('#lowProjNav').length > 0 ) {
		if (protectedPage == 1) {
			var obj = projObj;
			var len = projObj.length;
			var page = 'Project-PTD.aspx';
			var index = projIndex;
		} else {  // anonymous pages
			var obj = projObjAnon;
			var len = projObjAnon.length;
			var page = 'Project.aspx';
			var index = 0;
			for (var i=0; i < len; i++) {
				if ($(obj[i]).attr("ows_ID") == $(projObj[projIndex]).attr("ows_ID")) {
					index = i;
					break;
				}
			}
		}
		
		if (obj[index - 1]) {
			var prev = index - 1;
		} else {
			var prev = obj.length - 1;
		}
		
		if (obj[index + 1]) {
			var next = index + 1;
		} else {
			var next = 0;
		}

		// Add previous and next Project links
		$("#prevProj").attr('href', page + '?pid=' + $(obj[prev]).attr("ows_ID"));
		$("#nextProj").attr('href', page + '?pid=' + $(obj[next]).attr("ows_ID"));

		var numCols=6;
		//var sortedObj = obj.slice(0);
		//sortedObj.sort(sortByTitle);
		
		for (var i=0; i < len; i++) {
			/*col = i % numCols + 1;			
			var projClass = 'projCol' + col;
			$('#allProj .'+projClass).append('<div><a href="' + page + '?pid=' + $(sortedObj[i]).attr("ows_ID") + '">' + $(sortedObj[i]).attr("ows_Title") + '</a></div>');	*/
			drawProj(obj[i], i+1);
		}
			
	}
	
	
	/* Functions */
	
	/*$("#plusMinus").click(function() {
		$(this).toggleClass('active');
		$('#allProj').toggle();
	})*/
	
	if($('.mosaic-block').length > 0) {
		$('.mosaic-block').mosaic({
			animation	:	'slide'
		});
	}
	
	function drawProj(obj, pos) {
		// don't draw if object already exists
		if ($("#proj"+pos+".mosaic-block").length > 0) {
			return -1;
		}
		
		var img = alltrim($(obj).attr("ows_Thumbnail"));
		var id = $(obj).attr("ows_ID");
		var title = $(obj).attr("ows_Title");
		var company = $(obj).attr("ows_Company");
		var imgCSS = 'url("' + img + '")';
		$("#proj"+pos+" .projImage").css("background-image", imgCSS);
		
		protectedPage == 1 ? ptd = "-PTD" : ptd = "";
		
		if ($('#projFeatAll').length > 0) {
			$("#proj"+pos).prepend('<a href="/Pages/Project' + ptd + '.aspx?pid=' + id +
				'" class="mosaic-overlay"><div class="details"><h3>' + title +
				'</h3><p>View Project &nbsp; &gt;</p></div></a>');
			// add Mosaic classes
			$("#proj"+pos).addClass('barSm').addClass('mosaic-block');
		} else {
			$("#proj"+pos).prepend('<a href="/Pages/Project.aspx?pid=' + id +
				'" class="mosaic-overlay"><div class="details"><h3>' + company + 
				"</h3><h6>" + title + '</h6><p>View Project &nbsp; &gt;</p></div></a>');
			// add Mosaic classes
			$("#proj"+pos).addClass('bar').addClass('mosaic-block');
		}
		
		$("#proj"+pos).wrap('<a href="/Pages/Project' + ptd + '.aspx?pid='+id+'"></a>');
		
		
	}
	
	function drawMainProj(obj) {
		if (protectedPage == 0 && ($(obj).attr("ows_Protected") == 1 || $(obj).attr("ows_Protected") == 'undefined')) {
			$("#projRotator").remove();
			$("#prevNext").append('<h3>No Matching Project</h3>');
			return -1;
		}
		var id = $(obj).attr("ows_ID");
		var title = $(obj).attr("ows_Title");
		var company = '<h5>' + $(obj).attr("ows_Company") + '</h5>';
		var description = $(obj).attr("ows_Description");
		var imgArr = $(obj).attr("ows_Media").split(/\n/);
		for (var j=0; j < imgArr.length; j++) {
			$("#projRotator").append('<img src="' + alltrim(imgArr[j]) + '" alt="" border="0" width="622" height="658" />');
		}
		var tagsArr = $(obj).attr("ows_Tags").split(";#");
		var tagsUL = $('<ul />');
		for (var j=1; j < tagsArr.length; j+=2) {
			var li = '<li>' + tagsArr[j] + '</li>';
			$(tagsUL).append(li);
		}
		var demoUrl = $(obj).attr("ows_Demo_x0020_URL");
		var demoUrlLink = '<a href="' + demoUrl + '">' + demoUrl + '</a>';
		
		$("#projDesc").append(company);
		$("#projDesc").append('<h2>' + title + '</h2>');
		$("#projDesc").append(description);
		if (tagsArr.length > 1) {		
			$("#projDesc").append('<h6>Project Features:</h6>').append(tagsUL);
		}
		if (protectedPage && demoUrl) {		
			$("#projDesc").append('<h6>Demo URL:</h6>').append(demoUrlLink);
		}

	}
	
	function sortByTitle(a,b) { 
		if (a.attr("ows_Title") > b.attr("ows_Title")) {
			return 1;
		} else if (a.attr("ows_Title") < b.attr("ows_Title")) {
			return -1;
		} else {
			return 0;
		}
	}
	
	function shuffle(array) {
		var tmp, current, top = array.length;
	
		if(top) while(--top) {
			current = Math.floor(Math.random() * (top + 1));
			tmp = array[current];
			array[current] = array[top];
			array[top] = tmp;
		}
		return array;
	}

});
