var Core = {};

// W3C DOM 2 Events model
if (document.addEventListener)
{
  Core.addEventListener = function(target, type, listener)
  {
    target.addEventListener(type, listener, false);
  };

  Core.removeEventListener = function(target, type, listener)
  {
    target.removeEventListener(type, listener, false);
  };

  Core.preventDefault = function(event)
  {
    event.preventDefault();
  };

  Core.stopPropagation = function(event)
  {
    event.stopPropagation();
  };
}
// Internet Explorer Events model
else if (document.attachEvent)
{
  Core.addEventListener = function(target, type, listener)
  {
    // prevent adding the same listener twice, since DOM 2 Events ignores
    // duplicates like this
    if (Core._findListener(target, type, listener) != -1) return;

    // listener2 calls listener as a method of target in one of two ways,
    // depending on what this version of IE supports, and passes it the global
    // event object as an argument
    var listener2 = function()
    {
      var event = window.event;

      if (Function.prototype.call)
      {
        listener.call(target, event);
      }
      else
      {
        target._currentListener = listener;
        target._currentListener(event)
        target._currentListener = null;
      }
    };

    // add listener2 using IE's attachEvent method
    target.attachEvent("on" + type, listener2);

    // create an object describing this listener so we can clean it up later
    var listenerRecord =
    {
      target: target,
      type: type,
      listener: listener,
      listener2: listener2
    };

    // get a reference to the window object containing target
    var targetDocument = target.document || target;
    var targetWindow = targetDocument.parentWindow;

    // create a unique ID for this listener
    var listenerId = "l" + Core._listenerCounter++;

    // store a record of this listener in the window object
    if (!targetWindow._allListeners) targetWindow._allListeners = {};
    targetWindow._allListeners[listenerId] = listenerRecord;

    // store this listener's ID in target
    if (!target._listeners) target._listeners = [];
    target._listeners[target._listeners.length] = listenerId;

    // set up Core._removeAllListeners to clean up all listeners on unload
    if (!targetWindow._unloadListenerAdded)
    {
      targetWindow._unloadListenerAdded = true;
      targetWindow.attachEvent("onunload", Core._removeAllListeners);
    }
  };

  Core.removeEventListener = function(target, type, listener)
  {
    // find out if the listener was actually added to target
    var listenerIndex = Core._findListener(target, type, listener);
    if (listenerIndex == -1) return;

    // get a reference to the window object containing target
    var targetDocument = target.document || target;
    var targetWindow = targetDocument.parentWindow;

    // obtain the record of the listener from the window object
    var listenerId = target._listeners[listenerIndex];
    var listenerRecord = targetWindow._allListeners[listenerId];

    // remove the listener, and remove its ID from target
    target.detachEvent("on" + type, listenerRecord.listener2);
    target._listeners.splice(listenerIndex, 1);

    // remove the record of the listener from the window object
    delete targetWindow._allListeners[listenerId];
  };

  Core.preventDefault = function(event)
  {
    event.returnValue = false;
  };

  Core.stopPropagation = function(event)
  {
    event.cancelBubble = true;
  };

  Core._findListener = function(target, type, listener)
  {
    // get the array of listener IDs added to target
    var listeners = target._listeners;
    if (!listeners) return -1;

    // get a reference to the window object containing target
    var targetDocument = target.document || target;
    var targetWindow = targetDocument.parentWindow;

    // searching backward (to speed up onunload processing), find the listener
    for (var i = listeners.length - 1; i >= 0; i--)
    {
      // get the listener's ID from target
      var listenerId = listeners[i];

      // get the record of the listener from the window object
      var listenerRecord = targetWindow._allListeners[listenerId];

      // compare type and listener with the retrieved record
      if (listenerRecord.type == type && listenerRecord.listener == listener)
      {
        return i;
      }
    }
    return -1;
  };

  Core._removeAllListeners = function()
  {
    var targetWindow = this;

    for (id in targetWindow._allListeners)
    {
      var listenerRecord = targetWindow._allListeners[id];
      listenerRecord.target.detachEvent(
          "on" + listenerRecord.type, listenerRecord.listener2);
      delete targetWindow._allListeners[id];
    }
  };

  Core._listenerCounter = 0;
}

Core.addClass = function(target, theClass)
{
  if (!Core.hasClass(target, theClass))
  {
    if (target.className == "")
    {
      target.className = theClass;
    }
    else
    {
      target.className += " " + theClass;
    }
  }
};

Core.getElementsByClass = function(theClass)
{
  var elementArray = [];

  if (typeof document.all != "undefined")
  {
    elementArray = document.all;
  }
  else
  {
    elementArray = document.getElementsByTagName("*");
  }

  var matchedArray = [];
  var pattern = new RegExp("(^| )" + theClass + "( |$)");

  for (var i = 0; i < elementArray.length; i++)
  {
    if (pattern.test(elementArray[i].className))
    {
      matchedArray[matchedArray.length] = elementArray[i];
    }
  }

  return matchedArray;
};

