/*
-----------------------------------------------
vtdesignworks.com
Script: vdwPortfolio.js
Author: Ben Glassman
Organization: Vermont Design Works
Created: 8 June 2007
----------------------------------------------- */

vdwGallery = {
	container: null,
	imgsUL: null,
	imgsLIs: null,
	currentImageHolder: null,
	current: 0,
	bckSrc: '/assets/templates/vtdesignworks/images/btn-back.gif',
	fwdSrc: '/assets/templates/vtdesignworks/images/btn-forward.gif',
	currClass: 'current',
	imgNavId: 'image_navigation',
	divider: ' / ',
	init:function() {
		if (!document.getElementById) { return; }
		vdwGallery.prepareImages();
		vdwGallery.buildNavigation();
	},
	prepareImages:function() {
		if (!document.getElementById('detail_images')) { return; }
		vdwGallery.container = document.getElementById('detail_images');
		vdwGallery.imgsUL = vdwGallery.container.getElementsByTagName('ul')[0];
		vdwGallery.imgsLIs = vdwGallery.imgsUL.getElementsByTagName('li');
		vdwDOM.addClass(vdwGallery.imgsUL, 'hasJS');
		vdwDOM.addClass(vdwGallery.imgsLIs[vdwGallery.current], vdwGallery.currClass);
	},
	buildNavigation:function() {
		// Create image navigation container
		if (vdwGallery.imgsLIs.length > 1) {
			var imgNav = document.createElement('div');
			imgNav.setAttribute('id', vdwGallery.imgNavId);
			
			// Create back and forward images
			var bckLink = document.createElement('a');
			bckLink.setAttribute('title', 'Previous Image');
			var bckImg = document.createElement('img');
			bckImg.setAttribute('src', vdwGallery.bckSrc);
			bckImg.setAttribute('alt', 'Previous Image');
			bckLink.appendChild(bckImg);
			vdwDOM.addEvent(bckLink, 'click', function(e) { vdwGallery.changeImage(e, -1); }, false);
			
			var fwdLink = document.createElement('a');
			fwdLink.setAttribute('title', 'Next Image');
			var fwdImg = document.createElement('img');
			fwdImg.setAttribute('src', vdwGallery.fwdSrc);
			fwdImg.setAttribute('alt', 'Previous Image');
			fwdLink.appendChild(fwdImg);
			vdwDOM.addEvent(fwdLink, 'click', function(e) { vdwGallery.changeImage(e, 1); }, false);
			
			// Create Navigation
			var pagination = document.createElement('span');
			pagination.setAttribute('id', 'pagination');
			vdwGallery.currentImageHolder = document.createElement('span');
			var currentImageTxt = document.createTextNode(vdwGallery.current + 1);
			vdwGallery.currentImageHolder.appendChild(currentImageTxt);
			var divider = document.createTextNode(vdwGallery.divider);
			var totalImages = document.createElement('span');
			var totalImagesTxt = document.createTextNode(vdwGallery.imgsLIs.length);
			totalImages.appendChild(totalImagesTxt);
			pagination.appendChild(vdwGallery.currentImageHolder);
			pagination.appendChild(divider);
			pagination.appendChild(totalImages);
			
			// Append back, forward and pagination to image navigation container and append to container
			imgNav.appendChild(bckLink);
			imgNav.appendChild(pagination);
			imgNav.appendChild(fwdLink);
			vdwGallery.container.appendChild(imgNav);
		}
	},
	changeImage:function(e, dir) {
		vdwDOM.cancelClick(e);
		// Remove the current class from the current item
		vdwDOM.removeClass(vdwGallery.imgsLIs[vdwGallery.current], vdwGallery.currClass);
		switch (dir) {
			case 1:
				if ((vdwGallery.current + dir + 1) > vdwGallery.imgsLIs.length) {
					vdwGallery.current = 0;
				} else {
					vdwGallery.current += dir;
				}
			break;
			case -1:
				if ((vdwGallery.current + dir) < 0) {
					vdwGallery.current = vdwGallery.imgsLIs.length - 1;
				} else {
					vdwGallery.current += dir;
				}
			break;
		}
		vdwDOM.addClass(vdwGallery.imgsLIs[vdwGallery.current], vdwGallery.currClass);
		vdwGallery.currentImageHolder.firstChild.nodeValue = vdwGallery.current + 1;		
	}
}

