// $Id: previewer.js 6616 2008-12-19 15:31:27Z isergi $

var bottom_height = 145;

$(document).bind('click', function(e)
{
	return previewer_init(e);
});


//add previewer to href & area elements that have a class of .previewer
function previewer_init(e)
{
	var jelm = $(e.target);
	var elm = e.target;

	if ((e.type == 'click' || e.type == 'mousedown') && jQuery.browser.mozilla && e.which != 1) {
		return true;
	}

	// Dispatch click event
	if (e.type == 'click') {
		if (jelm.hasClass('cm-thumbnails')) {
			var link = jelm.parent('a');
			if (link.length) {
				var t = link.title || link.name || null;
				var a = $(link).attr('href') || link.alt;
				previewer_show(t, a, jelm);
				jelm.blur();
			}

			return false;

		} else if (jelm.hasClass('cm-thumbnails-mini') || jelm.parent('a').hasClass('cm-thumbnails-mini')) {
			jelm = jelm.parent('a').hasClass('cm-thumbnails-mini') ? jelm.parent('a') : jelm;
			
			$('.cm-cur-item').removeClass('cm-cur-item');
			jelm.addClass('cm-cur-item');
			$('.cm-thumbnails').hide();
			$('.cm-thumbnails').eq($('.cm-thumbnails-mini').index(jelm)).show();
			$('.cm-thumbnails-opener').parent().hide();
			if ($('.cm-thumbnails-opener').eq($('.cm-thumbnails-mini').index(jelm)).attr('href')) {
				$('.cm-thumbnails-opener').parent().eq($('.cm-thumbnails-mini').index(jelm)).show();
			}
			jelm.blur();
			return false;

		} else if (jelm.hasClass('cm-thumbnails-opener')) {
			$('.cm-thumbnails:visible').click();
			jelm.blur();
			return false;
		}
	}
}

//function called when the user clicks on a previewer link
function previewer_show(caption, url, owner)
{

	try {
		if (typeof document.body.style.maxHeight === 'undefined') {//if IE 6
			$('body', 'html').css({height: '100%', width: '100%'});
			$('html').css('overflow', 'hidden');
			if (!$('#previewer_hide_select').get(0)) {//iframe to hide select elements in ie6
				$('body').append('<iframe id="previewer_hide_select"></iframe><div id="previewer_overlay"></div><div id="previewer_window"></div>');
				$('#previewer_overlay').click(previewer_remove);
			}
		} else {//all others
			if (!$('#previewer_overlay').get(0)) {
				$('body').append('<div id="previewer_overlay"></div><div id="previewer_window"></div>');
				$('#previewer_overlay').click(previewer_remove);
			}
		}
		
		if (caption === null) {
			caption = '';
		}
	
		var url_string = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;
		var url_type = url.toLowerCase().match(url_string);
		var img_types = ['.jpg', '.jpeg', '.png', '.gif', '.bmp'];

		if (jQuery.inArray(url_type[0], img_types) != -1) {//code to show images

			previewer_thumbs = '';
			if (!owner.hasClass('cm-single')) {
				var previewer_thumbs_elm = $(".cm-thumbnails").parent('a');
				if (previewer_thumbs_elm.length > 1) {
					previewer_thumbs_elm = $(".cm-thumbnails");
					previewer_thumbs = '<div class="viewer-container"><table cellpadding="0" cellspacing="0" border="0"><tr><td><div id="prev_btn" class="hand"><img src="' + images_dir + '/icons/prev_btn.gif" width="17" height="17" border="0" alt=""  /></div></td><td><div id="viewer"><div id="thumbs_frame">';
					for (var i = 0; i < previewer_thumbs_elm.length; i++) {
						if (previewer_thumbs_elm.eq(i).parent('a').length) {
							previewer_thumbs += "<img " + (previewer_thumbs_elm.eq(i).parent().attr('href') == url ? "class='cm-current-thumb' " : "") + "src='" + previewer_thumbs_elm.eq(i).attr('src') + "' onclick='previewer_change_image(this, \"" + previewer_thumbs_elm.eq(i).parent().attr('href') + "\"); return false;'>";
						}
					}
					previewer_thumbs += '</div></div></td><td><div id="next_btn" class="hand"><img src="' + images_dir + '/icons/next_btn.gif" width="17" height="17" border="0" alt=""  /></div></td></tr></table></div>';
				}
			}

			img_preloader = new Image();
			img_preloader.onload = function() {		
				img_preloader.onload = null;

				// Resizing large images - orginal by Christian Montoya edited by me.
				var pagesize = jQuery.get_window_sizes();

				P_HEIGHT = pagesize.view_height - 200;
				P_WIDTH = P_HEIGHT * 4 / 3;

				var wh = P_HEIGHT - bottom_height;

				$('#previewer_window').append('<div class="scroller-container"><div id="scroller_holder" style="width: 100%; height:' + wh + 'px; overflow:hidden;"><div id="previewer_scroller" style="width: 100%; height:' + wh + 'px; overflow:hidden;"><img id="previewer_image" src="' + url + '" alt="' + caption + '"/></div></div></div><div class="clear-both"></div><table id="preview_control" border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td align="center">' + previewer_thumbs + '</td></tr></table><div id="previewer_close"><span class="float-right">' + lang.press_esc_to + ' <a href="#" id="previewer_close_button" class="tool-link" title="' + lang.close + '">' + lang.close + '</a></span>* ' + lang.click_on_images_text + '</div>');
				if (previewer_thumbs) {
					$("#viewer").imageScroller({
						next: 'prev_btn',
						prev: 'next_btn',
						frame: 'thumbs_frame',
						child: 'img'
					});
				}

				$('#previewer_image').bind('mousedown', function(e) {
					e = (e) ? e : window.event;
					var elm = e.target;
					try {
						e.preventDefault();
					} catch(error) {
					}

					var start_x = e.clientX;
					var start_y = e.clientY;
					var orig_x = $('#previewer_scroller').get(0).scrollLeft;
					var orig_y = $('#previewer_scroller').get(0).scrollTop;

					elm.onselectstart = function()
					{
						return false;
					};

					document.onmouseup = function()
					{
						elm.onmousemove = null;
						document.onmouseup = null;
					};

					elm.onmousemove = function(e)
					{
						e = (e) ? e : window.event;
						var k = 1.4;

						$('#previewer_scroller').get(0).scrollLeft = orig_x + (start_x - e.clientX) * k;
						$('#previewer_scroller').get(0).scrollTop = orig_y + (start_y - e.clientY) * k;
						
						return false;
					};

					return false;
				});

				$("#previewer_close_button").click(previewer_remove);

				document.onkeydown = function(e){ 	
					if (e == null) { // ie
						keycode = event.keyCode;
					} else { // mozilla
						keycode = e.which;
					}
					if(keycode == 27){ // close
						previewer_remove();
					}
				};

				previewer_position();
				$("#previewer_window").css({display: "block"}); //for safari using css instead of show
				previewer_init_control(url);
			};

			img_preloader.src = url;
		}

	} catch(e) {
		//nothing here
	}
}

