/*
 * jQuery Tooltip plugin 1.3
 *
 * http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/
 * http://docs.jquery.com/Plugins/Tooltip
 *
 * Copyright (c) 2006 - 2008 Jörn Zaefferer
 *
 * $Id: jquery.tooltip.js 5741 2008-06-21 15:22:16Z joern.zaefferer $
 * 
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 */
 
;(function($) {
 
 // the tooltip element
 var helper = {},
 // the current tooltipped element
 current,
 // the title of the current element, used for restoring
 title,
 // timeout id for delayed tooltips
 tID,
 // IE 5.5 or 6
 IE = $.browser.msie && /MSIE\s(5\.5|6\.)/.test(navigator.userAgent),
 // flag for mouse tracking
 track = false;
 
 $.tooltip = {
 blocked: false,
 defaults: {
 delay: 200,
 fade: false,
 showURL: true,
 extraClass: "",
 top: 15,
 left: 15,
 id: "tooltip"
 },
 block: function() {
 $.tooltip.blocked = !$.tooltip.blocked;
 }
 };
 
 $.fn.extend({
 tooltip: function(settings) {
 settings = $.extend({}, $.tooltip.defaults, settings);
 createHelper(settings);
 return this.each(function() {
 $.data(this, "tooltip", settings);
 this.tOpacity = helper.parent.css("opacity");
 // copy tooltip into its own expando and remove the title
 this.tooltipText = this.title;
 $(this).removeAttr("title");
 // also remove alt attribute to prevent default tooltip in IE
 this.alt = "";
 })
 .mouseover(save)
 .mouseout(hide)
 .click(hide);
 },
 fixPNG: IE ? function() {
 return this.each(function () {
 var image = $(this).css('backgroundImage');
 if (image.match(/^url\(["']?(.*\.png)["']?\)$/i)) {
 image = RegExp.$1;
 $(this).css({
 'backgroundImage': 'none',
 'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')"
 }).each(function () {
 var position = $(this).css('position');
 if (position != 'absolute' && position != 'relative')
 $(this).css('position', 'relative');
 });
 }
 });
 } : function() { return this; },
 unfixPNG: IE ? function() {
 return this.each(function () {
 $(this).css({'filter': '', backgroundImage: ''});
 });
 } : function() { return this; },
 hideWhenEmpty: function() {
 return this.each(function() {
 $(this)[ $(this).html() ? "show" : "hide" ]();
 });
 },
 url: function() {
 return this.attr('href') || this.attr('src');
 }
 });
 
 function createHelper(settings) {
 // there can be only one tooltip helper
 if( helper.parent )
 return;
 // create the helper, h3 for title, div for url
 helper.parent = $('<div id="' + settings.id + '"><h3></h3><div class="body"></div><div class="url"></div></div>')
 // add to document
 .appendTo(document.body)
 // hide it at first
 .hide();
 
 // apply bgiframe if available
 if ( $.fn.bgiframe )
 helper.parent.bgiframe();
 
 // save references to title and url elements
 helper.title = $('h3', helper.parent);
 helper.body = $('div.body', helper.parent);
 helper.url = $('div.url', helper.parent);
 }
 
 function settings(element) {
 return $.data(element, "tooltip");
 }
 
 // main event handler to start showing tooltips
 function handle(event) {
 // show helper, either with timeout or on instant
 if( settings(this).delay )
 tID = setTimeout(show, settings(this).delay);
 else
 show();
 
 // if selected, update the helper position when the mouse moves
 track = !!settings(this).track;
 $(document.body).bind('mousemove', update);
 
 // update at least once
 update(event);
 }
 
 // save elements title before the tooltip is displayed
 function save() {
 // if this is the current source, or it has no title (occurs with click event), stop
 if ( $.tooltip.blocked || this == current || (!this.tooltipText && !settings(this).bodyHandler) )
 return;

 // save current
 current = this;
 title = this.tooltipText;
 
 if ( settings(this).bodyHandler ) {
 helper.title.hide();
 var bodyContent = settings(this).bodyHandler.call(this);
 if (bodyContent.nodeType || bodyContent.jquery) {
 helper.body.empty().append(bodyContent)
 } else {
 helper.body.html( bodyContent );
 }
 helper.body.show();
 } else if ( settings(this).showBody ) {
 var parts = title.split(settings(this).showBody);
 helper.title.html(parts.shift()).show();
 helper.body.empty();
 for(var i = 0, part; (part = parts[i]); i++) {
 if(i > 0)
 helper.body.append("<br/>");
 helper.body.append(part);
 }
 helper.body.hideWhenEmpty();
 } else {
 helper.title.html(title).show();
 helper.body.hide();
 }
 
 // if element has href or src, add and show it, otherwise hide it
 if( settings(this).showURL && $(this).url() )
 helper.url.html( $(this).url().replace('http://', '') ).show();
 else 
 helper.url.hide();
 
 // add an optional class for this tip
 helper.parent.addClass(settings(this).extraClass);

 // fix PNG background for IE
 if (settings(this).fixPNG )
 helper.parent.fixPNG();
 
 handle.apply(this, arguments);
 }
 
 // delete timeout and show helper
 function show() {
 tID = null;
 if ((!IE || !$.fn.bgiframe) && settings(current).fade) {
 if (helper.parent.is(":animated"))
 helper.parent.stop().show().fadeTo(settings(current).fade, current.tOpacity);
 else
 helper.parent.is(':visible') ? helper.parent.fadeTo(settings(current).fade, current.tOpacity) : helper.parent.fadeIn(settings(current).fade);
 } else {
 helper.parent.show();
 }
 update();
 }
 
 /**
 * callback for mousemove
 * updates the helper position
 * removes itself when no current element
 */
 function update(event) {
 if($.tooltip.blocked)
 return;
 
 if (event && event.target.tagName == "OPTION") {
 return;
 }
 
 // stop updating when tracking is disabled and the tooltip is visible
 if ( !track && helper.parent.is(":visible")) {
 $(document.body).unbind('mousemove', update)
 }
 
 // if no current element is available, remove this listener
 if( current == null ) {
 $(document.body).unbind('mousemove', update);
 return; 
 }
 
 // remove position helper classes
 helper.parent.removeClass("viewport-right").removeClass("viewport-bottom");
 
 var left = helper.parent[0].offsetLeft;
 var top = helper.parent[0].offsetTop;
 if (event) {
 // position the helper 15 pixel to bottom right, starting from mouse position
 left = event.pageX + settings(current).left;
 top = event.pageY + settings(current).top;
 var right='auto';
 if (settings(current).positionLeft) {
 right = $(window).width() - left;
 left = 'auto';
 }
 helper.parent.css({
 left: left,
 right: right,
 top: top
 });
 }
 
 var v = viewport(),
 h = helper.parent[0];
 // check horizontal position
 if (v.x + v.cx < h.offsetLeft + h.offsetWidth) {
 left -= h.offsetWidth + 20 + settings(current).left;
 helper.parent.css({left: left + 'px'}).addClass("viewport-right");
 }
 // check vertical position
 if (v.y + v.cy < h.offsetTop + h.offsetHeight) {
 top -= h.offsetHeight + 20 + settings(current).top;
 helper.parent.css({top: top + 'px'}).addClass("viewport-bottom");
 }
 }
 
 function viewport() {
 return {
 x: $(window).scrollLeft(),
 y: $(window).scrollTop(),
 cx: $(window).width(),
 cy: $(window).height()
 };
 }
 
 // hide helper and restore added classes and the title
 function hide(event) {
 if($.tooltip.blocked)
 return;
 // clear timeout if possible
 if(tID)
 clearTimeout(tID);
 // no more current element
 current = null;
 
 var tsettings = settings(this);
 function complete() {
 helper.parent.removeClass( tsettings.extraClass ).hide().css("opacity", "");
 }
 if ((!IE || !$.fn.bgiframe) && tsettings.fade) {
 if (helper.parent.is(':animated'))
 helper.parent.stop().fadeTo(tsettings.fade, 0, complete);
 else
 helper.parent.stop().fadeOut(tsettings.fade, complete);
 } else
 complete();
 
 if( settings(this).fixPNG )
 helper.parent.unfixPNG();
 }
 
})(jQuery);

/*
 * JQZoom Evolution 1.0.1 - Javascript Image magnifier
 *
 * Copyright (c) Engineer Renzi Marco(www.mind-projects.it)
 *
 * $Date: 12-12-2008
 *
 * ChangeLog:
 * 
 * $License : GPL,so any change to the code you should copy and paste this section,and would be nice to report this to me(renzi.mrc@gmail.com).
 */
(function($)
{
 $.fn.jqzoom = function(options)
 {
 var settings = {
 zoomType: 'standard', //standard/reverse/innerzoom
 zoomWidth: 200, //zoomed width default width
 zoomHeight: 200, //zoomed div default width
 xOffset: 10, //zoomed div default offset
 yOffset: 0,
 position: "right" ,//zoomed div default position,offset position is to the right of the image
 lens:true, //zooming lens over the image,by default is 1;
 lensReset : false,
 imageOpacity: 0.2,
 title : true,
 alwaysOn: false,
 showEffect: 'show',
 hideEffect: 'hide',
 fadeinSpeed: 'fast',
 fadeoutSpeed: 'slow',
 preloadImages :true,
 showPreload: true,
 preloadText : 'Loading zoom',
 preloadPosition : 'center' //bycss
 };

 //extending options
 options = options || {};
 $.extend(settings, options);


 return this.each(function()
 {
 var a = $(this);
 var aTitle = a.attr('title'); //variabile per memorizzare il titolo href
 $(a).removeAttr('title');
 $(a).css('outline-style','none');


 var img = $("img", this);
 var imageTitle = img.attr('title');
 img.removeAttr('title'); //variabile per memorizzare il titolo immagine


 var smallimage = new Smallimage( img );
 var smallimagedata = {};
 //imageborder
 var btop = 0;
 var bleft = 0;

 var loader = null; //variabile per memorizzare oggetto loader
 loader = new Loader();

 var ZoomTitle = (trim(aTitle).length > 0) ? aTitle :
 (trim(imageTitle).length > 0) ? imageTitle : null; //setting zoomtitle
 var ZoomTitleObj = new zoomTitle();

 var largeimage = new Largeimage( a[0].href );

 var lens = new Lens();
 var lensdata = {};
 //lensborder



 var largeimageloaded = false;
 var scale = {}; //rapporto tra immagine grande e piccola scale.x/scale.y
 var stage = null; // quadrato che mostra l'immagine ingrandita
 var running = false; // running = true quando si verifica l'evento che mostra lo zoom(adesso mouseover).
 var mousepos = {};
 var firstime = 0;
 var preloadshow = false;
 var isMouseDown = false;
 var dragstatus = false
 //loading smallimagedata
 smallimage.loadimage();

 //ritorna false al click dell href
 $(this).click(function(){return false;});

 //se settato alwaysOn attivo lo Zoom e lo mostro.

 //attivo al mouseover
 $(this).hover(function(e)
 {
 mousepos.x = e.pageX;
 mousepos.y = e.pageY;
 activate();
 },function()
 {
 deactivate();
 largeimage = false;
 });


 //ALWAYS ON
 if(settings.alwaysOn)
 {
 setTimeout(function(){activate();},150);
 }


 function activate()
 {

 if ( !running ) {

 //finding border
 smallimage.findborder();

 running = true;

 //rimuovo il titolo al mouseover
 imageTitle = img.attr('title');
 img.removeAttr('title');
 aTitle = a.attr('title');
 $(a).removeAttr('title');

 //se non c� creo l'oggetto largeimage
 if (!largeimage || $.browser.safari) {
 largeimage = new Largeimage( a[0].href );
 }

 //se l'immagine grande non � stata caricata la carico
 if(!largeimageloaded || $.browser.safari)
 {
 largeimage.loadimage();
 }else
 {
 //after preload
 if(settings.zoomType != 'innerzoom')
 {
 stage = new Stage();
 stage.activate();
 }
 lens = new Lens;
 lens.activate();
 }

 //hack per MAC
 /* if($.browser.safari)
 {
 if(settings.zoomType != 'innerzoom') //se innerzoom non mostro la finestra dello zoom
 {
 stage = new Stage();
 stage.activate();
 }
 if($('div.jqZoomPup').length <= 0)
 {
 lens = new Lens();
 }
 //if(settings.zoomType == 'innerzoom'){lens = new Lens()};
 lens.activate();
 (settings.alwaysOn) ? lens.center() : lens.setposition(null);
 }
 */
 a[0].blur();
 //alert($('div.jqZoomPup').length);
 return false;
 }




 }

 function deactivate()
 {
 if(settings.zoomType == 'reverse' && !settings.alwaysOn)
 {
 img.css({'opacity' : 1});
 }

 if(!settings.alwaysOn)
 {
 //resetting parameters
 running = false;
 largeimageloaded = false;
 $(lens.node).unbind('mousemove');
 lens.remove();
 if($('div.jqZoomWindow').length >0)
 {
 stage.remove();
 }
 if($('div.jqZoomTitle').length > 0)
 {
 ZoomTitleObj.remove();
 }
 //resetting title
 img.attr('title',imageTitle);
 a.attr('title',aTitle);
 $().unbind();

 a.unbind('mousemove');
 //resetto il parametro che mi dice che � la prima volta che mostor lo zoom
 firstime = 0;
 //remove ieiframe
 if(jQuery('.zoom_ieframe').length > 0)
 {
 jQuery('.zoom_ieframe').remove();
 }
 }else
 {
 if(settings.lensReset)
 {
 switch(settings.zoomType)
 {
 case 'innerzoom':
 largeimage.setcenter();
 break;
 default:
 lens.center();
 break;
 }
 }
 }

 //non so se serve da provare
 if(settings.alwaysOn)
 {
 activate();
 }
 };





 //smallimage
 function Smallimage( image )
 {
 this.node = image[0];

 this.loadimage = function() {
 this.node.src = image[0].src;
 };
 this.findborder = function()
 {
 var bordertop = '';
 bordertop = $(img).css('border-top-width');
 btop = '';
 var borderleft = '';
 borderleft = $(img).css('border-left-width');
 bleft = '';
 /*if($.browser.msie)
 {
 var temp = bordertop.split(' ');

 bordertop = temp[1];
 var temp = borderleft.split(' ');
 borderleft = temp[1];
 }*/

 if(bordertop)
 {
 for(i=0;i<3;i++)
 {
 var x = [];
 x = bordertop.substr(i,1);

 if(isNaN(x) == false)
 {
 btop = btop +''+ bordertop.substr(i,1);
 }else
 {
 break;
 }
 }
 }

 if(borderleft)
 {
 for(i=0;i<3;i++)
 {
 if(!isNaN(borderleft.substr(i,1)))
 {
 bleft = bleft + borderleft.substr(i,1)
 }else
 {
 break;
 }
 }
 }
 btop = (btop.length > 0) ? eval(btop) : 0;
 bleft = (bleft.length > 0) ? eval(bleft) : 0;


 }
 this.node.onload = function()
 {
 //setto il cursor e la posizione dell'href


 a.css({'cursor':'crosshair','display':'block'});

 if(a.css('position')!= 'absolute' && a.parent().css('position'))
 {
 a.css({'cursor':'crosshair','position':'relative','display':'block'});
 }
 if(a.parent().css('position') != 'absolute')
 {
 a.parent().css('position','relative');
 //a.css('position','relative');
 }
 else{
 //a.css('position','relative');
 }
 if($.browser.safari || $.browser.opera)
 {
 $(img).css({position:'absolute',top:'0px',left:'0px'});
 }
 /*if(a.css('position')!= 'absolute' && a.parent().css('position'))
 {
 a.css({'cursor':'crosshair','position':'relative','display':'block'});
 }
 if(a.parent().css('position') != 'absolute')
 {
 alert('in');
 a.parent().css('position','relative');
 //a.css('position','relative');
 }
 else{
 //a.css('position','relative');
 }*/



 /*
 if(a.parent().css('position') != 'relative' && a.css('position') != 'absolute')
 {
 a.css({'cursor':'crosshair','position':'relative','display':'block'});
 }*/

 //al docuemnt ready viene caricato l'src quindi viene azionato l'onload e carico tutti i dati
 smallimagedata.w = $( this ).width();
 smallimagedata.h = $( this ).height();


 //non viene fatta assegnazione alla variabile globale
 smallimagedata.h = $( this ).height();
 smallimagedata.pos = $( this ).offset();
 smallimagedata.pos.l = $( this ).offset().left;
 smallimagedata.pos.t = $( this ).offset().top;
 smallimagedata.pos.r = smallimagedata.w + smallimagedata.pos.l;
 smallimagedata.pos.b = smallimagedata.h + smallimagedata.pos.t;

 //per sicurezza setto l'altezza e la width dell'href
 a.height(smallimagedata.h);
 a.width(smallimagedata.w);


 //PRELOAD IMAGES
 if(settings.preloadImages)
 {
 largeimage.loadimage();
 }



 };



 return this;
 };



 //Lens
 function Lens()
 {


 //creating element and adding class
 this.node = document.createElement("div");
 $(this.node).addClass('jqZoomPup');

 this.node.onerror = function() {
 $( lens.node ).remove();
 lens = new Lens();
 lens.activate() ;
 };




 //funzione privata per il caricamento dello zoom
 this.loadlens = function()
 {


 switch(settings.zoomType)
 {
 case 'reverse':
 this.image = new Image();
 this.image.src = smallimage.node.src; // fires off async
 this.node.appendChild( this.image );
 $( this.node ).css({'opacity' : 1});
 break;
 case 'innerzoom':

 this.image = new Image();
 this.image.src = largeimage.node.src; // fires off async
 this.node.appendChild( this.image );
 $( this.node ).css({'opacity' : 1});
 break
 default:
 break;
 }



 switch(settings.zoomType)
 {
 case 'innerzoom':
 lensdata.w = smallimagedata.w;
 lensdata.h = smallimagedata.h;
 break;
 default:
 lensdata.w = (settings.zoomWidth)/scale.x;
 lensdata.h = (settings.zoomHeight)/scale.y;
 break;
 }

 $( this.node ).css({
 width: lensdata.w + 'px',
 height: lensdata.h + 'px',
 position: 'absolute',
 /*cursor: 'crosshair',*/
 display: 'none',
 //border: '1px solid blue'
 borderWidth: 1+'px'
 });
 a.append(this.node);
 }
 return this;
 };

 Lens.prototype.activate = function()
 {
 //carico la lente
 this.loadlens();

 switch(settings.zoomType)
 {
 case 'reverse':
 img.css({'opacity' : settings.imageOpacity});

 (settings.alwaysOn) ? lens.center() : lens.setposition(null);
 //lens.center();
 //bindo ad a il mousemove della lente
 a.bind( 'mousemove', function(e)
 {
 mousepos.x = e.pageX;
 mousepos.y = e.pageY;
 lens.setposition( e );
 });
 break;
 case 'innerzoom':

 // lens = new Lens();
 // lens.activate();

 $( this.node ).css({top : 0 ,left: 0});
 if(settings.title)
 {
 ZoomTitleObj.loadtitle();
 }

 largeimage.setcenter();

 a.bind( 'mousemove', function(e)
 {
 mousepos.x = e.pageX;
 mousepos.y = e.pageY;
 largeimage.setinner( e );

 /*if(settings.zoomType == 'innerzoom' && running)
 {
 $(a).mousemove(function(){
 if($('div.jqZoomPup').length <= 0)
 {
 lens = new Lens();
 lens.activate();
 }
 });
 }*/

 /*if($('div.jqZoomPup').length <= 0)
 {
 lens = new Lens();
 lens.activate();
 }*/

 });
 break;
 default:
 /*$(document).mousemove(function(e){
 if(isMouseDown && dragstatus != false){
 lens.setposition( e );
 }
 });
 lens.center()


 dragstatus = 'on'
 $(document).mouseup(function(e){
 if(isMouseDown && dragstatus != false){
 isMouseDown = false;
 dragstatus = false;

 }
 });

 $(this.node).mousedown(function(e){
 $('div.jqZoomPup').css("cursor", "move");
 $(this.node).css("position", "absolute");

 // set z-index
 $(this.node).css("z-index", parseInt( new Date().getTime()/1000 ));
 if($.browser.safari)
 {
 $(a).css("cursor", "move");
 }
 isMouseDown = true;
 dragstatus = 'on';
 lens.setposition( e );
 });
 */


 (settings.alwaysOn) ? lens.center() : lens.setposition(null);

 //bindo ad a il mousemove della lente
 $(a).bind( 'mousemove', function(e)
 {

 mousepos.x = e.pageX;
 mousepos.y = e.pageY;
 lens.setposition( e );
 });

 break;
 }


 return this;
 };

 Lens.prototype.setposition = function( e)
 {


 if(e)
 {
 mousepos.x = e.pageX;
 mousepos.y = e.pageY;
 }

 if(firstime == 0)
 {
 var lensleft = (smallimagedata.w)/2 - (lensdata.w)/2 ;
 var lenstop = (smallimagedata.h)/2 - (lensdata.h)/2 ;
 //ADDED

 $('div.jqZoomPup').show()
 if(settings.lens)
 {
 this.node.style.visibility = 'visible';
 }
 else
 {
 this.node.style.visibility = 'hidden';
 $('div.jqZoomPup').hide();
 }
 //ADDED
 firstime = 1;

 }else
 {
 var lensleft = mousepos.x - smallimagedata.pos.l - (lensdata.w)/2 ;
 var lenstop = mousepos.y - smallimagedata.pos.t -(lensdata.h)/2 ;
 }


 //a sinistra
 if(overleft())
 {
 lensleft = 0 + bleft;
 }else
 //a destra
 if(overright())
 {
 if($.browser.msie)
 {
 lensleft = smallimagedata.w - lensdata.w + bleft + 1 ;
 }else
 {
 lensleft = smallimagedata.w - lensdata.w + bleft - 1 ;
 }


 }

 //in alto
 if(overtop())
 {
 lenstop = 0 + btop ;
 }else
 //sotto
 if(overbottom())
 {

 if($.browser.msie)
 {
 lenstop = smallimagedata.h - lensdata.h + btop + 1 ;
 }else
 {
 lenstop = smallimagedata.h - lensdata.h - 1 + btop ;
 }

 }
 lensleft = parseInt(lensleft);
 lenstop = parseInt(lenstop);

 //setto lo zoom ed un eventuale immagine al centro
 $('div.jqZoomPup',a).css({top: lenstop,left: lensleft });

 if(settings.zoomType == 'reverse')
 {
 $('div.jqZoomPup img',a).css({'position': 'absolute','top': -( lenstop - btop +1) ,'left': -(lensleft - bleft +1) });
 }

 this.node.style.left = lensleft + 'px';
 this.node.style.top = lenstop + 'px';

 //setto l'immagine grande
 largeimage.setposition();

 function overleft() {
 return mousepos.x - (lensdata.w +2*1)/2 - bleft < smallimagedata.pos.l;
 }

 function overright() {

 return mousepos.x + (lensdata.w + 2* 1)/2 > smallimagedata.pos.r + bleft ;
 }

 function overtop() {
 return mousepos.y - (lensdata.h + 2* 1)/2 - btop < smallimagedata.pos.t;
 }

 function overbottom() {
 return mousepos.y + (lensdata.h + 2* 1)/2 > smallimagedata.pos.b + btop;
 }

 return this;
 };


 //mostra la lente al centro dell'immagine
 Lens.prototype.center = function()
 {
 $('div.jqZoomPup',a).css('display','none');
 var lensleft = (smallimagedata.w)/2 - (lensdata.w)/2 ;
 var lenstop = (smallimagedata.h)/2 - (lensdata.h)/2;
 this.node.style.left = lensleft + 'px';
 this.node.style.top = lenstop + 'px';
 $('div.jqZoomPup',a).css({top: lenstop,left: lensleft });

 if(settings.zoomType == 'reverse')
 {
 /*if($.browser.safari){
 alert('safari');
 alert(2*bleft);
 $('div.jqZoomPup img',a).css({'position': 'absolute','top': -( lenstop - btop +1) ,'left': -(lensleft - 2*bleft) });
 }else
 {*/
 $('div.jqZoomPup img',a).css({'position': 'absolute','top': -(lenstop - btop + 1) ,'left': -( lensleft - bleft +1) });
 //}
 }

 largeimage.setposition();
 if($.browser.msie)
 {
 $('div.jqZoomPup',a).show();
 }else
 {
 setTimeout(function(){$('div.jqZoomPup').fadeIn('fast');},10);
 }
 };


 //ritorna l'offset
 Lens.prototype.getoffset = function() {
 var o = {};
 o.left = parseInt(this.node.style.left) ;
 o.top = parseInt(this.node.style.top) ;
 return o;
 };

 //rimuove la lente
 Lens.prototype.remove = function()
 {

 if(settings.zoomType == 'innerzoom')
 {
 $('div.jqZoomPup',a).fadeOut('fast',function(){/*$('div.jqZoomPup img').remove();*/$(this).remove();});
 }else
 {
 //$('div.jqZoomPup img').remove();
 $('div.jqZoomPup',a).remove();
 }
 };

 Lens.prototype.findborder = function()
 {
 var bordertop = '';
 bordertop = $('div.jqZoomPup').css('borderTop');
 //alert(bordertop);
 lensbtop = '';
 var borderleft = '';
 borderleft = $('div.jqZoomPup').css('borderLeft');
 lensbleft = '';
 if($.browser.msie)
 {
 var temp = bordertop.split(' ');

 bordertop = temp[1];
 var temp = borderleft.split(' ');
 borderleft = temp[1];
 }

 if(bordertop)
 {
 for(i=0;i<3;i++)
 {
 var x = [];
 x = bordertop.substr(i,1);

 if(isNaN(x) == false)
 {
 lensbtop = lensbtop +''+ bordertop.substr(i,1);
 }else
 {
 break;
 }
 }
 }

 if(borderleft)
 {
 for(i=0;i<3;i++)
 {
 if(!isNaN(borderleft.substr(i,1)))
 {
 lensbleft = lensbleft + borderleft.substr(i,1)
 }else
 {
 break;
 }
 }
 }


 lensbtop = (lensbtop.length > 0) ? eval(lensbtop) : 0;
 lensbleft = (lensbleft.length > 0) ? eval(lensbleft) : 0;
 }

 //LARGEIMAGE
 function Largeimage( url )
 {
 this.url = url;
 this.node = new Image();

 /*if(settings.preloadImages)
 {
 preload.push(new Image());
 preload.slice(-1).src = url ;
 }*/

 this.loadimage = function()
 {


 if(!this.node)
 this.node = new Image();

 this.node.style.position = 'absolute';
 this.node.style.display = 'none';
 this.node.style.left = '-5000px';
 this.node.style.top = '10px';
 loader = new Loader();

 if(settings.showPreload && !preloadshow)
 {
 loader.show();
 preloadshow = true;
 }

 document.body.appendChild( this.node );
 this.node.src = this.url; // fires off async
 }

 this.node.onload = function()
 {
 this.style.display = 'block';
 var w = Math.round($(this).width());
 var h = Math.round($(this).height());

 this.style.display = 'none';

 //setting scale
 scale.x = (w / smallimagedata.w);
 scale.y = (h / smallimagedata.h);





 if($('div.preload').length > 0)
 {
 $('div.preload').remove();
 }

 largeimageloaded = true;

 if(settings.zoomType != 'innerzoom' && running){
 stage = new Stage();
 stage.activate();
 }

 if(running)
 {
 //alert('in');
 lens = new Lens();

 lens.activate() ;

 }
 //la attivo

 if($('div.preload').length > 0)
 {
 $('div.preload').remove();
 }
 }
 return this;
 }


 Largeimage.prototype.setposition = function()
 {
 this.node.style.left = Math.ceil( - scale.x * parseInt(lens.getoffset().left) + bleft) + 'px';
 this.node.style.top = Math.ceil( - scale.y * parseInt(lens.getoffset().top) +btop) + 'px';
 };

 //setto la posizione dell'immagine grande nel caso di innerzoom
 Largeimage.prototype.setinner = function(e) {
 this.node.style.left = Math.ceil( - scale.x * Math.abs(e.pageX - smallimagedata.pos.l)) + 'px';
 this.node.style.top = Math.ceil( - scale.y * Math.abs(e.pageY - smallimagedata.pos.t)) + 'px';
 $('div.jqZoomPup img',a).css({'position': 'absolute','top': this.node.style.top,'left': this.node.style.left });
 };


 Largeimage.prototype.setcenter = function() {
 this.node.style.left = Math.ceil(- scale.x * Math.abs((smallimagedata.w)/2)) + 'px';
 this.node.style.top = Math.ceil( - scale.y * Math.abs((smallimagedata.h)/2)) + 'px';


 $('div.jqZoomPup img',a).css({'position': 'absolute','top': this.node.style.top,'left': this.node.style.left });
 };


 //STAGE
 function Stage()
 {

 var leftpos = smallimagedata.pos.l;
 var toppos = smallimagedata.pos.t;
 //creating element and class
 this.node = document.createElement("div");
 $(this.node).addClass('jqZoomWindow');

 $( this.node )
 .css({
 position: 'absolute',
 width: Math.round(settings.zoomWidth) + 'px',
 height: Math.round(settings.zoomHeight) + 'px',
 display: 'none',
 zIndex: 10000,
 overflow: 'hidden'
 });

 //fa il positionamento
 switch(settings.position)
 {
 case "right":

 leftpos = (smallimagedata.pos.r + Math.abs(settings.xOffset) + settings.zoomWidth < screen.width)
 ? (smallimagedata.pos.l + smallimagedata.w + Math.abs(settings.xOffset))
 : (smallimagedata.pos.l - settings.zoomWidth - Math.abs(settings.xOffset));

 topwindow = smallimagedata.pos.t + settings.yOffset + settings.zoomHeight;
 toppos = (topwindow < screen.height && topwindow > 0)
 ? smallimagedata.pos.t + settings.yOffset
 : smallimagedata.pos.t;

 break;
 case "left":

 leftpos = (smallimagedata.pos.l - Math.abs(settings.xOffset) - settings.zoomWidth > 0)
 ? (smallimagedata.pos.l - Math.abs(settings.xOffset) - settings.zoomWidth)
 : (smallimagedata.pos.l + smallimagedata.w + Math.abs(settings.xOffset));

 topwindow = smallimagedata.pos.t + settings.yOffset + settings.zoomHeight;
 toppos = (topwindow < screen.height && topwindow > 0)
 ? smallimagedata.pos.t + settings.yOffset
 : smallimagedata.pos.t;

 break;
 case "top":

 toppos = (smallimagedata.pos.t - Math.abs(settings.yOffset) - settings.zoomHeight > 0)
 ? (smallimagedata.pos.t - Math.abs(settings.yOffset) - settings.zoomHeight)
 : (smallimagedata.pos.t + smallimagedata.h + Math.abs(settings.yOffset));


 leftwindow = smallimagedata.pos.l + settings.xOffset + settings.zoomWidth;
 leftpos = (leftwindow < screen.width && leftwindow > 0)
 ? smallimagedata.pos.l + settings.xOffset
 : smallimagedata.pos.l;

 break;
 case "bottom":


 toppos = (smallimagedata.pos.b + Math.abs(settings.yOffset) + settings.zoomHeight < $('body').height())
 ? (smallimagedata.pos.b + Math.abs(settings.yOffset))
 : (smallimagedata.pos.t - settings.zoomHeight - Math.abs(settings.yOffset));


 leftwindow = smallimagedata.pos.l + settings.xOffset + settings.zoomWidth;
 leftpos = (leftwindow < screen.width && leftwindow > 0)
 ? smallimagedata.pos.l + settings.xOffset
 : smallimagedata.pos.l;

 break;
 default:

 leftpos = (smallimagedata.pos.l + smallimagedata.w + settings.xOffset + settings.zoomWidth < screen.width)
 ? (smallimagedata.pos.l + smallimagedata.w + Math.abs(settings.xOffset))
 : (smallimagedata.pos.l - settings.zoomWidth - Math.abs(settings.xOffset));

 toppos = (smallimagedata.pos.b + Math.abs(settings.yOffset) + settings.zoomHeight < screen.height)
 ? (smallimagedata.pos.b + Math.abs(settings.yOffset))
 : (smallimagedata.pos.t - settings.zoomHeight - Math.abs(settings.yOffset));

 break;
 }

 this.node.style.left = leftpos + 'px';
 this.node.style.top = toppos + 'px';
 return this;
 }


 Stage.prototype.activate = function()
 {

 if ( !this.node.firstChild )
 this.node.appendChild( largeimage.node );


 if(settings.title)
 {
 ZoomTitleObj.loadtitle();
 }



 document.body.appendChild( this.node );


 switch(settings.showEffect)
 {
 case 'show':
 $(this.node).show();
 break;
 case 'fadein':
 $(this.node).fadeIn(settings.fadeinSpeed);
 break;
 default:
 $(this.node).show();
 break;
 }

 $(this.node).show();

 if ($.browser.msie && $.browser.version < 7) {
 this.ieframe = $('<iframe class="zoom_ieframe" frameborder="0" src="#"></iframe>')
 .css({ position: "absolute", left:this.node.style.left,top:this.node.style.top,zIndex: 99,width:settings.zoomWidth,height:settings.zoomHeight })
 .insertBefore(this.node);
 };


 largeimage.node.style.display = 'block';
 }

 Stage.prototype.remove = function() {
 switch(settings.hideEffect)
 {
 case 'hide':
 $('.jqZoomWindow').remove();
 break;
 case 'fadeout':
 $('.jqZoomWindow').fadeOut(settings.fadeoutSpeed);
 break;
 default:
 $('.jqZoomWindow').remove();
 break;
 }
 }

 function zoomTitle()
 {

 this.node = jQuery('<div />')
 .addClass('jqZoomTitle')
 .html('' + ZoomTitle +'');

 this.loadtitle = function()
 {
 if(settings.zoomType == 'innerzoom')
 {
 $(this.node)
 .css({position: 'absolute',
 top: smallimagedata.pos.b +3,
 left: (smallimagedata.pos.l+1),
 width:smallimagedata.w
 })
 .appendTo('body');
 }else
 {
 $(this.node).appendTo(stage.node);
 }
 };
 }

 zoomTitle.prototype.remove = function() {
 $('.jqZoomTitle').remove();
 }


 function Loader()
 {

 this.node = document.createElement("div");
 $(this.node).addClass('preload');
 $(this.node).html(settings.preloadText);//appendo il testo

 $(this.node )
 .appendTo("body")
 .css('visibility','hidden');



 this.show = function()
 {
 switch(settings.preloadPosition)
 {
 case 'center':
 loadertop = smallimagedata.pos.t + (smallimagedata.h - $(this.node ).height())/2;
 loaderleft = smallimagedata.pos.l + (smallimagedata.w - $(this.node ).width())/2;
 break;
 default:
 var loaderoffset = this.getoffset();
 loadertop = !isNaN(loaderoffset.top) ? smallimagedata.pos.t + loaderoffset.top : smallimagedata.pos.t + 0;
 loaderleft = !isNaN(loaderoffset.left) ? smallimagedata.pos.l + loaderoffset.left : smallimagedata.pos.l + 0;
 break;
 }

 //setting position
 $(this.node).css({
 top: loadertop ,
 left: loaderleft ,
 position: 'absolute',
 visibility:'visible'
 });
 }
 return this;
 }

 Loader.prototype.getoffset = function()
 {
 var o = null;
 o = $('div.preload').offset();
 return o;
 }

 });
 }
})(jQuery);
jQuery.noConflict();

 function trim(stringa)
 {
 while (stringa.substring(0,1) == ' '){
 stringa = stringa.substring(1, stringa.length);
 }
 while (stringa.substring(stringa.length-1, stringa.length) == ' '){
 stringa = stringa.substring(0,stringa.length-1);
 }
 return stringa;
 }
/**
 * tools.expose 1.0.3 - Make HTML elements stand out
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/expose.html
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 *
 * Launch : June 2008
 * Date: 2009-06-12 11:02:45 +0000 (Fri, 12 Jun 2009)
 * Revision: 1911 
 */
(function($) { 

 // static constructs
 $.tools = $.tools || {version: {}};
 
 $.tools.version.expose = '1.0.3';
 
 function getWidth() {
 
 var w = $(window).width();
 
 if ($.browser.mozilla) { return w; }
 
 var x;
 
 if (window.innerHeight && window.scrollMaxY) {
 x = window.innerWidth + window.scrollMaxX; 
 
 // all but Explorer Mac 
 } else if (document.body.scrollHeight > document.body.offsetHeight) { 
 x = document.body.scrollWidth;
 
 } else {
 x = document.body.offsetWidth;
 }
 
 return x < w ? x + 20 : w; 
 }
 
 function Expose(els, opts) { 
 
 // private variables
 var self = this, mask = null, loaded = false, origIndex = 0; 
 
 // generic binding function
 function bind(name, fn) {
 $(self).bind(name, function(e, args) {
 if (fn && fn.call(this) === false && args) {
 args.proceed = false; 
 } 
 }); 
 return self;
 } 
 
 // bind all callbacks from configuration
 $.each(opts, function(name, fn) {
 if ($.isFunction(fn)) { bind(name, fn); }
 }); 
 

 // adjust mask size when window is resized (or firebug is toggled)
 $(window).bind("resize.expose", function() {
 if (mask) {
 mask.css({ width: getWidth(), height: $(document).height()});
 }
 }); 
 
 
 // public methods
 $.extend(this, {
 
 getMask: function() {
 return mask; 
 },
 
 getExposed: function() {
 return els; 
 },
 
 getConf: function() {
 return opts; 
 }, 
 
 isLoaded: function() {
 return loaded; 
 },
 
 load: function() { 
 
 // already loaded ?
 if (loaded) { return self; }
 
 origIndex = els.eq(0).css("zIndex"); 
 
 // find existing mask
 if (opts.maskId) { mask = $("#" + opts.maskId); }
 
 if (!mask || !mask.length) {
 
 mask = $('<div/>').css({ 
 position:'absolute', 
 top:0, 
 left:0,
 width: getWidth(),
 height: $(document).height(),
 display:'none',
 opacity: 0, 
 zIndex:opts.zIndex 
 }); 
 
 // id
 if (opts.maskId) { mask.attr("id", opts.maskId); } 
 
 $("body").append(mask); 
 
 
 // background color 
 var bg = mask.css("backgroundColor");
 
 if (!bg || bg == 'transparent' || bg == 'rgba(0, 0, 0, 0)') {
 mask.css("backgroundColor", opts.color); 
 } 
 
 // esc button
 if (opts.closeOnEsc) { 
 $(document).bind("keydown.unexpose", function(evt) { 
 if (evt.keyCode == 27) {
 self.close(); 
 } 
 }); 
 }
 
 // mask click closes
 if (opts.closeOnClick) {
 mask.bind("click.unexpose", function() {
 self.close(); 
 }); 
 } 
 } 
 
 // possibility to cancel click action
 var p = {proceed: true};
 $(self).trigger("onBeforeLoad", p); 
 if (!p.proceed) { return self; }
 
 
 // make sure element is positioned absolutely or relatively
 $.each(els, function() {
 var el = $(this);
 if (!/relative|absolute|fixed/i.test(el.css("position"))) {
 el.css("position", "relative"); 
 } 
 });
 
 // make elements sit on top of the mask
 els.css({zIndex:opts.zIndex + 1}); 

 
 // reveal mask
 var h = mask.height();
 
 if (!this.isLoaded()) { 
 mask.css({opacity: 0, display: 'block'}).fadeTo(opts.loadSpeed, opts.opacity, function() {
 
 // sometimes IE6 misses the height property on fadeTo method
 if (mask.height() != h) { mask.css("height", h); } 
 $(self).trigger("onLoad"); 
 }); 
 }
 
 loaded = true; 
 return self;
 }, 
 
 
 close: function() {
 
 if (!loaded) { return self; } 
 
 var p = {proceed: true};
 $(self).trigger("onBeforeClose", p); 
 if (p.proceed === false) { return self; }
 
 mask.fadeOut(opts.closeSpeed, function() {
 $(self).trigger("onClose");
 els.css({zIndex: $.browser.msie ? origIndex : null});
 }); 
 
 loaded = false;
 return self; 
 },
 
 
 onBeforeLoad: function(fn) {
 return bind("onBeforeLoad", fn); 
 },
 
 onLoad: function(fn) {
 return bind("onLoad", fn); 
 },
 
 onBeforeClose: function(fn) {
 return bind("onBeforeClose", fn); 
 },
 
 onClose: function(fn) {
 return bind("onClose", fn); 
 } 
 
 });

 }
 
 
 // jQuery plugin implementation
 $.fn.expose = function(conf) {
 
 var el = this.eq(typeof conf == 'number' ? conf : 0).data("expose");
 if (el) { return el; }
 
 var opts = {
 /*
 - onBeforeLoad 
 - onLoad
 - onBeforeClose 
 - onClose 
 */ 

 // mask settings
 maskId: null,
 loadSpeed: 'slow',
 closeSpeed: 'fast',
 closeOnClick: true,
 closeOnEsc: true,
 
 // css settings
 zIndex: 9998,
 opacity: 0.8,
 color: '#456',
 api: false
 };
 
 if (typeof conf == 'string') {
 conf = {color: conf};
 }
 
 $.extend(opts, conf); 

 // construct exposes
 this.each(function() {
 el = new Expose($(this), opts);
 $(this).data("expose", el); 
 }); 
 
 return opts.api ? el: this; 
 }; 


})(jQuery);

ajax_loader = '/js/jquery/ajax-loader.gif';
ajax_loader_html = '<img src="'+ ajax_loader +'" alt="loader" class="loader" />';

jQuery(document).ready(function(){
 
 // ADD TO
 /*jQuery("p.add-to a").click(function(){
 url = jQuery(this).attr("href");
 text = jQuery(this).parent().html(); 
 jQuery(this).parent().html(ajax_loader_html);
 
 jQuery.ajax({
 type : "GET",
 url : url,
 success : function(msg){
 //last_html = jQuery("ol#compare-items li").html();
 //jQuery("ol#compare-items").append("<li>"+last_html+"<li>");
 //<a href="http://autoplaza/index.php/catalog/product_compare/add/product/1/r64/aHR0cDovL2F1dG9wbGF6YS9pbmRleC5waHAvbnVldm9zLmh0bWw,/">Comparar</a>
 li_html = '<li class="block-compare-item last odd">';
 li_html += '<input class="compare-item-id" type="hiden" value="">';
 li_html += '<a class="">';
 li_html += '<a>';
 li_html += '</li>'; 
 jQuery(".loader").parent().html(text);
 }
 });
 return false;
 });*/
 
 // HINT
 jQuery(".jq_hint").hint();
 
 // ZOOM
 var jqzoom_options = {
 zoomWidth: 245,
 zoomHeight: 245,
 showEffect: 'show',
 hideEffect: 'fadeout',
 fadeoutSpeed: 'medium',
 title: false,
 position: 'right',
 preloadText: 'Cargando vista previa'
 }
 jQuery(".jqzoom").jqzoom(jqzoom_options);
 jQuery('.lightbox').click(function(){ 
 jQuery('.jqzoom').attr('href',jQuery(this).children(':first-child').attr('rel'));
 jQuery('.jqzoom img').attr('src',jQuery(this).attr('href'));
 return false;
 });

 // TABS HOME
 jQuery('.advanced-search-toggle-nuevos').click(function() {
 jQuery('.advanced-search-hidden-nuevos').slideToggle();
 });
 
 jQuery('.advanced-search-toggle-usados').click(function() {
 jQuery('.advanced-search-hidden-usados').slideToggle();
 });

 
 jQuery("fieldset.advanced-search").idTabs(function(id,list,set){
 jQuery("a",set).removeClass("selected").filter("[href='"+id+"']",set).addClass("selected");
 for(i in list)
 jQuery(list[i]).hide();
 jQuery(id).fadeIn();
 return false;
 });
 
 // COMPARE HOME
 jQuery("select[name^='year_']").change(function(){
 name = jQuery(this).attr("name")
 id = name.substr(name.length-1,name.length);
 year = jQuery(this).val();
 loadMarca(id, year);
 });
 
 jQuery("select[name^='marca_']").change(function(){
 name = jQuery(this).attr("name")
 id = name.substr(name.length-1,name.length);
 year = jQuery("#year_"+id).val();
 marca = jQuery(this).val();
 loadModelo(id, year, marca);
 });
 
 jQuery("select[name^='modelo_']").change(function(){
 name = jQuery(this).attr("name")
 id = name.substr(name.length-1,name.length);
 if (id < 3)
 {
 selected = jQuery(this).val();
 if (selected) {
 jQuery("#year_"+(1*id+1)).removeAttr("disabled");
 }
 else {
 jQuery("#year_"+(id+1)).attr("disabled","disabled");

 }
 }
 })
 
 
 jQuery("form#compare_home").submit(function(){
 jQuery(".loader_compare").html(ajax_loader_html);
 if (jQuery("#modelo_1").children().size()>1 && jQuery("#modelo_2").children().size()>1)
 {
 compare_value = jQuery("#modelo_1").val()+","+jQuery("#modelo_2").val();
 if (jQuery("#modelo_3").children().size()>1) {
 compare_value += ","+jQuery("#modelo_3").val();
 }
 
 jQuery.ajax({
 type : "GET",
 url: '/catalog/product_compare/clear/r64/',
 success : function(){
 url = '/catalog/product_compare/index/items/'+compare_value+'/r64/';
 location.href = url; 
 }
 });
 
 return false;
 
 }
 return false;
 });
 
 // VALIDATE PUBLISH CAR
 jQuery("#publishcarForm").submit(function(){
 if (jQuery("#modelo").val()=="") { alert("Debe ingresar el modelo del auto"); jQuery("#modelo").focus(); return false; }
 if (jQuery("#kilometraje").val()=="") { alert("Debe ingresar el kilometraje del auto"); jQuery("#kilometraje").focus(); return false; }
 if (jQuery("#anho").val()=="") { alert("Debe ingresar el año del auto"); jQuery("#anho").focus(); return false; }
 if (jQuery("#color").val()=="") { alert("Debe ingresar el color del auto"); jQuery("#color").focus(); return false; }
 if (jQuery("#modelo").val()=="") { alert("Debe ingresar el modelo del auto"); jQuery("#modelo").focus(); return false; }
 if (jQuery("#cilindrada").val()=="") { alert("Debe ingresar la cilindrada del auto"); jQuery("#cilindrada").focus(); return false; }
 if (jQuery("#description").val()=="") { alert("Debe ingresar la descripcion del auto"); jQuery("#description").focus(); return false; }
 });
 
 // COTIZAR
 jQuery(".to-quote").click(function(){
 jQuery('.product-collateral').show();
 jQuery.scrollTo('.product-collateral', 600);
 jQuery('#quote_msg').focus();
 });
 
 jQuery('#quote-comment *').tooltip({
 showURL: false,
 track: true,
 delay: 200,
 extraClass: "tooltip-right",
 positionLeft: true
 });
 
 // FOOTER COMMENTS
// jQuery('#footer-comments').innerfade({ animationtype: 'fade', speed: 1500, timeout: 4500, type: 'random', containerheight: '1em' });
 
 jQuery('#myFlash').flash({ 
 src: '../swf/MarquesinaMarcas.swf',
 width: "100%",
 height: "40",
 flashvars: { ldm: "../xml/marcas.xml"}
 },
 {
 version: 10
 });
 
 //Flash Resize Setup
 jQuery('#myFlash').flashResize({
 minWidth: 960,
 minHeight: 40
 });

 
});

function loadMarca(id, year)
{
 // COMPARE ITEMS HOME
 jQuery(".loader_"+id).html(ajax_loader_html);
 if (year) {
 url = "/publishcar/compare/?get=marcas&year="+year;
 jQuery.getJSON(url, function(data){
 if (data!="ERROR"){
 jQuery("#marca_"+id).removeAttr("disabled").empty().append("<option>Seleccione Marca...</option>");
 jQuery.each(data, function(i, marca){
 jQuery("#marca_"+id).append("<option value=\""+marca.value+"\">"+marca.label+"</option>");
 });
 } else {
 alert('No hay marcas...');
 jQuery("#marca_"+id).attr("disabled","disabled");
 }
 jQuery(".loader_"+id).html("&nbsp;");
 });
 
 }
}


function loadModelo(id, year, marca)
{
 // COMPARE ITEMS HOME
 jQuery(".loader_"+id).html(ajax_loader_html);
 if (year) {
 url = "/publishcar/compare/?get=modelos&year="+year+"&marca="+marca; 
 jQuery.getJSON(url, function(data){
 if (data!="ERROR"){
 jQuery("#modelo_"+id).removeAttr("disabled").empty().append("<option>Seleccione Modelo...</option>");
 jQuery.each(data, function(i, modelo){
 jQuery("#modelo_"+id).append("<option value=\""+modelo.product_id+"\">"+modelo.name+"</option>");
 });
 } else {
 alert('No hay modelos...');
 jQuery("#modelo_"+id).attr("disabled","disabled");
 }
 jQuery(".loader_"+id).html("&nbsp;");
 });
 
 }
}
/*
 * jquery.tools 1.1.2 - The missing UI library for the Web
 * 
 * [tools.tabs-1.0.4, tools.tooltip-1.1.3, tools.scrollable-1.1.2, tools.overlay-1.1.2, tools.expose-1.0.5]
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 * 
 * -----
 * 
 * File generated: Wed Apr 07 09:40:56 GMT 2010
 */
(function(d){d.tools=d.tools||{};d.tools.tabs={version:"1.0.4",conf:{tabs:"a",current:"current",onBeforeClick:null,onClick:null,effect:"default",initialIndex:0,event:"click",api:false,rotate:false},addEffect:function(e,f){c[e]=f}};var c={"default":function(f,e){this.getPanes().hide().eq(f).show();e.call()},fade:function(g,e){var f=this.getConf(),j=f.fadeOutSpeed,h=this.getPanes();if(j){h.fadeOut(j)}else{h.hide()}h.eq(g).fadeIn(f.fadeInSpeed,e)},slide:function(f,e){this.getPanes().slideUp(200);this.getPanes().eq(f).slideDown(400,e)},ajax:function(f,e){this.getPanes().eq(0).load(this.getTabs().eq(f).attr("href"),e)}};var b;d.tools.tabs.addEffect("horizontal",function(f,e){if(!b){b=this.getPanes().eq(0).width()}this.getCurrentPane().animate({width:0},function(){d(this).hide()});this.getPanes().eq(f).animate({width:b},function(){d(this).show();e.call()})});function a(g,h,f){var e=this,j=d(this),i;d.each(f,function(k,l){if(d.isFunction(l)){j.bind(k,l)}});d.extend(this,{click:function(k,n){var o=e.getCurrentPane();var l=g.eq(k);if(typeof k=="string"&&k.replace("#","")){l=g.filter("[href*="+k.replace("#","")+"]");k=Math.max(g.index(l),0)}if(f.rotate){var m=g.length-1;if(k<0){return e.click(m,n)}if(k>m){return e.click(0,n)}}if(!l.length){if(i>=0){return e}k=f.initialIndex;l=g.eq(k)}if(k===i){return e}n=n||d.Event();n.type="onBeforeClick";j.trigger(n,[k]);if(n.isDefaultPrevented()){return}c[f.effect].call(e,k,function(){n.type="onClick";j.trigger(n,[k])});n.type="onStart";j.trigger(n,[k]);if(n.isDefaultPrevented()){return}i=k;g.removeClass(f.current);l.addClass(f.current);return e},getConf:function(){return f},getTabs:function(){return g},getPanes:function(){return h},getCurrentPane:function(){return h.eq(i)},getCurrentTab:function(){return g.eq(i)},getIndex:function(){return i},next:function(){return e.click(i+1)},prev:function(){return e.click(i-1)},bind:function(k,l){j.bind(k,l);return e},onBeforeClick:function(k){return this.bind("onBeforeClick",k)},onClick:function(k){return this.bind("onClick",k)},unbind:function(k){j.unbind(k);return e}});g.each(function(k){d(this).bind(f.event,function(l){e.click(k,l);return false})});if(location.hash){e.click(location.hash)}else{if(f.initialIndex===0||f.initialIndex>0){e.click(f.initialIndex)}}h.find("a[href^=#]").click(function(k){e.click(d(this).attr("href"),k)})}d.fn.tabs=function(i,f){var g=this.eq(typeof f=="number"?f:0).data("tabs");if(g){return g}if(d.isFunction(f)){f={onBeforeClick:f}}var h=d.extend({},d.tools.tabs.conf),e=this.length;f=d.extend(h,f);this.each(function(l){var j=d(this);var k=j.find(f.tabs);if(!k.length){k=j.children()}var m=i.jquery?i:j.children(i);if(!m.length){m=e==1?d(i):j.parent().find(i)}g=new a(k,m,f);j.data("tabs",g)});return f.api?g:this}})(jQuery);
(function(c){var d=[];c.tools=c.tools||{};c.tools.tooltip={version:"1.1.3",conf:{effect:"toggle",fadeOutSpeed:"fast",tip:null,predelay:0,delay:30,opacity:1,lazy:undefined,position:["top","center"],offset:[0,0],cancelDefault:true,relative:false,oneInstance:true,events:{def:"mouseover,mouseout",input:"focus,blur",widget:"focus mouseover,blur mouseout",tooltip:"mouseover,mouseout"},api:false},addEffect:function(e,g,f){b[e]=[g,f]}};var b={toggle:[function(e){var f=this.getConf(),g=this.getTip(),h=f.opacity;if(h<1){g.css({opacity:h})}g.show();e.call()},function(e){this.getTip().hide();e.call()}],fade:[function(e){this.getTip().fadeIn(this.getConf().fadeInSpeed,e)},function(e){this.getTip().fadeOut(this.getConf().fadeOutSpeed,e)}]};function a(f,g){var p=this,k=c(this);f.data("tooltip",p);var l=f.next();if(g.tip){l=c(g.tip);if(l.length>1){l=f.nextAll(g.tip).eq(0);if(!l.length){l=f.parent().nextAll(g.tip).eq(0)}}}function o(u){var t=g.relative?f.position().top:f.offset().top,s=g.relative?f.position().left:f.offset().left,v=g.position[0];t-=l.outerHeight()-g.offset[0];s+=f.outerWidth()+g.offset[1];var q=l.outerHeight()+f.outerHeight();if(v=="center"){t+=q/2}if(v=="bottom"){t+=q}v=g.position[1];var r=l.outerWidth()+f.outerWidth();if(v=="center"){s-=r/2}if(v=="left"){s-=r}return{top:t,left:s}}var i=f.is(":input"),e=i&&f.is(":checkbox, :radio, select, :button"),h=f.attr("type"),n=g.events[h]||g.events[i?(e?"widget":"input"):"def"];n=n.split(/,\s*/);if(n.length!=2){throw"Tooltip: bad events configuration for "+h}f.bind(n[0],function(r){if(g.oneInstance){c.each(d,function(){this.hide()})}var q=l.data("trigger");if(q&&q[0]!=this){l.hide().stop(true,true)}r.target=this;p.show(r);n=g.events.tooltip.split(/,\s*/);l.bind(n[0],function(){p.show(r)});if(n[1]){l.bind(n[1],function(){p.hide(r)})}});f.bind(n[1],function(q){p.hide(q)});if(!c.browser.msie&&!i&&!g.predelay){f.mousemove(function(){if(!p.isShown()){f.triggerHandler("mouseover")}})}if(g.opacity<1){l.css("opacity",g.opacity)}var m=0,j=f.attr("title");if(j&&g.cancelDefault){f.removeAttr("title");f.data("title",j)}c.extend(p,{show:function(r){if(r){f=c(r.target)}clearTimeout(l.data("timer"));if(l.is(":animated")||l.is(":visible")){return p}function q(){l.data("trigger",f);var t=o(r);if(g.tip&&j){l.html(f.data("title"))}r=r||c.Event();r.type="onBeforeShow";k.trigger(r,[t]);if(r.isDefaultPrevented()){return p}t=o(r);l.css({position:"absolute",top:t.top,left:t.left});var s=b[g.effect];if(!s){throw'Nonexistent effect "'+g.effect+'"'}s[0].call(p,function(){r.type="onShow";k.trigger(r)})}if(g.predelay){clearTimeout(m);m=setTimeout(q,g.predelay)}else{q()}return p},hide:function(r){clearTimeout(l.data("timer"));clearTimeout(m);if(!l.is(":visible")){return}function q(){r=r||c.Event();r.type="onBeforeHide";k.trigger(r);if(r.isDefaultPrevented()){return}b[g.effect][1].call(p,function(){r.type="onHide";k.trigger(r)})}if(g.delay&&r){l.data("timer",setTimeout(q,g.delay))}else{q()}return p},isShown:function(){return l.is(":visible, :animated")},getConf:function(){return g},getTip:function(){return l},getTrigger:function(){return f},bind:function(q,r){k.bind(q,r);return p},onHide:function(q){return this.bind("onHide",q)},onBeforeShow:function(q){return this.bind("onBeforeShow",q)},onShow:function(q){return this.bind("onShow",q)},onBeforeHide:function(q){return this.bind("onBeforeHide",q)},unbind:function(q){k.unbind(q);return p}});c.each(g,function(q,r){if(c.isFunction(r)){p.bind(q,r)}})}c.prototype.tooltip=function(e){var f=this.eq(typeof e=="number"?e:0).data("tooltip");if(f){return f}var g=c.extend(true,{},c.tools.tooltip.conf);if(c.isFunction(e)){e={onBeforeShow:e}}else{if(typeof e=="string"){e={tip:e}}}e=c.extend(true,g,e);if(typeof e.position=="string"){e.position=e.position.split(/,?\s/)}if(e.lazy!==false&&(e.lazy===true||this.length>20)){this.one("mouseover",function(h){f=new a(c(this),e);f.show(h);d.push(f)})}else{this.each(function(){f=new a(c(this),e);d.push(f)})}return e.api?f:this}})(jQuery);
(function(b){b.tools=b.tools||{};b.tools.scrollable={version:"1.1.2",conf:{size:5,vertical:false,speed:400,keyboard:true,keyboardSteps:null,disabledClass:"disabled",hoverClass:null,clickable:true,activeClass:"active",easing:"swing",loop:false,items:".items",item:null,prev:".prev",next:".next",prevPage:".prevPage",nextPage:".nextPage",api:false}};var c;function a(o,m){var r=this,p=b(this),d=!m.vertical,e=o.children(),k=0,i;if(!c){c=r}b.each(m,function(s,t){if(b.isFunction(t)){p.bind(s,t)}});if(e.length>1){e=b(m.items,o)}function l(t){var s=b(t);return m.globalNav?s:o.parent().find(t)}o.data("finder",l);var f=l(m.prev),h=l(m.next),g=l(m.prevPage),n=l(m.nextPage);b.extend(r,{getIndex:function(){return k},getClickIndex:function(){var s=r.getItems();return s.index(s.filter("."+m.activeClass))},getConf:function(){return m},getSize:function(){return r.getItems().size()},getPageAmount:function(){return Math.ceil(this.getSize()/m.size)},getPageIndex:function(){return Math.ceil(k/m.size)},getNaviButtons:function(){return f.add(h).add(g).add(n)},getRoot:function(){return o},getItemWrap:function(){return e},getItems:function(){return e.children(m.item)},getVisibleItems:function(){return r.getItems().slice(k,k+m.size)},seekTo:function(s,w,t){if(s<0){s=0}if(k===s){return r}if(b.isFunction(w)){t=w}if(s>r.getSize()-m.size){return m.loop?r.begin():this.end()}var u=r.getItems().eq(s);if(!u.length){return r}var v=b.Event("onBeforeSeek");p.trigger(v,[s]);if(v.isDefaultPrevented()){return r}if(w===undefined||b.isFunction(w)){w=m.speed}function x(){if(t){t.call(r,s)}p.trigger("onSeek",[s])}if(d){e.animate({left:-u.position().left},w,m.easing,x)}else{e.animate({top:-u.position().top},w,m.easing,x)}c=r;k=s;v=b.Event("onStart");p.trigger(v,[s]);if(v.isDefaultPrevented()){return r}f.add(g).toggleClass(m.disabledClass,s===0);h.add(n).toggleClass(m.disabledClass,s>=r.getSize()-m.size);return r},move:function(u,t,s){i=u>0;return this.seekTo(k+u,t,s)},next:function(t,s){return this.move(1,t,s)},prev:function(t,s){return this.move(-1,t,s)},movePage:function(w,v,u){i=w>0;var s=m.size*w;var t=k%m.size;if(t>0){s+=(w>0?-t:m.size-t)}return this.move(s,v,u)},prevPage:function(t,s){return this.movePage(-1,t,s)},nextPage:function(t,s){return this.movePage(1,t,s)},setPage:function(t,u,s){return this.seekTo(t*m.size,u,s)},begin:function(t,s){i=false;return this.seekTo(0,t,s)},end:function(t,s){i=true;var u=this.getSize()-m.size;return u>0?this.seekTo(u,t,s):r},reload:function(){p.trigger("onReload");return r},focus:function(){c=r;return r},click:function(u){var v=r.getItems().eq(u),s=m.activeClass,t=m.size;if(u<0||u>=r.getSize()){return r}if(t==1){if(m.loop){return r.next()}if(u===0||u==r.getSize()-1){i=(i===undefined)?true:!i}return i===false?r.prev():r.next()}if(t==2){if(u==k){u--}r.getItems().removeClass(s);v.addClass(s);return r.seekTo(u,time,fn)}if(!v.hasClass(s)){r.getItems().removeClass(s);v.addClass(s);var x=Math.floor(t/2);var w=u-x;if(w>r.getSize()-t){w=r.getSize()-t}if(w!==u){return r.seekTo(w)}}return r},bind:function(s,t){p.bind(s,t);return r},unbind:function(s){p.unbind(s);return r}});b.each("onBeforeSeek,onStart,onSeek,onReload".split(","),function(s,t){r[t]=function(u){return r.bind(t,u)}});f.addClass(m.disabledClass).click(function(){r.prev()});h.click(function(){r.next()});n.click(function(){r.nextPage()});if(r.getSize()<m.size){h.add(n).addClass(m.disabledClass)}g.addClass(m.disabledClass).click(function(){r.prevPage()});var j=m.hoverClass,q="keydown."+Math.random().toString().substring(10);r.onReload(function(){if(j){r.getItems().hover(function(){b(this).addClass(j)},function(){b(this).removeClass(j)})}if(m.clickable){r.getItems().each(function(s){b(this).unbind("click.scrollable").bind("click.scrollable",function(t){if(b(t.target).is("a")){return}return r.click(s)})})}if(m.keyboard){b(document).unbind(q).bind(q,function(t){if(t.altKey||t.ctrlKey){return}if(m.keyboard!="static"&&c!=r){return}var u=m.keyboardSteps;if(d&&(t.keyCode==37||t.keyCode==39)){r.move(t.keyCode==37?-u:u);return t.preventDefault()}if(!d&&(t.keyCode==38||t.keyCode==40)){r.move(t.keyCode==38?-u:u);return t.preventDefault()}return true})}else{b(document).unbind(q)}});r.reload()}b.fn.scrollable=function(d){var e=this.eq(typeof d=="number"?d:0).data("scrollable");if(e){return e}var f=b.extend({},b.tools.scrollable.conf);d=b.extend(f,d);d.keyboardSteps=d.keyboardSteps||d.size;this.each(function(){e=new a(b(this),d);b(this).data("scrollable",e)});return d.api?e:this}})(jQuery);
(function(c){c.tools=c.tools||{};c.tools.overlay={version:"1.1.2",addEffect:function(e,f,g){b[e]=[f,g]},conf:{top:"10%",left:"center",absolute:false,speed:"normal",closeSpeed:"fast",effect:"default",close:null,oneInstance:true,closeOnClick:true,closeOnEsc:true,api:false,expose:null,target:null}};var b={};c.tools.overlay.addEffect("default",function(e){this.getOverlay().fadeIn(this.getConf().speed,e)},function(e){this.getOverlay().fadeOut(this.getConf().closeSpeed,e)});var d=[];function a(g,k){var o=this,m=c(this),n=c(window),j,i,h,e=k.expose&&c.tools.expose.version;var f=k.target||g.attr("rel");i=f?c(f):null||g;if(!i.length){throw"Could not find Overlay: "+f}if(g&&g.index(i)==-1){g.click(function(p){o.load(p);return p.preventDefault()})}c.each(k,function(p,q){if(c.isFunction(q)){m.bind(p,q)}});c.extend(o,{load:function(u){if(o.isOpened()){return o}var r=b[k.effect];if(!r){throw'Overlay: cannot find effect : "'+k.effect+'"'}if(k.oneInstance){c.each(d,function(){this.close(u)})}u=u||c.Event();u.type="onBeforeLoad";m.trigger(u);if(u.isDefaultPrevented()){return o}h=true;if(e){i.expose().load(u)}var t=k.top;var s=k.left;var p=i.outerWidth({margin:true});var q=i.outerHeight({margin:true});if(typeof t=="string"){t=t=="center"?Math.max((n.height()-q)/2,0):parseInt(t,10)/100*n.height()}if(s=="center"){s=Math.max((n.width()-p)/2,0)}if(!k.absolute){t+=n.scrollTop();s+=n.scrollLeft()}i.css({top:t,left:s,position:"absolute"});u.type="onStart";m.trigger(u);r[0].call(o,function(){if(h){u.type="onLoad";m.trigger(u)}});if(k.closeOnClick){c(document).bind("click.overlay",function(w){if(!o.isOpened()){return}var v=c(w.target);if(v.parents(i).length>1){return}c.each(d,function(){this.close(w)})})}if(k.closeOnEsc){c(document).unbind("keydown.overlay").bind("keydown.overlay",function(v){if(v.keyCode==27){c.each(d,function(){this.close(v)})}})}return o},close:function(q){if(!o.isOpened()){return o}q=q||c.Event();q.type="onBeforeClose";m.trigger(q);if(q.isDefaultPrevented()){return}h=false;b[k.effect][1].call(o,function(){q.type="onClose";m.trigger(q)});var p=true;c.each(d,function(){if(this.isOpened()){p=false}});if(p){c(document).unbind("click.overlay").unbind("keydown.overlay")}return o},getContent:function(){return i},getOverlay:function(){return i},getTrigger:function(){return g},getClosers:function(){return j},isOpened:function(){return h},getConf:function(){return k},bind:function(p,q){m.bind(p,q);return o},unbind:function(p){m.unbind(p);return o}});c.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(p,q){o[q]=function(r){return o.bind(q,r)}});if(e){if(typeof k.expose=="string"){k.expose={color:k.expose}}c.extend(k.expose,{api:true,closeOnClick:k.closeOnClick,closeOnEsc:false});var l=i.expose(k.expose);l.onBeforeClose(function(p){o.close(p)});o.onClose(function(p){l.close(p)})}j=i.find(k.close||".close");if(!j.length&&!k.close){j=c('<div class="close"></div>');i.prepend(j)}j.click(function(p){o.close(p)})}c.fn.overlay=function(e){var f=this.eq(typeof e=="number"?e:0).data("overlay");if(f){return f}if(c.isFunction(e)){e={onBeforeLoad:e}}var g=c.extend({},c.tools.overlay.conf);e=c.extend(true,g,e);this.each(function(){f=new a(c(this),e);d.push(f);c(this).data("overlay",f)});return e.api?f:this}})(jQuery);
(function(b){b.tools=b.tools||{};b.tools.expose={version:"1.0.5",conf:{maskId:null,loadSpeed:"slow",closeSpeed:"fast",closeOnClick:true,closeOnEsc:true,zIndex:9998,opacity:0.8,color:"#456",api:false}};function a(){if(b.browser.msie){var f=b(document).height(),e=b(window).height();return[window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,f-e<20?e:f]}return[b(window).width(),b(document).height()]}function c(h,g){var e=this,j=b(this),d=null,f=false,i=0;b.each(g,function(k,l){if(b.isFunction(l)){j.bind(k,l)}});b(window).resize(function(){e.fit()});b.extend(this,{getMask:function(){return d},getExposed:function(){return h},getConf:function(){return g},isLoaded:function(){return f},load:function(n){if(f){return e}i=h.eq(0).css("zIndex");if(g.maskId){d=b("#"+g.maskId)}if(!d||!d.length){var l=a();d=b("<div/>").css({position:"absolute",top:0,left:0,width:l[0],height:l[1],display:"none",opacity:0,zIndex:g.zIndex});if(g.maskId){d.attr("id",g.maskId)}b("body").append(d);var k=d.css("backgroundColor");if(!k||k=="transparent"||k=="rgba(0, 0, 0, 0)"){d.css("backgroundColor",g.color)}if(g.closeOnEsc){b(document).bind("keydown.unexpose",function(o){if(o.keyCode==27){e.close()}})}if(g.closeOnClick){d.bind("click.unexpose",function(o){e.close(o)})}}n=n||b.Event();n.type="onBeforeLoad";j.trigger(n);if(n.isDefaultPrevented()){return e}b.each(h,function(){var o=b(this);if(!/relative|absolute|fixed/i.test(o.css("position"))){o.css("position","relative")}});h.css({zIndex:Math.max(g.zIndex+1,i=="auto"?0:i)});var m=d.height();if(!this.isLoaded()){d.css({opacity:0,display:"block"}).fadeTo(g.loadSpeed,g.opacity,function(){if(d.height()!=m){d.css("height",m)}n.type="onLoad";j.trigger(n)})}f=true;return e},close:function(k){if(!f){return e}k=k||b.Event();k.type="onBeforeClose";j.trigger(k);if(k.isDefaultPrevented()){return e}d.fadeOut(g.closeSpeed,function(){k.type="onClose";j.trigger(k);h.css({zIndex:b.browser.msie?i:null})});f=false;return e},fit:function(){if(d){var k=a();d.css({width:k[0],height:k[1]})}},bind:function(k,l){j.bind(k,l);return e},unbind:function(k){j.unbind(k);return e}});b.each("onBeforeLoad,onLoad,onBeforeClose,onClose".split(","),function(k,l){e[l]=function(m){return e.bind(l,m)}})}b.fn.expose=function(d){var e=this.eq(typeof d=="number"?d:0).data("expose");if(e){return e}if(typeof d=="string"){d={color:d}}var f=b.extend({},b.tools.expose.conf);d=b.extend(f,d);this.each(function(){e=new c(b(this),d);b(this).data("expose",e)});return d.api?e:this}})(jQuery);

