// BEGIN CoreMetrics tracking stuff
var elementTagCondition = function(e)
	{
		var condition = (new Event(e)).target;
		var conditionId = condition.getProperty('value');
		var conditionName = conditions.data.name[conditions.data.id.indexOf(parseInt(conditionId))];
		var conditionState = condition.getProperty('checked')?'On':'Off';
		cmCreatePageElementTag('Condition:'+conditionName+' '+conditionState,'Fraxel:' + section + ':Photo Gallery');
	}
var elementTagTreatment = function(e)
	{
		var treatmentId = (new Event(e)).target.getProperty('value');
		var treatmentName = treatments.data.name[treatments.data.id.indexOf(parseInt(treatmentId))];
		cmCreatePageElementTag('Treatment:'+treatmentName,'Fraxel:' + section + ':Photo Gallery');
	}
var elementTagCaseDetail = function(caseId)
	{
		cmCreatePageElementTag('CaseDetail:'+caseId,'Fraxel:' + section + ':Photo Gallery');
	}
var elementTagCaseExpand = function(caseId)
	{
		cmCreatePageElementTag('CaseExpand:'+caseId,'Fraxel:' + section + ':Photo Gallery');
	}
// END CoreMetrics tracking stuff

var shiftSet = function(dir)
	{
		var treatmentIds=[];
		var conditionIds=[];
		if(dir=='+' && curStart+9 < (curMax-1))
			{
				curStart += 9;
				curEnd += 9;
				$('treatmentsContainer').getElements('input').each(function(el){if(el.checked){treatmentIds[treatmentIds.length]=el.value;}});
				$('conditionsContainer').getElements('input').each(function(el){if(el.checked){conditionIds[conditionIds.length]=el.value;}});
				drawCases(searchCases(treatmentIds,conditionIds,curStart,curEnd));
			}
		else if(dir=='-' && (curStart-9) >= 0)
			{
				curStart -= 9;
				curEnd -= 9;
				$('treatmentsContainer').getElements('input').each(function(el){if(el.checked){treatmentIds[treatmentIds.length]=el.value;}});
				$('conditionsContainer').getElements('input').each(function(el){if(el.checked){conditionIds[conditionIds.length]=el.value;}});
				drawCases(searchCases(treatmentIds,conditionIds,curStart,curEnd));
			}
	}
var drawPrevNext = function()
	{
		$('gallerySetRange').empty().appendText((curMax > 1?(curStart+1):0) + ' - ' + (curMax < curEnd?curMax:curEnd) + ' of ' + curMax);
		$('galleryPrevButton').setProperty('class',(curStart > 8?'prevNextHighlight':'prevNextBlank'));
		$('galleryNextButton').setProperty('class',(curEnd < curMax?'prevNextHighlight':'prevNextBlank'));
	}
var filterChange = function()
	{
		var treatmentIds=[];
		var conditionIds=[];
		$('treatmentsContainer').getElements('input').each(function(el){if(el.checked){treatmentIds[treatmentIds.length]=el.value;}});
		$('conditionsContainer').getElements('input').each(function(el){if(el.checked){conditionIds[conditionIds.length]=el.value;}});
		curStart = 0;
		curEnd = 9;
		drawCases(searchCases(treatmentIds,conditionIds,curStart,curEnd));
	}
	
var drawTreatmentOptions = function(checkBoxes)
	{
		if($chk(checkBoxes))
			{
				treatments = checkBoxes;
				var chkBx;
				var chkBxsContainer = $('treatmentsContainer');
				var bxCount = checkBoxes.recordcount-1;
				for(var i=0;i<=bxCount;i++)
					{// previous name property: checkBoxes.data.name[i]
						var checkedProps = {};
						checkedProps.type = 'radio';
						checkedProps.name = 'treatment';
						checkedProps.value = i+1;
						checkedProps.id = checkBoxes.data.name[i]+'_' +i;
						if(i==2)
							{
								//checkedProps.defaultChecked = 'true';
								checkedProps.checked = 'true';
							}
						chkBxsContainer.grab(new Element('label',{'for':checkBoxes.data.name[i]+'_i'}).appendText(checkBoxes.data.name[i]));
						chkBxsContainer.grab(new Element('input',checkedProps).addEvents({'click':filterChange,'mousedown':elementTagTreatment}));
					}
			}
		else
			{
				var myRequest = new Request.JSON({url: 'photoGalleryData.cfm?method=treatments',onComplete:drawTreatmentOptions}).get();
			}
	}
	
