/*
	JoomlaXTC showcaseFX	
	
	version 2.1
	
	Copyright (C) 2009,2010  Monev Software LLC.
	
	All Rights Reserved.
	
	THIS PROGRAM IS NOT FREE SOFTWARE
	
	You shall not modify, copy, duplicate, reproduce, sell, license or
	sublicense the Software, or transfer or convey the Software or
	any right in the Software to anyone else without the prior
	written consent of Developer; provided that Licensee may make
	one copy of the Software for backup or archival purposes.
	
	Monev Software LLC
	www.joomlaxtc.com
*/

if (typeof showcaseFX != 'function') {
	function showcaseFX(id, o){
	  
	  var dix = $(id);
	  if (dix) {
	  	
	    var showcase = dix.getElement('.showcase');
	    var frames = dix.getElements('.sframe');
	    
	    if(frames.length > 1) {/* For 2 frames or more */
	    	
	      var a = frames.length - 1;
	      var b = 0;
	      var fh = 0;
	      var fw = 0;
	      var f = {};
	      var fx;
	      var fxReady = (o.fxpause == -1) ? true : false;
	      var periodical;
      
	      
	      /*
	       * Initial Styles
	       */
	      showcase.setStyles({'position':'relative','display':'block','visibility':'visible','overflow':'hidden','z-index':o.fxlayer});
	      frames.each(function(f,i){
	      	fh = (f.getSize().size.y > fh) ? f.getSize().size.y : fh;
	    		fw = (f.getSize().size.x > fw) ? f.getSize().size.x : fw;	
	      })
	      frames.setStyles({'position':'absolute','display':'block','visibility':'visible'});
	  		showcase.setStyles({'width':fw,'height':fh});
	      frames.setStyles({'width':fw,'height':fh});
	      
	      /* Only for IE */
	    	if (window.ie){	
	    		/* Fix for png image */
	    		var fixyimg = showcase.getElements('img.imgpngfix');
	      		fixyimg.each(function(im){
	      			var imgName = im.src.toUpperCase();
	      		  if (imgName.substring(imgName.length-3, imgName.length) == "PNG"){
	      		  	var img = im;
	      				var w = img.width;
	      				var h = img.height;
	      				var imgURL = img.src;
	      		    var imgID = (img.id) ? "id='" + img.id + "' " : "";
	      		    var imgClass = (img.className) ? "class='" + img.className + "' " : "";
	      			  var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' ";
	      			  var imgStyle = "display:inline-block;" + img.style.cssText;
	      			  if (img.align == "left") imgStyle = "float:left;" + imgStyle;
	      			  if (img.align == "right") imgStyle = "float:right;" + imgStyle;
	      			  if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle;
	      			  var strNewHTML = "<span " + imgID + imgClass + imgTitle + " style=\"" + "width:" + w + "px; height:" + h + "px;" + imgStyle + ";" + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader" + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"; 
	      			  img.outerHTML = strNewHTML;
	      		}
	    		});
	    	}
	    	
	
	     /*
	      * Control Triggers 
	      */
	      var prevs = dix.getElements('.prev');
	      var nexts = dix.getElements('.next');
	      var pags = dix.getElements('.pag');
	          
	     /*
	      * Animation options
	      */
	      switch (o.fxmode) {
	        case 'fade':
	          fx = new Fx.Elements(frames, {duration: o.fxspeed, wait: true, transition: o.fxtype, onComplete: function(){fxReady = true;}});
	          var start = 0;
	          var end = 1;
	          frames.setStyles({'opacity': start});
	          frames[0].setStyles({'opacity': end});
	          var fxIn = {'opacity': end};
	          var fxOut = {'opacity': start};
	          var fxInR = {'opacity': end};
	          var fxOutR = {'opacity': start};
	          break;
	          
	        case 'slideHor':
	          fx = new Fx.Elements(frames, {duration: o.fxspeed, wait: true, transition: o.fxtype, onComplete: function(){fxReady = true;}});
	          var dir = (o.fxflow == 'LR') ? 1 : -1;
	          var start = dir * fw;
	          var mid = 0;
	          var end = -start;
	          frames.setStyles({'left': start});
	          frames[0].setStyles({'left': mid});
	          var fxIn = {'left': [start, mid]};
	          var fxOut = {'left': [mid, end]};
	          var fxInR = {'left': [end, mid]};
	          var fxOutR = {'left': [mid, start]};
	          break;
	          
	        case 'slideVer':
	          fx = new Fx.Elements(frames, {duration: o.fxspeed, wait: true, transition: o.fxtype, onComplete: function(){fxReady = true;}});
	          var dir = (o.fxflow == 'TB') ? 1 : -1;
	          var start = -dir * fh;
	          var mid = 0;
	          var end = -start;
	          frames.setStyles({'top': start});
	          frames[0].setStyles({'top': mid});
	          var fxIn = {'top': [start, mid]};
	          var fxOut = {'top': [mid, end]};
	          var fxInR = {'top': [end, mid]};
	          var fxOutR = {'top': [mid, start]};
	          break;
	      }
	      
	      /*
	       * Z-Index reverse fix
	       */
	      frames.each(function(f, i){f.setStyles({'z-index': i});});
	      
	      /*
	       * Foward Method
	       */
	      function foward(){
	        a = (a == frames.length - 1) ? 0 : a + 1;
	        b = (b == frames.length - 1) ? 0 : b + 1;
	        f = {};
	        f[a] = fxOut;
	        f[b] = fxIn;
	        fx.start(f);
	      }
	      
	      /*
	       * Rewind Method
	       */
	      function rewind(){
	        f = {};
	        f[a] = fxInR;
	        f[b] = fxOutR;
	        fx.start(f);
	        a--;
	        b--;
	        a = (a < 0) ? frames.length - 1 : a;
	        b = (b < 0) ? frames.length - 1 : b;
	      }
	      
	      /*
	       * GoTo Method
	       */
	      function goTo(g){
	        f = {};
	        f[b] = fxOut;
	        f[g] = fxIn;
	        fx.start(f);
	        a = g - 1;
	        b = g;
	        a = (a < 0) ? frames.length - 1 : a;
	        b = (b < 0) ? frames.length - 1 : b;
	      }
	      
	      /*
	       * Animate Method
	       */
	      function animate(){
	        foward();
	        fxReady = false;
	      }
	      
	      /*
	       * Controls Actions: Previous
	       */
	      prevs.each(function(prev,i){
	        prev.addEvent('click', function(e){
	        	e = new Event(e).stop();
	          if (fxReady) {
	            rewind();
	            $clear(periodical);
	            if(o.fxpause != -1) periodical = animate.periodical(o.fxspeed + o.fxpause);
	            fxReady = false;
	          }
	        });
	      });
	      
	      /*
	       * Controls Actions: Next
	       */
	      nexts.each(function(next, i){
	        next.addEvent('click', function(e){
	        	e = new Event(e).stop();
	          if (fxReady) {
	            foward();
	            $clear(periodical);
	            if(o.fxpause > 0) periodical = animate.periodical(o.fxspeed + o.fxpause);
	            fxReady = false;
	          }
	        });
	      });
	      
	      /*
	       * Controls Actions: Paginations
	       */
	      pags.each(function(pag,i){
	        pag.addEvent('click', function(e){
	        	e = new Event(e).stop();
	          if(fxReady){
	            if (i != b) {
	              goTo(i);
	              $clear(periodical);
	              if(o.fxpause > 0) periodical = animate.periodical(o.fxspeed + o.fxpause);
	              fxReady = false;
	            }
	          }
	        });
	      });
	      
	      /*
	       * Init Method
	       */
	      function init(){
	      	if(o.fxpause > 0) periodical = animate.periodical(o.fxspeed + o.fxpause);
	      }
	      init();
	      
	    }else{/* For 1 single frame */
	    	showcase.setStyles({'position':'relative','display':'block','visibility':'visible','z-index':o.fxlayer});
	    }
	    
	  }/* End if(dix) */
	}/* End showcasefx */
}/* End  typeof showcasefx */


