// Stop Words en català per www.bab-soft.com

var dynaCloudStopwords = [ "el", "la", "els", "les", "un",
 "uns", "una", "unes", "en", "aquest", "aquesta", "aquests", "aquestes", "això",
 "aquell", "aquella", "aquells", "aquelles", "meu", "meva", "meus", "meves", "teu", "teva",
 "teus", "teves", "seu", "seva", "seus", "seves", "nostre",
 "nostra", "nostres", "vostre", "vostra", "vostres", "seu", "seva", "seus", "seves",
 "massa ", "força", "prou ", "més", "menys", "quant", "quanta", "quants", "quantes",
 "tant", "tanta", "tants", "tantes", "molt", "molta", "molts", "moltes", "poc",
 "poca", "pocs", "poques", "bastant", "bastants", "gaire", "gaires", "algun", "alguna", "alguns",
 "algunes", "cada", "cadascun", "cadascuna", "tot", "tota", "tots", "totes", "altre", "altra",
 "altres", "tal", "tals", "qualsevol", "qualssevol", "mateix", "mateixa", "mateixos", "mateixes", "cert",
 "certa", "certs", "certes", "algú", "ningú", "cadascú", "tothom", "cosa", "res",
 "tot", "no", "si", "quin", "quina", "quins", "quines", "qui", "què", "on", "primer",
 "primera", "segon", "segona", "tercer", "tercera", "quart", "quarta", "cinquè",
 "cinquena", "sisè", "sisena", "setè", "setena", "vuitè", "vuitena", "novè", "novena", "desè",
 "desena", "onzè", "onzena", "dotzè", "dotzena", "1r", "1a", "2n", "2a", "3r",
 "3a", "4t", "4a", "5è", "5a", "6è", "6a", "7è",
 "7a", "8è", "8a", "9è", "9a", "10è", "10a", "11è",
 "11a", "12è", "12a", "jo", "mi", "nosaltres", "tu", "vosaltres", "vós", "ell",
 "ella", "vostè", "ells", "elles", "vostès", "me", "em", "nos",
 "ens", "te", "et", "vos", "us", "lo", "los", "se",
 "es", "ne", "en", "hi", "vaig", "vas", "va", "vam",
 "vau", "van", "he", "has", "ha", "hem", "heu", "han",
 "a", "amb", "de", "en", "per", "contra", "entre", "malgrat",
 "segons", "sense", "cap", "des", "fins", "sota", "los", "al",
 "als", "del", "dels", "pel", "pels", "com", " bé", "ben",
 "malament", "mal", "millor", "pitjor", " així", "alhora", "almenys", "corrents",
 "pel cap baix", " gairebé", "sols", "solament", "només", "sobretot", "a les fosques", "a peu",
 "de cap a cap", "de cop i volta", "de debò", "de franc", "de pressa", "més aviat", "de mica en mica", "gens ni mica",
 "aquí", "ací", "allà", "allí", "cap aquí", "cap allà", "dins", "dintre",
 "darrere", "davant", "damunt", "sobre", "sota", "amunt", "avall", "a dalt",
 "a baix", "a prop", "lluny", "al voltant", "dreta", "esquerra", "mà dreta", "mà esquerra",
 "quan", "ara", "llavors", "aleshores", "sempre", "mai", "sovint", "de tant en tant",
 "a vegades", "de vegades", "mentrestant", "abans", "després", "aviat", "de seguida", "tard",
 "hora", "ja", "encara", "alhora", "com més aviat millor", "sí", "també", "fins i tot",
 "i tant", "de veritat", "de debó", "qui sap", "potser", "no", "no pas", "tampoc",
 "de cap manera", "i", "ni", "que", "o", "però", "sinó", "doncs",
 "perquè", "ja que", "si", "encara que" ];

var dynaCloud = {};
var dynaCloudMax = 5;
var dynaCloudSort = true;
var dynaCloudAuto = true;