vdwRating = {
	ratingContainer: 'project_details',
	ratingId: 'rate',
	ratingCookie: 'vdwRating',
	currRating: '',
	init:function() {
		if (!document.getElementById) { return; }
		vdwRating.buildRating();
		//vdwRating.prepareRating(vdwRating.ratingId);
	},
	getRating:function(projectName) {
		var cookieContents = vdwUtil.readCookie(vdwRating.ratingCookie);
		if (cookieContents && cookieContents.indexOf(projectName) != -1) {
			var match = new RegExp(projectName + ': \\d Stars?');
			return cookieContents.match(match);
		} else {
			return false;
		}
	},
	prepareRating:function(id) {
		if (!document.getElementById(id)) { return; }
		var ratingContainer = document.getElementById(id);
		vdwDOM.addClass(ratingContainer, 'hasJS');
		vdwDOM.addEvent(ratingContainer.getElementsByTagName('ul')[0], 'click', function(e) { vdwRating.rateProject(e); }, false);
		vdwDOM.addEvent(ratingContainer.getElementsByTagName('ul')[0], 'mouseover', function(e) { vdwRating.toggleRating(e); }, false);
		vdwDOM.addEvent(ratingContainer.getElementsByTagName('ul')[0], 'mouseout', function(e) { vdwRating.toggleRating(e); }, false);
	},
	buildRating:function() {
		var ratingContainer = document.getElementById(vdwRating.ratingContainer);
		var ratingParent = ratingContainer.getElementsByTagName('ul')[0];
		var ratingLI = document.createElement('li');
		ratingLI.setAttribute('id', vdwRating.ratingId);
		var ratingLbl = document.createElement('strong');
		var ratingLblTxt = document.createTextNode('Rate this Project');
		ratingLbl.appendChild(ratingLblTxt);
		var ratingArr = new Array(	['one', '#', '1 Star', '1'],
									['two', '#', '2 Stars', '2'],
									['three', '#', '3 Stars', '3'],
									['four', '#', '4 Stars', '4']);
		var currentRating = vdwRating.getRating(document.getElementsByTagName('h1')[0].firstChild.nodeValue);
		var ratingULClass = false;
		if (currentRating) {
			ratingULClass = ratingArr[(currentRating.toString().match(/\d/) - 1)][0] + 'stars';
		}
		var ratingUL = document.createElement('ul');
		if (ratingULClass) { ratingUL.className = ratingULClass; }
		for (var i = 0; i < ratingArr.length; i++) {
			var tmpLI = document.createElement('li');
			tmpLI.className = ratingArr[i][0];
			var tmpA = document.createElement('a');
			tmpA.setAttribute('href', ratingArr[i][1]);
			tmpA.setAttribute('title', ratingArr[i][2]);
			var tmpATxt = document.createTextNode(ratingArr[i][3]);
			tmpA.appendChild(tmpATxt);
			tmpLI.appendChild(tmpA);
			ratingUL.appendChild(tmpLI);
		}
		ratingLI.appendChild(ratingLbl);
		ratingLI.appendChild(ratingUL);
		var whatsThisA = document.createElement('a');
		whatsThisA.id = 'whats_this';
		whatsThisA.setAttribute('href', '#');
		var whatsThisTxt = document.createTextNode("What's This?");
		whatsThisA.appendChild(whatsThisTxt);
		vdwDOM.addEvent(whatsThisA, 'click', function(e) {
			vdwUtil.popUp('/portfolio/rating-explanation', 'rating', 'width=400,height=350,scrollbars=yes');
			vdwDOM.cancelClick(e);
		}, false);
		ratingLI.appendChild(whatsThisA);
		var insertBeforeNode = ratingParent.lastChild;
		while (insertBeforeNode.nodeType != 1) {
			insertBeforeNode = insertBeforeNode.previousSibling;
		}
		//ratingParent.insertBefore(ratingLI, insertBeforeNode);
		ratingParent.appendChild(ratingLI);
		vdwDOM.addEvent(ratingLI, 'click', function(e) { vdwRating.rateProject(e); }, false);
		vdwDOM.addEvent(ratingLI, 'mouseover', function(e) { vdwRating.toggleRating(e); }, false);
		vdwDOM.addEvent(ratingLI, 'mouseout', function(e) { vdwRating.toggleRating(e); }, false);
	},
	rateProject:function(e) {
		var target = vdwDOM.getTarget(e);
		vdwDOM.cancelClick(e);
		if ((target.nodeName.toUpperCase() != 'A') || (target.id == 'whats_this')) { return false; }
		var projectName = document.getElementsByTagName('h1')[0].firstChild.nodeValue;
		rating = target.getAttribute('title');
		var currentRatingClass = target.parentNode.className + 'stars';
		target.parentNode.parentNode.className = currentRatingClass;
		var cookieContents = vdwUtil.readCookie(vdwRating.ratingCookie);
		var ratingString = projectName + ': ' + rating;
		if (cookieContents && cookieContents.indexOf(projectName) != -1) {
			var ratingReplace = new RegExp(projectName + ': \\d Stars?');
			ratingString = cookieContents.replace(ratingReplace, ratingString);
		} else {
			ratingString = cookieContents?cookieContents + ', ' + ratingString:ratingString;
		}
		vdwUtil.createCookie(vdwRating.ratingCookie, ratingString);
	},
	toggleRating:function(e) {
		var target = vdwDOM.getTarget(e);
		while (target.nodeName.toUpperCase() != 'UL') {
			target = target.parentNode;
		}
		if (target.className == '') { return; }
		switch (e.type) {
			case 'mouseover':
				target.className = target.className + '_ov';
			break;
			case 'mouseout':
				target.className = target.className.replace('_ov','');
			break;
		}
	}
}

vdwDOM.addEvent(window, 'load', vdwGallery.init, false);
vdwDOM.addEvent(window, 'load', vdwRating.init, false);