/*
 * Showcase Complements: JXTC HOVER
 */
if (typeof jxtchover != 'function'){
  function jxtchover(id,hi,ho){
  	var ghover = $(id).getElements('.js_hover');
  	ghover.each(function(el) {
  		el.setStyles({'background-color':'#' + ho});
  		var fx = new Fx.Styles(el, {duration:300, wait:false});
  		el.addEvent('mouseenter', function(){
  			fx.start({
  				'background-color': '#' + hi
  			});
  		});
  		el.addEvent('mouseleave', function(){
  			fx.start({
  				'background-color': '#' + ho
  			});
  		});
  	});
  }
}


/*
 * Showcase Complements: JXTC POPS
 */
if (typeof jxtcpops != 'function') {
  function jxtcpops(id, o){
    var dix = $(id);
    var popsh = dix.getElements('.popuphover');
    
		var vo = 0;
		var vi = 0;
		var ho = 0;
		var hi = 0;
    
    var box = new Element('div',{
      styles:{'opacity':0,'display':'none'}
    });
    box.injectInside(document.body);
    box.addClass('jxtcpopup');
    
    var inner = new Element('div');
    inner.addClass('jxtcinner');
    
    var x = new Element('div');
    x.addClass('jxtcpopupclose');
    x.innerHTML = 'CLOSE';
    
    var d = new Element('div');
    d.addClass('jxtcpopupdrag');
    d.innerHTML = 'DRAG';
    
    x.injectInside(box);
    d.injectInside(box);
    inner.injectInside(box);
    
    var fx = new Fx.Styles(box,{duration:o.durationin,transition:o.fxtype,wait:false});
    
    x.addEvent('click',function(){
      fx.start({
        'top':window.getScrollTop() + vo,
        'left':window.getScrollLeft() + ho,
        'opacity':o.opacityout
      }).chain(function(){
        box.setStyles({'display':'none'});
      });
    });
    
    popsh.each(function(p,i){
      var pop = p.getElement('.pop');
      pop.setStyles({'display':'none'});

			x.addEvent('click',function(){
				pop.setStyles({'display':'none'});
				p.adopt(pop);
			});
      
      p.addEvent('click',function(){
         
        box.setStyles({
          'position':'absolute',
          'display':'block'
        });
        box.makeDraggable();
				inner.adopt(pop);
				
				pop.setStyles({'display':'block'});

        box.setStyles({
          'height':'auto',
          'top': window.getScrollTop() + o.verticalout + 'px',
          'left': window.getScrollLeft() + o.horizontalout + 'px'
        });

				if(o.centered=='1'){
					var bw = box.getSize().size.x;
					var bh = box.getSize().size.y;

	        box.setStyles({
						'top': (window.getScrollTop()) + (window.getHeight() - box.getSize().size.y)/2 + 'px',
	          'left': (window.getScrollLeft() + window.getWidth() - bw)/2 + 'px'
	        });

					vo = vi = (window.getHeight() - box.getSize().size.y)/2;
					ho = hi = (window.getScrollLeft() + window.getWidth() - bw)/2;

				}
        
        fx.start({
          'top':window.getScrollTop() + vi,
          'left':window.getScrollLeft() + hi,
          'opacity':o.opacityin
        });

      });
      
    });
    
  }
}


