var StateManager;

var hashTmp = '';
var hashSearchTmp = '';

$(document).ready(function(){
		
	$('.checkboxImg').bind('click', checkBox);
	$('.categoryBar').bind('click', rollBar);
	$('.resultLink').bind('click', showPortDetails);
	$('#backToResultsBtn').bind('click', backToResults);
	$('#resultsDisplay').bind('click', backToResults);
	$('#searchPortBtn').bind('click', runSearchBox);
	
	$('.imgThumb').bind('click', updateLgPortImg);
	
	initVariables();
		
	resetViews();
	if(window.location.hash == '' || window.location.hash == '#'){
		//window.location.hash = 'projectType(5)|';
		//one shot custom call to load project type as featured - but don't update the hash so you dont have to click back twice if you come into portfolio then back out.
		/*urlCheckOnBox('5', 'boxPT');
		$.ajax({
			type: "POST",
			url: "/_commongoal/content/Portfolio_ajax.cfc",
			dataType: "json",
			data: {
			   method: 'search',
			   projectTypeList: '5',
			   marketsList: '',
			   expertiseList: '',
			   geographyList: '',
			   searchString: ''
			},
			success: searchSuccess
		});		*/
		
		
	}
	parseUrlCriteria();
	
});



var criteria = {};
criteria.projectType = [];
criteria.markets = [];
criteria.expertise = [];
criteria.geography = [];

function initVariables(){
		
	StateManager = EXANIMO.managers.StateManager;
	StateManager.initialize();
	StateManager.history = [];
	StateManager.historyIndex = 0;
	StateManager.disregardFromHistory = false;
    // Define what happens when the state changes.
	setInterval(history_Check, 500);	
}

