/*
Array.prototype.inArray = function (value) {
	var i;
	for (i=0; i < this.length; i++) {
		if (this[i] === value) {
			return true;
		}
	}
	return false;
};
*/

function addEvent( obj, type, fn ) {
	if (obj.addEventListener) {
		obj.addEventListener( type, fn, false );
		EventCache.add(obj, type, fn);
	}
	else if (obj.attachEvent) {
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
		EventCache.add(obj, type, fn);
	}
	else {
		obj["on"+type] = obj["e"+type+fn];
	}
}

function stopEvent(evt) {
  evt.cancelBubble = true;
  evt.returnValue = false;
  if (evt.preventDefault)
    evt.preventDefault();
  return false;
}

var EventCache = function(){
	var listEvents = [];
	return {
		listEvents : listEvents,
		add : function(node, sEventName, fHandler){
			listEvents.push(arguments);
		},
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				item[0][item[1]] = null;
			};
		}
	};
}();
addEvent(window,'unload',EventCache.flush);

function urlParse(url) {
    var scheme = '';
    var netloc = '';
    var query = '';
    var fragment = '';
    var i = url.indexOf(':');
    if (i > 0) {
        scheme = url.slice(0, i).toLowerCase();
        url = url.slice(i+1);
        if (url.slice(0, 2) == '//') {
            url = url.slice(2);
            var delim;
            var tokens = ['/', '?', '#'];
            for (var i in tokens) {
                delim = url.indexOf(tokens[i]);
                if (i >= 0)
                    break;
            }
            if (typeof(delim) == 'undefined')
                delim = url.length;
            netloc = url.slice(0, delim);
            url = url.slice(delim);
        }
    }
    if (url.indexOf('#') >= 0) {
        var delim = url.indexOf('#');
        fragment = url.slice(delim+1);
        url = url.slice(0, delim);
    }
    if (url.indexOf('?') >= 0) {
        var delim = url.indexOf('?');
        query = url.slice(delim+1);
        url = url.slice(0, delim);
    }
    return {'scheme':scheme, 'netloc':netloc, 'query':query, 'fragment':fragment, 'path':url}
}

function getPath(url) {
    var tokens = urlParse(url);
    return tokens['path'];
}

function navBar() {
    var nav = document.getElementById('nav');
    if (!nav || !nav.getElementsByTagName)
        return;
    
    if (category)
        var doc_href = category;
    else
        var doc_href = getPath(document.location.href.toString());
    
    var nav_links = nav.getElementsByTagName('a');
    for (var i=0; i<nav_links.length; i++) {
        if (!nav_links[i].href)
            continue;
        var nav_link_href = getPath(nav_links[i].href.toString());
        // if (nav_link_href == doc_href || nav_link_href == doc_href + '/')
        if (nav_link_href == '/') {
            if (nav_link_href == doc_href || nav_link_href == doc_href + '/')
                nav_links[i].parentNode.className = 'current';
        } else {
            if (doc_href.indexOf(nav_link_href) == 0) 
                nav_links[i].parentNode.className = 'current';
        }
    }
}

function searchKeywords(evt) {
    evt = evt || window.event;
    if (evt.type != 'blur' && evt.type != 'focus')
      return;
    var kw = evt.target || evt.srcElement;

    var fill = (evt.type=='blur');

    if (!fill && kw.value == default_keywords)
      kw.value = '';
    else if (fill && kw.value == '')
      kw.value = default_keywords;
}

var default_keywords = 'Cerca in Stacktrace.it';

function searchGet(evt) {
  evt = evt || window.event;
  var q = document.getElementById('search_form_q');
  if (!q)
    return false;
  if (!q.value || q.value=='') {
    q.className = 'error';
    return stopEvent(evt);
  }
  location.href = search_relative_url + encodeURIComponent(q.value) + '/';
  return stopEvent(evt);
}

function initApplication() {
  var qf, q;
  if (qf = document.getElementById('search_form'))
    addEvent(qf,'submit',searchGet);

  if (q = document.getElementById('search_form_q')) {
    addEvent(q, 'blur', searchKeywords)
    addEvent(q, 'focus', searchKeywords)
    q.value=default_keywords;
  }
  navBar();
}

addEvent(window, "load", initApplication);