/*
 * Showcase Complements: JXTC TIPS
 */
if (typeof jxtctips != 'function') {
  function jxtctips(id,options){
    var dix = $(id);
    var triggers = dix.getElements('.jxtctooltip');
    triggers.each(function(t,i){
      
      var tip = t.getElement('.tip');
      t.setStyles({'position':'relative'});
      tip.setStyles({'opacity':0,'display':'block','position':'absolute','z-index':9999,'top':options.verticalout,'left':options.horizontalout});

      var tfxi = new Fx.Styles(tip, {duration: options.durationin, transtion: options.fxtype, wait: false});
      var tfxo = new Fx.Styles(tip, {duration: options.durationout, transtion: options.fxtype, wait: false});
      var tfxp = new Fx.Styles(tip, {duration: options.pause,wait: true});
      
      t.addEvent('mouseenter', function(){
        tfxi.start({
          'opacity': options.opacityin,
          'top': options.verticalin + 'px',
          'left': options.horizontalin + 'px'          
        });
      });
      t.addEvent('mouseleave', function(){
        tfxp.start({}).chain(function(){
          tfxo.start({
            'opacity': options.opacityout,
            'top' : options.verticalout + 'px',
  					'left' : options.horizontalout + 'px'

          });
        });
      });

      tip.addEvent('mouseenter', function(){
			  tfxp.stop();
			  tfxi.start({
          'opacity': options.opacityin,
          'top': options.verticalin + 'px',
          'left': options.horizontalin + 'px'          
        });
      });
   
    });
  }
}


/*
 * Showcase Complements: SLIDEBOX
 */
