//	utils.js: JCE Utilities script 1.1.6
//	by Ryan Demmer (http://www.cellardoor.za.net)
	
//  CREDITS:
//	Based on...
//	Lightbox v2.02 - Lokesh Dhakar - http://www.huddletogether.com
//  Thickbox 2.0 - Cody Lindley - http://www.codeylindley.com
//  Litebox v1.0 - http://doknowevil.net/litebox
//  Everything else by me.

//	Redesigned to use the jQuery library - http://jquery.com

//	Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
//  only because Lightbox is and is a condition of the above licence, otherwise it would be under an MIT-style license.

//  Should work with all modern browsers - FF 1.5, IE 6 & 7, Opera 9, Safari

var isMSIE = (navigator.appName == "Microsoft Internet Explorer");
var ua = navigator.userAgent;
var isMSIE_7 = isMSIE && (ua.indexOf('MSIE 7') != -1);
var isGecko = ua.indexOf('Gecko') != -1;
var isSafari = ua.indexOf('Safari') != -1;
var isOpera = ua.indexOf('Opera') != -1;

//Quirksmode, IE 5.5 workaround, add document.body
jQuery.extend({
	getWidth: function(){
		return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || 0;
	},	
	getHeight: function(){
		return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0;
	},
	getScrollHeight: function(){
		return document.documentElement.scrollHeight || document.body.scrollHeight;
	},	
	getScrollWidth: function(){
		return document.documentElement.scrollWidth || document.body.scrollWidth;
	},
	getScrollTop: function(){
		return document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop || 0;
	},
	getScrollLeft: function(){
		return document.documentElement.scrollLeft || window.pageXOffset || document.body.scrollLeft || 0;
	}
});
//Based on mootools Tips class
var jceTips = {
	options : {
		className : 'tooltip',
		fxSpeed	  : 150,
		maxOpacity: 1
	},
	init: function(options){				
		this.options = options;
		jQuery('.jce_tooltip').each(function(){			
			jQuery(this).bind('mouseover', function(){jceTips.show(this);});
			jQuery(this).bind('mousemove', function(e){jceTips.locate(e);});
			jQuery(this).bind('mouseout', function(){jceTips.hide(this);}).bind('blur', function(){jceTips.hide(this);});
		
			this.myText = this.title || false;
			this.myTitle = '';
			jQuery(this).removeAttr('title');
			if(this.myText && this.myText.indexOf('::') != -1){
				var dual = this.myText.split('::');
				this.myTitle = jQuery.trim(dual[0]);
				this.myText = jQuery.trim(dual[1]);
			}	
		});
	},
	show : function(el){
		this.toolTip = document.createElement('div');
		this.toolTitle = document.createElement('h4');
		this.toolText = document.createElement('p');		
		
		jQuery(this.toolTip).addClass(this.options.className).css('position', 'absolute').appendTo('body').hide();
		jQuery(this.toolTitle).appendTo(jQuery(this.toolTip));
		jQuery(this.toolText).appendTo(jQuery(this.toolTip));
		
		jQuery(this.toolTitle).html(el.myTitle);
		jQuery(this.toolText).html(el.myText);
		jQuery(this.toolTip).animate({'opacity': this.options.maxOpacity}, this.options.fxSpeed);
		
		this.exists = true;
	},
	locate : function(e){
		if(this.exists){
			jQuery(this.toolTip).css({top: e.clientY + jQuery.getScrollTop() + 15 + 'px', left: e.clientX + jQuery.getScrollLeft() - 15 + 'px'});
		}
	},
	hide : function(el){
		if(this.exists){
			jQuery(this.toolTip).fadeOut(this.options.fxSpeed).remove();
		}
	}
};
var jceUtils = {
	config : {
		convert			: 1,		
		overlay 		: 1,
		overlay_opacity : 0.6,
		resize			: 1,		
		png_fix			: 0,		
		pngfix_id		: '_trans',	
		fadespeed		: 500,
		scalespeed		: 500,
		tip_class		: 'tooltip',
		tip_opacity		: 1,
		tip_fxspeed		: 150,
		path			: ''
	},
	cleanupEventStr : function(s) {
		s = "" + s;
		s = s.replace('function anonymous()\n{\n', '');
		s = s.replace('\n}', '');
		s = s.replace(/^return true;/gi, ''); // Remove event blocker
		return s;
	},
	parseQuery : function ( query ) {
	   var params = new Object ();
	   if ( ! query ) return params; // return empty object
	   var pairs = query.split(/[;&]/);
	   for ( var i = 0; i < pairs.length; i++ ) {
		  var kv = pairs[i].split('=');
		  if ( ! kv || kv.length != 2 ) continue;
		  var k = unescape( kv[0] );
		  var v = unescape( kv[1] );
		  v = v.replace(/\+/g, ' ');
		  params[k] = v;
	   }
	   return params;
	},
	keyPressed : function(e) {
		if(jceUtils.type == 'image'){
			switch(e.keyCode){
				case 37:
				case 52:
				case 80:
					if(imgArr.length > 1){
						if(activeImg != 0){
							jceUtils.changeImage(activeImg - 1);
						}
					}
					break;	
				case 39: 
				case 54:
				case 78:
					if(activeImg != imgArr.length -1){
						jceUtils.changeImage(activeImg + 1);
					}
					break;
			}
		}
		if(e.keyCode == 27){
			jceUtils.end(); 
		}
	},
	init : function(){		
		jceTips.init({className : this.config.tip_class, fxSpeed: this.config.tip_fxspeed, maxOpacity: this.config.tip_opacity});
		if(this.config.pngfix == 1){
			if(isMSIE && !isMSIE_7){
				jQuery('img[@src*="png"]').each( function() {
					if(jceUtils.config.pngfix_id == 'all' || (this.src.toLowerCase().match(jceUtils.config.pngfix_id, 'g') || this.className.toLowerCase().match(jceUtils.config.pngfix_id, 'g'))){
						var png = this.src;				
						this.src = jceUtils.config.path + '/images/blank.gif';
						this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + png + "')";
					}
				});
			}
		}
		jQuery('a.jcebox').click(function(){
			jceUtils.startBox(this);
			return false;
		});
		if(this.config.convert == 1){
			jQuery('a').each(function(){
				var matched = false;
				var temp = 'index2.php?option=com_jce&task=popup';
				if(this.href.indexOf(temp) != -1 || jceUtils.cleanupEventStr(this.getAttribute('onclick')).indexOf(temp) != -1){
					var src = jceUtils.cleanupEventStr(this.getAttribute('onclick')).replace(/&amp;/g, '&').replace(/&#39;/g, "'");
					matched = true;
				}
				if(this.href.indexOf("mosce/jscripts/tiny_mce/popupImage.php") != -1){
					var src = this.href.replace(/&amp;/g, '&').replace(/&#39;/g, "'").replace(/&quot;/g, '"').replace(/[\(\'\)\;]/g, '').replace(/\?/g, '&');
					matched = true;
				}
				if(matched){
					var p = jceUtils.parseQuery( src );
					jQuery(this).attr({ href: p['img'], title: p['title'].replace(/_/g, ' ') }).addClass('jcebox').removeAttr('target').removeAttr('onclick');
					jQuery(this).click(function(){
						jceUtils.startBox(this);	
						return false;
					});	
				}  
			});
		}
	},
	startBox : function(el){
		this.el = el;
		this.href = el.href;
		this.caption = el.title || el.name || null;
		this.group = el.rel || false;

		if(this.caption == null) this.caption = '';
		
		if(this.caption.indexOf('http://') != -1){
			this.caption = '<a href=' + this.caption + ' target="_blank">' + this.caption + '</a>';	
		}
		if(isMSIE && !isMSIE_7){
			if(!document.getElementById('jceutils_selectblocker')){
				jQuery('<iframe id="jceutils_selectblocker"></iframe>').appendTo('body').height(jQuery.getScrollHeight());
			}
		}
		if(this.config.overlay == 1){
			jQuery('<div id="jceutils_overlay"></div>').appendTo('body').height(jQuery.getScrollHeight()).fadeTo(this.config.fadespeed, this.config.overlay_opacity);
		}
		jQuery('<div id="jceutils_lightbox"></div>').appendTo('body').hide();
		
		if(this.href.toLowerCase().match(/\.jpg|\.jpeg|\.png|\.gif|\.bmp/g)){
			this.type = 'image';				
				html = '<div id="jceutils_outerImageContainer">';
				html += '<div id="jceutils_imageContainer">';
				html += '<a href="#" onclick="jceUtils.end(); return false;" title="Close">';
				html += '<img id="jceutils_closeButton" src="' + this.config.path + '/images/close.gif">';		
				html += '<img id="jceutils_lightboxImage" />';
				html += '</a>';
				html += '<div id="jceutils_loading"><a href="#" id="jceutils_loadingLink" onclick="jceUtils.end(); return false;"><img src="' + this.config.path + '/images/loading.gif"></a></div>';
				html += '</div>';
				html += '</div>';
				html += '<div id="jceutils_imageDataContainer">';
				html += '<div id="jceutils_imageData">';
				html += '<div id="jceutils_imageDetails"><span id="jceutils_caption"></span></div>';
				html += '<div id="jceutils_imageNav"><span id="jceutils_navDisplayPrev"></span><span id="jceutils_numberDisplay"></span><span id="jceutils_navDisplayNext"></span></div>';
				html += '</div>';
				html += '</div>';
		}else{
			this.type = 'iframe';
			var query = this.href.replace(/^[^\?]+\??/,'');
			var params = this.parseQuery( query );
			
			this.iframe_width = parseInt(params['bw']) || 250;
			this.iframe_height = parseInt(params['bh']) || 250; 
			
			var url = this.href.replace('&bw=' + params['bw'] + '&bh=' + params['bh'], '', 'g');
			
			var html = '<div id="jceutils_outerIframeContainer">';
				html += '<div id="jceutils_iframeContainer">';
				html += '<div id="jceutils_iframeTop">';
				html += '<a href="#" onclick="jceUtils.end(); return false;" title="Close">';
				html += '<img id="jceutils_closeButton" src="' + this.config.path + '/images/close.gif">';		
				html += '</a>';
				html += '</div>';
				html += '<iframe src="' + url + '" frameborder="0" id="jceutils_iframecontent" style="width:' + this.iframe_width + 'px; height:' + this.iframe_height + 'px;" onload="jceUtils.showIframe();"></iframe>';
				html += '<div id="jceutils_loading"><a href="#" id="jceutils_loadingLink" onclick="jceUtils.end(); return false;"><img src="' + this.config.path + '/images/loading.gif"></a></div>';
				html += '</div>';
				html += '</div>';
		}
		jQuery('#jceutils_lightbox').html(html);
		
		jQuery(window).scroll(this.setPosition);
		
		if (window.event) {
			jQuery('body',document).bind('keypress', jceUtils.keyPressed);
		} else {
			jQuery(document).bind('keypress', jceUtils.keyPressed);
		}				
		if(jQuery('#jceutils_lightboxImage')){
			jQuery('#jceutils_imageDataContainer').hide();
			jQuery('#jceutils_lightboxImage').hide();	
		}
		if(jQuery('#jceutils_iframecontent')){
			jQuery('#jceutils_iframecontent').hide();
		}	
		this.showBox();
	},
	showBox : function(){
		if(this.type == 'image'){	
			imgArr = [];
			imageNum = 0;
			// if image is NOT part of a set..
			if(!this.group){
				// add single image to imageArray
				imgArr.push(new Array(this.href, this.caption));
			} else {
			// if image is part of a set..
				jQuery('a[@rel='+this.group+']').each(function(){ 
					imgArr.push(new Array(this.href, this.title));
				});
				for(i = 1; i < imgArr.length; i++){
					if(imgArr[i][0] == imgArr[i-1][0]){
						imgArr.splice(i,1);
					}
				}
				while(imgArr[imageNum][0] != this.href) { 
					imageNum++;
				}
			}
			this.changeImage(imageNum);
			jQuery('#jceutils_imageDataContainer').hide();
		}
		// calculate top offset for the lightbox and display 
		jQuery('#jceutils_lightbox').css('top', jQuery.getScrollTop() + (jQuery.getWidth() / 15) + 'px');
		jQuery('#jceutils_lightbox').show();
	},
	resizeContainer : function(w, h) {		
		jQuery('#jceutils_loading').hide();		
		jQuery('#jceutils_outerImageContainer').animate({'height': h+15}, jceUtils.config.scalespeed).animate({'width': w+20}, jceUtils.config.scalespeed, function(){jceUtils.showImage();});
		if(!isMSIE_7){
			jQuery('#jceutils_imageDataContainer').width(w+20);
		} else {
			jQuery('#jceutils_imageDataContainer').width(w+22);
		}
	},
	//	changeImage()
	//	Hide most elements and preload image in preparation for resizing image container.
	//
	changeImage: function(imageNum) {
		activeImg = imageNum;	// update global var
		// hide elements during transition
		jQuery('#jceutils_loading').show();
		jQuery('#jceutils_lightboxImage').hide();
		jQuery('#jceutils_imageDataContainer').hide();
			
		imgPreloader = new Image();
		// once image is preloaded, resize image container
		imgPreloader.onload = function(){
			jQuery('#jceutils_lightboxImage').attr('src',imgArr[activeImg][0]);
			var x = jQuery.getWidth() - 150;
			var y = jQuery.getHeight() - 150;
			var iw = imgPreloader.width;
			var ih = imgPreloader.height;
			
			if(jceUtils.config.resize == 1){	
				//Resize image if necessary
				if (iw > x) {
					ih = ih * (x / iw); 
					iw = x; 
					if (ih > y) { 
						iw = iw * (y / ih); 
						ih = y; 
					}
				} else if (ih > y) { 
					iw = iw * (y / ih); 
					ih = y; 
					if (iw > x) { 
						ih = ih * (x / iw); 
						iw = x;
					}
				}
			}
			jQuery('#jceutils_lightboxImage').attr('width',iw).attr('height',ih);				
			jceUtils.resizeContainer(iw, ih);
		};
		imgPreloader.src = imgArr[activeImg][0];
	},
	showImage: function(){
		jQuery('#jceutils_lightboxImage').fadeIn(this.config.fadespeed);
		jQuery('#jceutils_outerImageContainer').css('borderBottom', '0');
		jQuery('#jceutils_imageDataContainer').slideDown();
		this.updateDetails(); 
		this.preloadNeighborImages();
	},
	showIframe : function(){
		jQuery('#jceutils_loading').hide();	
		var w = parseInt(this.iframe_width) + 20;
		var h = parseInt(this.iframe_height) + 40;
		jQuery('#jceutils_outerIframeContainer').animate({'height': h}, jceUtils.config.scalespeed).animate({'width': w}, jceUtils.config.scalespeed, function(){jQuery('#jceutils_iframecontent').fadeIn(jceUtils.config.fadespeed);});		
	},
	updateDetails: function() {
		jQuery('#jceutils_caption').html(imgArr[activeImg][1]).show();
		
		jQuery('#jceutils_numberDisplay').hide();
		jQuery('#jceutils_navDisplayPrev').hide();
		jQuery('#jceutils_navDisplayNext').hide();
		
		if(imgArr.length > 1){
			if(activeImg != 0){
				jQuery('#jceutils_navDisplayPrev').html('<a href="#"  class="nav" onclick="jceUtils.changeImage(' + (activeImg - 1) + '); return false;"><</a>&nbsp;&nbsp;').show();
			}
			if(activeImg != imgArr.length -1){
				jQuery('#jceutils_navDisplayNext').html('&nbsp;&nbsp;<a href="#"  class="nav" onclick="jceUtils.changeImage(' + (activeImg + 1) + '); return false;">></a>').show();
			}
			var h = '';
			for(var i=0; i<imgArr.length; i++){
				var num = i + 1;
				var seperator = (num == imgArr.length) ? '' : ' | ';
				if(activeImg != i){
					h += '<a id="jceutils_numberLink" class="nav" href="#" onclick="jceUtils.changeImage(' + i + '); return false;">';
				}
				h += '<span class="nav">'+num+'</span>';
				if(activeImg != i){
					h += '</a>';
				}
				h += seperator;
				jQuery('#jceutils_numberDisplay').html(h).show();
			}
		}
	},
	preloadNeighborImages: function(){
		if((imgArr.length - 1) > activeImg){
			preloadNextImage = new Image();
			preloadNextImage.src = imgArr[activeImg + 1][0];
		}
		if(activeImg > 0){
			preloadPrevImage = new Image();
			preloadPrevImage.src = imgArr[activeImg - 1][0];
		}
	
	},
	setPosition: function(){
		var w = jQuery("#jceutils_lightbox").width();
		var h = jQuery("#jceutils_lightbox").height();
		jQuery("#jceutils_lightbox").css({left: (jQuery.getScrollLeft() + (jQuery.getWidth() - w)/2)+"px", top: (jQuery.getScrollTop() + (jQuery.getHeight()-h)/2)+"px" });
	},
	end : function(){
		jQuery('#jceutils_lightbox').remove();
		if(this.config.overlay == 1){
			jQuery('#jceutils_overlay').fadeOut('normal',function(){jQuery('#jceutils_overlay').remove();});
		}
		if(isMSIE && !isMSIE_7){
			jQuery('#jceutils_selectblocker').remove();
		}
		jQuery(document).unbind('keypress');
	}
};
jQuery(document).ready(function(){jceUtils.init();});