// $Id: videoviewer.js 7853 2009-08-18 06:16:57Z lexa $

var bottom_height = 145;
var enable_animation = false;
var img_preloader = [];

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

//add videoviewer to href & area elements that have a class of .videoviewer
function fn_videoviewer_init(e)
{
	var jelm = $(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-video-thumbnails')) {
			var link = jelm.parent('a');
			if (link.length) {
				var a = $(link).attr('href') || link.alt;
				var t = $(link).attr('rev') || '';
				fn_videoviewer_show(t, a, jelm);
				jelm.blur();
			}

			return false;

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

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

//function called when the user clicks on a videoviewer link
function fn_videoviewer_show(caption, url, owner, thumb_action)
{
	try {
		if (!$('#videoviewer_window').length) {
			if (typeof document.body.style.maxHeight == 'undefined') {//if IE 6
				var trl_shadows = '<div class="vw-shadow" style="filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + images_dir + '/shadow_w.png, sizingMethod=scale);"></div><div class="ve-shadow" style="filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + images_dir + '/shadow_e.png, sizingMethod=scale);"></div><div class="vnw-shadow" style="filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + images_dir + '/shadow_nw.png, sizingMethod=scale);"></div><div class="vne-shadow" style="filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + images_dir + '/shadow_ne.png, sizingMethod=scale);"></div><div class="vsw-shadow" style="filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + images_dir + '/shadow_sw.png, sizingMethod=scale);"></div><div class="vse-shadow" style="filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + images_dir + '/shadow_se.png, sizingMethod=scale);"></div><div class="vn-shadow" style="filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + images_dir + '/shadow_n.png, sizingMethod=scale);"></div>';
				var b_shadow = '<div class="vs-shadow" style="filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + images_dir + '/shadow_s.png, sizingMethod=scale);"></div>';
				if (!$('#videoviewer_hide_select').get(0)) {//iframe to hide select elements in ie6
					$('body').append('<iframe id="videoviewer_hide_select"></iframe><div id="videoviewer_overlay"></div><div id="videoviewer_window"></div>');
					$('#videoviewer_overlay').click(fn_videoviewer_remove);
				}
			} else {//all others
				var trl_shadows = '<div class="vw-shadow"></div><div class="ve-shadow"></div><div class="vnw-shadow"></div><div class="vne-shadow"></div><div class="vsw-shadow"></div><div class="vse-shadow"></div><div class="vn-shadow"></div>';
				var b_shadow = '<div class="vs-shadow"></div>';
				if (!$('#videoviewer_overlay').get(0)) {
					$('body').append('<div id="videoviewer_overlay"></div><div id="videoviewer_window"></div>');
					$('#videoviewer_overlay').click(fn_videoviewer_remove);
				}
			}

			var videoviewer_thumbs = '';
			if (!owner.hasClass('cm-single')) {
				var videoviewer_thumbs_elm = $(".cm-video-thumbnails").parent('a');
				if (videoviewer_thumbs_elm.length > 1) {
					videoviewer_thumbs_elm = $(".cm-video-thumbnails");
					videoviewer_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 < videoviewer_thumbs_elm.length; i++) {
						var thmb = videoviewer_thumbs_elm.eq(i);
						if (thmb.parent('a').length) {
							videoviewer_thumbs += '<img src="' + thmb.attr('src') + '" alt="' + thmb.attr('alt') + '" onclick="fn_videoviewer_show(\'' + escape(thmb.parent().attr('rev')) + '\', \'' + escape(thmb.parent().attr('href')) + '\', this, true); return false;" />';
						}
					}
					videoviewer_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>';
				}
			}

			P_HEIGHT = 500;
			P_WIDTH = 400;

			$('#videoviewer_window').append(trl_shadows + '<div class="popupbox-closer" id="videoviewer_close_button"><img src="' + images_dir + '/icons/close_popupbox.png" title="' + lang.close + '" alt="' + lang.close + '" /></div><div class="videoviewer-container"><div class="scroller-container"><div id="videoscroller_holder" style="width: 100%; height:' + P_WIDTH + 'px; overflow:hidden;"><div id="videoviewer_scroller" style="width: 100%; height:' + P_WIDTH + 'px; overflow:hidden;"></div></div></div><div class="clear-both"></div><table id="preview_control" border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td align="center">' + videoviewer_thumbs + '</td></tr></table></div>' + b_shadow);

			if (videoviewer_thumbs) {
				$("#viewer").imageScroller1({
					next: 'prev_btn',
					prev: 'next_btn',
					frame: 'thumbs_frame',
					child: 'img'
				});
			}

			$("#videoviewer_close_button").click(fn_videoviewer_remove);

			$(document).bind('keydown', function(e) {
				var char_code = (e.which) ? e.which : e.keyCode;
				if (char_code == 27) {
					if ($('#videoviewer_window:visible').length) {
						fn_videoviewer_remove();
					}
				}
			});
		}

		$('#thumbs_frame img').removeClass('cm-current-thumb');
		if (thumb_action) {
			$(owner).addClass('cm-current-thumb');
		} else {
			if (!owner.hasClass('cm-single')) {
				var thumbs_elms = $(".cm-video-thumbnails").parent('a');
				if (thumbs_elms.length > 1) {
					for (var i = 0; i < thumbs_elms.length; i++) {
						if (thumbs_elms.eq(i).attr('href') == url) {
							$('#thumbs_frame img').eq(i).addClass('cm-current-thumb');
							break;
						}
					}
				}
			}
		}
		url = unescape(url);
		var img_id = jQuery.crc32(url);
		if (!img_preloader[img_id]) {
			img_preloader[img_id] = $(url).load(function() {
				$(this).unbind('load');
				fn_build_videoviewer($(this));
			});
			fn_build_videoviewer(img_preloader[img_id]);
			if (jQuery.browser.opera) {
				fn_build_videoviewer(img_preloader[img_id]);
			}
		} else {
			fn_build_videoviewer(img_preloader[img_id]);
		}

	} catch(e) {
		//nothing here
	}
	
	// [hex]
	if(typeof $('.cm-current-thumb').attr('alt') != "undefined") {
		var alt = $('.cm-current-thumb').attr('alt');
	} else {
		var alt = $('.video-rev-link').attr('rev');
	}
	$('#image_caption').remove();
	$('.videoviewer-container').before('<div class="center" id="image_caption" style="position: absolute; width: 100%; top: 342px"><strong class="nowrap">' + alt + '</strong></div>');
	// [/hex]
	
}