var drawConditionOptions = function(checkBoxes)
	{
		if($chk(checkBoxes))
			{
				conditions = checkBoxes;
				var chkBx;
				var chkBxsContainer = $('conditionsContainer');
				var bxCount = checkBoxes.recordcount-1;
				for(var i=0;i<=bxCount;i++)
					{// previous name property: checkBoxes.data.name[i]
						var checkedProps = {};
						checkedProps.type = 'checkbox';
						checkedProps.name = 'condition';
						checkedProps.value = checkBoxes.data.id[i];
						checkedProps.id = checkBoxes.data.name[i]+'_' +i;
						//if(checkBoxes.data.id[i]==3)
							//{
								checkedProps.defaultChecked = 'true';
								checkedProps.checked = 'true';
							//}
						if(i==3){chkBxsContainer.grab(new Element('br'));}
						chkBxsContainer.grab(new Element('label',{'for':checkBoxes.data.name[i]+'_i'}).appendText(checkBoxes.data.name[i]));
						chkBxsContainer.grab(new Element('input',checkedProps).addEvents({'click':filterChange,'mousedown':elementTagCondition}));
					}
			}
		else
			{
				var myRequest = new Request.JSON({url: 'photoGalleryData.cfm?method=conditions',onComplete:drawConditionOptions}).get();
			}
	}

var disableCheckboxes = function()
	{
		// get the checkboxes
		var chkBxs = $('conditionsContainer').getElements('input');
		var radios = $('treatmentsContainer').getElements('input');
		// get the treatment selected
		var treatmentId;
		radios.each(function(el){if(el.getProperty('checked')){treatmentId = parseInt(el.getProperty('value'));}});
		// search cases with all conditions and the single treatment
		tempCases = searchCases([treatmentId],conditions.data.id,0,cases.recordcount);
		// collect all possible condition types
		var caseIndex;
		var conditionId;
		var conditionsEnabled = [];
		for(var i=0;i<tempCases.length;i++)
			{
				caseIndex = cases.data.case_id.indexOf(tempCases[i]);
				conditionId = cases.data.condition_id[caseIndex];
				if(conditionsEnabled.indexOf(conditionId)==-1){conditionsEnabled[conditionsEnabled.length]=conditionId;}
			}
		chkBxs.each(function(el)
									{
										if(conditionsEnabled.indexOf(parseInt(el.getProperty('value')))==-1)// if the condition represented by this checkbox is not to be enabled
											{
												el.setProperties({checked:false,defaultchecked:false,disabled:true});
											}
										else
											{
												el.removeProperty('disabled');
											}
									})
	}

var searchCases = function(treatments,conditions,start,end)
	{
		var tempCases = cases.data;
		var count = parseInt(cases.recordcount);
		var matches = [];
		var match = false;
		if ($chk(cases))
			{
				for(var i=0;i < count;i++) // loop over existing cases
					{
						// Check if the current case in the iteration matches a selected treatment type
						for(var u=0;u<=treatments.length;u++)
							{
								if(tempCases.treatment_id[i] == treatments[u])
									{
										match = true;
										break;
									}
							}
						// Check if the current case in the iteration matches a selected condition type
						if(match)
							{
								match = false;
								for(var u=0;u<=conditions.length;u++)
									{
										if(tempCases.condition_id[i] == conditions[u])
											{
												match = true;
												break;
											}
									}
							}
						if(match && !matches.contains(tempCases.case_id[i]))
							{
								matches[matches.length]=tempCases.case_id[i];
							}
						match = false;
					}
				curMax = matches.length;
				matches = matches.slice(start,end);
			}
		else
			{
				matches = tempCases.data.case_id;
			}
		return matches;
	}

var expandDetail = function(e)
	{
		var imgId = (new Event(e)).target.id.split('_')[1];
		caseIndex = cases.data.case_id.indexOf(parseInt(imgId));
		var fileName = cases.data.file[caseIndex];
		var imagesPath = 'http://fraxel.com/photo_gallery/';
		var lightbox = $('lightbox').empty();
		var styles = $('galleryBuffer').getCoordinates();
		styles.display = 'block';
		lightbox.setStyles(styles);
		lightbox.grab(new Element('img',{src:imagesPath + fileName + '-before-e.jpg',id:'galleryDetail_'+imgId,'class':'expandedDetailPhoto'}).addEvent('click',closeDetail,false));
		lightbox.grab(new Element('img',{src:imagesPath + fileName + '-after-e.jpg',id:'galleryDetail_'+imgId,'class':'expandedDetailPhoto'}).addEvent('click',closeDetail,false));
		lightbox.grab(drawDetailMetaData(imgId).setStyles({'margin-left':75,'text-align':'left'}).grab(new Element('div',{id:'expandDetail_'+imgId,'class':'closeDetail'}).appendText('X Close').addEvent('click',closeDetail,false),'top'));
		lightbox.addEvent('click',closeDetail);
		//coremetrics
		elementTagCaseExpand(imgId);
	}

var closeDetail = function()
	{
		$('lightbox').setStyle('display','none');
	}

