( function($) {
$.fn.extend( {
ajaxyLiveSearch : function(options, arg) {
if (options && typeof (options) == 'object') {
options = $.extend( {}, $.ajaxyLiveSearch.defaults, options);
} else {
options = $.ajaxyLiveSearch.defaults;
}
if (this.is("input")) {
this.each( function() {
new $.ajaxyLiveSearch.load(this, options, arg);
});
return;
}
}
});
$.fn.outerHTMLForm = function() {
return jQuery('
').append(this.eq(0).clone()).html();
};
$.ajaxyLiveSearch = {
element : null,
timeout : null,
options : null,
load : function(elem, options, arg) {
this.element = elem;
this.timeout = null;
this.options = options;
if ($(elem).val() == "") {
$(elem).val(options.text);
}
$(elem).attr('autocomplete', 'off');
if ($('#live-search_sb').length == 0) {
$('body')
.append(
'');
}
$.ajaxyLiveSearch.loadEvents(this);
},
loadResults : function(object) {
console.log ('load results');
console.log (object);
options = object.options;
elem = object.element;
window.sf_lastElement = elem;
if (jQuery(elem).val() != "") {
jQuery("body").data("live-search_results", null);
var loading = ""
+ " "
+ " "
+ " ";
jQuery("#live-search_val").html("");
var pos = this.bounds(elem, options);
var containerPos = this.bounds('.top-nav .container', options);
if (!pos) {
jQuery("#live-search_sb").hide();
return false;
}
if (Math.ceil(containerPos.left) + parseInt(options.width, 10) > jQuery(
window).width()) {
jQuery("#live-search_sb").css('width',
jQuery(window).width() - containerPos.left - 20);
}
if (jQuery('body').hasClass("rtl")) {
jQuery("#live-search_sb").css( {
top : pos.bottom,
right : containerPos.right
});
} else {
jQuery("#live-search_sb").css( {
top : pos.bottom,
right : containerPos.left
});
}
jQuery("#live-search_sb").show();
var data = {
action : "SearchView",
query : jQuery(elem).val() + '*',
search : options.search
};
if (options.ajaxData) {
data = window[options.ajaxData](data);
}
if (options.search) {
// s-a apasat enter - se vor afisa datele in portlet-ul principal
jQuery("#live-search_sb").hide();
jQuery.get(
options.ajaxUrl,
data,
function (resp) {
var m = "";
var results = $(resp).filter('form').find('a');
for (var i = 0; i < results.length; i++) {
m += ""+results[i].innerHTML +" ";
}
var strValoare = jQuery(sf_input).val().toLowerCase ().indexOf ('cautare') ? jQuery(sf_input).val() : jQuery(sf_input_mobile).val();
jQuery(".content h1").html("Cautare dupa "" + strValoare + "" ");
jQuery('.content .post-inner').html (m);
jQuery(".slide-out-close").click();
jQuery('html, body').animate({
scrollTop: jQuery(".content").first().offset().top
});
}
);
} else {
// cautare pe masura ce se introduce textul
jQuery.get(
options.ajaxUrl,
data,
function(resp) {
var m = "";
var results = jQuery(resp).filter('form').find('a');
var lngth = results.length < 10 ? results.length : 10;
for (var i = 0; i < results.length; i++){
m += ""+results[i].innerHTML +" ";
}
m += "Cautare dupa "" + jQuery(elem).val() + ""'); jQuery('.content .post-inner').html(jQuery('#live-search_val').html()); jQuery('.content .post-inner .live-search_item').show();\">Vezi toate rezultatele ";
jQuery("#live-search_val").html("");
});
}
} else {
jQuery("#live-search_sb").hide();
}
},
bounds : function(elem, options) {
var offset = jQuery(elem).offset();
if (offset) {
return {
top : offset.top,
left : offset.left + options.leftOffset,
bottom : offset.top + jQuery(elem).innerHeight()
+ options.topOffset,
right : offset.left
- jQuery('#live-search_sb').innerWidth()
+ jQuery(elem).innerWidth()
};
}
},
htmlResults : function(results, type, array_index) {
var m = "";
var s = 0;
if (typeof (results) != "undefined") {
console.log(results.length)
if (results.all.length > 0) {
m += "";
for ( var i = 0; i < results.all.length; i++) {
s++;
m += ""
+ jQuery.ajaxyLiveSearch.replaceResults(
results.all[i], results.template)
+ " ";
}
m += " ";
}
}
return new Array(m, s);
},
htmlArrayResults : function(results) {
var m = "";
var s = 0;
if (typeof (results) != "undefined") {
if (results.length > 0) {
m += "";
for ( var i = 0; i < results.length; i++) {
var md = results[i];
var title = "";
if (md.length == 2) {
title = md[1];
} else {
title = results[i];
}
s++;
m += ""
+ title + " ";
}
m += " ";
}
}
return new Array(m, s);
},
replaceResults : function(results, template) {
for ( var s in results) {
template = template.replace(new RegExp("{" + s + "}", "g"),
results[s]);
}
return template;
},
loadLiveEvents : function(object) {
var d = {
object : object
};
jQuery("#live-search_val li.live-search_lnk").mouseover(
function() {
jQuery(".live-search_lnk").each(
function() {
jQuery(this).attr(
"class",
jQuery(this)
.attr("class")
.replace(" live-search_selected", "")
);
});
jQuery(this).attr(
"class",
jQuery(this).attr("class") + " live-search_selected");
}
);
if (d.object.options.callback) {
jQuery("#live-search_val li.live-search_lnk").click(
function(event) {
try {
window[d.object.options.callback](d.object, this);
} catch (e) {
alert(e);
}
return false;
}
);
}
},
loadEvents : function(object) {
var d = {
object : object
};
jQuery(document).click( function() {
jQuery("#live-search_sb").hide();
});
jQuery(window).resize(
function() {
var pos = jQuery.ajaxyLiveSearch.bounds(
window.sf_lastElement, d.object.options);
if (pos) {
jQuery("#live-search_sb").css( {
top : pos.bottom,
left : pos.left
});
}
});
jQuery(object.element).keyup(
function(event) {
if (event.keyCode != "38" && event.keyCode != "40"
&& event.keyCode != "13"
&& event.keyCode != "27"
&& event.keyCode != "39"
&& event.keyCode != "37") {
var ajaxyObject = d.object;
if (ajaxyObject.timeout != null) {
clearTimeout(ajaxyObject.timeout);
}
if (ajaxyObject.options.search)
return false;
jQuery(ajaxyObject.element).attr(
"class",
jQuery(ajaxyObject.element).attr("class").replace(" live-search_focused", "") + " live-search_focused"
);
// jQuery.ajaxyLiveSearch.loadResults(d.object.element,
// d.object.options);
var l = {
object : d.object
};
ajaxyObject.timeout = setTimeout( function() {
jQuery.ajaxyLiveSearch.loadResults(l.object);
}, d.object.options.delay);
}
if (event.keyCode == "13") {
var ajaxyObject = d.object;
if (ajaxyObject.timeout != null) {
clearTimeout(ajaxyObject.timeout);
}
ajaxyObject.options.search = true;
jQuery.ajaxyLiveSearch.loadResults (ajaxyObject);
}
});
jQuery(window)
.keydown(
function(event) {
if (jQuery("#live-search_sb").css("display") != "none"
&& jQuery("#live-search_sb").css(
"display") != "undefined"
&& jQuery("#live-search_sb").length > 0) {
if (event.keyCode == "38"
|| event.keyCode == "40") {
if (jQuery.browser.webkit) {
jQuery("#live-search_sb").focus();
}
var s_item = null;
var after_s_item = null;
var s_sel = false;
var all_items = jQuery("#live-search_val li.live-search_lnk");
var s_found = false;
event.stopPropagation();
event.preventDefault();
for ( var i = 0; i < all_items.length; i++) {
if (jQuery(all_items[i]).attr(
"class").indexOf(
"live-search_selected") >= 0
&& s_found == false) {
s_sel = true;
if (i < all_items.length - 1
&& event.keyCode == "40") {
jQuery(all_items[i])
.attr(
"class",
jQuery(
all_items[i])
.attr(
"class")
.replace(
" live-search_selected",
""));
jQuery(all_items[i + 1])
.attr(
"class",
jQuery(
all_items[i + 1])
.attr(
"class")
+ " live-search_selected");
i = i + 1;
s_found = true;
} else if (i > 0
&& event.keyCode == "38") {
jQuery(all_items[i])
.attr(
"class",
jQuery(
all_items[i])
.attr(
"class")
.replace(
" live-search_selected",
""));
jQuery(all_items[i - 1])
.attr(
"class",
jQuery(
all_items[i - 1])
.attr(
"class")
+ " live-search_selected");
i = i + 1;
s_found = true;
}
} else {
jQuery(all_items[i])
.attr(
"class",
jQuery(
all_items[i])
.attr(
"class")
.replace(
" live-search_selected",
""));
}
}
if (s_sel == false) {
if (all_items.length > 0) {
jQuery(all_items[0])
.attr(
"class",
jQuery(
all_items[0])
.attr(
"class")
+ " live-search_selected");
}
}
// jQuery(window).unbind("keypress");
} else if (event.keyCode == 27) {
jQuery("#live-search_sb").hide();
} else if (event.keyCode == 13) {
var b = jQuery(
"#live-search_val li.live-search_selected a")
.attr("href");
if (typeof (b) != 'undefined'
&& b != '') {
if (d.object.options.callback) {
d.object.options.callback(this);
} else {
window.location.href = b;
}
return false;
} else {
if (d.object.options.callback) {
d.object.options.callback(this);
} else if (d.object.element != null) {
window.location.href = sf_url
.replace(
'%s',
encodeURI(jQuery(
d.object)
.val()));
}
return false;
}
}
}
});
jQuery(object.element)
.focus(
function() {
if (jQuery(this).val() == d.object.options.text) {
jQuery(this).val('');
jQuery(this)
.attr(
'class',
jQuery(this).attr('class') + ' live-search_focused');
}
if (d.object.options.expand > 0) {
jQuery(d.object.element).animate( {
width : d.object.options.iwidth
});
}
});
jQuery(object.element).blur(
function() {
if (jQuery(this).val() == '') {
jQuery(this).val(d.object.options.text);
jQuery(this).attr(
'class',
jQuery(this).attr('class').replace(
/ sf_focused/g, ''));
}
if (d.object.options.expand > 0) {
jQuery(d.object.element).animate( {
width : d.object.options.expand
});
}
});
}
};
jQuery.ajaxyLiveSearch.defaults = {
delay : 500,
leftOffset : 0,
topOffset : 5,
text : "Search For",
iwidth : 180,
width : 315,
ajaxUrl : "",
ajaxData : false, // function to extend data sent to server
searchUrl : "",
expand : false,
callback : false,
search : false
};
})(jQuery);
function sf_addItem(search, title, name, name_type, value) {
var items = jQuery(search).find('.live-search_ajaxy-selective-item');
var exists = false;
var key = "";
var md = value.split(':');
if (md.length == 2) {
key = md[0];
} else {
key = value;
}
if (items.length > 0) {
for ( var i = 0; i < items.length; i++) {
if (jQuery(items[i]).find(
'input.live-search_ajaxy-selective-close-hidden').val() == key) {
exists = true;
break;
}
}
}
if (exists) {
jQuery(search).find(".live-search_ajaxy-selective-input").val("");
jQuery('#live-search_sb').hide();
return;
}
var mds = title.split(':');
if (mds.length == 2) {
title = md[1];
}
var added_item = jQuery(''
+ title
+ 'X ');
if (items.length <= 0) {
jQuery(search).prepend(added_item);
} else {
added_item.insertAfter(items[items.length - 1]);
}
added_item.click( function() {
jQuery(this).remove();
});
var input = jQuery(search).find(".live-search_ajaxy-selective-input");
if (input) {
input.val("");
if (name_type != 'array') {
input.css('visibility', 'hidden');
} else {
input.focus();
}
}
jQuery('#live-search_sb').hide();
}