function fn_build_videoviewer(img_preloader)
{
	$('#videoviewer_scroller').empty();
	img_preloader.appendTo($('#videoviewer_scroller'));
	$('#videoviewer_scroller').get(0).scrollLeft = 0;
	$('#videoviewer_scroller').get(0).scrollTop = 0;

	$('#videoviewer_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 = $('#videoviewer_scroller').get(0).scrollLeft;
		var orig_y = $('#videoviewer_scroller').get(0).scrollTop;

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

		$(document).bind('mouseup', elm, fn_videoviewer_reset_move_event);

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

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

			return false;
		});

		return false;
	});

	$("#videoviewer_window, #videoviewer_overlay, #videoviewer_hide_select").show();
	fn_videoviewer_position(img_preloader.get(0));
}

function fn_videoviewer_reset_move_event(e)
{
	$(e.data).unbind('mousemove');
	$(document).unbind('mouseup', fn_videoviewer_reset_move_event);
}

function fn_videoviewer_init_control(skip_animation)
{
	var margin_top = $('#videoviewer_image').height() < $('#videoviewer_scroller').height() ? ($('#videoviewer_scroller').height() - $('#videoviewer_image').height()) / 2 : 0;
	if (skip_animation || !enable_animation) {
		$('#videoviewer_image').css('margin-top', margin_top + 'px');
	} else {
		$('#videoviewer_image').animate({marginTop: margin_top}, 200);
	}

	if ($('#videoviewer_scroller').height() >= $('#videoviewer_image').height() && $('#videoviewer_scroller').width() >= $('#videoviewer_image').width()) {
		$('#videoviewer_image').css('cursor', '');
	} else {
		$('#videoviewer_image').css('cursor', 'move');
	}
}

