
var jQueryInit = false;
function initJQuery() {
	if (typeof(jQuery) == 'undefined') {
		if (! jQueryInit) {
			jQueryInit = true;
			document.write("<scr" + "ipt type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js\"></scr" + "ipt>");
		}
		setTimeout("initJQuery()", 250);
	} else {
		jQuery(document).ready(function() {
			// Activate jQuery No-Conflict
			//jQuery.noConflict();
			// Register Tab Slider
			registerTabSlider();
			// Setup workspace
			Chitika.Intextual.setup();
			// Bind mouseup to intextual processing!
			jQuery(document).bind("mouseup", Chitika.Intextual.process);
		});
	}
}

// Initialize JQuery on body load
initJQuery();

// Configuration
var slideSpeed = 300;
var tabFadeIn = 1000;
var tabFadeOut = 600;
var maxChars = 1000;
var wrapperPadding = "5px";
var wrapperWidth = "250px";
var wrapperBG = "#F9F9F9";
var wrapperBorder = "#D4D4D4 2px solid";

// Widgets
var intextualTabs = new Array();
intextualTabs['wiki'] = new Array();
intextualTabs['wiki']['top'] = 200;
intextualTabs['wiki']['logo'] = 'http://labs.chitika.com/Intextual/images/wikipedia.png';
intextualTabs['dictionary'] = new Array();
intextualTabs['dictionary']['top'] = 300;
intextualTabs['dictionary']['logo'] = 'http://labs.chitika.com/Intextual/images/dictionary.png';

// Initiate Chitika Engine
if(!window.Chitika){ Chitika = {}; }

// Create Module
Chitika.Intextual = {};

/******* Get Selected Text *******/
Chitika.Intextual.getSelected = function(){
	if (window.getSelection){ return window.getSelection(); }
	else if(document.getSelection){ return document.getSelection(); }
	else if(document.selection){ return document.selection.createRange().text; }
	return '';
}


/******* Process Seleted Text *******/
Chitika.Intextual.process = function(){
	
	// Stop actions if tabs are open
	for(tabName in intextualTabs) {  if (jQuery('.intextual-' + tabName).hasClass('open')) { return; } }

	// Grab Selected Text
	var selText = Chitika.Intextual.getSelected();

	// If not empty, load it up!
	if (selText != '' && selText.toString().length <= maxChars) {
		for(tabName in intextualTabs) {
			jQuery.getJSON("http://labs.chitika.com/Intextual/intextual.php?t="+escape(tabName)+"&q="+escape(selText)+"&c=?", function(intex){
				if (intex.valid != "true" || intex.tab == "" || intex.content == "" ) return;
				// Add Content
				jQuery('.intextual-' + intex.tab + ' .intextualData').html(intex.content);
				// FadeIn Handle
				jQuery('.intextual-' + intex.tab + ' a.intextualHandle').fadeIn(tabFadeIn);
			});
		}
	} else {
		// Hide all tabs
		jQuery('.intextualHandle').fadeOut(tabFadeOut);		
	}
}

/******* Setup Workstation *******/
Chitika.Intextual.setup = function(){
	for(tabName in intextualTabs) {
		// Generate Elements
		var tabInfo = intextualTabs[tabName];
		var tabWrapper = jQuery("<div>").addClass("intextual-" + tabName).css("z-index","999999999").css("min-height", 100);
		var handleLink = jQuery("<a>").addClass("intextualHandle").attr("href", "#").text(tabName).css("display", "none");
		var dataContainer = jQuery("<div>").addClass("intextualData");
		// Format Entities
		tabWrapper.css("padding", wrapperPadding).css("width", wrapperWidth).css("background", wrapperBG).css("border", wrapperBorder);
		// Create Handle
		tabWrapper.append(handleLink).append(dataContainer);
		// Insert Wrapper
		jQuery("body").prepend(tabWrapper);
		// Activate TabClass
		jQuery(".intextual-" + tabName).intextualSlider({
			tabHandle: ".intextual-" + tabName + " a.intextualHandle",
			tabImage: tabInfo.logo,
			imageHeight: '100px',
			imageWidth: '100px', 
			speed: slideSpeed,
			action: 'hover',
			topPos: tabInfo.top + 'px'
		});
	}
}




/*******
#
#	TAB SLIDER
#
*******/
function registerTabSlider() {
	(function($){
		$.fn.intextualSlider = function(callerSettings) {
			var settings = $.extend({
				tabHandle: '.handle',
				speed: 300, 
				action: 'click',
				topPos: '200px',
				leftPos: '20px',
				positioning: 'fixed',
				tabImage: null,
				imageHeight: null,
				imageWidth: null                    
			}, callerSettings||{});

			settings.tabHandle = jQuery(settings.tabHandle);
			var obj = this;
			
			//ie6 doesn't do well with the fixed option
			if (document.all && !window.opera && !window.XMLHttpRequest) { settings.positioning = 'absolute'; }
			
			//set initial tabHandle css
			if (settings.tabImage != null) {
				settings.tabHandle.css({
				'background' : 'url('+settings.tabImage+') no-repeat',
				'width' : settings.imageWidth,
				'height': settings.imageHeight
				});
			}
			settings.tabHandle.css({
				'textIndent' : '-99999px',
				'outline' : 'none',
				'position' : 'absolute'
			});
			obj.css({
				'text-align': 'left',
				'background-color': '#FFFFFF',
				'line-height' : '1',
				'position' : settings.positioning
			});

			
			var properties = {
				containerWidth: parseInt(obj.outerWidth(), 10) + 'px',
				containerHeight: parseInt(obj.outerHeight(), 10) + 'px',
				tabWidth: '40px',
				tabHeight: parseInt(settings.tabHandle.outerHeight(), 10) + 'px'
			};

			//set calculated css
			obj.css({ 'top' : settings.topPos });
			obj.css({ 'left': '-' + properties.containerWidth});
			settings.tabHandle.css({'top' : 0});
			settings.tabHandle.css({'right' : '-' + properties.tabWidth});

			//functions for animation events
			settings.tabHandle.click(function(event){  event.preventDefault(); });
			
			// Function: Slide In
			var slideIn = function() {
				obj.stop().animate({left: '-' + properties.containerWidth}, settings.speed).removeClass('open');
			};
			
			// Function: Slide Out
			var slideOut = function() {
				obj.stop().animate({left:'-3px'},  settings.speed).addClass('open');
			};

			var hoverAction = function(){
				// Setup hover action
				obj.hover(
					function(){ slideOut(); },
					function(){ slideIn(); }
				);
				// On Handle Click, slide in
				settings.tabHandle.click(function(event){
					if (obj.hasClass('open')) { slideIn(); }
				});
				// On body click, slide in
				obj.click(function(event){ event.stopPropagation(); });
				jQuery(document).click(function(){ slideIn(); });
			};

			// Activate Hover Acion
			hoverAction();
			
		};
	})(jQuery);
	
}

/** Analytical Usage Tracking **/
var app_name = "Intextual";
var app_ref = document.referrer ? document.referrer : "";
var app_log = new Image(1,1);
app_log.src = "http://labs.chitika.net/usage.php?app="+escape(app_name)+"&ref="+escape(app_ref)+"&cb="+parseInt(Math.random() * 9999);
app_log.style.display = "none";