Core.hasClass = function(target, theClass)
{
  var pattern = new RegExp("(^| )" + theClass + "( |$)");

  if (pattern.test(target.className))
  {
    return true;
  }

  return false;
};

Core.removeClass = function(target, theClass)
{
  var pattern = new RegExp("(^| )" + theClass + "( |$)");

  target.className = target.className.replace(pattern, "$1");
  target.className = target.className.replace(/ $/, "");
};

Core.getComputedStyle = function(element, styleProperty)
{
  var computedStyle = null;

  if (typeof element.currentStyle != "undefined")
  {
    computedStyle = element.currentStyle;
  }
  else
  {
    computedStyle = document.defaultView.getComputedStyle(element, null);
  }

  return computedStyle[styleProperty];
};

Core.createCookie = function(name, value, days)
{
	if(days)
	{
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = '';
	document.cookie = name + '=' + value + expires + '; path=/';
};
Core.readCookie = function(name)
{
	var nameEQ = name + '=';
	var ca = document.cookie.split(';');
	for ( var i = 0; i < ca.length; i++) {
		var c = ca[i];
		while(c.charAt(0) == ' ') c = c.substring(1, c.length);
		if(c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
	}
	return null;
};
Core.removeCookie = function(name)
{
	Core.createCookie(name, '', -1);
};
Core.addBookmark = function(title,url)
{
	if (window.sidebar) // firefox
		window.sidebar.addPanel(title, url, "");
	else if (window.opera && window.print) { // opera
		var elem = document.createElement('a');
		elem.setAttribute('href', url);
		elem.setAttribute('title', title);
		elem.setAttribute('rel', 'sidebar');
		elem.click();
	} else if (document.all)// ie
		window.external.AddFavorite(url, title);
};
Core.start = function(runnable)
{
  Core.addEventListener(window, "load", runnable.init);
};
Core.ajaxReq = function(type, url, data, responseElm, loading){
		try
		{
			var requester = new XMLHttpRequest();
		}
		catch(error)
		{
			try
			{
				var requester = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(error)
			{
				var requester = null;
			}
		}
		requester.onreadystatechange=function()
		{
			if(loading != 'undefined')
			{
				if(requester.readyState==1) 
				{
					document.getElementById(responseElm).innerHTML = loading;
				}
			}
			if (requester.readyState == 4 && requester.status == 200) {
				
				document.getElementById(responseElm).innerHTML = requester.responseText;
			}
		 }
		if(type === 'POST'){
			requester.open(type, url, true);
			requester.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			requester.setRequestHeader("Connection", "close");
			requester.send(data);
		}
		if(type === 'GET'){
			requester.open(type, url, true);
			requester.send(null);
		}
};
Core.showArray = function(array){
	if(array != 'undefined' || array != null){
		for(var i=0; i < array.length; i++){
			alert('IndexNR = ' + array.indexOf(array[i]) + ' elemVal = '+ array[i]);
		}
	}
};
// TOOLBAR - BOOKMARK
var Toolbar={init:function(){var bookmarkLink=document.getElementById('addBookmark');Core.addEventListener(bookmarkLink,'click',Toolbar.bookmarkSite)},bookmarkSite:function(){Core.addBookmark('Imenik spletnih strani','http://www.imenik-spletnih-strani.net')}};Core.start(Toolbar);
// TEXTAREA CHAR COUNTER
var Textarea={init:function(){var textarea=document.getElementsByTagName('textarea');for(var i=0;i<textarea.length;i++){Core.addEventListener(textarea[i],'keyup',Textarea.charLen);Core.addEventListener(textarea[i],'keyup',Textarea.checkLen)}},charLen:function(e){for(var j=1;j<this.value.length;j++){}var label=this.parentNode;label.nextSibling.innerHTML='Na voljo imate še <b>'+(500-j)+'</b> znakov'},checkLen:function(e){if(this.value.length>500){this.value=this.value.substr(0,500)}}};Core.start(Textarea);
// AJAXWRAPPER
function AjaxWrapper(sReqType,sResType,sData,sSend){this.reqType=sReqType;this.resType=sResType;this.data=sData;this.send=sSend};AjaxWrapper.prototype.readyStateChange=function(XHR,resType,reqType){XHR.onreadystatechange=function(){if(typeof AjaxWrapper.loading!='undefined'&&XHR.readyState==1){AjaxWrapper.loading()}if(XHR.readyState==4&&XHR.status==200){switch(resType.toLowerCase()){case'text':AjaxWrapper.response(XHR.responseText);break;case'xml':AjaxWrapper.response(XHR.responseXML);break}}}};AjaxWrapper.prototype.run=function(){var XHR;try{XHR=new XMLHttpRequest()}catch(error){try{XHR=new ActiveXObject("Microsoft.XMLHTTP")}catch(error){XHR=null}}XHR.open(this.reqType,this.data,true);this.readyStateChange(XHR,this.resType,this.reqType);if(this.reqType.toLowerCase()==='post'){XHR.setRequestHeader("Content-type","application/x-www-form-urlencoded");XHR.setRequestHeader("Connection","close")}XHR.send(this.send)};
// SUGGESTION
var Suggestion={response_array:[],suggestion_array:[],suggestion_div:null,search_field:null,init:function(){Suggestion.initSuggestion()},createDIV:function(nElm,aSuggestionArray){var temp_div=document.createElement('div');temp_div.className='suggestionShow';temp_div.setAttribute('id','value'+nElm);temp_div.innerHTML=aSuggestionArray[nElm];Suggestion.suggestion_div.appendChild(temp_div);Core.addEventListener(temp_div,'mouseover',Suggestion.mouseOver);Core.addEventListener(temp_div,'mouseout',function(){this.className='suggestionShow'});Core.addEventListener(temp_div,'click',function(e){Suggestion.search_field.value=this.firstChild.nodeValue})},initSuggestion:function(){Suggestion.suggestion_array=[];for(var j=0;j<Suggestion.response_array.length;j++){Suggestion.createDIV(j,Suggestion.response_array);Suggestion.suggestion_array[Suggestion.suggestion_array.length]=Suggestion.response_array[j]}},showSuggestion:function(){for(var i=0;i<Suggestion.suggestion_array.length;i++){Suggestion.createDIV(i,Suggestion.suggestion_array)}},mouseOver:function(){this.className='suggestionMouseOver'}};
// KEYPRESS CONTORLLER
var keyPress={current_keycode:null,input_value:null,input_element:null,input_array:null,suggestion_val:null,init:function(){keyPress.switchHanlder()},switchHanlder:function(){switch(keyPress.current_keycode){case 40:keyPress.downArrow();break;case 38:keyPress.upArrow();break}},downArrow:function(){var total_values=parseInt(keyPress.input_array.length-1);var next_value;if(keyPress.currentValue()!==null){switch(keyPress.currentValue()){case total_values:next_value=total_values;break;default:next_value=keyPress.currentValue()+1;break}}else next_value=0;if(keyPress.input_array.length>0){var current_element=document.getElementById('value'+next_value);keyPress.input_element.value=keyPress.input_array[next_value];current_element.className='suggestionSelected'}},upArrow:function(){if(keyPress.currentValue()>0){var next_value=keyPress.currentValue()-1;keyPress.input_element.value=keyPress.input_array[next_value];var current_element=document.getElementById('value'+next_value);current_element.className='suggestionSelected'}},currentValue:function(){var current_div;for(var i=0;i<keyPress.input_array.length;i++){if(keyPress.input_value.toLowerCase()===keyPress.input_array[i].toLowerCase())current_div=i}return(typeof current_div==='number')?current_div:null},keyDetect:function(e){if(typeof e.keyCode!=='undefined'){return e.keyCode}return window.event.keyCode}};
// RUN SUGGESTION
Core.addEventListener(window,'load',function(){var searchField=document.getElementById('searchField');var suggestion_div=document.getElementById('suggestionBox');Core.addEventListener(searchField,'keyup',function(e){var Ajax=new AjaxWrapper('POST','xml','http://www.imenik-spletnih-strani.net/view/_search-suggestion.php','search='+searchField.value);var e_keycode=keyPress.keyDetect(e);AjaxWrapper.response=function(ajaxResp){var resp_array=[];var choices=ajaxResp.getElementsByTagName('item');if(choices.length>0){for(var i=0;i<choices.length;i++){resp_array[resp_array.length]=choices[i].getElementsByTagName('label')[0].firstChild.nodeValue}if(searchField.value!==''){suggestion_div.innerHTML='';if(e_keycode!==40&&e_keycode!==38){Suggestion.response_array=resp_array;Suggestion.suggestion_div=suggestion_div;Suggestion.search_field=searchField;Suggestion.init()}if(e_keycode===40||e_keycode===38){suggestion_div.innerHTML='';Suggestion.showSuggestion();keyPress.current_keycode=e_keycode;keyPress.input_element=searchField;keyPress.input_value=searchField.value;keyPress.input_array=Suggestion.suggestion_array;keyPress.init()}}}else{suggestion_div.innerHTML=''}};Ajax.run()})});
// SPECIAL LINK
var SpecialAd={init:function(){document.getElementById('special_ad').style.display='none';}}; Core.start(SpecialAd);