function fn_videoviewer_init_scroller(skip_animation)
{
	var size = $('#thumbs_frame img:first').outerWidth(true);
	var thumb_count = $('#thumbs_frame img').length;
	var vis_count = Math.floor((P_WIDTH - 2 * $('#prev_btn').width() - 100) / size);
	$('#thumbs_frame').width(size * thumb_count);
	var count = thumb_count;
	if (thumb_count > vis_count) {
		count = vis_count;
		$('#prev_btn').css('visibility', 'visible');
		$('#next_btn').css('visibility', 'visible');
	} else {
		$('#prev_btn').css('visibility', 'hidden');
		$('#next_btn').css('visibility', 'hidden');
	}
	if (skip_animation || !enable_animation) {
		$('#viewer').css('width', count * size + 'px');
	} else {
		$('#viewer').animate({width: count * size});
	}
}

function fn_videoviewer_remove()
{
	if ($('#videoviewer_hide_select').get(0)) {
		$('#videoviewer_window').remove();
		$('#videoviewer_overlay').remove();
		$('#videoviewer_hide_select').remove();
	}
	if ($('#videoviewer_overlay').get(0)) {
		$('#videoviewer_window').remove();
		$('#videoviewer_overlay').remove();
	}
//	$('#videoviewer_window, #videoviewer_overlay, #videoviewer_hide_select').hide();

	return false;
}

function fn_videoviewer_position(img, amimate)
{
	var pagesize = jQuery.get_window_sizes();
	var padding_side = 100; // padding (sum) from screen top and bottom
	var max_videoviewer_width = 600; // maximum videoviewer width
	var min_width = pagesize.view_width < 400 ? pagesize.view_width - padding_side : 400; // minimum image holder width for large resolution
	var min_height = pagesize.view_height < 450 ? pagesize.view_height - padding_side : 450; // minimum image holder height for large resolution
	var h_diff = $('#videoviewer_window').height() - $('#videoscroller_holder').height();
	var w_diff = $('#videoviewer_window').width() - $('#videoscroller_holder').width();
	var h_padding_size = $('#videoviewer_window').outerHeight() - $('#videoviewer_window').height();

	P_HEIGHT = parseInt(img.height) + h_diff + padding_side > pagesize.view_height ? pagesize.view_height - padding_side : parseInt(img.height) + h_diff;
	P_WIDTH = parseInt(img.width) + w_diff > max_videoviewer_width ? max_videoviewer_width : parseInt(img.width) + w_diff;
	P_HEIGHT = min_height > P_HEIGHT ? min_height : P_HEIGHT;
	P_WIDTH = min_width > P_WIDTH ? min_width : P_WIDTH;
	P_WIDTH = pagesize.view_width < P_WIDTH ? pagesize.view_width - padding_side : P_WIDTH;

	if (amimate && enable_animation) {
		$('#videoscroller_holder').animate({height: P_HEIGHT - h_diff + 'px'}, 400);
		$('#videoviewer_scroller').animate({height: P_HEIGHT - h_diff + 'px'}, 400, function() {$("#videoviewer_scroller").css({overflow: "hidden"});});

		fn_videoviewer_init_scroller();

		var new_params = {width: P_WIDTH + 'px', height: P_HEIGHT + 'px'};
		if (!(jQuery.browser.msie && parseInt(jQuery.ua.version, 10) < 8)) {
			new_params['marginTop'] = '-' + parseInt(((h_padding_size + P_HEIGHT) / 2), 10) + 'px';
			new_params['marginLeft'] = '-' + parseInt((P_WIDTH / 2), 10) + 'px';
		}
		$('#videoviewer_window').animate(new_params, 400, fn_videoviewer_init_control);
		
	} else {
		
// 		var new_height = 0;
// 		new_height = P_HEIGHT + 5;
		
		$('#videoscroller_holder').height(P_HEIGHT - h_diff);
		$('#videoviewer_scroller').height(P_HEIGHT - h_diff);

		$('#videoviewer_window').css({width: P_WIDTH + 'px', height: P_HEIGHT + 'px'});
		if (!(jQuery.browser.msie && parseInt(jQuery.ua.version, 10) < 8)) {
			$('#videoviewer_window').css({marginLeft: '-' + parseInt((P_WIDTH / 2), 10) + 'px', marginTop: '-' + parseInt(((h_padding_size + P_HEIGHT) / 2), 10) + 'px'});
		}
		fn_videoviewer_init_scroller(true);
		fn_videoviewer_init_control(true);
	}
}

jQuery.fn.imageScroller1 = 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);
};