var drawDetail = function(caseId)
	{
		if($chk(caseId))
			{
				var imagesPath = 'http://fraxel.com/photo_gallery/';
				var detailContainer = $('detailContainer').empty();
				var enlargeZoomStyle = {'padding-right':(Browser.Engine.trident?20:20)};
				caseIndex = cases.data.case_id.indexOf(parseInt(caseId));
				var fileName = cases.data.file[caseIndex];
				detailContainer.grab(new Element('img',{src:imagesPath + fileName + '-before-d.jpg',id:'galleryDetail_'+caseId+'_before','class':'detailPhoto'}).addEvent('click',expandDetail,false));
				detailContainer.grab(new Element('img',{src:imagesPath + fileName + '-after-d.jpg',id:'galleryDetail_'+caseId+'_after','class':'detailPhoto'}).addEvent('click',expandDetail,false));
				$('enlargeZoomContainer').empty().grab(new Element('a',{id:'expandDetail_'+caseId,'class':'expandDetail'}).setStyle('padding-right',(Browser.Engine.trident?27:11)).appendText('Enlarge/Zoom +').addEvent('click',expandDetail,false));
				$('detailMetaData').empty().grab(drawDetailMetaData(caseId));
			}
		else {$('detailContainer').empty();}
	}
var drawDetailMetaData = function(caseId)
	{
		var tempCases = cases.data;
		var caseIndex = cases.data.case_id.indexOf(parseInt(caseId));
		var dataContainer = new Element('div');
		dataContainer.grab(new Element('div',{'class':'galleryMetaDataField'}).appendText('Condition: ').grab(new Element('span',{'class':'galleryMetaData'}).appendText(conditions.data.name[conditions.data.id.indexOf(tempCases.condition_id[caseIndex])])));
		dataContainer.grab(new Element('div',{'class':'galleryMetaDataField'}).appendText('Treatment: ').grab(new Element('span',{'class':'galleryMetaData'}).appendText(treatments.data.name[treatments.data.id.indexOf(tempCases.treatment_id[caseIndex])])));
		dataContainer.grab(new Element('div',{'class':'galleryMetaDataField'}).appendText('# of Treatments: ').grab(new Element('span',{'class':'galleryMetaData'}).appendText(cases.data.treatments[caseIndex])));
		//dataContainer.grab(new Element('div',{'class':'galleryMetaDataField'}).appendText('# Months Post-Treatment: ').grab(new Element('span',{'class':'galleryMetaData'}).appendText(cases.data.treatment_count[caseIndex])));
		dataContainer.grab(new Element('div',{'class':'galleryMetaDataField'}).appendText('Courtesy of: ').grab(new Element('span',{'class':'galleryMetaData'}).appendText(cases.data.provider[caseIndex])));
		return dataContainer;
	}

var clickDetail = function(e)
	{
		var imgId = (new Event(e)).target.id.split('_')[1];
		drawDetail(imgId);
		//coremetrics
		elementTagCaseDetail(imgId);
	}

var drawCases = function(casesToDraw)
	{
		var imagesPath = 'http://fraxel.com/photo_gallery/'
		var imgId = 0;
		if($type(casesToDraw)=='array')
			{
				casesToDraw = casesToDraw.clean();
				var pairContainer;
				var photosContainer = $('photosContainer').empty();
				for(var i=0;i<casesToDraw.length;i++)
					{
						imgId = cases.data.file[cases.data.case_id.indexOf(casesToDraw[i])];
						caseId = casesToDraw[i];
						pairContainer = new Element('div',{'class':'pairContainer'});
						pairContainer.grab(new Element('img',{src:imagesPath + imgId + '-before-t.jpg',id:'galleryThumb_'+caseId,style:'margin-right:3px;'}).addEvent('click',clickDetail,false));
						pairContainer.grab(new Element('img',{src:imagesPath + imgId + '-after-t.jpg',id:'galleryThumb_'+caseId}).addEvent('click',clickDetail,false));
						photosContainer.grab(pairContainer);
						if((i+1)%3==0){photosContainer.grab(new Element('div',{'class':'clear'}));}
						imgId = '';
					}
				var curDetailChildren = $('detailContainer').getChildren();
				var curDetailId = curDetailChildren.length > 0 ? curDetailChildren[0].id.split('_')[1].replace(/^0+/,''):''; //get the id of the current detail display
				var newDetailId = casesToDraw[0];
				var curDetailChange = !casesToDraw.contains(parseInt(curDetailId));
				if(curDetailChange){drawDetail(newDetailId);}
				drawPrevNext();
				disableCheckboxes();
			}
	}
		
var cases;
var curStart = 0;
var curEnd = 9;
var curMax = 0;
var treatments;
var conditions = {"recordcount":5,"columnlist":"description,id,name","data":{"description":["","","","",""],"id":[1,2,5,3,4],"name":["Wrinkles","Melasma","Age Spots\/Sun Spots","Skin Resurfacing","Acne Scars & Surgical Scars"]}};
var init = function()
	{
		drawTreatmentOptions();
		drawConditionOptions();
		var myRequest = new Request.JSON({url: 'photoGalleryData.cfm?method=cases',onComplete:function(origCases)
			{
				cases = origCases;drawCases(searchCases([3],[1,2,3,4,5],curStart,curEnd));
			}}).get();
		$('galleryPrevButton').addEvent('click',shiftSet.pass('-'));
		$('galleryNextButton').addEvent('click',shiftSet.pass('+'));
	}
	
window.addEvent('domready',init);