/*
 Version for IE using TextRanges .
*/
var h1 = function(node, te) {
 var r = document.body.createTextRange();
 r.moveToElementText(node);
 for (var i = 0; r.findText(te); i++) {
  r.pasteHTML('<span class="highlight">' +  r.text + '<\/span>');
  r.collapse(false);
 }
}

/*
 (Complicated) version for Mozilla and Opera using span tags.
*/
var h2 = function(node, te) {
 var pos, skip, spannode, middlebit, endbit, middleclone;
 skip = 0;
 if (node.nodeType == 3) {
  pos=node.data.toUpperCase().indexOf(te);
  if (pos >= 0) {
   spannode = document.createElement('span');
   spannode.className = 'highlight';
   middlebit = node.splitText(pos);
   endbit = middlebit.splitText(te.length);
   middleclone = middlebit.cloneNode(true);
   spannode.appendChild(middleclone);
   middlebit.parentNode.replaceChild(spannode, middlebit);
   skip = 1;
  }
 }
 else if (node.nodeType == 1 && node.childNodes && !/(script|style)/i.test(node.tagName)) {
  for (var i = 0; i < node.childNodes.length; ++i) {
   i += h2(node.childNodes[i], te);
  }
 }
 return skip;
}

$(function() {
 jQuery.highlight = document.body.createTextRange ? function(node, te) { h1(node, te); } : function(node, te) { h2(node, te); };
 dynaCloudStopwords = new RegExp("\\s((" + dynaCloudStopwords.join("|") + ")\\s)+", "gi");
 if (dynaCloudAuto) {
  $("*[@class*=dynacloud]").dynaCloud();
 }
});

jQuery.fn.dynaCloud = function() {
 return this.each(function() {
  //var now = new Date().getTime();
  var elems = $(this).text().replace(/[^\wàäáèëéìïíòöóùüú]/gi, " ").replace(dynaCloudStopwords, " ").split(" ");
 
  var max = 0;

  var word = /^[a-z]*[A-Z]([A-Z]+|[a-z]{3,})/;

  $.each(elems, function(i, n) {
   if (word.test(n)) {
    var t = n.toLowerCase();
    if (typeof dynaCloud[t] == 'undefined') {
     dynaCloud[t] = { count: 1, el: n };
    }
    else {
     dynaCloud[t].count += 1;
     max = Math.max(dynaCloud[t].count, max);
    }
   }
  });

  var cl = [];
  $.each(dynaCloud, function(i, n) {
   cl[cl.length] = n;
  });

  if (dynaCloudSort) {
   cl.sort(function(a, b) {
    if (a.count == b.count) {
     return a.el < b.el ? -1 : (a.el == b.el ? 0 : 1);
    }
    else {
     return a.count < b.count ? 1 : -1;
   }
   });
  }

  var out;
  if ((out = $("#dynacloud")).length == 0) {
   $("body").append('<p id="dynacloud"><\/p>');
   out = $("#dynacloud");
  }

  out.empty();

  var l = dynaCloudMax == -1 ? cl.length : Math.min(dynaCloudMax, cl.length);;

  var tags = "<ul>";
  for (var i = 0; i < l; ++i) {
   //out.append("<a href='#" + cl[i].el + "' style='font-size: " + Math.ceil((cl[i].count / max) * 4) + "em'>" + cl[i].el + "<\/a> &nbsp; ");
   if (cl[i].el!=undefined)
   {
		tags += "<li><a tiptitle='" + cl[i].el + "' target='_self' href='#' onClick='javascript: document.location.href=\"http://www.elsingulardigital.cat/cat/cercador.php?search_component=" + cl[i].el + "\";'>" + cl[i].el + "</a></li>";
   }
  }
  tags += "</ul>";
  out.append(tags);

  $("#dynacloud a").each(function() {
   $(this).click(function() {
    var text = $(this).text().toUpperCase();
    $("*[@class*=dynacloud]").each(function() { $.highlight(this, text); });
    return false;
   });
  });

  //alert("Took " + (new Date().getTime() - now) + " ms");
 });
};
