/*/////////////////////////////////////////////////////////////////
//  DYNAMIC SEARCH FIELD WITH AUTOSUGGEST / Custom jQUERY plugin //
//                     Designed for MAS(R) CMS                   //
//                 (c) 2011 Mansion Productions LLC.             //
//---------------------------------------------------------------//
// Usage:                                                        //
//	1. Include jquery in your document head                  //
//	2. Include this script and associated css                //
//	3. Apply the plugin to a blank div:                      //
		$().ready(function() {
			$('#your_div_id').masSearchAutoSuggest({
				'categories':'3,4,6', 
				'categoriesInputName':'categories',
				'masurl':'[masurl]', 
				'ref':[sid],
				'results':10,
				'orderBy':'name|date|rating',
				'css':'scmbo_base'
			});
		});
//                                                               //
/////////////////////////////////////////////////////////////////*/

var masSearchAutoSuggestElements = {searchFields: Array(), openLists: Array()};

(function($){

	// ---------- public methods----------

	var methods = {

		init : function( options ) {

			var settings = {
				'css'			: 'scmbo_base',
				'categories'		: '',
				'categoriesInputName'	: '',
				'masurl'		: '',
				'ref' 			: 0,
				'results'		: 10,
				'orderBy'		: 'name',
				'serverScript'		: ''
			};
			if ( options ) {
				$.extend( settings, options );
			}
			settings.serverScript = settings.masurl + 'search_autosuggest.php?sid=' + settings.ref + '&categories=' + settings.categories;

			return this.each(function() {

				var container = $(this);
				container.css('position','relative');

				var searchFieldName = container[0].id + 'scmDSrch'
				var searchFieldID = searchFieldName + '_tmp';
				var searchField = document.createElement('input');
				searchField.id = searchFieldID;
				searchField.name = searchFieldName;
				searchField.type = 'text';
				searchField.className = settings.css + '_input';

				var suggestList = document.createElement('div');
				suggestList.id  = 'suggestList_cbcustom_'+searchFieldName;
				suggestList.style.position = 'absolute';
				suggestList.style.overflow = 'auto';
				suggestList.style.zIndex = 1000;
				suggestList.className = settings.css + '_suggestList';
				// if(isIE()) suggestList.style.top = '33px'; else suggestList.style.top = '26px';
				//suggestList.style.width = (W-2)+'px';

				container[0].appendChild(suggestList);
				container[0].appendChild(searchField);

				container.data({
					'settings'			: settings,
					'searchFieldName' 	: searchFieldName,
					'searchFieldID'		: searchFieldID,
					'suggestListID'		: suggestList.id
				});

				var jSearchField = $('#'+searchFieldID);
				var jSuggestList = $('#'+suggestList.id);
				// jSuggestList.offset({top: jSearchField.offset().top+jSearchField.outerHeight(), left: jSearchField.offset().left}).hide();
				jSuggestList.hide();

				jSearchField.keyup(function(e) {
					if (e.keyCode==40) {
						selManual(container, 1);
					}
					else if(e.keyCode==38) {
						selManual(container, -1);
					}
					else if(e.keyCode==13) {
						enterManual(container);
					}
					else {
						loaderSuggest(container);
					}
				});

				jSearchField.click(function() {
					if (masSearchAutoSuggestElements.openLists.toString().indexOf(suggestList.id)) {
						loaderSuggest(container);
					}
				});

				document.onclick = hideAllListsOnDocumentClick;

				masSearchAutoSuggestElements.searchFields.push(searchFieldID);

			});
		},

		getSettings : function( ) {
			alert(this.data('settings').serverScript);
			alert(this.data('searchFieldID'));
		}
	};


	// ---------- private methods -----------


	function isIE() {
		if(document.all) return true; else return false;
	}


	function loaderSuggest(obj, Q_VAL) {
		var serverScript = obj.data('settings').serverScript;

		var catInput = obj.data('settings').categoriesInputName;
		if (catInput) {
			serverScript += '&categories=' + $('input[name='+catInput+']:radio:checked').val();
		} else {
			serverScript += '&categories=' + obj.data('settings').categories;
		}
		
		var nrResults = obj.data('settings').results;
		if (nrResults) {
			serverScript += '&results=' + nrResults;
		}

		var orderBy = obj.data('settings').orderBy;
		if (orderBy) {
			serverScript += '&orderBy=' + orderBy;
		}

		JLoadContent( serverScript + '&q=' + $('#'+obj.data('searchFieldID')).val(),
						{CONTAINER: obj.data('suggestListID'),
						 searchFieldName: obj.data('searchFieldName'),
						 suggestListID: obj.data('suggestListID')
						}
		);
	}


	function selManual(obj, offset) {
		var D = Array();
		var S = -1;
		$('#'+obj.data('suggestListID')+' a').each(function(k, v) {
			if( $(this).attr('class')=='scmbo_base_leaf_selected' ) S=k;
			D.push( $(this) );
			$(this).attr('class', 'scmbo_base_leaf');
		});

		if(D.length>0 && S==-1) {
			S=0;
		}
		else if(S!=-1) {
			S += offset;
			if (S>=D.length) S=0; else if(S<=-1) S=D.length-1;
		}
		if (S!=-1) D[S].attr('class', 'scmbo_base_leaf_selected');
	}


	function enterManual(obj) {
		$('#'+obj.data('suggestListID')+' a').each(function(k, v) {
			if( $(this).attr("class")=='scmbo_base_leaf_selected' ) {
				document.location = $(this).attr("href");
			}
		});
	}


	function JLoadContent(lnk_load, O) 	{
		var defaults = {
			CONTAINER: 'content',
			CB: function(){},
			BL: function(){},
			NOCACHE: true,
			searchFieldName: ''
		}
		if (O) $.extend(defaults,O);
		O = defaults;
		O.BL();

		if (O.NOCACHE) {
			var tm=new Date().getTime();
			lnk_load = lnk_load+'&timecache='+tm+"&callback=?";
		}

		// $('#'+O.CONTAINER).load(lnk_load, function(){ O.CB(); });
		$.getJSON(lnk_load , function(data) {
			// data = {"dtr" : "cached;;;refstat.php?sid=344&lid=303|||Charlly Moore,,,refstat.php?sid=344&lid=307|||Cinnamon Sweet,,,refstat.php?sid=344&lid=1306|||Dani Amour,,,refstat.php?sid=344&lid=313|||Diamond Dee,,,refstat.php?sid=344&lid=1376|||Julie Ann More,,,refstat.php?sid=344&lid=290|||Maria Moore,,,refstat.php?sid=344&lid=2011|||Michelle Monaghan,,,refstat.php?sid=344&lid=371|||Monet Staxxx,,,refstat.php?sid=344&lid=372|||Monica Erotica,,,refstat.php?sid=344&lid=373|||Mountain Rain"};
			onListLoad(O.suggestListID, data)
		});
	}


	function onListLoad(suggestListID, dt) {
		//d="cached;;;refstat.php?sid=5&lid=34|||Agi,,,refstat.php?sid=5&lid=42|||Andrea,,,refstat.php?sid=5&lid=48|||Aneta,,,refstat.php?sid=5&lid=49|||Eva,,,refstat.php?sid=5&lid=63|||Magdy";
		d = dt.dtr;
		Display = '';
		result = d.split(';;;');

		result_dt = result[1].split(',,,');
		if(result_dt[0]!='') {
			for(i=0; i<result_dt.length; i++) {
				E_dt = result_dt[i].split('|||');
				Display += '<a class="scmbo_base_leaf" href="'+E_dt[0]+'">'+E_dt[1]+'</a>';
			}
		}

		$('#'+suggestListID).html(Display);
		$('#'+suggestListID+' a').mouseover(function(){
			$('#'+suggestListID+' a').each(function(k, v){$(this).attr('class', 'scmbo_base_leaf');});
		});

		if(Display!='') showList(suggestListID); else hideList(suggestListID);
	}


	function showList(suggestListID) {
		if (!suggestListID) return;
		var jSuggestList = $('#'+suggestListID);
		var jSearchField = $('#'+jSuggestList.parent().data('searchFieldID'));
		jSuggestList.css('top',jSearchField.outerHeight()+'px').css('left',0).show();
		// jSuggestList.offset({top: jSearchField.offset().top+jSearchField.outerHeight(), left: jSearchField.offset().left}).show();
		masSearchAutoSuggestElements.openLists = masSearchAutoSuggestElements.openLists.concat(suggestListID);
	}


	function hideList(suggestListID) {
		if (!suggestListID) return;
		$('#'+suggestListID).filter('[class$="_suggestList"]').hide();
		masSearchAutoSuggestElements.openLists = array_diff(masSearchAutoSuggestElements.openLists, [suggestListID]);
	}


	function hideAllLists() {
		$('[class$="_suggestList"]').hide();
		masSearchAutoSuggestElements.openLists = array();
	}

	function hideAllListsOnDocumentClick(e) {
		if( !e ) {
			//if the browser did not pass the event information to the
			//function, we will have to obtain it from the event register
			if( window.event ) {
				//Internet Explorer 8-
				e = window.event;
			} else {
				//total failure, we have no way of referencing the event
				return;
			}
		}
		var target = (e && e.target) || (e && e.srcElement);
		if (!masSearchAutoSuggestElements.searchFields.length || !target) return; // if there are no open lists, do nothing
		var a = masSearchAutoSuggestElements.searchFields.concat(masSearchAutoSuggestElements.openLists);
		var x = false;
		for (var i in a) {
			var obj = document.getElementById(a[i]);
			if (obj==target) {
				x = true;
			}
			else if (target.parentNode) {
				 if (obj==target.parentNode) {
				 	x = true;
				 }
			}
			if (!x) hideList(a[i]); // if the click target is not any search field, or open list, or child item of an open list - close that list
		}
	}


	function array_diff(c, v, m) {
		var d = [], e = -1, h, i, j, k;
		for(i = c.length, k = v.length; i--;){
			for(j = k; j && (h = c[i] !== v[--j]););
			h && (d[++e] = m ? i : c[i]);
	    }
	    return d;
	};


	// ---------- instantiate plugin ----------
	$.fn.masSearchAutoSuggest = function(method) {
		if ( methods[method] ) {
			return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
		} else if ( typeof method === 'object' || ! method ) {
			return methods.init.apply( this, arguments );
		} else {
			$.error( 'Method ' +  method + ' does not exist on jQuery.masSearchAutoSuggest' );
		}
	};
})(jQuery);

