// $Id: previewer.js 5253 2008-05-15 09:16:04Z lexa $

var preview_size = 100;
var bottom_height = 45;

$(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();
			$('.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 = '<span id="up_btn" class="hand"><strong>&and;</strong></span><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 += "<span><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;'><hr></span>";
						}
					}
					previewer_thumbs += '</div></div><span id="down_btn" class="hand"><strong>&or;</strong></span>';
				//}
			}

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

				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 - 150;
					P_WIDTH = (P_HEIGHT * 4 / 3) + 100;
					if (P_WIDTH>1000){
						P_WIDTH=1000;
					}
					var x = P_WIDTH - 10 - preview_size;
					var y = P_HEIGHT - bottom_height;
					var image_width = img_preloader.width;
					var image_height = img_preloader.height;
					var wh, ww;

					if (image_width > x) {
						wh = image_height;
						ww = x;
						if (wh > y) {
							wh = y;
						}
					} else if (image_height > y) {
						ww = image_width;
						wh = y;
						if (ww > x) {
							ww = x;
						}
					} else {
						ww = image_width;
						wh = image_height;
					}
					// End Resizing

          // <tr><td id="preview_holder"><div id="preview_window"><div class="drag-window"></div></div><img id="previewer_preview" src="' + preview_preloader.src + '" alt="' + caption + '"/></td></tr>
          
	  var title=$('#product_view_brandname').text();
	  $('#previewer_window').append('<h1 class="mainbox-title"><div><span>'+title+'</span></div></h1>');
	  
	
	  //if(!previewer_thumbs_elm || previewer_thumbs_elm.length == 1) {
            //$('#previewer_window').append('<div id="previewer_content" style=""><div class="float-right" style="width:' + (P_WIDTH - 190) + 'px; height:' + (P_HEIGHT) + 'px; overflow:hidden;"><table border="0" cellpadding="0" cellspacing="0" id="scroller_holder"><tr><td align="center" valign="middle" style="width:' + (P_WIDTH - 190) + 'px; height:' + (P_HEIGHT) + 'px; overflow:hidden;"><div id="previewer_scroller" style="width:' + (ww) + 'px; height:' + (wh+45) + 'px; overflow:hidden;"><img id="previewer_image" src="' + url + '" alt="' + caption + '"/></div></td></tr></table></div><div id="previewer_close" style="bottom:-55px; width:' + (P_WIDTH - 200) + 'px;">(<i>' + lang.previewer_help + '</i>)&nbsp;<a href="#" id="previewer_close_button" title="' + lang.close + '">' + lang.close + '</a> ' + lang.or_esc + '</div><div class="clear-both"></div></div>');
					//} else {
					  $('#previewer_window').append('<div id="previewer_content"><table id="preview_control" class="float-left" border="0" cellpadding="0" cellspacing="0"><tr><td align="center">' + previewer_thumbs + '</td></tr></table><div class="float-right" style="width:' + (P_WIDTH - 12 - preview_size) + 'px; overflow:hidden;"><div style="border-left: 1px solid #DE8C92; position:absolute;  height:' + (P_HEIGHT - 20) + 'px; z-index:200;"></div><table border="0" cellpadding="0" cellspacing="0" id="scroller_holder"><tr><td align="center" valign="" style="width:' + (P_WIDTH - 12 - preview_size -1) + 'px; height:' + (P_HEIGHT - bottom_height ) + 'px; overflow:hidden;"><div id="previewer_scroller" class="" style="width:' + (ww) + 'px; height:' + (wh) + 'px; overflow:hidden;"><img id="previewer_image" src="' + url + '" alt="' + caption + '"/></div></td></tr></table><div id="previewer_close" style="width:' + (P_WIDTH - 20 - preview_size -1) + 'px;">(<i>' + lang.previewer_help + '</i>)&nbsp;<a href="#" id="previewer_close_button" title="' + lang.close + '">' + lang.close + '</a> ' + lang.or_esc + '</div></div><div class="clear-both"></div></div>');
		 			//}
	//$('#previewer_window').append('<div id="previewer_close">(<i>' + lang.previewer_help + '</i>)&nbsp;<a href="#" id="previewer_close_button" title="' + lang.close + '">' + lang.close + '</a> ' + lang.or_esc + '</div>');
	$('#previewer_window').append('<div class="sidebox-bottom" style=""><span></span></div>');
					if (previewer_thumbs) {
						$("#viewer").imageScroller({
							next: 'up_btn',
							prev: 'down_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;

							pan_image($("#preview_window"), $('#previewer_scroller').get(0).scrollLeft, $('#previewer_scroller').get(0).scrollTop, false);

							return false;
						};

						return false;
					});

					$("#preview_window").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 last_top = this.offsetTop;
						var last_left = this.offsetLeft;

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

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

						document.onmousemove = function(e)
						{
							e = (e) ? e : window.event;

							var span_x = (e.clientX - start_x);
							var span_y = (e.clientY - start_y);

							pan_image($("#preview_window"), last_left + span_x, last_top + span_y, true);

							return true;
						};

						return true;
					});

					$("#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_thumbs_elm);
					$("#previewer_window").height(P_HEIGHT);
					$("#previewer_window").css({display: "block"}); //for safari using css instead of show
					previewer_init_control(url);
				};

				img_preloader.src = url;
			};

			jQuery.ajaxRequest(index_script + '?dispatch=image.resize', {data:{width: preview_size, height: preview_size, image_path: url}, callback: previewer_callback, caching: true});
		}

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

