/**
 * @author Erick
 */
/** jQuery searchTool plugin for Empowered 
 *  Revision : 1.0
 *  finished : November 13, 2009 | 1:05pm
 * 
 * @param {text} just put the id of the textbox you want to do search
 * 
 * 
 * 
 */

(function($){
	$.fn.searchTool = function(text_object){
		var settings = {
			overlayBgColor: '#036',
			overlayOpacity: 0.8,
			searchOkResult: {
				'width': 400,
				'height': 400
			},
			searchNoResult: {
				'width': 400,
				'height': 250
			},
			ajax_spinner_img: 'img/ajax-loader.gif',
			close_tool_img: 'img/search_close_tab.png',
			experts_list: '',
			category_list: '',
			article_list: '',
			search_string: text_object,
			last_textStatus: '',
			ajax_error: '',
			containerBorderSize: 0,
			containerResizeSpeed: 400
		};
		
		
		
		function setContactlist(obj){
			if (settings.experts_list.length > 0) {
				settings.experts_list = '';
			}
			settings.experts_list = obj;
		}
		
		function setCategorylist(obj){
			if (settings.category_list.length > 0) {
				settings.category_list = '';
			}
			settings.category_list = obj;
		}
		
		function showSearch(obj){
			if (settings.article_list.length > 0) {
				settings.article_list = '';
			}
			settings.article_list = obj;
			
		}
		
		
		
		function _init(){
			_start();
		}
		
		function _start(){
			
			//force the clean up of vars
			$('embed, object, select').css({ 'visibility' : 'hidden' });
			settings.experts_list = '';
			settings.category_list = '';
			settings.article_list = '';
			_set_interface();
			$.ajax({
				type: 'POST',
				url: 'search.php',
				data: "search=" + settings.search_string + "&callback=showSearch&sid=" + _artificialSid(),
				success: function(res){
					eval(res);
					_set_info_view();
					return false;
				},
				error: function(res){
					settings.ajax_error = res;
					_set_info_view();
					return false;
				}
			});
		}
		
		function _set_interface(){
			
			if ($('#overlay').length === 0) {
				var template = '<div id="overlay"></div><div id="ajax_content"><div id="ajax_info_container"><div id="loading"><a href="#" id="loading-link"><img src="' + settings.ajax_spinner_img + '"> </a> </div><div id="close_window"><a href="#" id="closeWindow"><img src="' + settings.close_tool_img + '"></a></div><div id="peel_results"><h3>Results of the Search :</h3><div class="search_results"></div></div><div id="exec_new_search"><div class="minisearch_label">Or Search Again</div><div class="search_items"><input name="search_mini" type="text" class="search_mini" id="search_mini" value="' + settings.search_string + '" /><input type="button" name="searchButton" id="searchButton" value="Search" onclick="startSearch(\'search_mini\')" title="search" /></div></div></div></div>';
				$("body").append(template);
			}
			var arrPageSizes = ___getPageSize();
			var arrPageScroll = ___getPageScroll();
			$('#overlay').css({
				backgroundColor: settings.overlayBgColor,
				opacity: settings.overlayOpacity,
				width: arrPageSizes[0],
				height: arrPageSizes[1]
			}).fadeIn();
			$('#ajax_content').css({
				top: arrPageScroll[1] + (arrPageSizes[3] / 10),
				left: arrPageScroll[0]
			}).show();
			$('#overlay').click(function(){
				_finish();
			});
			$('#loading_link,#closeWindow').click(function(){
				_finish();
				return false;
			});
			$(window).resize(function(){
				var arrPageSizes = ___getPageSize();
				$('#overlay').css({
					width: arrPageSizes[0],
					height: arrPageSizes[1]
				});
				var arrPageScroll = ___getPageScroll();
				$('#ajax_content').css({
					top: arrPageScroll[1] + (arrPageSizes[3] / 10),
					left: arrPageScroll[0]
				});
			});
		}
		
		
		function _set_info_view(){ // show the loading
			// Show the loading
			$('#loading').fadeIn();
			$('#peel_results,#close_window, #exec_new_search').hide();
			$('#search_results').html('');
			var count_result = settings.article_list.length + settings.category_list.length + settings.experts_list.length;
			// check the status of error if exists to set up the size of the box 
			
			if ($.trim(settings.ajax_error) == '') {
				_resize_container(settings.searchNoResult.width, settings.searchOkResult.height);
			}
			else {
				if (count_result > 0) {
					_resize_container(settings.searchOkResult.width, settings.searchOkResult.height);
				}
				else {
					_resize_container(settings.searchNoResult.width, settings.searchNoResult.height);
				}
			}
		}
		
		function _resize_container(intImageWidth, intImageHeight){
			// Get current width and height
			var intCurrentWidth = $('#ajax_info_container').width();
			var intCurrentHeight = $('#ajax_info_container').height();
			// Get the width and height of the selected image plus the padding
			var intWidth = (intImageWidth + (settings.containerBorderSize * 2)); 
			var intHeight = (intImageHeight + (settings.containerBorderSize * 2));
			// Diferences
			var intDiffW = intCurrentWidth - intWidth;
			var intDiffH = intCurrentHeight - intHeight;
			// Perfomance the effect
			$('#ajax_info_container').animate({
				width: intWidth,
				height: intHeight
			}, settings.containerResizeSpeed, _show_results);
			if ((intDiffW === 0) && (intDiffH === 0)) {
				if ($.browser.msie) {
					___pause(250);
				}
				else {
					___pause(100);
				}
			}
		}
		
		function _show_results(){
			_place_info();
			$('#loading').fadeOut('fast', function(){
				$('#peel_results, #close_window, #exec_new_search').fadeIn('slow', function(){
					$('.search_results').show();
				});
			});
			
		}
		
		function _place_info(){
			var h = '';
			j = 0;
			var lix = 0;
			var lic = 0;
			var lar = 0;
			
			if (settings.experts_list.length > 0) {
				h += '<h5>Experts:</h5>';
				h += '<ul>';
				for (lix in settings.experts_list) {
					h += '<li><a href="doctor_index_' + settings.experts_list[lix].contactid + '.html" target="_blank">' + unescape(settings.experts_list[lix].lname) + ', ' + unescape(settings.experts_list[lix].fname) + '</a></li>';
					j++;
				}
				h += '</ul>';
			}
			
			if (settings.category_list.length > 0) {
				h += '<h5>Categories:</h5>';
				h += '<ul>';
				for (lic in settings.category_list) {
					var link = "";
					switch (settings.category_list[lic].categorytypeid) {
						case "2":
							link = "specialty_";
							break;
						case "3":
							link = "condition_";
							break;
						case "4":
							link = "topics_";
							break;
						default:
							link = "category_";
							break;
					}
					
					h += '<li><a href="' + link + settings.category_list[lic].categoryid + '.html" target="_blank">' + unescape(settings.category_list[lic].name) + '</a></li>';
					j++;
				}
				h += '</ul>';
			}
			
			if (settings.article_list.length > 0) {
				h += '<h5>Stories:</h5>';
				h += '<ul>';
				for (lar in settings.article_list) {
					h += '<li><a href="story_' + settings.article_list[lar].mediaid + '.html" target="_blank">' + unescape(settings.article_list[lar].name) + '</a></li>';
					j++;
				}
				h += '</ul>';
			}
			
			if (j === 0) {
				h += '<h5>Search returned no result.</h5>';
			}
			
			$('.search_results').html(h);
		}
		
		
		/**
		 / THIRD FUNCTION
		 * getPageSize() by quirksmode.com
		 *
		 * @return Array Return an array with page width, height and window width, height
		 */
		function ___getPageSize(){
			var xScroll, yScroll;
			if (window.innerHeight && window.scrollMaxY) {
				xScroll = window.innerWidth + window.scrollMaxX;
				yScroll = window.innerHeight + window.scrollMaxY;
			}
			else 
				if (document.body.scrollHeight > document.body.offsetHeight) {
					xScroll = document.body.scrollWidth;
					yScroll = document.body.scrollHeight;
				}
				else {
					xScroll = document.body.offsetWidth;
					yScroll = document.body.offsetHeight;
				}
			var windowWidth, windowHeight;
			if (self.innerHeight) {
				if (document.documentElement.clientWidth) {
					windowWidth = document.documentElement.clientWidth;
				}
				else {
					windowWidth = self.innerWidth;
				}
				windowHeight = self.innerHeight;
			}
			else 
				if (document.documentElement && document.documentElement.clientHeight) {
					windowWidth = document.documentElement.clientWidth;
					windowHeight = document.documentElement.clientHeight;
				}
				else 
					if (document.body) {
						windowWidth = document.body.clientWidth;
						windowHeight = document.body.clientHeight;
					}
			if (yScroll < windowHeight) {
				pageHeight = windowHeight;
			}
			else {
				pageHeight = yScroll;
			}
			if (xScroll < windowWidth) {
				pageWidth = xScroll;
			}
			else {
				pageWidth = windowWidth;
			}
			arrayPageSize = new Array(pageWidth, pageHeight, windowWidth, windowHeight);
			return arrayPageSize;
		};
		
		function ___getPageScroll(){
			var xScroll, yScroll;
			if (self.pageYOffset) {
				yScroll = self.pageYOffset;
				xScroll = self.pageXOffset;
			}
			else 
				if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
					yScroll = document.documentElement.scrollTop;
					xScroll = document.documentElement.scrollLeft;
				}
				else 
					if (document.body) {// all other Explorers
						yScroll = document.body.scrollTop;
						xScroll = document.body.scrollLeft;
					}
			arrayPageScroll = new Array(xScroll, yScroll);
			return arrayPageScroll;
		};
		
		function ___pause(ms){
			var date = new Date();
			curDate = null;
			do {
				var curDate = new Date();
			}
			while (curDate - date < ms);
		};
		
		function _finish(){
			$('#ajax_content').remove();
			$('#overlay').fadeOut(function(){
				$('#overlay').remove();
			});
			$('embed, object, select').css({
				'visibility': 'visible'
			});
		};
		
		function _artificialSid(){
			var d = new Date();
			var sid = new String(d.valueOf());
			sid += Math.floor(Math.random() * 10000000);
			return sid;
		};
		
		 _init();
		
	};
})(jQuery);

function startSearch(texto){
	var txt = $('#'+texto).val();
	if (txt.length > 0) {
		if (txt.length < 2) {
			alert('It is required to write something significant to start the search');
		}
		else {
			$.fn.searchTool(txt);
		}
	} else {
		alert('It is required to write something significant to start the search');
	}
	
}