function previewer_change_image(target, url)
{
	$('#thumbs_frame img').removeClass('cm-current-thumb');
	$(target).addClass('cm-current-thumb');

	img_preloader = new Image();
	img_preloader.onload = function(){		
		img_preloader.onload = null;
		$('#previewer_scroller').get(0).scrollLeft = 0;
		$('#previewer_scroller').get(0).scrollTop = 0;
		$('#previewer_image').attr('src', url);
		previewer_init_control();
	};
	img_preloader.src = url;
}

function previewer_init_control()
{
	var size = $('#thumbs_frame img:first').outerWidth(true);
	var thumb_count = $('#thumbs_frame img').length;
	var vis_count = Math.floor(($('.viewer-container').width() - 2 * $('#prev_btn').width() - 220) / size);
	$('#thumbs_frame').width(size * thumb_count);
	if (thumb_count >= vis_count) {
		$('#viewer').width(vis_count * size);
		$('#prev_btn').css('visibility', 'visible');
		$('#next_btn').css('visibility', 'visible');
	} else {
		$('#viewer').width(thumb_count * size);
		$('#prev_btn').css('visibility', 'hidden');
		$('#next_btn').css('visibility', 'hidden');
	}
	if ($('#previewer_image').height() < $('#previewer_scroller').height()) {
		$('#previewer_image').css('margin-top', ($('#previewer_scroller').height() - $('#previewer_image').height()) / 2);
	} else {
		$('#previewer_image').css('margin-top', 0);
	}
}

function previewer_remove()
{
	$('#previewer_close_button').unbind('click');
	$('#previewer_window').hide();
	$('#previewer_window, #previewer_overlay, #previewer_hide_select').trigger('unload').unbind().remove();

	if (typeof document.body.style.maxHeight == 'undefined') {//if IE 6
		$('body', 'html').css({height: 'auto', width: 'auto'});
		$('html').css('overflow', '');
	}
	document.onkeydown = '';
	document.onkeyup = '';
	return false;
}

function previewer_position()
{
	$('#previewer_window').css({marginLeft: '-' + parseInt((P_WIDTH / 2), 10) + 'px', width: P_WIDTH + 'px'});
	if (!(jQuery.browser.msie && parseInt(jQuery.ua.version, 10) < 7)) { // take away IE6
		$('#previewer_window').css({marginTop: '-' + $('#previewer_window').outerHeight(true) / 2 + 'px'});
	}
}

jQuery.fn.imageScroller = function(params){
	var p = params;
	var btn_next = $('#' + p.next);
	var btn_prev = $('#' + p.prev);
	var img_frame = $('#' + p.frame);
	var child = p.child;

	var turn_up = function(){
		btn_prev.unbind('click', turn_up);
		img_frame.animate({marginLeft: - img_frame.find(child + ':first').width()}, 'fast', '', function(){
			img_frame.css('marginLeft', 0);
			img_frame.find(child + ':first').clone().appendTo(img_frame).show();
			img_frame.find(child + ':first').remove();
			btn_prev.bind('click', turn_up);
		});
	};

	var turn_down = function(){
		btn_next.unbind('click', turn_down);
		img_frame.find(child + ':last').clone().show().prependTo(img_frame);
		img_frame.css('marginLeft', - img_frame.find(child + ':first').width());
		img_frame.animate({marginLeft: 0}, 'fast', '', function(){
			img_frame.find(child + ':last').remove();
			btn_next.bind('click', turn_down);
		});
	};

	btn_next.css('cursor', 'hand').click(turn_down);
	btn_prev.css('cursor', 'hand').click(turn_up);
};
