var phcimages = {};
phcimages.disableRightClick = function(e) {
	if (!e) {
		var e = window.event;
	}
	if (e.which) {
		rightclick = (e.which == 3);
	}
	else if (e.button) {
		rightclick = (e.button == 2);
	}
	if (rightclick) {
		e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();
		return false;
	}
}
phcimages.textFieldClearer = function(fld, defaultValue) {
	if (defaultValue === undefined) {
		var defaultValue = fld.get(0).defaultValue;
	}
	this.defaultValue = defaultValue;
	this.fld = fld;
	this.className = 'default_value';
	this.fld.addClass(this.className);

	this.restoreField = function(event) {
		if (this.fld.val() == "") {
			this.fld.val(this.defaultValue);
			this.fld.addClass(this.className);
		}
	}
	this.clearField = function(event) {
		if (this.fld.val() == this.defaultValue) {
			this.fld.val('');
			this.fld.removeClass(this.className);
		}
	}
	this.fld.focus($.proxy(this.clearField, this)).blur($.proxy(this.restoreField, this));
}

phcimages.cookie = {}
phcimages.cookie.create = function(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime() + (days*24*60*60*1000));
		var expires = '; expires=' + date.toGMTString();
	}
	else {
		var expires = '';
	}
	document.cookie = name + '=' + value + expires + '; path=/';
}
phcimages.cookie.read = function(name) {
	var nameEQ = name + '=';
	var ca = document.cookie.split(';');
	for (var i=0; i < ca.length; i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') {
			c = c.substring(1, c.length);
		}
		if (c.indexOf(nameEQ) == 0) {
			return c.substring(nameEQ.length, c.length);
		}
	}
	return null;
}
phcimages.cookie.erase = function(name) {
	this.create(name, '', -1);
}
phcimages.pageOverlay = {
	callback: false,
	show: function() {
		if ($('#overlay').length == 0) {
			$('<div id="overlay"></div>').prependTo('body');
		}

		$('#overlay').css({display: 'block', opacity: 0.0}).fadeTo(200, 0.6);

		$(document).bind('keydown', this.handleKeypress);
	    var size = this.getPageSize();

        $('#overlay').css({
			width: size[0] + 'px',
			height: size[1] + 'px'
		});
	},
	hide: function() {
		if (this.callback) {
			this.callback();
		}
		this.callback = false;
		$('#overlay').fadeOut(220);
		$(document).unbind('keydown', this.handleKeypress);
	},
	handleKeypress: function(e) {
		e = e || window.event;
		var srcEl = e.srcelement? e.srcelement: e.target;

		if (jQuery.inArray(srcEl.tagName.toLowerCase(), ['input', 'textarea', 'select', 'button']) === -1) {
	        var code = e.which || e.keyCode;

			if (jQuery.inArray(code, [88, 27]) > -1) { // Escape or 'x'
				phcimages.pageOverlay.hide();
			}
		}
	},
	getPageSize: function() {
		var xScroll, yScroll, windowWidth, windowHeight;

		if (window.innerHeight && window.scrollMaxY) {
			xScroll = window.innerWidth + window.scrollMaxX;
			yScroll = window.innerHeight + window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
			xScroll = document.body.scrollWidth;
			yScroll = document.body.scrollHeight;
		} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
			xScroll = document.body.offsetWidth;
			yScroll = document.body.offsetHeight;
		}
		if (self.innerHeight) {	// all except Explorer
			if(document.documentElement.clientWidth){
				windowWidth = document.documentElement.clientWidth;
			} else {
				windowWidth = self.innerWidth;
			}
			windowHeight = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		} else if (document.body) { // other Explorers
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}

		// for small pages with total height less then height of the viewport
		if (yScroll < windowHeight){
			pageHeight = windowHeight;
		} else {
			pageHeight = yScroll;
		}

		// for small pages with total width less then width of the viewport
		if (xScroll < windowWidth){
			pageWidth = xScroll;
		} else {
			pageWidth = windowWidth;
		}
		return [pageWidth,pageHeight];
	}
};
phcimages.lightbox = {};
phcimages.lightbox.defaultLightbox = 0;
phcimages.lightbox.lightboxes = [];
phcimages.lightbox.addToLightbox = function(id) {
	phcimages.pageOverlay.show();
	this.showOverlay(id);
	phcimages.pageOverlay.callback = function() {
		$('#lightbox-add-overlay').remove();
	}
}
phcimages.lightbox.showOverlay = function(id) {
	var html = '<div id="lightbox-add-overlay" data-current="' + id + '"><h2>Add to Lightbox</h2><div class="inside"><p>A lightbox is a storage area for images you\'re interested in, you may create numerous lightboxes based on an event, project or topic.</p>';

	if (this.lightboxes.length > 0) {
	    html += '<form id="lightbox-add-overlay-existingform"><select id="lightbox-add-overlay-select" name="lightbox"><option value="0">-- Select Lightbox --</option></select> <input type="submit" value="Add to Existing Lightbox" /><br />';
	    html += '</form><strong>or</strong><br />';
	}
	html += '<form id="lightbox-add-overlay-newform"><input type="text" value="Title e.g. My Project" id="lightbox-add-overlay-new" /> <input type="submit" value="Add to New Lightbox" /></form><br /><a href="#" onclick="phcimages.lightbox.closeOverlay(); return false">Close</a></div></div>';

	$(html).prependTo('body');
	$('#lightbox-add-overlay-existingform').submit(phcimages.lightbox.handleExistingForm);
	$('#lightbox-add-overlay-newform').submit(phcimages.lightbox.handleNewForm);
	new phcimages.textFieldClearer($('#lightbox-add-overlay-new'));

	for (var i=0; i<this.lightboxes.length; i++) {
	    $('#lightbox-add-overlay-select').addOption(this.lightboxes[i].id, this.lightboxes[i].title, this.lightboxes[i].id == phcimages.lightbox.defaultLightbox);
	}
}
phcimages.lightbox.handleExistingForm = function() {
	var lightbox_id = $('#lightbox-add-overlay-select').val();

	if (lightbox_id == 0) {
		alert('Please select a lightbox');
		return false;
	}
	jQuery.post('/lightboxes/addtoexisting', {
		lightbox_id: lightbox_id,
		photo_id: $('#lightbox-add-overlay').attr('data-current')
	}, function(data) {
		if (data.error) {
			alert(data.error);
		} else {
			$('#lightbox-add-overlay .inside').html('<p>Photo successfully added to lightbox.</p>');
			phcimages.lightbox.defaultLightbox = lightbox_id;

			setTimeout(function() {
				phcimages.lightbox.closeOverlay();
			}, 1000);
		}
	}, 'json');

	return false;
}
phcimages.lightbox.handleNewForm = function() {
	var title = $('#lightbox-add-overlay-new').val();
	if (!title) {
	  alert('Please enter a title for the lightbox');
	  return false;
	}
	jQuery.post('/lightboxes/createwithphoto', {
		title: title,
		photo_id: $('#lightbox-add-overlay').attr('data-current')
	}, function(data) {
		phcimages.lightbox.add(data.id, data.title);
		phcimages.lightbox.defaultLightbox = data.id;

		var text = 'Photo successfully added to lightbox.';
		var timeout = 1000;

		if (phcimages.lightbox.lightboxes.length == 1) { // first lightbox
			text += ' To access your lightboxes click the link at the top of the page.';
			var timeout = 2000;
		}
		$('#lightbox-add-overlay .inside').html('<p>' + text + '</p>');

		setTimeout(function() {
			phcimages.lightbox.closeOverlay();
		}, timeout);
	}, 'json');

	return false;
}
phcimages.lightbox.closeOverlay = function() {
	$('#lightbox-add-overlay').remove();
	phcimages.pageOverlay.hide();
}
phcimages.lightbox.add = function(id, title) {
	this.lightboxes.push({id: id, title: title});
}
phcimages.gallery = {};
phcimages.gallery.optionDropdown = {
	cl: false
};
phcimages.gallery.optionDropdown.init = function(cl) {
	phcimages.gallery.optionDropdown.addDropdown(cl)
    $('.options-link').live('click', phcimages.gallery.optionDropdown.toggle);
}
phcimages.gallery.optionDropdown.addDropdown = function(cl) {
	$('<a class="options-link" title="Options" href="#"><img src="/includes/icons/tag_orange.png" width="12" height="12" /></a>').appendTo(cl); // append tag icon/link to all dropdowns
	$(cl).addClass('addeddropdown');
}
phcimages.gallery.optionDropdown.toggle = function() {
    if ($(this).parent().find('ul').css('visibility') == 'hidden') {
		phcimages.gallery.optionDropdown.close(); // close all others
		phcimages.gallery.optionDropdown.open(this);
    } else {
		phcimages.gallery.optionDropdown.close();
    }
    return false;
}
phcimages.gallery.optionDropdown.close = function() {
    $('.options-dropdown').find('ul').css('visibility', 'hidden');
    $('.options-link').removeClass('current');
}
phcimages.gallery.optionDropdown.open = function(obj) {
    $(obj).addClass('current');
    $(obj).parent().find('ul').css('visibility', 'visible');
}
phcimages.buyOverlay = {}
phcimages.buyOverlay.create = function(photoid, tab) {
	jQuery.get('/cart/add_box', {photo: photoid}, function(data, textStatus) {
		var html = '<div id="lightbox-add-overlay" style="width: 900px; margin-left: -470px">';
		html += data;
		html += '</div>';

		$(html).prependTo('body');

		var tabs = $('#buy-tabs').tabs();
		tabs.tabs('select', tab);

		$('#print-overlay-close').click(function() {
			$('#lightbox-add-overlay').remove();
			phcimages.pageOverlay.hide();

			return false;
		});
		phcimages.pageOverlay.show();
		phcimages.pageOverlay.callback = function() {
			$('#lightbox-add-overlay').remove();
		}
	});
}
phcimages.buyOverlay.buyPrint = function(photoid) {
	phcimages.buyOverlay.create(photoid, 0);
};
phcimages.buyOverlay.buyDownload = function(photoid) {
	phcimages.buyOverlay.create(photoid, 1);
};
phcimages.endlessScroll = function(url, getParams, total_photos, photos_per_page, page, total_pages, paginatorLink) {
	this.total_photos = total_photos;
	this.getParams = getParams;
	this.photos_per_page = photos_per_page;
	this.page = page;
	this.total_pages = total_pages;
	this.url = url;
	this.paginatorLink = paginatorLink;
	this.gridid = '#pgrid';
	_this = this;
	lastRequested = 0;

	$('<div id="loading-div">Loading More Photos...<br /><img src="/images/ajax-loader.gif" /></div>').appendTo('body');

	this.gup = function(name, url) {
		name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
		var regex = new RegExp("[\\?&]" + name + "=([^&#]*)");
		var results = regex.exec(url);

		if (results == null) {
			return '';
		} else {
			return results[1];
		}
	}
	this.handle = function(p) {
		if (_this.page < _this.total_pages) {
			if (lastRequested >= _this.page + 1) {
				return;
			}
			$('#loading-div').show();

			var params = _this.getParams;
			params.page = _this.page + 1;

			lastRequested = params.page; // stop event firing twice

			jQuery.get(_this.url, params, function(data) {
				_this.page = _this.page + 1;

				var currentPaginatorLink = _this.paginatorLink.replace('{%page_number}', _this.page);
				pageTracker._trackPageview(currentPaginatorLink); // track with GA

				// stupid hack to make IE behave
				data = $(_this.gridid).html() + data;
				$(_this.gridid).html('');
				$(_this.gridid).html(data);

				if (_this.page == _this.total_pages) {
					$('#pager_last').text(_this.total_photos);
				} else {
					$('#pager_last').text(_this.page * _this.photos_per_page);
				}
				phcimages.gallery.optionDropdown.addDropdown('.options-dropdown:not(.addeddropdown)');

				$('#loading-div').hide();
			}, 'html');
		}
	}
}
function fit_inside(width, height, targetWidth)
{
	var targetHeight = targetWidth;

	var rx = width / targetWidth;
	var ry = height / targetHeight;

	var ratio = (rx > ry) ? rx : ry;

	if (ratio == 0) {
		ratio = 1;
	}

	width = Math.round(width / ratio);
	height = Math.round(height / ratio);

	return [width, height];
}

$.fn.lowresTooltip = function() {
	return this.each(function() {
		$(this).tooltip({
			delay: 0,
			showURL: false,
			bodyHandler: function() {
				var dim = fit_inside(this.width, this.height, 300);
				return $("<img/>").attr({
					src: this.src.replace('thumb.phcimages.com', 'lr2.phcimages.com'),
					width: dim[0],
					height: dim[1]
				});
			}
		})
	})
}