if (typeof slidebox != 'function') {
  function slidebox(id,sbfx,p,a){
    var dix = $(id);
    var boxslides = dix.getElements('.slidebox');
    var pos = p;
    
    boxslides.each(function(b, i){
      b.setStyles({'overflow': 'hidden','position':'relative'});
      var slide = b.getElement('.slidepanel');
      slide.setStyles({'position': 'relative'});
      
      (function(){
        var s = b.getSize().size;
        switch(sbfx) {
        	case 'RSO':
            pos.xi = s.x; pos.xo = 0; pos.yi = 0; pos.yo = 0;
        	  break;
          case 'RSI':
            pos.xo = s.x; pos.xi = 0; pos.yi = 0; pos.yo = 0;
        	  break;
        	case 'LSO':
            pos.xi = -s.x; pos.xo = 0; pos.yi = 0; pos.yo = 0;
        		break;
          case 'LSI':
            pos.xo = -s.x; pos,xi = 0; pos.yi = 0; pos.yo = 0;
        		break;
          case 'BSO':
            pos.yi = s.y; pos.yo = 0; pos.xi = 0; pos.xo = 0;
        		break;
          case 'BSI':
            pos.yo = s.y; pos.yi = 0; pos.xi = 0; pos.xo = 0;
        		break;
          case 'TSO':
            pos.yo = s.y; pos.yi = 0; pos.xi = 0; pos.xo = 0;
        		break;
          case 'TSI':
            pos.yo = -s.y; pos.yi = 0; pos.xi = 0; pos.xo = 0;
        		break;
          case 'TRSO':
            pos.xi = s.x; pos.xo = 0; pos.yi = -s.y; pos.yo = 0;
        		break;
          case 'TRSI':
            pos.xo = s.x; pos.xi = 0; pos.yo = -s.y; pos.yi = 0;
        		break;
          case 'TLSO':
            pos.xi = -s.x; pos.xo = 0; pos.yi = -s.y; pos.yo = 0;
        		break;
          case 'TLSI':
            pos.xo = -s.x; pos.xi = 0; pos.yo = -s.y; pos.yi = 0;
        		break;
          case 'BRSO':
            pos.xi = s.x; pos.xo = 0; pos.yi = s.y; pos.yo = 0;
        		break;
          case 'BRSI':
            pos.xo = s.x; pos.xi = 0; pos.yo = s.y; pos.yi = 0;
            break;
          case 'BLSO':
            pos.xi = -s.x; pos.xo = 0; pos.yi = s.y; pos.yo = 0;
        		break;
          case 'BLSI':
            pos.xo = -s.x; pos.xi = 0; pos.yo = s.y; pos.yi = 0;
        		break;
        }
        
        slide.setStyles({
          'top': pos.yo,
          'left': pos.xo
        });
      }).delay(100);
      
      var sfx = new Fx.Styles(slide,{duration:a.dura,fps:a.frames,transition:a.fxtype,wait:false});
      
      b.addEvent('mouseenter', function(){
        sfx.start({
          'top': pos.yi,
          'left':pos.xi
        });
      });
      b.addEvent('mouseleave', function(){
        sfx.start({
          'top': pos.yo,
          'left':pos.xo
        });
      });
      
    });
  }
}


/*
 * WallFX
 */
if (typeof wallfx != 'function') {
	function wallfx(id, w, h, mode){
		var mode = (typeof mode != 'undefined') ? mode : 0;
	  var con = $(id);
	  if (con) {
	    var conSize = con.getSize();
	    var inside = con.getElement('.showcase');
	    if (inside) {
		    inside.setStyles({
					'position': 'relative',
					'display':'block',
					'visibility':'visible',
					'top':0,
					'left':0,
					'width': w + 'px',
					'height': h + 'px'
		    });
		    var inSize = inside.getSize();
				var divShow = inside.getElement('.sframe');
				if(divShow){
		      divShow.setStyles({
						'position':'absolute',
						'display':'block'
					});
					switch(mode)	{
					case 0:
			    inside.setStyles({
						'overflow': 'hidden'
			    });
					var table = divShow.getElement('.table');
					var tSize = table.getSize().size;
		      table.setStyles({
						'position':'relative',
						'width':tSize.x,
						'height':tSize.y,
						'top':tSize.y - h,
						'left':tSize.x - w
					});
		      divShow.setStyles({
						'left': -(tSize.x - w),
						'top': -(tSize.y - h),
						'width': (tSize.x - w) + tSize.x,
						'height': (tSize.y - h) + tSize.y
					});
					table.makeDraggable({container:divShow});
					break;
					case 1:
					var table = divShow.getElement('table');
					var tSize = table.getSize().size;
		      table.setStyles({
						'position':'relative',
						'top':0,
						'left':0
					});
		      divShow.setStyles({
						'overflow': 'hidden',
						'position':'relative',
						'width': w,
						'height': h
					});
					var margenx = inSize.size.x * .05;
					var margeny = inSize.size.y * .05;
			    var dimDiffsx = tSize.x - inSize.size.x;
			    var dimDiffsy = tSize.y - inSize.size.y;
			    var dimPropsx = dimDiffsx / (inSize.size.x - (margenx * 2));
			    var dimPropsy = dimDiffsy / (inSize.size.y - (margeny * 2));

					inside.addEvent('mousemove', function(event){
				    var event = new Event(event);
						var mposx = event.page.x - inside.offsetLeft;
						var mposy = event.page.y - inside.offsetTop;
						var newx = parseInt(dimPropsx * (mposx - margenx));
						if (newx < 0) {newx = 0};
						if (newx > tSize.x - inSize.size.x) {newx = tSize.x - inSize.size.x};
						var newy = parseInt(dimPropsy * (mposy - margeny));
						if (newy < 0) {newy = 0};
						if (newy > tSize.y - inSize.size.y) {newy = tSize.y - inSize.size.y};
			    	table.style.left  = -newx + 'px';
			    	table.style.top  = -newy + 'px';
					});
					break;
	        }
	      }
	    }
	  }
	}
}