function history_Add()
{
	StateManager.setState(location.hash.replace(/#/g,""));
	StateManager.history.push(location.hash);
	StateManager.historyIndex++;
}


function history_Check()
{
	if(StateManager.history.length > 0 && StateManager.history[--StateManager.historyIndex] != location.hash)
	{
		
		StateManager.disregardFromHistory = true;
		//alert(StateManager.history[StateManager.history.length-1] + "\n\nurl: " + location.hash);
		//StateManager.history.pop();
		parseUrlCriteria();
	}
}

function checkBox(e){
	if($(e.currentTarget).attr('checked') == 'Off'){
		$(e.currentTarget).attr('src', '/graphics/global/checkOn.png');
		$(e.currentTarget).attr('checked', 'On');
		var imgId = $(e.currentTarget).attr('id');
		$('#check'+imgId+'').attr('checked', 'checked');
	}
	else if($(e.currentTarget).attr('checked') == 'On'){
		$(e.currentTarget).attr('src', '/graphics/global/checkOff.png');
		$(e.currentTarget).attr('checked', 'Off');
		var imgId = $(e.currentTarget).attr('id');
		$('#check'+imgId+'').removeAttr('checked');
	}
	$('#projSearch').val('Search Projects by Keyword:');

	runSearch();
}

function urlCheckOnBox(val, type){
	$('#'+type+''+val+'').attr('src', '/graphics/global/checkOn.png');
	$('#'+type+''+val+'').attr('checked', 'On');
	var imgId = $('#'+type+''+val+'').attr('id');
	$('#check'+imgId+'').attr('checked', 'checked');
}

function rollBar(e){
	var category = $(e.currentTarget).attr('category');	
	if($('.rollouts[category="'+category+'"]').is(':hidden')){
		$('.rollouts[category="'+category+'"]').slideDown('normal');
		$(e.currentTarget).addClass('open');
	}
	else{
		$('.rollouts[category="'+category+'"]').slideUp('normal');
		$(e.currentTarget).removeClass('open');
	}
}


function parseUrlCriteria(){
	var hash = window.location.hash;
	hash = hash.substring(1);
	urlArray = hash.split('|');
	
	var serializedObj = {};
	for(i=0; i<urlArray.length; i++){
		var searchMap = urlArray[i];
		var startOfValues = searchMap.indexOf("(");
		var type = searchMap.substring(0, startOfValues  );
		var values = searchMap.substring(startOfValues+1, searchMap.length-1).split(",")
		serializedObj[type] = values;
	}
	
	currentSearch = serializedObj;
	
	uncheckAll();
	
	var projectTypeList = '', marketsList = '', expertiseList = '', geographyList = '', searchString = '';
	for(var type in currentSearch){
		switch(type){
			case 'pid':
				/*$('#resultsContainer').css('display', 'none');
				$('#detailsContainer').css('display', 'block');*/
				showPortItem(currentSearch.pid[0]);
				return;
			break;
			case 'search':
				/*$('#resultsContainer').css('display', 'block');
				$('#detailsContainer').css('display', 'none');*/
				searchBoxAjax(currentSearch.search[0]);
				return;
			break
			case 'projectType':
				for(i=0; i<currentSearch[type].length; i++){
					if(i < currentSearch[type].length -1){
						projectTypeList += currentSearch.projectType[i] +',';
					}
					else
						projectTypeList += currentSearch.projectType[i];
						
					urlCheckOnBox(currentSearch.projectType[i], 'boxPT');
					//$('#projectRollout').slideDown('normal');
					
				}
				break;
			case 'markets':
				for(i=0; i<currentSearch[type].length; i++){
					if(i < currentSearch[type].length -1){
						marketsList += currentSearch.markets[i] +',';
					}
					else
						marketsList += currentSearch.markets[i];
					
					urlCheckOnBox(currentSearch.markets[i], 'boxM');
					//$('#marketsRollout').slideDown('normal');
				}
				break;
			case 'expertise':
				for(i=0; i<currentSearch[type].length; i++){
					if(i < currentSearch[type].length -1){
						expertiseList += currentSearch.expertise[i] +',';
					}
					else
						expertiseList += currentSearch.expertise[i];
					
					urlCheckOnBox(currentSearch.expertise[i], 'boxE');
					//$('#expertiseRollout').slideDown('normal');
				}
				break;
			case 'geography':
				for(i=0; i<currentSearch[type].length; i++){
					if(i < currentSearch[type].length -1){
						geographyList += currentSearch.geography[i] +',';
					}
					else
						geographyList += currentSearch.geography[i];
						
					urlCheckOnBox(currentSearch.geography[i], 'boxG');
					//$('#geographyRollout').slideDown('normal');
				}
				break;
				
		}
		
	}
	//processSearch(projectTypeList, marketsList, expertiseList, geographyList, searchString);
	runSearch();
		
}

function detailsSuccess(result){
	
	$('#projectRollout').slideUp('normal');
	$('#projectBar').removeClass('open');
	
	$('#marketsRollout').slideUp('normal');
	$('#marketsBar').removeClass('open');
	
	$('#expertiseRollout').slideUp('normal');
	$('#expertiseBar').removeClass('open');
	
	$('#geographyRollout').slideUp('normal');
	$('#geographyBar').removeClass('open');
	
	
	var res = result[0];
	
	//now populate dem fields!
	$('#detailName').html(res.NAME);
	$('#detailDesc').html(res.DESCRIPTION);
	$('#detailsInfo').html(res.DETAILS);
	$('#contentAreaDetails').html(res.CONTENT);
	$('#detailDesc').html(res.LOCATION);
	
	if(res.SERVICENAME.length > 0){
		$('#servicesProvided').css('display', 'block');
		$('#serviceList').html(res.SERVICENAME);
	}
	else{
		$('#servicesProvided').css('display', 'none');	
	}
	
	

	if(res.IMAGE1.length > 0){
		$('#largeImgContainer').css('display', 'block');
		$('#lgImg').attr('src', '/graphics/portfolio/uploads/'+res.IMAGE1+'');
	}else{
		$('#largeImgContainer').css('display', 'none');	
	}
	
	
	//check for thumbnails and display
	if(res.IMAGE1_SM.length > 0){
		$('#detail1').css('display', 'block');
		$('#detail1 > a > img').attr('src', '/graphics/portfolio/uploads/'+res.IMAGE1_SM+'');
		$('#detail1 > a > img').attr('lgImg', ''+res.IMAGE1+'');
		//$('#detail1 > a').attr('onclick', 'swapPortImg("/graphics/portfolio/uploads/'+res.IMAGE1+'")');
	}else{
		$('#detail1').css('display', 'none');	
	}
	if(res.IMAGE2_SM.length > 0){
		$('#detail2').css('display', 'block');
		$('#detail2 > a > img').attr('src', '/graphics/portfolio/uploads/'+res.IMAGE2_SM+'');
		$('#detail2 > a > img').attr('lgImg', ''+res.IMAGE2+'');
		//$('#detail2 > a').attr('onclick', 'swapPortImg("/graphics/portfolio/uploads/'+res.IMAGE2+'")');
	}else{
		$('#detail2').css('display', 'none');	
	}
	if(res.IMAGE3_SM.length > 0){
		$('#detail3').css('display', 'block');
		$('#detail3 > a > img').attr('src', '/graphics/portfolio/uploads/'+res.IMAGE3_SM+'');
		$('#detail3 > a > img').attr('lgImg', ''+res.IMAGE3+'');
		//$('#detail3 > a').attr('onclick', 'swapPortImg("/graphics/portfolio/uploads/'+res.IMAGE3+'")');
	}else{
		$('#detail3').css('display', 'none');	
	}
	if(res.IMAGE4_SM.length > 0){
		$('#detail4').css('display', 'block');
		$('#detail4 > a > img').attr('src', '/graphics/portfolio/uploads/'+res.IMAGE4_SM+'');
		$('#detail4 > a > img').attr('lgImg', ''+res.IMAGE4+'');
		//$('#detail4 > a').attr('onclick', 'swapPortImg("/graphics/portfolio/uploads/'+res.IMAGE4+'")');
	}else{
		$('#detail4').css('display', 'none');	
	}

	$('#resultsContainer').fadeOut('fast', function(){
		$('#detailsContainer').fadeIn('fast');												
	});
}


function searchInputEnterKey(evt, inputVal) {
	evt = (evt) ? evt : ((event) ? event : null);
	if (evt) {
		if(evt.keyCode == 13){
			//alert("Test 222");
			runSearchBox();
		}
	}
}

function runSearch(){
	//backToResults();
		
	var projectTypeList = '';
	var projectCriteriaList = '';
	$.each($("input[name='projectType']:checked"), function(i) {
		if(i < $("input[name='projectType']:checked").length -1){
			projectTypeList += $(this).val() +',';
			projectCriteriaList += $(this).parent().find('label').html() +', ';
			
		}
		else{
			projectTypeList += $(this).val();
			projectCriteriaList += $(this).parent().find('label').html();
		}
	});
	$('#projectTypeCriteria .typeCriteria').html(projectCriteriaList);
	
	var marketsList = '';
	var marketCriteriaList = '';
	$.each($("input[name='markets']:checked"), function(i) {
		if(i < $("input[name='markets']:checked").length -1){
			marketsList += $(this).val() +',';
			marketCriteriaList += $(this).parent().find('label').html() +', ';
		}
		else{
			marketsList += $(this).val();
			marketCriteriaList += $(this).parent().find('label').html();
		}
	});
	$('#marketTypeCriteria .typeCriteria').html(marketCriteriaList);
	
	var expertiseList = '';
	var expertiseCriteriaList = '';
	$.each($("input[name='expertise']:checked"), function(i) {
		if(i < $("input[name='expertise']:checked").length -1){
			expertiseList += $(this).val() +',';
			expertiseCriteriaList += $(this).parent().find('label').html() +', ';
		}
		else{
			expertiseList += $(this).val();
			expertiseCriteriaList += $(this).parent().find('label').html();
		}
	});
	$('#expertiseCriteria .typeCriteria').html(expertiseCriteriaList);
	
	var geographyList = '';
	var geographyCriteriaList = '';
	$.each($("input[name='geography']:checked"), function(i) {
		if(i < $("input[name='geography']:checked").length -1){
			geographyList += $(this).val() +',';
			geographyCriteriaList += $(this).parent().find('label').html() +', ';
		}
		else{
			geographyList += $(this).val();
			geographyCriteriaList += $(this).parent().find('label').html();
		}
	});
	$('#geographyCriteria .typeCriteria').html(geographyCriteriaList);
	
	if(projectCriteriaList == '')
		$('#projectTypeCriteria').hide();
	else
		$('#projectTypeCriteria').show();
	if(marketCriteriaList == '')
		$('#marketTypeCriteria').hide();
	else
		$('#marketTypeCriteria').show();
	if(expertiseCriteriaList == '')
		$('#expertiseCriteria').hide();
	else
		$('#expertiseCriteria').show();
	if(geographyCriteriaList == '')
		$('#geographyCriteria').hide();
	else
		$('#geographyCriteria').show();
		
	$('#searchCriteria').css('display', 'none');
	processSearch(projectTypeList, marketsList, expertiseList, geographyList);
										
}

function runSearchBox(){
	if($('#projSearch').val() !== 'Search Projects by Keyword:'){
		uncheckAll();
		var searchString = $('#projSearch').val()
		searchBoxAjax(searchString);
	}
}
function searchBoxAjax(searchString){
	uncheckAll();
	var projectTypeList = '';
	var marketsList = '';
	var expertiseList = '';
	var geographyList = '';
	
	$('.criteriaContainer').css('display', 'none');
	$('#searchCriteria').css('display', 'block');
	$('#searchCriteria .typeCriteria').html(searchString);
	
	
	
	var hashStr = '#search('+searchString+')';
	
	if(hashTmp == hashStr)
		return false;
	
	window.location.hash = hashStr;
	hashTmp = hashStr;
	
	history_Add();
	
	$('#resultsContainer').html('Loading...');
	
	/*$('#resultsContainer').css('display', 'block');
	$('#detailsContainer').css('display', 'none');*/
	
	$.ajax({
			type: "POST",
			url: "/_commongoal/content/Portfolio_ajax.cfc",
			dataType: "json",
			data: {
			   method: 'search',
			   projectTypeList: projectTypeList,
			   marketsList: marketsList,
			   expertiseList: expertiseList,
			   geographyList: geographyList,
			   searchString: searchString
			},
			success: searchSuccess
		});				
}

function showPortDetails(e){
	var id = $(e.currentTarget).attr('id');	
	showPortItem(id);
}



function showPortItem(id){
	showPortItemAjax(id);
}
function showPortItemAjax(id){
	var hashStr = 'pid('+id+')';
	
	if(hashTmp == hashStr)
		return false;
	
	window.location.hash = hashStr;
	hashSearchTmp = hashTmp;
	hashTmp = hashStr;
	
	history_Add();
	
	if($('#resultsNum').html() == ''){
		$('#resultsCount').hide();	
	}
	
	$.ajax({
		type: "POST",
		url: "/_commongoal/content/Portfolio_ajax.cfc",
		dataType: "json",
		data: {
		   method: 'getPortDetails',
		   portfolioID: id
		},
		success: detailsSuccess
	});	
}

function processSearch(projectTypeList, marketsList, expertiseList, geographyList){
	
	//GENERATE HASH HEREEEEEEEEEEEEEEEEEEEEEE
	//#projType(1,2)|markets(1,2)
	var hashStr = '#';
	if(projectTypeList.length > 0)
		hashStr +='projectType('+projectTypeList+')|';
	if(marketsList.length > 0)
		hashStr +='markets('+marketsList+')|';
	if(expertiseList.length > 0)
		hashStr +='expertise('+expertiseList+')|';
	if(geographyList.length > 0)
		hashStr +='geography('+geographyList+')|';
		
	
	if(projectTypeList =='' & marketsList =='' && expertiseList =='' && geographyList ==''){
		$('#boxPT5').attr('src', '/graphics/global/checkOn.png');
		$('#checkboxPT5').attr('checked', 'checked');
		projectTypeList = '5';
		$('#projectTypeCriteria .typeCriteria').html('Featured');
	}
	
	if(hashTmp == hashStr){
		return;
	}
	else{
		window.location.hash = hashStr;
		hashTmp = hashStr;
		if(hashStr!== '#')
			history_Add();
		
		var searchString = '';
		
		$('#resultsContainer').html('Loading...');
		
		$.ajax({
			type: "POST",
			url: "/_commongoal/content/Portfolio_ajax.cfc",
			dataType: "json",
			data: {
			   method: 'search',
			   projectTypeList: projectTypeList,
			   marketsList: marketsList,
			   expertiseList: expertiseList,
			   geographyList: geographyList,
			   searchString: searchString
			},
			success: searchSuccess
		});
	}
}

function searchSuccess(results){
	
	//history_Add();
	
	var retProducts = "";
	var newHTML = '';
	//var itemStr = '<div class="resultItem">'
	
	$('#resultsContainer').css('display', 'block');
	$('#detailsContainer').css('display', 'none');
	
	
	
	if(results.length > 0){
		newHTML +='<div id="resultsItemContainer" style="display:none;">'
		$.each(results, function(i, retItem){
			newHTML += '<div class="resultItem">';	
				newHTML += '<div class="thumb">';
					newHTML += '<a class="resultLink" href="javascript:;" id="'+retItem.PORTFOLIOID+'">';
						newHTML += '<img height="76" width="98" alt="'+retItem.NAME+'" src="/graphics/portfolio/uploads/'+retItem.IMAGE1_MED+'" />';
					newHTML += '</a>';
				newHTML +='</div>';
				newHTML +='<a class="portLink resultLink" href="javascript:;" id="'+retItem.PORTFOLIOID+'">'+retItem.NAME+'</a>';
			newHTML +='</div>';
		});
		newHTML +='</div>';
		newHTML +='<div class="clear"></div>';
		$('#resultsContainer').html(newHTML);
	}
	else{
		newHTML+="No projects found matching your search.";
		$('#resultsContainer').html(newHTML);
	}
	$('#resultsNum').html(results.length);
	$('.resultLink').bind('click', showPortDetails);
	
	if($('#resultsNum').html() !== ''){
		$('#resultsCount').css('display', '');	
	}
	
	$('#resultsItemContainer').slideDown('fast');
	
	
}

function uncheckAll(){
	$('.checkboxImg').attr('src', '/graphics/global/checkOff.png');
	$('.inputCheckbox').removeAttr('checked');
}

function backToResults(){
	if($('#detailsContainer').is(':visible')){
		window.location.hash = hashSearchTmp;
		if(hashSearchTmp.length > 0){
			$('#detailsContainer').fadeOut('fast', function(){
				$('#resultsContainer').fadeIn('fast');
				resetViews();
			});
		}
		else{
			$('#detailsContainer').fadeOut('fast', function(){
				//clear everything out to avoid flash of old projects when looking at a new one.
				resetViews();
				$('#projectTypeCriteria .typeCriteria').html('All Projects');
				window.location.hash = '';
			});
		}
	}
	
}	

function resetViews(){
	$('#detailName').html('');
	$('#detailDesc').html('');
	$('#detailsInfo').html('');
	$('#contentAreaDetails').html('');
	$('#detailDesc').html('');
	$('#serviceList').html('');
	
	$('#lgImg').attr('src', '');
	$('#detail1 > a > img').attr('src', '');
	$('#detail2 > a > img').attr('src', '');
	$('#detail3 > a > img').attr('src', '');
	$('#detail4 > a > img').attr('src', '');
	
	var hash = window.location.hash;
	hash = hash.substring(1);
	urlArray = hash.split('|');
	
	var serializedObj = {};
	for(i=0; i<urlArray.length; i++){
		var searchMap = urlArray[i];
		var startOfValues = searchMap.indexOf("(");
		var type = searchMap.substring(0, startOfValues  );
		var values = searchMap.substring(startOfValues+1, searchMap.length-1).split(",")
		serializedObj[type] = values;
	}
	
	currentSearch = serializedObj;
	
	var projectTypeList = '', marketsList = '', expertiseList = '', geographyList = '', searchString = '';
	for(var type in currentSearch){
		switch(type){
			case 'pid':
				/*$('#resultsContainer').css('display', 'none');
				$('#detailsContainer').css('display', 'block');*/
				showPortItem(currentSearch.pid[0]);
				return;
			break;
			case 'search':
				/*$('#resultsContainer').css('display', 'block');
				$('#detailsContainer').css('display', 'none');*/
				searchBoxAjax(currentSearch.search[0]);
				return;
			break
			case 'projectType':
				for(i=0; i<currentSearch[type].length; i++){
					if(i < currentSearch[type].length -1){
						projectTypeList += currentSearch.projectType[i] +',';
					}
					else
						projectTypeList += currentSearch.projectType[i];
						
					urlCheckOnBox(currentSearch.projectType[i], 'boxPT');
					$('#projectRollout').slideDown('normal');
					$('#projectBar').addClass('open');
				}
				break;
			case 'markets':
				for(i=0; i<currentSearch[type].length; i++){
					if(i < currentSearch[type].length -1){
						marketsList += currentSearch.markets[i] +',';
					}
					else
						marketsList += currentSearch.markets[i];
					
					urlCheckOnBox(currentSearch.markets[i], 'boxM');
					$('#marketsRollout').slideDown('normal');
					$('#marketsBar').addClass('open');
				}
				break;
			case 'expertise':
				for(i=0; i<currentSearch[type].length; i++){
					if(i < currentSearch[type].length -1){
						expertiseList += currentSearch.expertise[i] +',';
					}
					else
						expertiseList += currentSearch.expertise[i];
					
					urlCheckOnBox(currentSearch.expertise[i], 'boxE');
					$('#expertiseRollout').slideDown('normal');
					$('#expertiseBar').addClass('open');
				}
				break;
			case 'geography':
				for(i=0; i<currentSearch[type].length; i++){
					if(i < currentSearch[type].length -1){
						geographyList += currentSearch.geography[i] +',';
					}
					else
						geographyList += currentSearch.geography[i];
						
					urlCheckOnBox(currentSearch.geography[i], 'boxG');
					$('#geographyRollout').slideDown('normal');
					$('#geographyBar').addClass('open');
				}
				break;	
		}
	}	
}

function updateLgPortImg(e){
	var newImage = $(e.currentTarget).attr('lgImg');	
	$('#loadingImageStatus').fadeIn('normal');
	var imgToLoad = [ newImage ]
	$.preload( imgToLoad, {
		base:'/graphics/portfolio/uploads/',
		ext:'',
		onComplete:function( data ){
			// nothing... ?
		},
		onFinish:function(){
			$('#lgImg').attr('src', '/graphics/portfolio/uploads/'+newImage+'');
			$('#loadingImageStatus').fadeOut('fast');
		}
	});
}