function previewer_change_image(target, url) 
{
	$('#thumbs_frame img').removeClass('cm-current-thumb');
	$(target).addClass('cm-current-thumb');
	preview_preloader = new Image();
	preview_preloader.onload = function(){
		preview_preloader.onload = null;

		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_scroller').height(Math.min(P_HEIGHT - bottom_height, img_preloader.height));
			
			$('#previewer_scroller').width(Math.min(P_WIDTH - 10 - preview_size, img_preloader.width));
			if((P_HEIGHT - bottom_height<img_preloader.height)||(P_WIDTH - 10 - preview_size<img_preloader.width)){
				$('#previewer_scroller').css('position','absolute');
				$('#previewer_scroller').css('top','34px');
				$('#previewer_scroller').width($('#previewer_scroller').width()-2);
			}else{
				$('#previewer_scroller').css('position','');
				$('#previewer_scroller').css('top','');
			}
			$('#previewer_preview').attr('src', preview_preloader.src);
			$('#previewer_image').attr('src', url);
			previewer_init_control();
		};
		img_preloader.src = url;
	};
	jQuery.ajaxRequest(index_script + '?dispatch=image.resize', {data:{width: preview_size, height: preview_size, image_path: url}, callback: previewer_callback, caching: true});
}

function previewer_callback(data) 
{
	preview_preloader.src = data.img_src;
}

function previewer_init_control() 
{
	// - preview_size
	$('#viewer').height($('#previewer_window').height() - 2 * $('#up_btn').height() - bottom_height);
	if ($('#viewer').height() >= $('#thumbs_frame').height()) {
		$('#up_btn').css('display', 'none');
		$('#down_btn').css('display', 'none');
	} else {
		$('#up_btn').css('display', 'block');
		$('#down_btn').css('display', 'block');
	}

	var scroll_w = $('#previewer_scroller').width();
	var scroll_h = $('#previewer_scroller').height();

	if (scroll_w >= img_preloader.width && scroll_h >= img_preloader.height) {
		$('#preview_window').hide();
	} else {
		$('#preview_window').show();
	}

	$('#preview_window').css({'left': (preview_size - preview_preloader.width) / 2 + parseInt($('#previewer_window').css('padding-left') || 0) + 'px', 'top': (preview_size - preview_preloader.height) / 2 + parseInt($('#previewer_window').css('padding-top') || 0) + 'px'});
	var dimensions_obj = {'width': (scroll_w >= img_preloader.width ? preview_preloader.width : scroll_w * preview_preloader.width / img_preloader.width) - parseInt($("#preview_window").css('borderLeftWidth') || 0) * 2 + 'px', 'height': (scroll_h >= img_preloader.height ? preview_preloader.height : scroll_h * preview_preloader.height / img_preloader.height) - parseInt($("#preview_window").css('borderTopWidth') || 0) * 2 + 'px'};
	$('#preview_window').css(dimensions_obj);
	$('#preview_window div').css(dimensions_obj);
	
}

function pan_image(box, left, top, is_image)
{
	var preview_obj = $('#previewer_preview');
	var preview_width = preview_obj.width();
	var preview_height = preview_obj.height();
	var preview_left = (preview_size - preview_width) / 2 + parseInt($('#previewer_window').css('padding-left') || 0);
	var preview_right = preview_left + preview_width;
	var preview_top = (preview_size - preview_height) / 2 + parseInt($('#previewer_window').css('padding-top') || 0);
	var preview_bottom = preview_top + preview_height;

	var box_width = box.width() + parseInt(box.css('borderLeftWidth') || 0) * 2;
	var box_height = box.height() + parseInt(box.css('borderTopWidth') || 0) * 2;
	var w = preview_width - box_width;
	var h = preview_height - box_height;

	if (is_image) {
		var box_left = left;
		var box_right = box_left + box_width;
		var box_top = top;
		var box_bottom = box_top + box_height;

		if(box_left < preview_left){
			box_left = preview_left;
		}

		if(box_top < preview_top){
			box_top = preview_top;
		}

		if(box_right > preview_right){
			box_left = preview_right - box_width;
		}

		if(box_bottom > preview_bottom){
			box_top = preview_bottom - box_height;
		}

		box.css('left', box_left);
		box.css('top', box_top);



		$('#previewer_scroller').get(0).scrollLeft = - ($('#previewer_scroller').width() - img_preloader.width) * (box_left - preview_left) / w;
		$('#previewer_scroller').get(0).scrollTop = - ($('#previewer_scroller').height() - img_preloader.height) * (box_top - preview_top) / h;
	} else {
		box.css('left', preview_left - left * w / ($('#previewer_scroller').width() - img_preloader.width));
		box.css('top', preview_top - top * h / ($('#previewer_scroller').height() - img_preloader.height));
	}
}

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_thumbs_elm) {
	//if(!previewer_thumbs_elm || previewer_thumbs_elm.length == 1) {
	  //$('#previewer_window').css({marginLeft: '-' + parseInt(((P_WIDTH - 187) / 2), 10) + 'px', width: (P_WIDTH - 187) + 'px'});
	//} else {
	  $('#previewer_window').css({marginLeft: '-' + parseInt((P_WIDTH / 2), 10) + 'px', width: P_WIDTH + 'px'});
 	//}

	//$('#previewer_window').css({marginLeft: '-' + parseInt((P_WIDTH / 2), 10) + 'px', width: P_WIDTH + 'px'});
	
	if (!(jQuery.browser.msie && jQuery.browser.version < 7)) { // take away IE6
		$('#previewer_window').css({marginTop: '-' + parseInt((P_HEIGHT / 2), 10) + '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({marginTop: - img_frame.find(child + ':first').height()}, 'fast', '', function(){
			img_frame.css('marginTop', 0);
			img_frame.find(child + ':first').parent().clone().appendTo(img_frame).show();
			img_frame.find(child + ':first').parent().remove();
			btn_prev.bind('click', turn_up);
		});
	};

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

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

