/*
* Global variables
*/
var dwbsearch_items_target = '_blank';


jQuery(
	function($){
		
		$.fn.DWBSearch = function(opt){
			return this.each(
				function(){
					
					/* 
					* Show the loading mask 
					*/
					function _setLoading(){ 
						var _e,
						    _i = $('input[name="terms"]',f),
								_p = _i.position(),
								_x = (_p.left+_i.width()/2)+'px',
								_y = (_p.top+_i.height()/2)+'px',
								_loading = "<img class='loading_search_result' style='position:absolute;left:"+_x+";top:"+_y+"' src='dwb_search/loading.gif'/>"
						
						f.after(_loading);
					}; // _setLoading
	
					/*
					*  The callback function for the search process
					*/
					function _success(result, status){
						// Remove the mask
						try{
							f.siblings('.loading_search_result').remove();
						}catch(e){}	
						
						// Clear the found elements container and introduce the new results
						if(status == 'success'){
							r.children('.dwbsearch-errors-container, .dwbsearch-general-container, .dwbsearch-pagination-container, .dwbsearch-items-container').remove();
							
							if(result.errors.length > 0){
								// Set errors
								var errorsCode = '<div class="dwbsearch-errors-container">';
								
								for(var i=0; i < result.errors.length; i++){
									errorsCode += result.errors[i]+'</br>';
								}
								
								errorsCode += '</div>';
								r.append(errorsCode);
							}else{
								
								// Set general data
								r.append('<div class="dwbsearch-general-container">Found '+result.total_found+' matches in '+result.total_searched+' files. Page <span class="dwbsearch-active-page">1</span></div>');	
							
								if(result.items.length > 0){
									
									// Set pagination
									var paginationCode = '<div class="dwbsearch-pagination-container">',
											itemsCode			 = '<div class="dwbsearch-items-container">',
											page 					 = 1;
											
									paginationCode += '<a href="javascript:void(0);" class="dwbsearch-previous-page-handle">&laquo;previous</a>';	
							 		pageCount = Math.ceil(result.items.length/c);
							 
									for(var i = 1; i <= pageCount; i++){
										 paginationCode += '<a href="javascript:void(0);" class="dwbsearch-page-handle">'+i+'</a>';
									}
									paginationCode += '<a href="javascript:void(0);" class="dwbsearch-next-page-handle">next&raquo;</a>';		
									paginationCode += '</div>';	
									
									// Set items
									itemsCode += '<div class="dwbsearch-items-page'+page+'">'
									for (var i=1; i <= result.items.length; i++ ){
										itemsCode += '<div class="dwbsearch-item">';
										itemsCode += '<div class="dwbsearch-item-title">['+i+']&nbsp;<a href="'+result.items[i-1].url+'" target="'+dwbsearch_items_target+'">'+result.items[i-1].title+'</a></div>';
										itemsCode += '<div class="dwbsearch-item-description">'+result.items[i-1].description+'</div>';
										itemsCode += '</div>';
										if(i%c == 0 && i != result.items.length){
											page++;
											itemsCode +='</div>';
											itemsCode += '<div class="dwbsearch-items-page'+page+'" style="display:none;">';
										}
									}
									
									itemsCode += '</div></div>';
								
									r.append(paginationCode+itemsCode+paginationCode);
									$('.dwbsearch-previous-page-handle', r).click(function(){if(pageActive > 1){_showPage(pageActive-1);}});
									$('.dwbsearch-page-handle', r).click(function(){var page = parseInt($(this).text());_showPage(page);});
									$('.dwbsearch-next-page-handle', r).click(function(){if(pageActive < pageCount){_showPage(pageActive+1);}});
								}
							}	
						}
						
						searching = false; // The application is ready for a new search
						
					}; // _success
	
					function _showPage(page){ 
						if(pageActive != page){
							$('.dwbsearch-items-page'+pageActive, r).css('display', 'none');
							$('.dwbsearch-items-page'+page, r).css('display', 'block');
							pageActive = page;
							
							// Set the active page number in the general data section
							$('.dwbsearch-active-page', r).text(pageActive);
						} 
					}; // showPage
					/* 
					* Main program
					*/
					
					
					// Initializing the required variables
					var f = r = $(this),
							c = 10,
							pageActive = 1,
							pageCount,
							searching = false;
					
					opt = opt || {};
					
					if(opt.count_in_page && !isNaN(parseInt(opt.count_in_page))){
						c = parseInt(opt.count_in_page);
					}
					
					if(opt.result && $(opt.result).length > 0){
						r = $(opt.result);
					}
					
					// Set the submit event handle for search form
					if(f.length > 0){
						f.submit(function(){
								if(searching){
									return false;
							  }	
								searching = true;
								var queryStr = {};
								$('input:text, input:checked', f).each(function(){queryStr[this.name] = this.value;});
								_setLoading();
								$.getJSON(f.attr("action"), queryStr, _success);
								return false;
						});	
					}	
				} 
			); // each
		};
	}
);

/*
*
*/
